浮点返回值,表示错误

时间:2013-05-31 12:58:28

标签: c

我的函数从对象返回一个浮点值。如果函数找不到合适的浮点值,则应返回错误,以便我可以在代码中正确处理它。

我的问题是如何返回错误。

添加额外参数并使用它来设置错误标记的选项不是首选。

我可以返回一个神奇的值,这是一个有效的选项吗?我在程序中的浮点值永远不会超过非常大的数字(从不超过10 ^ 12),因此返回FLT_MAX来检查错误可能是一个选项。

有更好的(便携式)方式吗?

7 个答案:

答案 0 :(得分:6)

如果您#include <math.h>,则可以在出现错误时返回NAN。这是ff == f的唯一浮动FALSE

答案 1 :(得分:4)

返回一个魔术值是 only 选项,除了设置全局(更糟糕的是)。

最好的解决方案修改原型,如:

bool findAFloat(float *result);

这很清楚,易于使用,而且相当明显。

您也可以选择:

float findAFloat(float ifNotFound);

并让调用者决定在没有找到值的情况下返回什么。

答案 2 :(得分:2)

(编辑 - 删除了异常建议 - 没有看到这是'c')

除此之外,c / c ++中的浮点数具有特殊值 - infiniteNaN

如果您想表示“无结果”,则可以返回NaN

答案 3 :(得分:2)

您始终可以设置静态const int ERROR_VAL = max float。然后执行if(result == ERROR_VAL)...

之类的操作

答案 4 :(得分:2)

我认为返回NAN是一个选项,它会显示NANisnan的工作方式:

#include <math.h>
#include <stdio.h>

int main()
{
    float a = NAN ;
    float b = 10 ;

    if( isnan( a ))
    {
      printf( "isnan\n") ;
    }

    if( isnan( b ))
    {
       printf( "isnan\n") ;
    }

    return 0 ;
}

答案 5 :(得分:1)

您可以将errno设置为ERANGE,并在呼叫前设置errno = 0;,并在从函数返回后进行检查。这与某些标准库函数的作用类似。

答案 6 :(得分:0)

还有一种方法可以解决它。您可以创建一个单独的函数来检查是否存在正确的值,并且仅在检查通过时调用float返回一个。