JavaScript объект Math

Описание объекта

Объект Math это встроенный объект, который определяет свойства и методы для работы с математическими константами и функциями.

В отличие от других глобальных объектов, например, таких как Date, или String, объект Math не является конструктором, все его свойства и методы статичны. Константы определяются с точностью формата Number (64-битного двоичного числа с плавающей точкой) в JavaScript. Эти функции и константы вызываются с помощью следующего синтаксиса:

JavaScript
Math.PI
Math.sin(x)

const area = radius * radius * Math.PI; // используем константу объекта Math
const y = Math.sin(x); // используем функцию объекта Math

Ниже представлено описание всех констант и функций объекта Math:

Свойства объекта Math

Math: справочные сведения
Свойство Описание
E Математическая константа представляет основание натурального логарифма. Значение константы приблизительно равно 2,71828.
LN2 Математическая константа представляет натуральный логарифм числа 2. Значение константы приблизительно равно 0,693.
LN10 Математическая константа представляет натуральный логарифм числа 10. Значение константы приблизительно равно 2,303.
LOG2E Математическая константа представляет логарифм числа E по основанию 2. Значение константы приблизительно равно 1,443.
LOG10E Математическая константа представляет десятичный логарифм числа E. Значение константы приблизительно равно 0,434.
PI Математическая константа представляет отношение длины окружности к её диаметру. Значение константы приблизительно равно 3,14159.
SQRT1_2 Математическая константа представляет значение единицы, деленной на квадратный корень из 2. Значение константы приблизительно равно 0,707.
SQRT2 Математическая константа представляет значение квадратного корня из 2. Значение константы приблизительно равно 1,414.
[Symbol.toStringTag] Собственное символьное свойство со значением "Math". Определяет метку "[object Math]" при вызове Object.prototype.toString.call(Math).

Все перечисленные свойства принадлежат самому Math. Числовые константы доступны только для чтения. У Math нет экземпляров и собственного prototype; общие свойства Object здесь не перечислены.

Методы объекта Math

Методы вызывают у Math, например Math.sqrt(9). Углы задаются и возвращаются в радианах. Большинство методов преобразует аргументы в Number; BigInt и Symbol вызывают TypeError. Исключение sumPrecise() принимает только числовые элементы. Для аргументов вне математической области определения обычно возвращается NaN.

