Our volunteers haven't translated this article into عربي yet. Join us and help get the job done!

You can also read the article in English (US).

** 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 E
^{x}, 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 (log
_{e}, also ln) of a number. `Math.log1p(x)`

- Returns the natural logarithm (log
_{e}, 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,
`base`

.^{exponent} `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 integral part of the number x, removing any fractional digits.

## Extending the `Math`

object

As most of 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 () { var d = Math.min.apply(Math, arguments); for (let n = arguments.length, i = 0; d > 1 && n > i; arguments[i] % d === 0 ? i++ : (d--, i = 0)); return d; }

Try it:

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

## Specifications

Specification | Status | Comment |
---|---|---|

ECMAScript 1st Edition (ECMA-262) | Standard | Initial definition. Implemented in JavaScript 1.1. |

ECMAScript 5.1 (ECMA-262) The definition of 'Math' in that specification. |
Standard | |

ECMAScript 2015 (6th Edition, ECMA-262) The definition of 'Math' in that specification. |
Standard | New methods `log10()` , `log2()` , `log1p()` , `expm1()` , `cosh()` , `sinh()` , `tanh()` , `acosh()` , `asinh()` , `atanh()` , `hypot()` , `trunc()` , `sign()` , `imul()` , `fround()` , `cbrt()` and `clz32()` added. |

ECMAScript Latest Draft (ECMA-262) The definition of 'Math' in that specification. |
Living Standard |

## Browser compatibility

The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|

`E` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`LN2` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`LN10` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`LOG2E` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`LOG10E` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`PI` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`SQRT1_2` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`SQRT2` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`abs` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`acos` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`acosh` | 38 | (Yes) | 25 | No | 25 | 7.1 |

`asin` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`asinh` | 38 | (Yes) | 25 | No | 25 | 7.1 |

`atan` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`atan2` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`atanh` | 38 | (Yes) | 25 | No | 25 | 7.1 |

`cbrt` | 38 | (Yes) | 25 | No | 25 | 7.1 |

`ceil` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`clz32` | 38 | (Yes) | 31 | No | 25 | (Yes) |

`cos` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`cosh` | 38 | (Yes) | 25 | No | 25 | 7.1 |

`exp` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`expm1` | 38 | (Yes) | 25 | No | 25 | 7.1 |

`floor` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`fround` | 38 | (Yes) | 26 | No | 25 | 7.1 |

`hypot` | 38 | (Yes) | 27 | No | 25 | 7.1 |

`imul` | 28 | (Yes) | 20 | No | 16 | 7 |

`log` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`log1p` | 38 | (Yes) | 25 | No | 25 | 7.1 |

`log2` | 38 | (Yes) | 25 | No | 25 | 7.1 |

`log10` | 38 | (Yes) | 25 | No | 25 | 7.1 |

`max` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`min` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`pow` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`random` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`round` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`sign` | 38 | (Yes) | 25 | No | 25 | 9 |

`sin` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`sinh` | 38 | (Yes) | 25 | No | 25 | 7.1 |

`sqrt` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`tan` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`tanh` | 38 | (Yes) | 25 | No | 25 | 7.1 |

`trunc` | 38 | (Yes) | 25 | No | 25 | 7.1 |

Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|

`E` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`LN2` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`LN10` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`LOG2E` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`LOG10E` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`PI` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`SQRT1_2` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`SQRT2` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`abs` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`acos` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`acosh` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

`asin` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`asinh` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

`atan` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`atan2` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`atanh` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

`cbrt` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

`ceil` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`clz32` | (Yes) | (Yes) | (Yes) | 31 | No | (Yes) | (Yes) |

`cos` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`cosh` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

`exp` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`expm1` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

`floor` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`fround` | (Yes) | (Yes) | (Yes) | 26 | No | (Yes) | 8 |

`hypot` | (Yes) | (Yes) | (Yes) | 27 | No | (Yes) | 8 |

`imul` | (Yes) | (Yes) | (Yes) | 20 | No | (Yes) | 7 |

`log` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`log1p` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

`log2` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

`log10` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

`max` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`min` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`pow` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`random` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`round` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`sign` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | (Yes) |

`sin` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`sinh` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

`sqrt` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`tan` | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) | (Yes) |

`tanh` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

`trunc` | (Yes) | (Yes) | (Yes) | 25 | No | (Yes) | 8 |

## See also

## Document Tags and Contributors

**Tags:**

**Contributors to this page:**madmurphy, schlagi123, fscholz, jameshkramer, JonMarkPerry, Hout, zhirzh, robertgeb, alishaukat, getify, Mingun, ConorOB, sanderd17, evilpie, robinwhittleton, bbouvier, jkuo, SunWael, hlhicks, williamr, Sheppy, trucy, teoli, ethertank, Šime Vidas, hawkrives, Waldo, Sevenspade, FunPackedShow, Potappo, Ruakh, Mgjbot, Nickolay, SylvainPasche, LeeUnder, Callek, Maian, Marcoos, Dria

**Last updated by:**madmurphy,