Является ли std:: numeric_limits<double>:: quiet_NaN () кроссплатформенным безопасно?

В приложении C++, которое я создал для armhf board, я получаю десятичные значения долготы и широты gps и сохраняю их в двойных переменных. В настоящее время я инициализирую эти переменные недопустимым значением (255).
Однако я столкнулся с этим с помощью std::numeric_limits можно назначить двойную переменную std::numeric_limits<double>::quiet_NaN(),
Относительно кросс-платформенных проблем nan я прочитал весьма полезную ссылку. Должен ли я использовать NaN с плавающей запятой или с плавающей запятой + bool для набора данных, который содержит недопустимые значения?
С другой стороны std::numeric_limits это чистый стандарт C++11, но мне было интересно, если кто-то испытывал какие-либо проблемы при переносе такого рода кода на разные платформы.
Например, если я перевожу свой код с жесткого плавающего на плавное или даже на платформу amd64, вызовет ли вышеуказанная инициализация какие-либо проблемы, которые должны быть обработаны директивами препроцессора ОС?

1 ответ

Решение

Из cppreference: "Значение std::numeric_limits::has_quiet_NaN истинно для всех типов T, способных представлять специальное значение" Тихий номер ". Эта константа имеет смысл для всех типов с плавающей запятой и гарантированно будет истина, если std::numeric_limits::is_iec559 == истина."

Вам нужно будет проверить, чтобы библиотека с плавающей запятой или FPU были совместимы с IEEE 754 (IEC 559), а также чтобы вы использовали правильные флаги компилятора, чтобы разрешить их использование, см. Gcc-flags для плавающей запятой.

Другие вопросы по тегам