我的函数从对象返回一个浮点值。如果函数找不到合适的浮点值,则应返回错误,以便我可以在代码中正确处理它。
我的问题是如何返回错误。
添加额外参数并使用它来设置错误标记的选项不是首选。
我可以返回一个神奇的值,这是一个有效的选项吗?我在程序中的浮点值永远不会超过非常大的数字(从不超过10 ^ 12),因此返回FLT_MAX来检查错误可能是一个选项。
有更好的(便携式)方式吗?
答案 0 :(得分:6)
如果您#include <math.h>
,则可以在出现错误时返回NAN
。这是f
为f == f
的唯一浮动FALSE
。
答案 1 :(得分:4)
返回一个魔术值是 only 选项,除了设置全局(更糟糕的是)。
最好的解决方案将修改原型,如:
bool findAFloat(float *result);
这很清楚,易于使用,而且相当明显。
您也可以选择:
float findAFloat(float ifNotFound);
并让调用者决定在没有找到值的情况下返回什么。
答案 2 :(得分:2)
答案 3 :(得分:2)
您始终可以设置静态const int ERROR_VAL = max float。然后执行if(result == ERROR_VAL)...
答案 4 :(得分:2)
我认为返回NAN
是一个选项,它会显示NAN
和isnan
的工作方式:
#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返回一个。