美文网首页
大数吃小数问题

大数吃小数问题

作者: zhnidj | 来源:发表于2018-07-26 17:18 被阅读0次

大数吃小数在工程中是需要避免的,先来解释一下什么是大数吃小数,再提一下如何解决。

先了解一下单精度浮点数 float 双精度浮点数 double,本图来字知乎问题:单精度与双精度是什么意思,有什么区别?

单精度与双精度

2^23=8388608,一共7位,这意味着float类型最多能有7位有效数字,但是能绝对能保证的为6位,也即float的精度为6~7位。(平时讲有效数字是6~7位 ,指10进制。)我们用两个float相加,设有a=123456;b=2.189;a+b应该是123458.189但是由于float的精度只有小数点后6-7位,所以必然得不到123458.189,后面的89可能会截掉,8不一定,9是必然会截掉的。好的,才做一个加法就产生至少了0.009的误差,做1000个这样的加法,误差就是9了,这显然不是我们想要的。

 kahan求和算法可以避免这种情况,它有一个数用来记住那个被截断的小数,同样做下面的计算,设有a=123456;b=2.189;计算a+b。kahan求和算法是这样做的:sum=a+b(不准确); temp= (a+b)-a-b;temp等于多少呢,初看这不就是0吗?不是的,计算机此时算的可不是0,而是等于-0.009,就是被截断的那个小数。通过一个临时变量我们就记住了这个误差,当计算下一个加法的时候,可以把这个误差补上,并且更新误差到sum。

相关文章

  • 大数吃小数问题

    大数吃小数在工程中是需要避免的,先来解释一下什么是大数吃小数,再提一下如何解决。 先了解一下单精度浮点数 floa...

  • 清单20.8.28

    1 大数乘大数加上小数乘小数,大于大数乘小数加小数乘大数。这叫排序不等式。正是因为这个逻辑,效率和公平本质上是矛盾...

  • 公平、最优解、排序不等式

    最近看了排序不等式,大意就是:大数乘大数加上小数乘小数,大于大数乘小数加小数乘大数。这就叫排序不等式。比如x1

  • java(十一) 数字处理工具类(大数据)

    一、整数大数据 BigInteger类(加减乘除) 二、小数大数据 BigDecimal类(加减乘除) 三、取小数...

  • 非常棒

    为什么小数据比大数据重要?

  • 最大与最小

    突然间大脑里蹦出一个问题,这个世界上有最大数没?最大是无限的吗?反之,有最小数吗?零是最小数吗?显然不是。...

  • 传统统计分析在Python中的使用

    背景 大家都知道现在大数据非常火爆,在大数据还没有出现时,用的都是“小数据”,这些“小数据”在分析时大部分用的都是...

  • 2017-11-26别再学大数据了,先用好小数据

    1.为什么你应该先用好小数据 人人都在说大数据时代已经来临,在探索大数据价值时,我却认为:小数据更有力量。为什么?...

  • 警惕小数据思维

    昨天听了吴军老师的课,生活在小数据世界的里人的生活模式和小数据环境相适应,而生活在大数据世界的人就和大数据环境相适...

  • 吴军 思维方式决定商业模式

    我们生活在小数字世界,从小数字世界总结出发来的方法无法应用到更高量级的大数世界。 对于企业,提前把自己定义在大数世...

网友评论

      本文标题:大数吃小数问题

      本文链接:https://www.haomeiwen.com/subject/govbmftx.html