/JavaScript

# Math

`Math` is a built-in object that has properties and methods for mathematical constants and functions. Not a function object.

## Description

Unlike the other global objects, `Math` is not a constructor. All properties and methods of `Math` are static. You refer to the constant pi as `Math.PI` and you call the sine function as `Math.sin(x)`, where `x` is the method's argument. Constants are defined with the full precision of real numbers in JavaScript.

## Properties

`Math.E`
Euler's constant and the base of natural logarithms, approximately 2.718.
`Math.LN2`
Natural logarithm of 2, approximately 0.693.
`Math.LN10`
Natural logarithm of 10, approximately 2.303.
`Math.LOG2E`
Base 2 logarithm of E, approximately 1.443.
`Math.LOG10E`
Base 10 logarithm of E, approximately 0.434.
`Math.PI`
Ratio of the circumference of a circle to its diameter, approximately 3.14159.
`Math.SQRT1_2`
Square root of 1/2; equivalently, 1 over the square root of 2, approximately 0.707.
`Math.SQRT2`
Square root of 2, approximately 1.414.

## Methods

Note that the trigonometric functions (`sin()`, `cos()`, `tan()`, `asin()`, `acos()`, `atan()`, `atan2()`) expect or return angles in radians. To convert radians to degrees, divide by `(Math.PI / 180)`, and multiply by this to convert the other way.

Note that many math functions have a precision that's implementation-dependent. This means that different browsers can give a different result, and even the same JS engine on a different OS or architecture can give different results.

`Math.abs(x)`
Returns the absolute value of a number.
`Math.acos(x)`
Returns the arccosine of a number.
`Math.acosh(x)`
Returns the hyperbolic arccosine of a number.
`Math.asin(x)`
Returns the arcsine of a number.
`Math.asinh(x)`
Returns the hyperbolic arcsine of a number.
`Math.atan(x)`
Returns the arctangent of a number.
`Math.atanh(x)`
Returns the hyperbolic arctangent of a number.
`Math.atan2(y, x)`
Returns the arctangent of the quotient of its arguments.
`Math.cbrt(x)`
Returns the cube root of a number.
`Math.ceil(x)`
Returns the smallest integer greater than or equal to a number.
`Math.clz32(x)`
Returns the number of leading zeroes of a 32-bit integer.
`Math.cos(x)`
Returns the cosine of a number.
`Math.cosh(x)`
Returns the hyperbolic cosine of a number.
`Math.exp(x)`
Returns Ex, where x is the argument, and E is Euler's constant (2.718…), the base of the natural logarithm.
`Math.expm1(x)`
Returns subtracting 1 from `exp(x)`.
`Math.floor(x)`
Returns the largest integer less than or equal to a number.
`Math.fround(x)`
Returns the nearest single precision float representation of a number.
`Math.hypot([x[, y[, …]]])`
Returns the square root of the sum of squares of its arguments.
`Math.imul(x, y)`
Returns the result of a 32-bit integer multiplication.
`Math.log(x)`
Returns the natural logarithm (loge, also ln) of a number.
`Math.log1p(x)`
Returns the natural logarithm (loge, also ln) of `1 + x` for a number x.
`Math.log10(x)`
Returns the base 10 logarithm of a number.
`Math.log2(x)`
Returns the base 2 logarithm of a number.
`Math.max([x[, y[, …]]])`
Returns the largest of zero or more numbers.
`Math.min([x[, y[, …]]])`
Returns the smallest of zero or more numbers.
`Math.pow(x, y)`
Returns base to the exponent power, that is, `baseexponent`.
`Math.random()`
Returns a pseudo-random number between 0 and 1.
`Math.round(x)`
Returns the value of a number rounded to the nearest integer.
`Math.sign(x)`
Returns the sign of the x, indicating whether x is positive, negative or zero.
`Math.sin(x)`
Returns the sine of a number.
`Math.sinh(x)`
Returns the hyperbolic sine of a number.
`Math.sqrt(x)`
Returns the positive square root of a number.
`Math.tan(x)`
Returns the tangent of a number.
`Math.tanh(x)`
Returns the hyperbolic tangent of a number.
`Math.toSource()`
Returns the string `"Math"`.
`Math.trunc(x)`
Returns the integer part of the number x, removing any fractional digits.

