浅谈浮点型“(1.1+1.2)!=2.3”

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

一、请先看以下的一段代码:

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位系统为一个对照,float的数据类型所占的字节为4(在③处输出可以看到),为32位,我们先把十

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值