可能重复:
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)
检测一个。
如果您所说的“ANSI C”实际上是指已被长期替换的 C89 标准(有些人打算这样做,即使它在形式上并不正确),您可以使用 生成 NaN 值0./0.
,并使用x != x
.
根据我的“过滤器,数字可能无效的问题那么我如何返回一些值意味着失败?
您可以使用以下命令,而不是将数字与 NaN 进行比较:
if (x != x) // x is NaN
如评论中所述,您可以使用此表达式在 C890.f / 0.f
中生成NaN 值。float
你不能这样做,你需要返回两个变量,一个用于值,一个用于失败标志。
例如,您可以设置事物,以便在正常操作的情况下该函数将返回true。失败时为假(NaN)。
存储结果的变量作为参数通过引用传递,并在成功的情况下保存返回值。
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
}