zoukankan      html  css  js  c++  java
  • python高精度浮点型计算的诡异错误

    >>> from decimal import Decimal
    >>> a=Decimal(100.1)
    >>> b=Decimal(100.1)
    >>> c=Decimal(200.2)
    >>>print(a+b==c)
    

    最后的结果确实False,实在让人无法理解。

    后来搜索了一番,找到了原因。

    计算机的内存、cpu寄存器等等这些硬件单元都是有限的,只能表示有限位数的二进制位,因此存储的二进制小数就会和实际转换而成的二进制数有一定的误差。(你可以试着将0.3转化为二进制表示,也将出现一个循环小数。)实际上,大多数情况下,小数在计算机中是以一种类似科学计数法的形式表示的,具体的可以参考一下其他的资料。但即便如此,仍然存在误差。

    所以在python中不建议直接将两个浮点数进行大小比较,或者做精确的计算,往往会得到意想不到的结果。

  • 相关阅读:
    随机ID添加
    学生ID查询
    node.js基础
    冒泡排序
    循环判断语句
    vue.js详细教程--优优优
    final注意事项
    HashMap Hashtable区别
    java中间件
    JSP错误页面
  • 原文地址:https://www.cnblogs.com/everfight/p/float.html
Copyright © 2011-2022 走看看