如何测试c中的浮点值?

How to test float value in c?

我想测试浮点值是否等于 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 null\r\n");
            }
        }
    }
}

所以我想知道这是否是在 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 null\r\n");
    }
}

没有魔法,没有奇怪的事情发生,只是简单的比较。

我认为比较浮点数不是一个好主意。您可以检查该值是否真的非常接近零: https://floating-point-gui.de/errors/comparison/