一、请先看以下的一段代码:
int main()
{
float a=1.1;//①warning : truncation from 'const double' to 'float'
float b=1.2;//②warning : truncation from 'const double' to 'float'
float c=2.3;
b=a+b;
cout<<sizeof(float)<<endl;//③
cout<<"c="<<c<<" "<<"b="<<b<<endl;
if(c==b)//④
cout<<"b与c相等."<<endl;
else
cout<<"b与c不相等."<<endl;
return 0;
}
解释:1) 在①处我们可以看到一个错误提示"将data区的double型数据转成float将切断double的长度"
2) 在②处是与①同样的效果.
3) 我们在④处看到了一个并不愿意看到的结果,输出"b与c不相等.".
二、理解代码简单工作原理
我们以16位系统为一个对照,
浮点型精度问题解析:(1.1+1.2)不等于2.3

本文通过一段代码示例,探讨了浮点型数据在计算时可能出现的精度问题。由于浮点数在内存中以二进制表示,可能导致循环部分被截断,造成看似相等的数值实际上不相等。通过改变数据类型或赋值方式可以避免这种警告和精度损失。
最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



