Какое использование имеет полезная нагрузка с плавающей запятой 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. Уверен, что это так? Я бы не стал делать ставку на него.