9

可能重复:
C 中的 NaN 文字?

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

(对不起我的英语不好。英语不是我的母语)

4

4 回答 4

13

NaN 不是“抽象类型”。它是一个浮点数据的值。

如果您所说的“ANSI C”是指标准 C(这是该术语的实际含义,尽管它有一个),请包含<math.h>并使用NAN宏来产生一个 nan,并isnan(x)检测一个。

如果您所说的“ANSI C”实际上是指已被长期替换的 C89 标准(有些人打算这样做,即使它在形式上并不正确),您可以使用 生成 NaN 值0./0.,并使用x != x.

于 2013-01-05T18:41:34.967 回答
5

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

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

if (x != x)  // x is NaN

如评论中所述,您可以使用此表达式在 C890.f / 0.f中生成NaN 值。float

于 2013-01-05T18:39:12.853 回答
2

你不能这样做,你需要返回两个变量,一个用于值,一个用于失败标志。

例如,您可以设置事物,以便在正常操作的情况下该函数将返回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
}
于 2013-01-05T18:48:01.527 回答
-2

有这样的东西

if(your_variable != your_variable)
{
    return 0; //catch 0 as the failure returned value
}
else
{
    //your code
}
于 2013-01-05T18:46:06.333 回答