• Python:执行精确的浮点数运算


    需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现.

    浮点数的一个普遍问题是它们并不能精确的表示十进制数。并且,即使是最简单的
    数学运算也会产生小的误差,比如:

    >>> a = 4.2
    >>> b = 2.1
    >>> a + b
    6.300000000000001
    >>> (a + b) == 6.3
    False
    

    ”False“是由于底层CPU和IEEE标准通过自己的浮点单位去执行算术导致的。Python的浮点数据类型使用底层表示存储数据,所以无法无法避免这样的误差。

    如果想更加精确(代价是性能损耗),可以使用decimal模块

    >>> from decimal import Decimal
    >>> a = Decimal('4.2')
    >>> b = Decimal('2.1')
    >>> a + b
    Decimal('6.3')
    >>> print(a + b)
    6.3
    >>> (a + b) == Decimal('6.3')
    True
    

     上面真是乖乖的,用字符串表示数据。。。

    然而Decimal对象支持所有的常用数学运算。

    真实世界中很少会要求精确到普通浮点数能提供的17 位精度,执行大量运算的时候速度很重要。所以使用不要随便用decimal.

    总的来说, decimal 模块主要用在涉及到金融的领域。在这类程序中,哪怕是一点
    小小的误差在计算过程中蔓延都是不允许的。因此, decimal 模块为解决这类问题提
    供了方法。当Python 和数据库打交道的时候也通常会遇到Decimal 对象,并且,通
    常也是在处理金融数据的时候。

  • 相关阅读:
    【javascript 面试笔试】1、几道笔试题
    【菜鸟学习jquery源码】数据缓存与data()
    【javascript杂谈】你所不知道的replace函数
    001-编译hadoop-2.5.2总结
    静态工厂 + DbHelper
    用Socket来简单实现IIS服务器
    JS产生徐特尔图表
    JS中图片飞飞效果
    基础类型
    Linux-切换启动方式
  • 原文地址:https://www.cnblogs.com/baxianhua/p/9896134.html
Copyright © 2020-2023  润新知