# Calculate

Calculate is a Mac OS X widget for evaluating math expressions. Any JavaScript expression can be evaluated, and variables and functions are persistently stored. Works on both Mac OS X 10.4 (Tiger) and 10.5 (Leopard).

## Comments from Calculate lovers

“I’ve tried a bunch of other calculator widgets but yours blows me away. Clean, simple, very ‘macintosh-esque’. I love it!” — Jay M

“I love the calculate widget! ... I am a math teacher and I have just started using your widget! It is great!” — Ebbe V

“It’s the formula calc widget with the richest functionality I have found.” — Magnus C

“Defintely the nicest widget calculator I’ve used.” — Gabe G

## Donate

Calculate is completely free (with no nag screens or disabled features), but it did take time and patience to develop it.

If you find Calculate to be an indispensable tool and you’d like to make a donation to David Brackeen, please use the button below. The amount you donate is entirely up to you.

**Why donate?** David believes in simple, useful, quality Mac OS X tools that makes you
think, “How did I ever work without this?”
If you want to support David, please make a contribution.
Any amount is appreciated.

Make a donation via PayPal, credit card, or e-check here:

Thank you very much for your support and encouragement!

## Arithmetic Operations

### Basic Arithmetic

Operator | Description | Example |
---|---|---|

+ | Addition | 2+2 |

- | Subtraction | 5-3 |

* | Multiplication | 9*6 |

/ | Division | 48/6 |

^ | Exponentiation (power of) | 10^2 |

% | Remainder after division | 7%3 |

! | Factorial | 5! |

= | Assignment | a=2 |

### Bitwise operations

Operator | Description | Example |
---|---|---|

~ | Bitwise NOT | ~0 |

& | Bitwise AND | 2&6 |

| | Bitwise OR | 2|4 |

>< | Bitwise XOR | 2><6 |

<< | Left Shift (padding with zeros) | 20<<1 |

>> | Right shift (copying the sign bit) | -4>>1 |

>>> | Right shift (padding with zeros) | -4>>>1 |

You can enter numbers as hexadecimal, octal or binary. Hexadecimal numbers start with 0x, octal numbers with 0o and binary numbers with 0b. For example: 0b110100 - 0xA.

## Functions

### Basic functions

abs(a) | The absolute value of a |

ceil(a) | Integer closest to a and not less than a |

floor(a) | Integer closest to and not greater than a |

max(a,b) | The maximum of a and b |

min(a,b) | The minimum of a and b |

pow(a,b) | a to the power b |

random() | Pseudorandom number in the range 0 to 1 |

round(a) | Integer closest to a |

sqrt(a) | Square root of a |

### Log functions

exp(a) | Exponent of a |

ln(a) | Log of a base e |

log2(a) | Log of a base 2 |

log10(a) | Log of a base 10 |

### Trig functions

sin(a) | Sine of a |

cos(a) | Cosine of a |

tan(a) | Tangent of a |

csc(a) | Cosecant of a |

sec(a) | Secant of a |

cot(a) | Cotangent of a |

asin(a) | Arc sine of a |

acos(a) | Arc cosine of a |

atan(a) | Arc tangent of a |

atan2(a,b) | Arc tangent of a/b |

acsc(a) | Arc cosecant of a |

asec(a) | Arc secant of a |

acot(a) | Arc cotangent of a |

### Hyperbolic functions

sinh(a) | Hyperbolic sine of a |

cosh(a) | Hyperbolic cosine of a |

tanh(a) | Hyperbolic tangent of a |

csch(a) | Hyperbolic cosecant of a |

sech(a) | Hyperbolic secant of a |

coth(a) | Hyperbolic cotangent of a |

asinh(a) | Hyperbolic arc sine of a |

acosh(a) | Hyperbolic arc cosine of a |

atanh(a) | Hyperbolic arc tangent of a |

acsch(a) | Hyperbolic arc cosecant of a |

asech(a) | Hyperbolic arc secant of a |

acoth(a) | Hyperbolic arc cotangent of a |

### More functions

Looking for more functions? Copy and paste these functions into Calculate, or write your own custom functions. Custom functions are automatically saved.

What to learn to make functions? Learn JavaScript.

toDegrees = function (r) { return r * 180 / pi; }

toRadians = function (d) { return d * pi / 180; }

fibonacci = function (n) { var a = 0; var b = 1; for (var i = 1; i <= n; i++) { var c = a + b; a = b; b = c; } return a; }

sign = function (x) { return x < 0 ? -1 : x > 0 ? 1 : 0; }

toHex = function (x) { return x.toString(16); }

toBin = function (x) { return x.toString(2); }

toUnicode = function (ch) { return ch.charCodeAt(0); }

## More info

You can use hexadecimal, octal and binary numbers. Prefix hexadecimal numbers with 0x, octal numbers with 0o and binary numbers with 0b. For example: 0x7f + 0b10010101.## Get the source

Wondering how it works? Or want to tweak the source code? Visit the project page at Google Code.

## Questions

**Q: Can you fix such-and-such math error?**

A: Floating-point operations may introduce small accuracy problems. For example, "1.1 - 1.05" yields "0.050000000000000044". Since Calculate relies on JavaScript, there's nothing that can be done to fix the issue.**Q: Can Calculate automatically convert commas to periods for people using international keyboards?**

A: Calculate needs to work seamlessly with JavaScript to provide functions, and converting commas would cause problems. For example, converting "pow(2,5)" to "pow(2.5)" would break. As a workaround, using the comma on the numeric keypad will insert a period.

## Changes in version 1.1.5

- Added power operator
**^**. Example: 2^8. If you're a programmer, for xor use**><**instead of**^**. - Added factorial operator
**!**. Example: 5! == 120 - Added binary and octal input. Example: 0b11011 == 0o2840
- Command-C copies the last answer. Make sure nothing is currently selected, and press Command-C to copy last numeric answer to the clipboard.
- Other bug fixes and enhancements.

## Changes in version 1.1.4

- Widget dimensions now persistent between sessions.
- Object literals can now be used. For example:
`point = { x:0, y:6 }`

## Changes in version 1.1.3

- Fixed focus bug introduced in version 1.1.2

## Changes in version 1.1.2

- Numpad: The clear key clears the input area.
- Numpad (International keyboards): the comma on the numpad is inserted as a period.

## Changes in version 1.1.1

- (Leopard only) Fix for autocompletion when Safari 3.1 is installed.

## Changes in version 1.1.0

- (Leopard only) Added autocompletion of variables and functions names using the Tab key.
Type the first few letters of a variable name or function name, then press Tab.
For example,
`1/an<TAB>`

autocompletes to`1/answer`

. - Added degree mode.
- Added several new functions (log2, log10, and many trig & hyperbolic functions).
- Added several shortcut keys.

## Changes in version 1.0.1

- Fixed minor layout issues in Leopard.
- Widget now has a “back” with a “check for new version” link.
- (Leopard only) Support for some Unicode variable names, like π (option-p).