Является ли 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 для плавающей запятой.