Время/числа
Конвертер IEEE 754 float
Десятичное число ↔ двоичное представление IEEE 754 (одинарная или двойная точность) — знак, экспонента, мантисса, особые значения.
Компьютеры хранят дробные числа в двоичном виде по стандарту IEEE 754 — знак, экспонента и мантисса, упакованные в фиксированное количество битов. Инструмент показывает это представление для любого десятичного числа и разбирает его обратно в число.
Как пользоваться
- Число → биты: введите десятичное число — получите разбивку на знак, экспоненту и мантиссу для одинарной (32-бит) или двойной (64-бит) точности.
- Биты → число: вставьте битовое представление, чтобы получить десятичное значение обратно.
- Особые значения (бесконечность, NaN, ноль со знаком) распознаются и объясняются отдельно.
Типичные сценарии
- Диагностика, почему 0.1 + 0.2 не равно точно 0.3 в большинстве языков программирования, — наглядная демонстрация погрешности округления.
- Изучение внутреннего представления float для понимания пределов точности при финансовых или научных расчётах.
- Разбор бинарного дампа или сетевого пакета, где числа передаются в формате IEEE 754.
Что стоит помнить
Большинство десятичных дробей (например, 0.1) не имеют точного представления в двоичной системе — отсюда и типичные погрешности округления в результатах вычислений.
Сравнивать числа с плавающей точкой на точное равенство (===) ненадёжно — вместо этого проверяют, меньше ли разница небольшого порога (эпсилон).
Статья об этом инструменте: IEEE 754: почему 0.1 + 0.2 не равно 0.3 в коде
Часто задаваемые вопросы
В чём разница между одинарной и двойной точностью?
Одинарная точность (float, 32 бита) даёт около 7 десятичных знаков точности, двойная (double, 64 бита) — около 15-17. Двойная точность используется типом Number в JavaScript.
Почему некоторые десятичные числа теряют точность?
IEEE 754 хранит число в двоичном виде, а многие десятичные дроби (например, 0.1) не имеют точного конечного двоичного представления — поэтому сохраняется ближайшее возможное значение с крошечной погрешностью округления.
Что означают NaN, Infinity и -0?
NaN — результат некорректной операции вроде 0/0. Infinity/-Infinity появляются при переполнении диапазона (например, деление на 0). А +0 и -0 — это два разных битовых представления нуля со знаком, которые при этом равны как числа.
Что такое субнормальные (denormalized) числа?
Это особый режим представления чисел, слишком малых по модулю для обычного формата — неявная единица мантиссы отбрасывается, что позволяет постепенно приближаться к нулю вместо резкого скачка, ценой потери части точности.
Как правильно сравнивать дробные числа вместо проверки на точное равенство?
Вместо a === b проверяют, меньше ли разница между числами небольшого порогового значения (эпсилон): Math.abs(a - b) < 1e-9. Точное равенство практически никогда не гарантировано из-за погрешностей округления.