## Extending the `Math` object

As with most of the built-in objects in JavaScript, the `Math` object can be extended with custom properties and methods. To extend the `Math` object, you do not use `prototype`. Instead, you directly extend `Math`:

```Math.propName = propValue;
Math.methodName = methodRef;```

For instance, the following example adds a method to the `Math` object for calculating the greatest common divisor of a list of arguments.

```/* Variadic function -- Returns the greatest common divisor of a list of arguments */
Math.gcd = function() {
if (arguments.length == 2) {
if (arguments[1] == 0)
return arguments[0];
else
return Math.gcd(arguments[1], arguments[0] % arguments[1]);
} else if (arguments.length > 2) {
var result = Math.gcd(arguments[0], arguments[1]);
for (var i = 2; i < arguments.length; i++)
result = Math.gcd(result, arguments[i]);
return result;
}
};```

Try it:

`console.log(Math.gcd(20, 30, 15, 70, 40)); // `5``

## Browser compatibilityUpdate compatibility data on GitHub

Desktop
Chrome Edge Firefox Internet Explorer Opera Safari
`E` Yes Yes 1 Yes Yes Yes
`LN2` Yes Yes 1 Yes Yes Yes
`LN10` Yes Yes 1 Yes Yes Yes
`LOG2E` Yes Yes 1 Yes Yes Yes
`LOG10E` Yes Yes 1 Yes Yes Yes
`PI` Yes Yes 1 Yes Yes Yes
`SQRT1_2` Yes Yes 1 Yes Yes Yes
`SQRT2` Yes Yes 1 Yes Yes Yes
`abs` Yes Yes 1 Yes Yes Yes
`acos` Yes Yes 1 Yes Yes Yes
`acosh` 38 Yes 25 No 25 8
`asin` Yes Yes 1 Yes Yes Yes
`asinh` 38 Yes 25 No 25 8
`atan` Yes Yes 1 Yes Yes Yes
`atan2` Yes Yes 1 Yes Yes Yes
`atanh` 38 Yes 25 No 25 8
`cbrt` 38 Yes 25 No 25 8
`ceil` Yes Yes 1 Yes Yes Yes
`clz32` 38 Yes 31 No 25 Yes
`cos` Yes Yes 1 Yes Yes Yes
`cosh` 38 Yes 25 No 25 8
`exp` Yes Yes 1 Yes Yes Yes
`expm1` 38 Yes 25 No 25 8
`floor` Yes Yes 1 Yes Yes Yes
`fround` 38 Yes 26 No 25 8
`hypot` 38 Yes 27 No 25 8
`imul` 28 Yes 20 No 16 7
`log` Yes Yes 1 Yes Yes Yes
`log1p` 38 Yes 25 No 25 8
`log2` 38 Yes 25 No 25 8
`log10` 38 Yes 25 No 25 8
`max` Yes Yes 1 Yes Yes Yes
`min` Yes Yes 1 Yes Yes Yes
`pow` Yes Yes 1 Yes Yes Yes
`random` Yes Yes 1 Yes Yes Yes
`round` Yes Yes 1 Yes Yes Yes
`sign` 38 Yes 25 No 25 9
`sin` Yes Yes 1 Yes Yes Yes
`sinh` 38 Yes 25 No 25 8
`sqrt` Yes Yes 1 Yes Yes Yes
`tan` Yes Yes 1 Yes Yes Yes
`tanh` 38 Yes 25 No 25 8
`trunc` 38 Yes 25 No 25 8
Mobile
Android webview Chrome for Android Edge Mobile Firefox for Android Opera for Android iOS Safari Samsung Internet
`E` Yes Yes Yes 4 Yes Yes Yes
`LN2` Yes Yes Yes 4 Yes Yes Yes
`LN10` Yes Yes Yes 4 Yes Yes Yes
`LOG2E` Yes Yes Yes 4 Yes Yes Yes
`LOG10E` Yes Yes Yes 4 Yes Yes Yes
`PI` Yes Yes Yes 4 Yes Yes Yes
`SQRT1_2` Yes Yes Yes 4 Yes Yes Yes
`SQRT2` Yes Yes Yes 4 Yes Yes Yes
`abs` Yes Yes Yes 4 Yes Yes Yes
`acos` Yes Yes Yes 4 Yes Yes Yes
`acosh` Yes Yes Yes 25 Yes 8 Yes
`asin` Yes Yes Yes 4 Yes Yes Yes
`asinh` Yes Yes Yes 25 Yes 8 Yes
`atan` Yes Yes Yes 4 Yes Yes Yes
`atan2` Yes Yes Yes 4 Yes Yes Yes
`atanh` Yes Yes Yes 25 Yes 8 Yes
`cbrt` Yes Yes Yes 25 Yes 8 Yes
`ceil` Yes Yes Yes 4 Yes Yes Yes
`clz32` Yes Yes Yes 31 Yes Yes Yes
`cos` Yes Yes Yes 4 Yes Yes Yes
`cosh` Yes Yes Yes 25 Yes 8 Yes
`exp` Yes Yes Yes 4 Yes Yes Yes
`expm1` Yes Yes Yes 25 Yes 8 Yes
`floor` Yes Yes Yes 4 Yes Yes Yes
`fround` Yes Yes Yes 26 Yes 8 Yes
`hypot` Yes Yes Yes 27 Yes 8 Yes
`imul` Yes Yes Yes 20 Yes 7 Yes
`log` Yes Yes Yes 4 Yes Yes Yes
`log1p` Yes Yes Yes 25 Yes 8 Yes
`log2` Yes Yes Yes 25 Yes 8 Yes
`log10` Yes Yes Yes 25 Yes 8 Yes
`max` Yes Yes Yes 4 Yes Yes Yes
`min` Yes Yes Yes 4 Yes Yes Yes
`pow` Yes Yes Yes 4 Yes Yes Yes
`random` Yes Yes Yes 4 Yes Yes Yes
`round` Yes Yes Yes 4 Yes Yes Yes
`sign` Yes Yes Yes 25 Yes Yes Yes
`sin` Yes Yes Yes 4 Yes Yes Yes
`sinh` Yes Yes Yes 25 Yes 8 Yes
`sqrt` Yes Yes Yes 4 Yes Yes Yes
`tan` Yes Yes Yes 4 Yes Yes Yes
`tanh` Yes Yes Yes 25 Yes 8 Yes
`trunc` Yes Yes Yes 25 Yes 8 Yes
Server
Node.js
`E` Yes
`LN2` Yes
`LN10` Yes
`LOG2E` Yes
`LOG10E` Yes
`PI` Yes
`SQRT1_2` Yes
`SQRT2` Yes
`abs` Yes
`acos` Yes
`acosh` 0.12
`asin` Yes
`asinh` 0.12
`atan` Yes
`atan2` Yes
`atanh` 0.12
`cbrt` 0.12
`ceil` Yes
`clz32` 0.12
`cos` Yes
`cosh` 0.12
`exp` Yes
`expm1` 0.12
`floor` Yes
`fround` 0.12
`hypot` 0.12
`imul` 0.12
`log` Yes
`log1p` 0.12
`log2` 0.12
`log10` 0.12
`max` Yes
`min` Yes
`pow` Yes
`random` Yes
`round` Yes
`sign` 0.12
`sin` Yes
`sinh` 0.12
`sqrt` Yes
`tan` Yes
`tanh` 0.12
`trunc` 0.12