C中的NaN Literal?

Meh*_*dad 17 c floating-point nan

你如何NaN在C中写一个浮点字面值?

pmg*_*pmg 17

在C99中 <math.h>

  7.12  Mathematics <math.h>
Run Code Online (Sandbox Code Playgroud)
   [#5] The macro

           NAN

   is defined if and only if the implementation supports  quiet
   NaNs   for  the  float  type.   It  expands  to  a  constant
   expression of type float representing a quiet NaN.           |
Run Code Online (Sandbox Code Playgroud)


Ste*_*sop 7

5.2.4.2.2/3:

浮动类型可能包含其他类型的浮点数,例如......在单位和NaN中.NaN是表示非数字的编码.一个安静的NaN几乎在每个算术运算中传播,而不会引起浮点异常; 信令NaN通常在作为算术操作数发生时引发浮点异常.

7.12/5(math.h):

NAN当且仅当实现支持float类型的安静NaN时,才定义宏.它扩展为float类型的常量表达式,表示安静的NaN.

所以,你可以得到一个值,如果您的实现支持的NaN可言的,如果某些或所有这些的NaN是安静的.如果你没有进入实现定义的领域.

还有一些浮点宏的担心,编译器前端可能不知道它是否支持该功能,因为它产生的代码可以在支持变化的架构的多个版本上运行.我不知道这是否适用于这个宏,但如果你到实现定义的领土是另一种情况-预处理器可能会保守地声称,它不支持此功能在实际的实施作为一个整体,为你"确实如此.