码迷,mamicode.com
首页 > 其他好文 > 详细

计算涉及到的精度问题

时间:2018-03-08 13:58:53      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:log   for   误差   简单   pos   +=   src   简单的   区别   

关于精度丢失问题

昨天晚上做到刘汝佳粉书的一道题,源代码如下:

#include <stdio.h>
int main(void)
{
    double i;
    for(i = 0; i != 10; i += 0.1)
        printf("%.1f\n", i);
    return 0;
}

一开始我以为这就是简单的循环,到10就停了,然后却发现循环没有终结,陷入了死循环。
后来仔细思考了一下。发现了其中的缘由:

  • 计算机做加减法的时候用的是二进制作计算。
  • 十进制在转化成二进制的时候,整数部分没有误差,而小数部分却有,因为转化小数部分的时候用的是乘基取整法,有时候无法刚好乘完,必然会出现误差,这样的话每次加上去的就不是0.1(针对此题),而是在0.1上下波动(当然误差很小),这样就完美错过10这个数字了,从而陷入死循环。

    另外附带一下单精度和双精度的区别。

  • 单精度(float)
    技术分享图片

  • 双精度(double)
    技术分享图片

计算涉及到的精度问题

标签:log   for   误差   简单   pos   +=   src   简单的   区别   

原文地址:https://www.cnblogs.com/zhlabcd/p/8527706.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!