Math: справочные сведения
Метод Описание
abs() Вычисляет и возвращает абсолютное значение переданного числа.
acos() Вычисляет и возвращает арккосинус переданного числа. Аргумент должен быть от -1 до 1; вне диапазона возвращается NaN. Результат от 0 до π.
acosh() Вычисляет и возвращает гиперболический арккосинус переданного числа. Для x меньше 1 возвращает NaN.
asin() Вычисляет и возвращает арксинус переданного числа. Аргумент должен быть от -1 до 1; вне диапазона возвращается NaN. Результат от -π/2 до π/2.
asinh() Вычисляет и возвращает гиперболический арксинус переданного числа.
atan() Вычисляет и возвращает арктангенс переданного числа.
atan2() Вычисляет и возвращает угол между осью X и точкой. Порядок аргументов: atan2(y, x). Результат в радианах от -π до π с учётом четверти.
atanh() Вычисляет и возвращает гиперболический арктангенс переданного числа. Для |x| больше 1 возвращает NaN, для ±1 — соответствующую бесконечность.
cbrt() Вычисляет и возвращает кубический корень переданного числа. Поддерживает отрицательные числа: cbrt(-8) равно -2.
ceil() Вычисляет и возвращает наименьшее целое число, которое больше или равно переданному числу (округляет число вверх).
clz32() Возвращает количество ведущих нулевых битов в 32-битном двоичном представлении числа. Сначала преобразует аргумент в беззнаковое 32-битное целое; для 0 возвращает 32.
cos() Вычисляет и возвращает косинус переданного числа
cosh() Вычисляет и возвращает гиперболический косинус переданного числа.
exp() Вычисляет и возвращает степень числа Е (Ex, где x - аргумент, а E - основание натурального логарифма).
expm1() Вычисляет и возвращает степень числа Е минус 1 (Ex-1, где x - аргумент, а E - основание натурального логарифма). Для x около нуля обычно точнее, чем exp(x) - 1.
floor() Вычисляет и возвращает наибольшее целое число, которое меньше или равно переданному числу (округляет число вниз).
fround() Вычисляет и возвращает ближайшее число с плавающей запятой одинарной точности, представляющее указанное число.
hypot() Вычисляет и возвращает квадратный корень из суммы квадратов своих аргументов. Без аргументов возвращает 0; бесконечность среди аргументов имеет приоритет над NaN.
imul() Вычисляет и возвращает результат C-подобного 32-битного умножения двух параметров. Аргументы приводятся к 32-битным целым; результат — знаковое 32-битное целое с переполнением.
log() Вычисляет и возвращает натуральный логарифм переданного числа. Для 0 возвращает -Infinity, для отрицательного аргумента — NaN.
log1p() Вычисляет и возвращает натуральный логарифм 1 + x для переданного числа x. Для x около нуля обычно точнее, чем log(1 + x); при x = -1 возвращает -Infinity, при x меньше -1 — NaN.
log2() Вычисляет и возвращает двоичный (по основанию 2) логарифм переданного числа. Для 0 возвращает -Infinity, для отрицательного аргумента — NaN.
log10() Вычисляет и возвращает десятичный (по основанию 10) логарифм переданного числа. Для 0 возвращает -Infinity, для отрицательного аргумента — NaN.
max() Позволяет найти и возвратить наибольшее из переданных чисел. Без аргументов возвращает -Infinity; NaN среди преобразованных аргументов даёт NaN.
min() Позволяет найти и возвратить наименьшее из переданных чисел. Без аргументов возвращает Infinity; NaN среди преобразованных аргументов даёт NaN.
pow() Вычисляет и возвращает переданное число x в указанной степени y. Для отрицательного основания и нецелого показателя возвращает NaN; любой аргумент в степени ±0 даёт 1.
random() Возвращает псевдослучайное число от 0 включительно до 1 исключительно. Не подходит для криптографии.
round() Возвращает значение переданного числа, округленного до ближайшего целого числа. При равном расстоянии выбирает число в сторону +Infinity: Math.round(-1.5) равно -1.
sign() Возвращает знак переданного числа, указывающий на то, является ли число положительным, отрицательным или соответствует значению ноль. Возвращает 1, -1, +0, -0 либо NaN; знак нуля сохраняется.
sin() Вычисляет и возвращает синус переданного числа.
sinh() Вычисляет и возвращает гиперболический синус переданного числа.
sqrt() Вычисляет и возвращает квадратный корень переданного числа. Для отрицательного числа возвращает NaN; знак -0 сохраняется.
tan() Вычисляет и возвращает тангенс переданного числа.
tanh() Вычисляет и возвращает гиперболический тангенс переданного числа.
trunc() Вычисляет и возвращает целочисленную часть переданного числа, удаляя при этом любые дробные цифры.
f16round() Округляет аргумент до ближайшего значения 16-битного формата binary16 и возвращает его как обычный Number; на равном расстоянии выбирает вариант с чётным младшим битом. При переполнении возвращает бесконечность.
sumPrecise() Суммирует числа из итерируемого объекта с округлением итоговой суммы, уменьшая потери от промежуточных сложений. Не преобразует строки и другие типы в числа: для них выбрасывает TypeError. Пустой источник даёт -0. Перед использованием проверяйте наличие метода в целевой среде.

Спецификация

ECMAScript: Math

Сравните результаты в примере округления и в примере точности вычислений.

Примеры, попробуйте сами

Как отличаются способы округления

Измените число, особенно отрицательное или заканчивающееся на .5. Сравните четыре результата.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Как отличаются способы округления</title>
  </head>
  <body></body>
</html>
main.js
JavaScript
const value = -1.5
console.log('floor:', Math.floor(value))
console.log('ceil:', Math.ceil(value))
console.log('round:', Math.round(value))
console.log('trunc:', Math.trunc(value))
console.log('Корень:', Math.sqrt(9))
console.log('Синус 90 градусов:', Math.sin((90 * Math.PI) / 180))

Как точность влияет на сумму и округление

Измените массив или десятичную дробь. Сравните обычное сложение с sumPrecise(), если метод доступен.

index.html
HTML
<!doctype html>
<html lang="ru">
  <head>
    <meta charset="UTF-8" />
    <title>Как точность влияет на сумму и округление</title>
  </head>
  <body></body>
</html>
main.js
JavaScript
const values = [1e16, 1, -1e16]
console.log(
    'Обычная сумма:',
    values.reduce((sum, value) => sum + value, 0)
)
if (typeof Math.sumPrecise === 'function') {
    console.log('Точная сумма:', Math.sumPrecise(values))
} else {
    console.log('Math.sumPrecise() недоступен в этой среде')
}
const value = 1.337
console.log('Number:', value)
console.log('binary32:', Math.fround(value))
if (typeof Math.f16round === 'function') {
    console.log('binary16:', Math.f16round(value))
} else {
    console.log('Math.f16round() недоступен в этой среде')
}