问题

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

解决方案

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

a = 2.1

b = 4.2

c = a + b

print(c)

print(c == 6.3)

6.300000000000001

False

这些错误是由底层CPU和IEEE754标准通过自己的浮点单位去执行算术时的特征,由于Python的浮点数据类型使用底层表示数据存储,因此你没办法避免这样的误差。

如果需要更加精确,并能容忍一定的性能损耗,可以使用 decimal 模块:

from decimal import Decimal

a = Decimal('2.1')

b = Decimal('4.2')

c = a + b

print(c)

print(c == Decimal('6.3'))

6.3

True

Decimal 对象会像普通浮点数一样,支持所有的常用数学运算。 打印或者进行字符串格式化时,跟普通浮点数没有区别。

讨论

decimal 模块实现了IBM的“通用小数运算规范”。

Python新手会倾向于使用 decimal 模块来处理浮点数的精确运算。 然而,先理解你的应用程序目的是非常重要的。 如果你是在做科学计算或工程领域的计算、电脑绘图,或者是科学领域的大多数运算, 那么使用普通的浮点类型是比较普遍的做法。 其中一个原因是,在真实世界中很少会要求精确到普通浮点数能提供的17位精度。 因此,计算过程中的那么一点点的误差是被允许的。 第二点就是,原生的浮点数计算要快的多-有时候你在执行大量运算的时候速度也是非常重要的。

即便如此,却不能完全忽略误差。数学家花了大量时间去研究各类算法,有些处理误差会比其他方法更好。 也得注意下减法删除以及大数和小数的加分运算所带来的影响。比如:

nums = [1.23e+18, 1, -1.23e+18]

print(sum(nums))

0.0

上面的错误可以利用 math.fsum() 所提供的更精确计算能力来解决:

import math

nums = [1.23e+18, 1, -1.23e+18]

print(math.fsum(nums))

1.0

总的来说, decimal 模块主要用在涉及到金融的领域。 在这类程序中,哪怕是一点小小的误差在计算过程中蔓延都是不允许的。

当Python和数据库打交道的时候,也通常会遇到 Decimal 对象,通常也是在处理金融数据的时候。

python3的float数精度_Python3 - 执行精确的浮点数运算相关推荐

  1. 《Python Cookbook 3rd》笔记(3.2):执行精确的浮点数运算

    执行精确的浮点数运算 问题 你需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 解法 浮点数的一个普遍问题是它们并不能精确的表示十进制数.并且,即使是最简单的数学运算也会产生小的误差,比 ...

  2. python浮点数怎么运算_Python如何执行精确的浮点数运算

    问题 你需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 解决方案 浮点数的一个普遍问题是它们并不能精确的表示十进制数. 并且,即使是最简单的数学运算也会产生小的误差,比如: >& ...

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

    需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 浮点数的一个普遍问题是它们并不能精确的表示十进制数.并且,即使是最简单的 数学运算也会产生小的误差,比如: >>> a ...

  4. python精确运算_Python:执行精确的浮点数运算

    需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 浮点数的一个普遍问题是它们并不能精确的表示十进制数.并且,即使是最简单的 数学运算也会产生小的误差,比如: >>> a ...

  5. Python执行精确的浮点数运算

    有时候:代码上数字计算可能会有如同下面的误差 原因: 这些错误是由底层CPU和IEEE 754标准通过自己的浮点单位去执行算术时的特征. 由于Python的浮点数据类型使用底层表示存储数据,因此你没办 ...

  6. python3的float数精度_Python numpy 浮点数精度问题

    Python numpy 浮点数精度问题 在复现FP(fictitious play, Iterative solution of games by fictitious play-page393)算 ...

  7. python3的float数精度_python浮点数精度问题

    python浮点数的计算,结果并不像我们想象的那样,比如: >>> 0.25+0.25-0.4 0.09999999999999998 >>> 0.6+0.3-0. ...

  8. Java中实现精确的浮点数运算

    我们知道,在 Java 中直接对浮点数进行运算会出现精度丢失的现象,那么如何解决这一问题呢? 我们需要借助 BigDecimal 来帮助我们进行浮点数的运算!!! 一.精确的浮点数运算示例代码 //示 ...

  9. python浮点数怎么运算_python中实现精确的浮点数运算详解

    为什么说浮点数缺乏精确性? 在开始本文之前,让我们先来谈谈浮点数为什么缺乏精确性的问题,其实这不是Python的问题,而是实数的无限精度跟计算机的有限内存之间的矛盾. 举个例子,假如说我只能使用整数( ...

最新文章

  1. 马斯克发推警告:高级AI将操纵社交媒体,或引发第三次世界大战
  2. optee的启动过程
  3. Service Mesh 在超大规模场景下的落地挑战
  4. 白话(whitening)
  5. eclipse编辑器未包含main类型_Shopify模版编辑器问题排查及解决办法汇总
  6. 手机如何看python文件大小_如何安全地检查上传文件的大小?(How to check size of uploaded file safely in bottlepy?)...
  7. matlab软件编程求解方程实验报告,数学实验“线性方程组高斯消去法”实验报告内含matlab程序.doc...
  8. 2018, CHI CHI2016汇总all CHI
  9. 国内6大网络信息采集和页面数据抓取工具
  10. 伯努利试验及n重伯努利试验
  11. Dapr专题之06Actors
  12. PCRF 关于地址对齐,大小端
  13. chrome插件开发总结
  14. HTML给表单元素赋值,JQuery表单元素取值赋值方法总结
  15. HVF5220-4D-03,HVF3230-3G-02先导型二位五通电磁阀
  16. 碳达峰、碳中和计算原理
  17. jconsole是否可以在生产环境使用_使用rmi jmx JCONSOLE远程监控JVM
  18. 实在智能“数字员工”发布,谈AI+RPA发展趋势,发布SaaS平台,并开源可供开发者下载打造小型机器人
  19. Android智能手机网络防火墙开发的经验心得
  20. 点进来,与白洞一起体验一场沉浸式智慧轨道之旅

热门文章

  1. Colaboratory下载Kaggle数据
  2. Linux 中yumdownloader 和 repotrack:下载yum软件离线环境的rpm依赖包
  3. Deepin 20.2.3系统标题栏及其按钮美化
  4. Ubuntu18.04安装Scala
  5. 【收藏】Sentinel 高可用流量管理框架、服务熔断降级等
  6. scala Akka并发编程介绍
  7. Scala流程控制语句值顺序控制
  8. spring boot之eureka-client的pom
  9. zookeeper宏观认识
  10. 权限控制的两种主要方式详述