C中的NaN Literal?

时间:2011-04-19 09:15:43

标签: c floating-point nan

如何在C中编写NaN浮点文字?

4 个答案:

答案 0 :(得分:17)

在C99的<math.h>

  7.12  Mathematics <math.h>
   [#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.           |

答案 1 :(得分:7)

5.2.4.2.2 / 3:

  

浮游类型可能包含   其他种类的浮点数,   例如......在金融和NaNs。 NaN是一种编码   表示非数字。安静的NaN几乎传播开来   每个算术运算没有   提出浮点异常;一个   信号NaN通常会引发一个问题   发生时浮点异常   作为算术运算符。

7.12 / 5(math.h):

  

NAN定义当且仅当   该实现支持安静的NaN   对于浮动类型。它扩展到了   float类型的常量表达式   代表一个安静的NaN。

因此,如果您的实现完全支持NaN,那么您可以获得值,如果某些或所有NaN都安静,则 。如果你没有进入实现定义的领域。

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

答案 2 :(得分:3)

使用NAN会更好,但是如果您使用的是具有NaN的系统,则0.0/0.0是获取NaN的简单方法...

答案 3 :(得分:2)

在C中,您可以通过以下方式编写NaN浮点文字。

const unsigned long dNAN[2] = {0x00000000, 0x7ff80000};
const double LITERAL_NAN = *( double* )dNAN;

请注意,这不是标准方式。在Microsoft C上,它工作正常。