Время/числа
Конвертер IEEE 754 float
Десятичное число ↔ двоичное представление IEEE 754 (одинарная или двойная точность) — знак, экспонента, мантисса, особые значения.
Computers store fractional numbers in binary under the IEEE 754 standard — a sign, an exponent, and a mantissa, packed into a fixed number of bits. This tool shows that representation for any decimal number and parses it back into a number.
How to use it
- Number → bits: enter a decimal number to get its breakdown into sign, exponent, and mantissa for single (32-bit) or double (64-bit) precision.
- Bits → number: paste a bit representation to get the decimal value back.
- Special values (infinity, NaN, signed zero) are recognized and explained separately.
Common uses
- Understanding why 0.1 + 0.2 doesn't exactly equal 0.3 in most programming languages — a concrete demonstration of rounding error.
- Studying float's internal representation to understand precision limits in financial or scientific calculations.
- Parsing a binary dump or network packet where numbers are transmitted in IEEE 754 format.
Things to keep in mind
Most decimal fractions (0.1, for example) have no exact binary representation — that's the root cause of the typical rounding errors seen in calculation results.
Comparing floating-point numbers for exact equality (===) is unreliable — check instead whether the difference is smaller than a small threshold (epsilon).
Статья об этом инструменте: 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. Точное равенство практически никогда не гарантировано из-за погрешностей округления.