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)
那么为什么当我们改变一个数字时这个输出会改变?
文字0.9和0.8类型double.由于两个值都无法准确表示,因此它们实际上是0.9000000000000000222...和0.8000000000000000444....
当存储在float(单精度)变量中时,a它们将被转换为单个并变得更加不准确:0.89999997...和0.8000000119....
为了与字面值进行比较,double它们被转换回来double保留更不准确的值.
正如你可以从上面的数字看,比较得出了不同的结果0.9和0.8.
所有这一切都假设您的平台具有IEEE754浮点数,这很可能就是这种情况.
您可以在www.binaryconvert.com上查看数字的单/双表示.