Выбрать главу

Math.log(512)/Math.LN2  // Логарифм 512 по основанию 2

Math.exp(3)    // Math.E в кубе

Полный перечень всех математических функций, поддерживаемых языком JavaScript, можно найти в справочном разделе с описанием объекта Math.

Арифметические операции в JavaScript не возбуждают ошибку в случае переполнения, потери значащих разрядов или деления на ноль. Если результат арифметической операции окажется больше самого большого представимого значения (переполнение), возвращается специальное значение «бесконечность», которое в JavaScript обозначается какInfinity. Аналогично, если абсолютное значение отрицательного результата окажется больше самого большого представимого значения, возвращается значение «отрицательная бесконечность», которое обозначается как -Infinity. Эти специальные значения, обозначающие бесконечность, ведут себя именно так, как и следовало ожидать: сложение, вычитание, умножение или деление бесконечности на любое значение дают в результате бесконечность (возможно, с обратным знаком).

Потеря значащих разрядов происходит, когда результат арифметической операции оказывается ближе к нулю, чем минимально возможное значение. В этом случае возвращается число 0. Если потеря значащих разрядов происходит в отрицательном результате, возвращается специальное значение, известное как «отрицательный ноль». Это специальное значение практически ничем не отличается от обычного нуля, и у программистов на JavaScript редко возникает необходимость выделять его.

Деление на ноль не считается ошибкой в JavaScript: в этом случае просто возвращается бесконечность или отрицательная бесконечность. Однако есть одно исключение: операция деления нуля на ноль не имеет четко определенного значения, поэтому в качестве результата такой операции возвращается специальное значение «не число» (not-a-number), которое обозначается как NaN. Значение NaN возвращается также при попытке разделить бесконечность на бесконечность, извлечь квадратный корень из отрицательного числа или выполнить арифметическую операцию с нечисловыми операндами, которые не могут быть преобразованы в числа.

В JavaScript имеются предопределенные глобальные переменные Infinity и NaN, хранящие значения положительной бесконечности и «не число». В стандарте ECMAScript 3 эти переменные доступны для чтения/записи и могут изменяться в программах. Стандарт ECMAScript 5 исправляет эту оплошность и требует, чтобы эти переменные были доступны только для чтения. Объект Number предоставляет альтернативные представления некоторых значений, доступные только для чтения даже в ECMAScript 3. Например:

Infinity                   // Переменная, доступная для чтения/записи,

                           // инициализированная значением Infinity.

Number.POSITIVE_INFINITY   // То же значение, доступное только для чтения.

1/0                        // То же самое значение.

Number.MAX_VALUE + 1       // Это выражение также возвращает Infinity.

Number.NEGATIVE_INFINITY   // Возвращают отрицательную бесконечность.

-Infinity

-1/0

-Number.MAX_VALUE - 1

NaN                        // Переменная, доступная для чтения/записи,

                           // инициализированная значением NaN.

Number.NaN                 // Свойство, доступное только для чтения, с тем же значением.

0/0                        // Возвращает NaN.

Number.MIN_VALUE/2         // Потеря значащих разрядов: возвращает 0

-Number.MIN_VALUE/2        // Отрицательный ноль

-1/Infinity                 // Также отрицательный ноль