可能是重复问题:
C语言中的NaN字面量?
我正在用 ANSI C 编写一个函数,该函数接收两个数字作为参数。这些参数的类型可以是 int
或 float
。根据我的过滤器,这些数字可能有效也可能无效。如何返回一些表示失败的值?返回类型是 float
。我首先想到的是使用 NaN
抽象类型。但我不知道如何在 ANSI C 中表示它。
(对不起我的英语不好,英语不是我的母语)
可能是重复问题:
C语言中的NaN字面量?
我正在用 ANSI C 编写一个函数,该函数接收两个数字作为参数。这些参数的类型可以是 int
或 float
。根据我的过滤器,这些数字可能有效也可能无效。如何返回一些表示失败的值?返回类型是 float
。我首先想到的是使用 NaN
抽象类型。但我不知道如何在 ANSI C 中表示它。
(对不起我的英语不好,英语不是我的母语)
NaN不是一个抽象类型。它是一个浮点数数据的值。
如果你所说的“ANSI C”是指标准C(这实际上是该术语的含义,只要它有一个),则需要包含<math.h>
并使用NAN
宏来生成NaN,使用isnan(x)
来检测NaN。
如果你所说的“ANSI C”实际上是已经被替换的C89标准(即使它不是形式上正确的),则可以使用0./0.
生成NaN值,并使用x!= x
来检查是否为NaN。
NAN
和isnan
定义为你的答案。 - Will0./0.
并不符合NAN
宏的要求(即它应该可用于静态初始化);不过这可能对大多数用户来说并不是一个问题。 - Stephen Canon0. / 0.
是一个常量表达式,因此可以进行静态初始化。 - ouah如果我的“过滤器”认为该数字无效,该如何返回一些表示失败的值?
可以使用以下方法而不是将数字与 NaN 进行比较:
if (x != x) // x is NaN
0.f / 0.f
来产生一个float
NaN值。你不能这样做,需要返回两个变量,一个用于值,一个用于失败标志。
例如,你可以设置thing,使函数在正常操作的情况下返回true,在失败(NaN)的情况下返回false。
存储结果的变量作为参数通过引用传递,并在成功的情况下保存返回值。
BOOL myFunction(int inInt, float inFloat, float *outResult)
{
/*
PROCESSING HERE
*/
// in case of failure
if( /* failure condition here */ )
{
*outResult = 0;
return false;
}
*outResult = /* your result */
return true;
}
// how to use the function
int a;
float b;
float result;
BOOL success;
success = myFunction(a, b, &result);
if(success)
{
// do whatever with your "result"
}
else
{
// NaN
}
有类似这样的东西
if(your_variable != your_variable)
{
return 0; //catch 0 as the failure returned value
}
else
{
//your code
}
0
可能是一个完全合理的返回值。 - Lightness Races in Orbit
0.0/0.0
。 - Oliver Charlesworth