Конвертер чисел с плавающей запятой IEEE 754
Конвертация десятичных чисел в двоичный и hex-формат IEEE 754 онлайн — половинная, одинарная, двойная точность и bfloat16. Точное хранимое значение, ошибка округления и раскладка битов. 100% в вашем браузере.
| Знак | |
| Порядок | |
| Мантисса |
- Вы ввели
- Фактически хранится
- Ошибка округления
- Предыдущее
- Следующее
- ULP (размер зазора)
| Формат | Всего бит | Знак | Порядок | Мантисса | Смещение | Макс. конечное значение | Десятичные цифры |
|---|---|---|---|---|---|---|---|
| binary16 (FP16) | 16 | 1 | 5 | 10 | 15 | 65504 | ~3.3 |
| bfloat16 | 16 | 1 | 8 | 7 | 127 | ≈3.39×10³⁸ | ~2.3 |
| binary32 (FP32) | 32 | 1 | 8 | 23 | 127 | ≈3.40×10³⁸ | ~7.2 |
| binary64 (FP64) | 64 | 1 | 11 | 52 | 1023 | ≈1.80×10³⁰⁸ | ~15.9 |
Что такое плавающая запятая IEEE 754?
IEEE 754 — стандарт, определяющий, как компьютеры хранят вещественные числа в двоичном виде. Каждое значение упаковано в три поля: знаковый бит, порядок (экспонента, хранимая со смещением, чтобы представлять и большие, и крошечные величины) и мантисса со значащими цифрами. Его использует почти каждый CPU, GPU и язык программирования — поэтому одни и те же сюрпризы округления появляются в JavaScript, Python, C и SQL одинаково.
Ключевая идея в том, что двоичная плавающая запятая может представлять только числа вида m × 2ⁿ. Десятичные дроби вроде 0.1 в двоичной системе — бесконечные периодические дроби — 0.000110011001100… — поэтому формат хранит ближайшего представимого соседа. В одинарной точности этот сосед — 0.100000001490116119384765625; в двойной — 0.1000000000000000055511151231257827021181583404541015625. Ни то ни другое не равно 0.1. Все последующие странности — 0.1 + 0.2 ≠ 0.3, уплывающие суммы, проваливающиеся проверки равенства — следуют из этого единственного факта, и этот конвертер делает его видимым, печатая точное хранимое значение вместо округлённого обратно приближения.
Стандарт также резервирует битовые паттерны под специальные значения. Порядок из одних единиц кодирует ±Infinity (мантисса ноль) или NaN (мантисса не ноль); порядок из одних нулей кодирует знаковый ноль (мантисса ноль) или субнормальные числа (мантисса не ноль), которые заполняют разрыв исчезновения порядка рядом с нулём при сниженной точности. Четыре формата этого инструмента — binary16/FP16, bfloat16, binary32/FP32, binary64/FP64 — различаются лишь тем, сколько битов отдано каждому полю: больше битов порядка — больше диапазон, больше битов мантиссы — больше точность. bfloat16, любимец машинного обучения, — это просто FP32 с отрезанными нижними 16 битами мантиссы: тот же диапазон, куда более грубая точность.
Полезная ментальная модель: представимые float образуют сетку на числовой прямой, шаг которой — единица в последнем разряде, или ULP — удваивается на каждой степени двойки. Около 1.0 шаг сетки double составляет примерно 2.22 × 10⁻¹⁶; около 2⁵³ он равен целой единице — вот почему double не может надёжно считать дальше 2⁵³. Панель соседей в этом инструменте показывает эту сетку напрямую: предыдущее и следующее представимые значения вокруг введённого числа с точным зазором между ними.
// Float ↔ hex through the raw IEEE 754 bits (works in any browser / Node.js)
const buf = new DataView(new ArrayBuffer(8));
function floatToHex32(value) {
buf.setFloat32(0, value); // rounds to nearest even
return '0x' + buf.getUint32(0).toString(16).toUpperCase().padStart(8, '0');
}
function hexToFloat32(hex) {
buf.setUint32(0, parseInt(hex, 16));
return buf.getFloat32(0);
}
floatToHex32(0.1); // '0x3DCCCCCD'
floatToHex32(3.14159); // '0x40490FD0'
hexToFloat32('3DCCCCCD'); // 0.10000000149011612 Ключевые возможности
Четыре формата, один вид
Половинная (FP16), bfloat16, одинарная (FP32) и двойная (FP64) точность — переключение одним щелчком пересчитывает всю страницу, поэтому сравнить, как одно и то же число ложится в каждый формат, — дело секунд.
Кликабельная сетка битов
Каждый бит — кнопка. Инвертируйте знак, подвиньте порядок или троньте бит мантиссы — десятичное, hex- и двоичное представления обновятся мгновенно; самый быстрый способ выработать интуицию кодирования.
Точное хранимое значение, а не приближение
Инструмент вычисляет полное десятичное разложение хранимых битов точной длинной арифметикой — все 55 цифр для 0.1 в double — плюс точную ошибку округления со знаком относительно введённого.
Соседи и ULP
Смотрите предыдущее и следующее представимые значения вокруг текущего числа и точный зазор (ULP) между ними — шаг сетки, определяющий, сколько точности у вас реально есть на данной величине.
Специальные значения в один щелчок
Чипы загружают ±0, ±Infinity, NaN, наименьшее субнормальное и наибольшее конечное значение выбранного формата, а бейдж классификации называет, что кодирует текущий битовый паттерн.
Постоянные ссылки — без отправки данных
«Копировать ссылку» кодирует формат и точный битовый паттерн в URL — идеально для баг-репортов, код-ревью и обучения. Всё выполняется в браузере; ничего из введённого не покидает страницу.
Примеры конвертации IEEE 754
0.1 в одинарной точности — классическая ошибка округления
0.1
0x3DCCCCCD — фактически хранится как 0.100000001490116119384765625
Десятичное 0.1 не имеет конечного двоичного представления, поэтому IEEE 754 хранит ближайшее представимое значение. В одинарной точности (FP32) это 0x3DCCCCCD, то есть ровно 0.100000001490116119384765625 — примерно на 1.49 × 10⁻⁹ больше. Инструмент показывает это точное хранимое значение и точную ошибку, цифра за цифрой, а не округлённое «0.1», которое печатает в ответ ваш язык программирования. Один этот пример объясняет большинство сюрпризов плавающей запятой, включая то, почему 0.1 + 0.2 не равно 0.3.
Float в hex: 3.14159 в FP32
3.14159
0x40490FD0
Введите 3.14159 при выбранной одинарной точности (FP32) — поле hex покажет 0x40490FD0: знак 0, смещённый порядок 128 (то есть 2¹), мантисса 0x490FD0. Фактически хранится 3.141590118408203125 — на волосок больше введённого. Hex-форма встречается в сетевых дампах, буферах GPU, представлениях регистров и сериализованных двоичных файлах, а конвертация работает в обе стороны: вставьте 40490FD0 в поле hex, чтобы декодировать обратно.
Максимум FP16: 65504 — предел половинной точности
65504
0x7BFF — наибольшее конечное значение FP16
У половинной точности всего 5 бит порядка и 10 бит мантиссы, поэтому её наибольшее конечное значение — 65504 (0x7BFF). Введите 65520 или больше — результат округлится до Infinity (0x7C00), реальная опасность при квантовании моделей машинного обучения в FP16. Переключитесь на bfloat16 — и те же 65520 легко помещаются, потому что bfloat16 сохраняет 8 бит порядка FP32 (диапазон), жертвуя битами мантиссы (точностью). Именно этот компромисс объясняет, почему обучение ML предпочитает bfloat16, а компактное хранение — FP16.
−0 и +0: два разных битовых паттерна, одно значение
-0
0x80000000 (FP32), тогда как +0 — это 0x00000000
В IEEE 754 есть знаковый ноль: у −0 установлен только знаковый бит (0x80000000 в FP32), а +0 — все нули. Они равны при сравнении в любом языке, однако 1/−0 даёт −Infinity, а 1/+0 — +Infinity, так что разница наблюдаема. Щёлкните знаковый бит в инструменте, чтобы переключаться между ними: бейдж классификации останется на «Ноль», а hex изменится — иллюстрация в один щелчок того, почему битовое равенство и числовое равенство — разные вещи.
Как конвертировать числа с плавающей запятой IEEE 754
- 1
Выберите формат с плавающей запятой
Одинарная точность (FP32) выбрана заранее. Переключитесь на двойную (FP64) для чисел в стиле JavaScript/Python или на половинную (FP16) и bfloat16 — 16-битные форматы машинного обучения и графики.
- 2
Введите десятичное число
Введите любое значение — 0.1, -2.5e3, 65504 — или используйте чипы специальных значений для ±0, ±Infinity, NaN, наименьшего субнормального и наибольшего конечного. Конвертация происходит по мере ввода.
- 3
Прочитайте цветную раскладку битов
Знаковый бит, поле порядка и мантисса подсвечены разными цветами, а таблица разбора полей показывает сырые биты, арифметику смещения и неявный ведущий бит.
- 4
Проверьте точное хранимое значение и ошибку
Панель точности печатает фактически хранимое значение — каждую цифру, вычисленную точно, — рядом с ошибкой округления относительно введённого, плюс предыдущий и следующий представимые соседи и зазор ULP.
- 5
Инвертируйте биты, вставляйте hex, копируйте результаты
Щёлкните любой бит, чтобы инвертировать его, или вставьте hex (3DCCCCCD) и двоичные строки, чтобы декодировать их обратно в десятичное. Копируйте hex, двоичное, точное значение или ссылку, воспроизводящую точный битовый паттерн.
Частые ошибки с плавающей запятой
Доверять напечатанному значению вместо хранимого
Языки печатают float, округлённый до кратчайшей строки, которая восстанавливается обратно, поэтому 0.1 выглядит чистым, хотя хранимое значение таким не является. Судите о точности по точному разложению, а не по выводу print().
print(0.1) # 0.1 — выглядит точным, но это не так
0.1 хранится (FP64) = 0.1000000000000000055511151231257827021181583404541015625
Сравнивать float на точное равенство
0.1 + 0.2 попадает на битовый паттерн 0x3FD3333333333334, а литерал 0.3 — это 0x3FD3333333333333 — разница в один ULP, поэтому == ложно, хотя оба печатаются как значения около 0.3.
if (0.1 + 0.2 === 0.3) { … } // никогда не выполнится if (Math.abs(a - b) < 1e-9) { … } // допуск по масштабу ваших данных Квантовать в FP16 без проверки диапазона
Наибольшее конечное значение FP16 — 65504. Всё, что больше, становится Infinity, а попавшая в вычисление Infinity распространяется дальше. Проверяйте максимумы перед понижающим приведением — или используйте bfloat16, сохраняющий диапазон FP32.
fp16(65520) → Infinity (0x7C00) — тихое переполнение
bf16(65520) → конечное (bfloat16 сохраняет 8 бит порядка)
Проверять NaN через равенство
NaN — единственное значение, не равное самому себе; это сделано намеренно, чтобы провалившееся вычисление не могло притвориться настоящим числом. Используйте проверку isNaN вашего языка вместо == и помните: различных битовых паттернов NaN — миллионы.
if (x === NaN) { … } // всегда ложно, даже когда x — это NaN if (Number.isNaN(x)) { … } // правильная проверка Что можно делать с конвертером IEEE 754
- Отладка сериализованных двоичных данных
- Вставьте hex из сетевого дампа, буфера GPU, дампа регистров или файлового формата и декодируйте его в точное десятичное значение — или идите в обратную сторону, чтобы готовить тестовые фикстуры. Про порядок байтов: показанный hex — это big-endian битовый паттерн; если ваш дамп little-endian, перед вставкой поменяйте порядок байтов на обратный.
- Понимание квантования в ML
- Проверьте, переживут ли ваши значения потолок FP16 в 65504, сравните потерю точности FP16 и bfloat16 цифра за цифрой и исследуйте субнормальный диапазон, где градиенты исчезают.
- Объяснение бага плавающей запятой
- Когда коллега спрашивает, почему два «равных» числа различаются, отправьте постоянную ссылку с обоими битовыми паттернами и точными хранимыми значениями — спор решится сам. Для длинных дампов подключите инструмент сравнения текста.
- Изучение и преподавание кодирования
- Курс компьютерной архитектуры становится осязаемым, когда студенты могут щёлкать биты порядка и видеть, как обновляется арифметика смещения. Таблица разбора полей повторяет то, как формат рисуют в учебниках.
- Декодирование встраиваемых и промышленных регистров
- Полезные нагрузки Modbus, CAN и датчиков сплошь и рядом несут значения FP32 сырыми hex-словами. Вставьте слово сюда и прочитайте физическую величину без одноразового скрипта.
Форматы и специальные значения IEEE 754
- Четыре двоичных формата с одного взгляда
- binary16 (FP16): 1 знаковый + 5 бит порядка + 10 бит мантиссы, смещение 15, максимум 65504, ~3.3 десятичной цифры. bfloat16: 1 + 8 + 7, смещение 127, максимум ≈ 3.39 × 10³⁸, ~2.3 цифры. binary32 (FP32): 1 + 8 + 23, смещение 127, максимум ≈ 3.40 × 10³⁸, ~7.2 цифры. binary64 (FP64): 1 + 11 + 52, смещение 1023, максимум ≈ 1.80 × 10³⁰⁸, ~15.9 цифры. Закономерность: биты порядка покупают диапазон, биты мантиссы покупают точность, а bfloat16 сознательно меняет всю свою точность на диапазон FP32.
- Как собирается значение
- Нормальное число декодируется как (−1)^знак × 1.мантисса × 2^(порядок − смещение). Ведущая единица неявная — она не хранится, поэтому 23-битное поле мантиссы даёт 24 бита точности. Хранимый порядок — это истинный порядок плюс смещение (127 в FP32), поэтому 2⁰ хранится как 01111111. Таблица разбора полей в этом инструменте показывает каждый шаг этой арифметики для текущего значения.
- Специальные значения: зарезервированные паттерны порядка
- Порядок из одних единиц при нулевой мантиссе — ±Infinity; при любой ненулевой мантиссе — NaN (канонический тихий NaN устанавливает старший бит мантиссы). Порядок из одних нулей при нулевой мантиссе — ±0; при ненулевой — субнормальное число, декодируемое как 0.мантисса × 2^(1 − смещение) — без неявной ведущей единицы. Эти правила одинаковы во всех четырёх форматах, поэтому одни и те же чипы работают в каждом.
- Округление: к ближайшему, при равенстве — к чётному
- Когда значение попадает между двумя представимыми числами, режим IEEE 754 по умолчанию округляет к более близкому; при точном равенстве выбирается то, у которого последний бит мантиссы равен 0 (к чётному), что предотвращает систематический дрейф. Этот конвертер применяет ровно это правило при сужении десятичного ввода в целевой формат, а панель ошибки точно показывает получившуюся разность со знаком.
- ULP: шаг сетки float
- Представимые float распределены неравномерно — зазор между соседями (единица в последнем разряде) удваивается на каждой степени двойки. Около 1.0 ULP double равен 2⁻⁵² ≈ 2.22 × 10⁻¹⁶; около 2⁵³ ULP достигает 1.0, и целые начинают пропускаться. Панель соседей печатает текущий ULP точно — это честный ответ на вопрос «насколько точное здесь моё число?».
Лучшие практики работы с плавающей запятой
- Никогда не сравнивайте float через ==
- После любой арифметики два математически равных выражения могут отстоять друг от друга на один ULP. Сравнивайте с допуском, соответствующим вашим величинам, — или считайте ULP между битовыми паттернами, которые этот инструмент позволяет рассмотреть напрямую.
- Держите деньги подальше от двоичных float
- Ни одна сетка степеней двойки не содержит 0.10 точно, поэтому валюта во float накапливает видимые ошибки. Используйте целые (копейки) или десятичный тип; панель точного хранимого значения здесь — наглядное тому доказательство.
- Выбирайте 16-битный формат по диапазону, а не по привычке
- Если значения могут превысить 65504 — потери, градиенты, всплески в физике — FP16 переполнится до Infinity там, где bfloat16 пройдёт спокойно. Если же всё нормализовано в узкую полосу, дополнительные биты мантиссы FP16 дают заметно лучшую точность.
- Помните о ловушке двойного округления при сужении
- Конвертация десятичное → double → half в редких пограничных случаях может оказаться на один ULP в стороне от прямой конвертации десятичное → half. Этот инструмент округляет десятичный ввод в целевой формат за один шаг, поэтому вы видите честный ответ IEEE 754.
- Ожидайте, что целые сломаются выше 2⁵³
- Double хранит каждое целое до 2⁵³ точно, а затем начинает пропускать — 2⁵³ + 1 непредставимо. Если вы работаете с ID или счётчиками такого масштаба, используйте 64-битные целые или строки, а подозрительные значения проверяйте здесь на уровне битов.
Часто задаваемые вопросы об IEEE 754
Почему 0.1 + 0.2 не равно 0.3?
Что такое IEEE 754?
В чём разница между FP16 и bfloat16?
Что такое субнормальные (денормализованные) числа?
Что использовать: float или double?
Как перевести float в hex вручную?
Загружаются ли мои данные при использовании этого конвертера?
Похожие инструменты
Все инструменты →Конвертер систем счисления — bin, hex, dec, oct
Конвертеры
Конвертация между системами счисления — двоичной, hex, десятичной, восьмеричной и любой базой 2-36 мгновенно. Бесплатно, приватно — вся обработка в браузере.
Конвертер цветов — HEX, RGB, HSL и OKLCH
Конвертеры
Конвертируйте HEX в RGB, HSL, OKLCH, OKLAB и CMYK прямо в браузере — копируйте любой формат в один клик. Бесплатно, без регистрации, ваши цвета никогда не покидают страницу.
Конвертер HEX в CMYK
Конвертеры
Конвертируйте HEX-цвета в CMYK прямо в браузере. Наивное приближение на основе sRGB для предпросмотра печати. Бесплатно, без регистрации, ваши цвета остаются локально.
Конвертер HEX в HSL
Конвертеры
Конвертируйте любой HEX-цвет в HSL прямо в браузере — поддерживаются 3-значные, 6-значные и 8-значные HEX с альфой. Бесплатно, мгновенно, без регистрации, ваши цвета никогда не покидают страницу.
Конвертер HEX в OKLCH
Конвертеры
Конвертируйте HEX в OKLCH для токенов дизайна Tailwind v4. Живой перцептивно-равномерный вывод с предупреждениями цветового охвата Display P3. Бесплатно, только в браузере.
Конвертер HEX в RGB
Конвертеры
Конвертируйте любой HEX-код цвета в RGB прямо в браузере — поддерживаются 3-значные, 6-значные и 8-значные HEX с альфой. Бесплатно, мгновенно, без регистрации, ваши цвета никогда не покидают страницу.