Из-за уровней стандартов включаемые файлы для c ++ являются крысиным гнездом.Я пытался выяснить, что на самом деле вызывает __isnan
, и не мог найти нигде с фактическим определением.
Поэтому я просто скомпилировал с -S, чтобы увидеть сборку, и если я напишу:
#include <ieee754.h>
void f(double x) {
if (__isinf(x) ...
if (__isnan(x)) ...
}
Обе эти процедуры называются.Я хотел бы видеть фактическое определение и, возможно, рефакторинг подобных вещей, чтобы они были встроенными, поскольку это должно быть просто битовое сравнение, хотя и трудное для достижения, когда значение находится в регистре с плавающей запятой.
В любом случае, хорошая идея или нет, вопрос стоит так: ГДЕ исходный код __isnan(x)
?