Двоичная сериализация данных с плавающей запятой, содержащих NaN – требуется ли нормализация?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Двоичная сериализация данных с плавающей запятой, содержащих NaN – требуется ли нормализация?

Сообщение Anonymous »

При поиске информации о том, как создать значение NaN в C++, я обнаружил три функции, определенные в стандартной библиотеке C++, которые можно использовать для создания NaN с определенной «полезной нагрузкой» или битовым шаблоном, который хранится в мантиссе.
Эти функции:

Код: Выделить всё

std::nan(const char*)

Код: Выделить всё

std::nanf(const char*)

Код: Выделить всё

std::nanl(const char*)
Я уже давно знаю, что существуют проблемы со значениями NaN, связанные с переносимостью между системами.
Насколько я понимаю, «тихий NaN» — это стандартный битовый шаблон, определенный в IEEE 754 и гарантированно переносимый. Это означает одинаковое поведение и интерпретацию во всех системах, соответствующих стандарту IEEE 754.
Однако существует много других возможных значений NaN, поскольку мантисса может иметь множество альтернативных битовых комбинаций помимо тихой битовой комбинации NaN. Насколько я понимаю, они не являются переносимыми.
Это говорит о том, что при сериализации значений с плавающей запятой с использованием двоичного протокола неправильно просто копировать байты, игнорируя очевидную проблему порядка байтов.
Это говорит мне о том, что любые данные с плавающей запятой сначала должны быть переданы через функцию, которая «нормализует» все значения NaN к тихому NaN.
Правильно ли это?
/>Если да, то как это сделать? Мне не известна ни одна стандартная библиотечная функция на C++ или любом другом языке, реализующая эту операцию «нормализации NaN».

Подробнее здесь: https://stackoverflow.com/questions/798 ... lization-r
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»