浮动比较给出了不同的结果

Ami*_*dav 3 c c++ floating-point

看看以下两个代码,并告诉我答案变化很大的原因.

#include<stdio.h>
int main() {
    float a = 0.9;
    if(a<0.9)
        printf("hi"); // This will be the answer
    else
        printf("bye");
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果我们将0.9更改为0.8,则打印出其他语句:

#include<stdio.h>
int main() {
    float a = 0.8;
    if(a<0.8)
        printf("hi");
    else
        printf("bye");//this will be the answer
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

那么为什么当我们改变一个数字时这个输出会改变?

Con*_*ius 10

此错误是由浮点精度引起的,因为您要将float类型与double值进行比较.尝试将其与浮点文字进行比较:if(a<0.8f)

我建议你阅读相关的维基百科文章,它详细解释了你的错误发生的原因.


und*_*gor 5

文字0.90.8类型double.由于两个值都无法准确表示,因此它们实际上是0.9000000000000000222...0.8000000000000000444....

当存储在float(单精度)变量中时,a它们将被转换为单个并变得更加不准确:0.89999997...0.8000000119....

为了与字面值进行比较,double它们被转换回来double保留更不准确的值.

正如你可以从上面的数字看,比较得出了不同的结果0.90.8.

所有这一切都假设您的平台具有IEEE754浮点数,这很可能就是这种情况.

您可以在www.binaryconvert.com上查看数字的单/双表示.