<分区>
isNan在iOS SDK中是这样定义的,math.h如下,
#define isnan(x) \
( sizeof(x) == sizeof(float) ? __inline_isnanf((float)(x)) \
: sizeof(x) == sizeof(double) ? __inline_isnand((double)(x)) \
: __inline_isnanl((long double)(x)))
内联函数是这样的,
__header_always_inline int __inline_isnanf(float __x) {
return __x != __x;
}
__header_always_inline 只是强制编译器使函数确定内联。
在内联函数中实际完成的工作在我看来是相当难以捉摸的。
return __x != __x;
这条线是做什么的?它如何验证参数是否为 NaN?
编辑:
这里的问题是不是为什么 NaN 不等于 NaN;但它是如何实现的。因此,请将您的答案引导至实际的低级别实现。
非常感谢任何帮助。谢谢。