15. Числа: IEEE 754, BigInt, Math
JavaScript: Мозги. Урок 2: Числа – IEEE 754, BigInt, Math
Заголовок раздела «JavaScript: Мозги. Урок 2: Числа – IEEE 754, BigInt, Math»
В JavaScript числа играют ключевую роль, будь то математические вычисления или работа с данными. В этом уроке мы разберемся с тем, как JavaScript представляет числа, познакомимся с ограничениями и способами их обхода, а также изучим полезные инструменты для работы с числами.
IEEE 754: Представление чисел с плавающей точкой
Заголовок раздела «IEEE 754: Представление чисел с плавающей точкой»JavaScript использует формат IEEE 754 для представления чисел. Это означает, что большинство чисел (включая десятичные дроби) хранятся в памяти компьютера в виде чисел с плавающей точкой двойной точности (64 бита). Это приводит к некоторым особенностям. Например, некоторые десятичные дроби не могут быть представлены точно.
console.log(0.1 + 0.2); // Вывод: 0.30000000000000004Это не ошибка JavaScript, а особенность представления чисел с плавающей точкой. Чтобы избежать проблем, связанных с неточностью, можно использовать методы округления:
console.log((0.1 + 0.2).toFixed(1)); // Вывод: "0.3" (строка)console.log(Math.round((0.1 + 0.2) * 10) / 10); // Вывод: 0.3 (число)toFixed() возвращает строку с указанным количеством знаков после запятой. Math.round() округляет число до ближайшего целого.
BigInt: Работа с большими числами
Заголовок раздела «BigInt: Работа с большими числами»Когда требуются вычисления с целыми числами, превышающими Number.MAX_SAFE_INTEGER (2^53 - 1), на помощь приходит BigInt. Это специальный тип данных для представления произвольно больших целых чисел.
const largeNumber = 9007199254740991n; // Добавляем "n" в концеconst anotherLargeNumber = BigInt(9007199254740992);
console.log(largeNumber + 1n); // Вывод: 9007199254740992nconsole.log(anotherLargeNumber); // Вывод: 9007199254740992nВажно: BigInt не совместим с обычными числами. Операции можно проводить только между BigInt.
// console.log(largeNumber + 1); // Ошибка!console.log(largeNumber + BigInt(1)); // ПравильноMath: Математические функции
Заголовок раздела «Math: Математические функции»Объект Math предоставляет множество полезных математических функций и констант.
console.log(Math.PI); // Вывод: 3.141592653589793console.log(Math.abs(-5)); // Вывод: 5 (абсолютное значение)console.log(Math.pow(2, 3)); // Вывод: 8 (2 в степени 3)console.log(Math.sqrt(9)); // Вывод: 3 (квадратный корень)console.log(Math.random()); // Вывод: случайное число от 0 (включительно) до 1 (исключая 1)console.log(Math.floor(3.7)); // Вывод: 3 (округление вниз)console.log(Math.ceil(3.2)); // Вывод: 4 (округление вверх)Жизненный пример
Заголовок раздела «Жизненный пример»- Финансовые расчеты: В финансовых приложениях часто требуется высокая точность, поэтому используют библиотеки, работающие с
BigIntили десятичными числами (например,decimal.js) для избежания ошибок округления. - Криптография: При работе с криптографическими алгоритмами используются очень большие числа, которые обрабатываются с помощью
BigInt. - Графика:
Mathиспользуется для вычисления координат, углов, расстояний в играх, визуализациях данных и других графических приложениях. Например, для вращения элемента вокруг центра используетсяMath.sin()иMath.cos().
Ключевые моменты
Заголовок раздела «Ключевые моменты»- JavaScript использует IEEE 754 для представления чисел с плавающей точкой, что может приводить к неточностям.
BigIntпозволяет работать с целыми числами произвольного размера.- Объект
Mathпредоставляет множество полезных математических функций. - Выбирайте подходящий тип данных и методы работы с числами в зависимости от задачи.