JavaScript объект Math
Описание объекта
Объект Math это встроенный объект, который определяет свойства и методы для работы с математическими
константами и функциями.
В отличие от других глобальных объектов, например, таких как Date, или
String, объект Math не является конструктором, все его свойства и методы статичны. Константы определяются с
точностью формата Number (64-битного двоичного числа с плавающей точкой) в JavaScript. Эти функции
и константы вызываются с помощью следующего синтаксиса:
Math.PI
Math.sin(x)
const area = radius * radius * Math.PI; // используем константу объекта Math
const y = Math.sin(x); // используем функцию объекта 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.
| Метод | Описание |
|---|---|
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. Перед использованием проверяйте наличие метода в целевой среде.
|
Спецификация
Сравните результаты в примере округления и в примере точности вычислений.
Примеры, попробуйте сами
Как отличаются способы округления
Измените число, особенно отрицательное или заканчивающееся на .5. Сравните четыре результата.
index.html
<html lang="ru">
<head>
<meta charset="UTF-8" />
<title>Как отличаются способы округления</title>
</head>
<body></body>
</html>
main.js
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 lang="ru">
<head>
<meta charset="UTF-8" />
<title>Как точность влияет на сумму и округление</title>
</head>
<body></body>
</html>
main.js
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() недоступен в этой среде')
}