我想测试浮点值是否等于0.00或0.0,我想知道如何正确测试我的变量,所以请纠正我,如果我错了:
int main()
{
float x1 = -105.00;
float x2 = 7.00;
float x3 = 2.00;
if((x1 == 0.0f || x1 == 0.0))
{
if((x2 == 0.0f || x2 == 0.0))
{
if((x3 == 0.0f || x3 == 0.0))
{
printf("full nullrn");
}
}
}
}
所以我想知道在c中测试float是否是最好的方法。
测试float
x
是否为零,使用x == 0.f
。当且仅当x
的值为零时,它的值为1。(由于C的各种自动转换,x == 0.
和x == 0
将具有相同的效果。)
如果x
是一个从以前的计算中得出的浮点数,可能有舍入误差,那么x
可能是非零的,即使"理想"结果1是零,反之亦然。在这种情况下,是否可以使用x
做出决定关于真实结果取决于环境。例如,如果x
离零的距离超出了舍入误差可能解释的范围,那么理想的结果也不可能是零。但是,如果x
接近于零,则可能无法从x
确定理想结果是否为零。
脚注
1我所说的"理想"结果是指使用没有舍入误差的实数算法而不是浮点算法执行相同计算的结果。
对于这个特定的例子,即比较是否所有浮点数都为零,您所需要的只是
int main()
{
float x1 = -105.00;
float x2 = 7.00;
float x3 = 2.00;
if (x1 == 0 && x2 == 0 && x3 == 0)
{
printf("full nullrn");
}
}
没有魔法,没有奇怪的事情发生,只是简单的比较。
我认为比较浮点数不是一个好主意。你可以检查这个值是否真的非常接近零:https://floating-point-gui.de/errors/comparison/