Какое использование имеет полезная нагрузка с плавающей запятой NaN?
Я знаю, что IEEE 754 определяет NaNs для следующего поразрядного представления:
- Знаковый бит может быть либо
0
, либо 1
- Поле экспоненты содержит все
1
bits
- Некоторые биты мантиссы используются, чтобы указать, является ли это тихим NaN или сигнализацией NaN
- Мантисса не может быть всеми битами
0
, потому что этот бит-шаблон зарезервирован для представления бесконечности
- Остальные биты мантиссы образуют полезную нагрузку
Полезная нагрузка распространяется (как и NaN в целом) на результат вычисления с плавающей точкой, когда ввод вычисления является NaN, хотя я не знаю подробностей этого распространения или стандарт указывает, как готово. Кто устанавливает исходную полезную нагрузку? Что произойдет, если я добавлю два NaN с разными полезными нагрузками?
Но самое главное: я никогда не видел полезных загрузок NaN, которые использовались раньше. Какое использование имеет это поле полезной нагрузки?
Ответы
Ответ 1
Считалось, что это хорошая идея, когда были разработаны IEEE754 и NaN. Я действительно видел, что он использовал, чтобы сохранить причину создания NaN.
Сегодня я не буду использовать его в переносном коде по нескольким причинам. Как вы уверены, что эта полезная нагрузка сохранится, например, для задания? Если вы назначаете x = y, насколько вы уверены, что x имеет ту же полезную нагрузку NaN, что и y? И насколько вы уверены в том, что он выдержит арифметику? Если a или b является NaN, то op b должен быть одним NaN или одним из двух NaN, если они оба являются NaN. Уверен, что это так? Я бы не стал делать ставку на него.
Ответ 2
https://softwareengineering.stackexchange.com/info/185406/what-is-the-purpose-of-nan-boxing
Взгляните на эту ссылку для объяснения того, как js-двигатели используют нано бокс.