zoukankan      html  css  js  c++  java
  • [python基础] 浮点数乘法的误差问题

    >>> 2.2*3
    6.6000000000000005

    详细的原理在IEEE 754浮点数标准

    小数以二进制形式表示时的有穷性导致的,

    这不是Python的问题,而是实数的无限精度跟计算机的有限内存之间的矛盾

    计算机的内存、cpu寄存器等等这些硬件单元都是有限的只能表示有限位数的二进制位,因此存储的二进制小数就会和实际转换而成的二进制数有一定的误差。(你可以试着将0.3转化为二进制表示,也将出现一个循环小数。)

    实际上,大多数情况下,小数在计算机中是以一种类似科学计数法的形式表示的,具体的可以参考一下其他的资料。但即便如此,仍然存在误差。

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

    关于控制精度的方法可以使用round和decimal模块

    使用decimal模块计算时:

    >>> from decimal import *
    >>> Decimal('2.2')*Decimal('3')
    Decimal('6.6')

    相关链接

    https://www.zhihu.com/question/25457573

  • 相关阅读:
    ZOJ1542 POJ1861
    Codeforces Round #194 (Div. 2) 部分题解
    SRM585 div2
    hdu 4627 The Unsolvable Problem
    hdu 4622 Reincarnation
    hdu 4617 Weapon
    hdu 4609 3-idiots
    hdu 4616 Game
    hdu 4611 Balls Rearrangement
    hdu 4618 Palindrome Sub-Array
  • 原文地址:https://www.cnblogs.com/Liubit/p/7634632.html
Copyright © 2011-2022 走看看