14.4怎样测试IEEE NaN以及其它特殊值?
许多实现高质量IEEE 浮点的系统会提供简洁的工具去处理这些特殊值。例如, 在<math.h> 以非标准扩展功能, 或可能以<ieee.h> 或<nan.h> 提供预定义常数, 及象isnan() 这类的函数。这些工具的标准化进程正在进行中。一个粗陋但通常有效的测试NaN 的方法:
#define isnan(x) ((x) != (x))
虽然一些不支持IEEE 的编译器可能会把这个判断优化掉。C99 提供isnan(), fpclassify() 及其它一些类别的例程。必要时, 还可以用sprintf() 格式化需测试的值, 在许多系统上, 它会产生“NaN” 或“Inf” 的字符串。你就可以比较了。
参见问题19.38。
#define isnan(x) ((x) != (x))
虽然一些不支持IEEE 的编译器可能会把这个判断优化掉。C99 提供isnan(), fpclassify() 及其它一些类别的例程。必要时, 还可以用sprintf() 格式化需测试的值, 在许多系统上, 它会产生“NaN” 或“Inf” 的字符串。你就可以比较了。
参见问题19.38。