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


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

OperatorDescription 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

OperatorDescription 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.


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.


Changes in version 1.1.5

Changes in version 1.1.4

Changes in version 1.1.3

Changes in version 1.1.2

Changes in version 1.1.1

Changes in version 1.1.0

Changes in version 1.0.1