出乎意料的浮点数加法

无意之中使用python(2.6、2.7)计算了一串加法:

51.2 + 61.0 + 78.5 + 64.1 + 30.3 + 52.4 + 12.0 + 46.0 + 83.6

得到的结果却是:

479.0999999999999

大吃一惊!

然后换种语言计算,使用C语言:

    float sum = 51.2f + 61.0f + 78.5f + 64.1f + 30.3f + 52.4f + 12.0f + 46.0f + 83.6f;
    printf("sum = %f\n", sum);

输出结果:

sum = 479.099976

额,这个。。。

然后同样使用C语言,但使用双精度浮点数:

    double sum = 51.2 + 61.0 + 78.5 + 64.1 + 30.3 + 52.4 + 12.0 + 46.0 + 83.6;
    printf("sum = %f\n", sum);

输出结果:

sum = 479.100000

这回看上去正确了。

由于浮点数在机器表示中是离散值,大部分小数只能是它的近似值,因此浮点数的运算存在误差,这是不可避免的,在程序设计中不能忽略这个问题,特别是对计算精度有很高的要求的时候。

在使用高级语言编程时,还是尽量用双精度或者更高精度的浮点数,单精度还是尽量不要用了吧。如有必要还需使用专门的库。

另外,python的浮点运算有点坑。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值