繁体   English   中英

C 双重比较未按预期工作:-0 不等于 0

[英]C double comparison not working as intended: -0 not equal to 0

我有一个程序,我在控制台中绘制了一个 function,我正在迭代一个浮点数y的值。
但是,当这个值等于零时,我想绘制轴。 当我尝试在if语句中将此值与零进行比较时,问题就出现了。

我的代码(为简单起见减少了):

double y;
double stepy = (double) RANGE / YUNITSIZE

for (y = -RANGE; y <= ((double) RANGE + stepy); y += stepy) {
    printf("%f %f %d", y, (double) 0, y == (double) 0); // added for debugging
    if ((double) y == (double) 0) { // not executing
        for (double i = 0; i <= DOMAIN * 2; i += stepy) {
            putchar('-');
        }
    }
    putchar('\n');
}

Output:

-1.000000 0.000000 0
-0.800000 0.000000 0
-0.600000 0.000000 0
-0.400000 0.000000 0
-0.200000 0.000000 0
-0.000000 0.000000 0
0.200000 0.000000 0
0.400000 0.000000 0
0.600000 0.000000 0
0.800000 0.000000 0
1.000000 0.000000 0
1.200000 0.000000 0

您可以看到,在这一行: -0.000000 0.000000 0中,它正在比较0-0并发现它们不相等。 我还尝试将y-0进行比较,除非我将其类型转换为 double 它转换回0

我看过这个对类似问题的描述,但答案说它们应该仍然相等,这在我的情况下是不正确的。

我想知道这里发生了什么,我该怎么做才能解决if条件?

提前致谢。

事实证明,这些零值实际上不是零 ( -0.0000000000000000555112 )。 感谢 Adrian Mole 在评论中找到这个。 我最终使用 Ouroborus 的方法进行比较(使用窄范围),尽管对于将来查看此内容的人来说,最好不要使用窄范围,而是在实际需要将这些值作为浮点数时将它们转换为浮点数并比较出于 Fe2O3 在评论中建议的原因,值作为整数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM