jumper1573
2018-09-02 01:15
采纳率: 50%
浏览 576

一个简单计算,输出有点不明白

为什么输入90时,输出的这么怪异
图片说明

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • blownewbee 2018-09-02 03:18
    已采纳

    并非只有输入90是这样,不信你一个一个去试。或者写一个循环去试。你测试的数量太少。

    浮点数存在两个误差,一个叫做尾数误差,浮点数用一定长度的二进制数表示尾数,而不是精确值,存在误差,在进行四则运算的时候,这个误差可能放大。
    用10进制举例:比如说我们用4位小数表示一个数字:0.1234,我们做如下运算 0.1234/10*10,因为尾数只有4位,所以0.1234/10=0.0123(而不是0.01234)
    再*10结果就是0.123,那么就出现误差了。

    另一个是进制转换误差。浮点数在计算机内是二进制表示的。像你程序中的0.1 0.015 0.6,都会变成二进制的无限循环小数。比如0.1,它就是
    0.000110011001100110011...(0011循环),之前说了,浮点数只能用固定的尾数表示,那么要么我们必须舍去超过长度的尾数(这会让计算结果偏小),要么必须四舍五入进位(这又会让结果偏大)。

    因为以上原因,所以结果出现略微偏大、偏小。

    但是为什么不是总是偏大偏小呢?这要看你最终结果的误差偏差是多少,如果误差小,那么在输出结果的时候无法体现出来,所以只有一部分的结果会出现误差。

    点赞 打赏 评论
  • Bug开发攻城狮 2018-09-03 02:29

    计算机存储是二进制,无法表述一些十进制,比如0.3
    遇到这种情况,可以使用Decimal模块

    点赞 打赏 评论

相关推荐 更多相似问题