2

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

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

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

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

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

4

7 回答 7

6

如果你#include <math.h>,你可以NAN在错误的情况下返回。f这是唯一的f == f浮点数FALSE

于 2013-05-31T13:01:46.777 回答
5

返回一个魔法值是唯一的选择,除了设置一个全局(更糟)。

最好的解决方案将原型修改为:

bool findAFloat(float *result);

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

你也可以去:

float findAFloat(float ifNotFound);

如果没有找到值,让调用者决定返回什么。

于 2013-05-31T13:00:55.667 回答
2

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

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

如果你想表示“没有结果”,你可以返回一个NaN

于 2013-05-31T13:00:36.993 回答
2

您始终可以设置静态 const int ERROR_VAL = max float。然后做类似的事情if(result == ERROR_VAL)...

于 2013-05-31T13:00:50.997 回答
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 ;
}
于 2013-05-31T13:05:47.540 回答
1

例如,您可以设置errno为,ERANGE并在调用之前设置调用者的负担,并errno = 0;在从您的函数返回后检查它。这类似于一些标准库函数的作用。

于 2013-05-31T13:12:58.583 回答
0

还有另一种处理方法。您可以创建一个单独的函数来检查是否存在正确的值,并仅在检查通过时调用返回值的浮点数。

于 2013-05-31T13:08:46.477 回答