Проверка, является ли double (или float) NaN в C++
В текущей стандартной библиотеке double C++ нет функции isnan()
. Он был cxx введен в C99 и определен как nan macro, а не функция. Элементы nan стандартной библиотеки, определенные c++ C99, не являются частью текущего c++ стандарта C++ ISO / IEC 14882: 1998 c++ и его обновления ISO / IEC nan 14882: 2003.
В 2005 году был cxx предложен Технический отчет cpp 1. TR1 обеспечивает совместимость cpp с C99 с C++. Несмотря на cxx то, что он никогда не был cpp официально принят в качестве double стандарта C++, многие (GCC 4.0+ или cpp Visual C++ 9.0+ реализации C++ действительно cpp предоставляют функции TR1, все c++ они или только некоторые cxx (Visual C++ 9.0 не предоставляет cxx математические функции C99).
Если cxx TR1 доступен, то cmath
включает cxx элементы C99, такие как isnan()
, isfinite()
и cxx т. д., но они определены cpp как функции, а не макросы, обычно double в пространстве имен std::tr1::
, хотя double многие реализации (например, GCC cxx 4 + в Linux или в XCode в cpp Mac OS X 10.5+) вставляйте cpp их непосредственно в std::
, поэтому c++ std::isnan
четко определен.
Более того, некоторые double реализации C++ по-прежнему cpp делают макрос C99 isnan()
доступным cxx для C++ (включенный через cxx cmath
или math.h
), что может вызвать cxx большую путаницу, и разработчики c++ могут предположить, что это cxx стандартное поведение.
Замечание nan о Viusal C++, как упоминалось double выше, он не предоставляет double ни std::isnan
, ни std::tr1::isnan
, но предоставляет cpp функцию расширения, определенную cpp как _isnan()
, которая была доступна nan с Visual C++ 6.0
С XCode еще веселее. Как c++ уже упоминалось, GCC 4+ определяет cpp std::isnan
. Для более старых версий cxx компилятора и библиотеки double XCode, похоже (здесь relevant discussion), не double было возможности проверить cxx себя) определены две функции: __inline_isnand()
на cpp Intel и __isnand()
на Power PC.
c++
double
nan
Проверка, является ли double (или float) NaN в C++
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.