如何在ANSI C中定义NaN值?

Jac*_*ack 9 c floating-point nan c89

可能重复:
C中的NaN Literal?

我在ANSI C中编写一个函数,它接收两个数字作为参数.参数是intfloat类型.根据我的过滤器,该数字可能有效,也可能无效.如何返回某些值意味着失败?返回类型是float.我想到的第一件事就是NaN抽象类型.但我不知道如何用ANSI C表示它.

(抱歉我的英语不好.英语不是我的母语)

Ste*_*non 12

NaN不是"抽象类型".它是浮点数据的值.

如果用"ANSI C"表示标准C(这个术语的实际含义,就像它有一个那样),包括<math.h>并使用NAN宏来产生一个纳米,并isnan(x)检测一个.

如果用"ANSI C"你实际上意味着长期替换的C89标准(有些人打算,即使它不是正式的正确),你可以生成一个NaN值0./0.,并检查一个x != x.

  • @StephenCanon`0./ 0.`是一个常量表达式,因此静态初始化是可以的. (2认同)

oua*_*uah 5

根据我的"过滤器,这个数字可能无效的问题,那么如何返回一些值意味着失败?

而不是将数字与NaN进行比较,您可以使用:

if (x != x)  // x is NaN
Run Code Online (Sandbox Code Playgroud)

如注释中所述,您可以使用此表达式在C89中0.f / 0.f生成floatNaN值.