python3的float数精度_Python3 - 执行精确的浮点数运算
问题
对浮点数执行精确的计算操作,并且不希望有任何小误差的出现。
解决方案
浮点数的一个普遍问题是它们并不能精确的表示十进制数。并且,即使是最简单的数学运算也会产生小的误差。
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 - 执行精确的浮点数运算相关推荐
- 《Python Cookbook 3rd》笔记(3.2):执行精确的浮点数运算
执行精确的浮点数运算 问题 你需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 解法 浮点数的一个普遍问题是它们并不能精确的表示十进制数.并且,即使是最简单的数学运算也会产生小的误差,比 ...
- python浮点数怎么运算_Python如何执行精确的浮点数运算
问题 你需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 解决方案 浮点数的一个普遍问题是它们并不能精确的表示十进制数. 并且,即使是最简单的数学运算也会产生小的误差,比如: >& ...
- Python:执行精确的浮点数运算
需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 浮点数的一个普遍问题是它们并不能精确的表示十进制数.并且,即使是最简单的 数学运算也会产生小的误差,比如: >>> a ...
- python精确运算_Python:执行精确的浮点数运算
需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 浮点数的一个普遍问题是它们并不能精确的表示十进制数.并且,即使是最简单的 数学运算也会产生小的误差,比如: >>> a ...
- Python执行精确的浮点数运算
有时候:代码上数字计算可能会有如同下面的误差 原因: 这些错误是由底层CPU和IEEE 754标准通过自己的浮点单位去执行算术时的特征. 由于Python的浮点数据类型使用底层表示存储数据,因此你没办 ...
- python3的float数精度_Python numpy 浮点数精度问题
Python numpy 浮点数精度问题 在复现FP(fictitious play, Iterative solution of games by fictitious play-page393)算 ...
- python3的float数精度_python浮点数精度问题
python浮点数的计算,结果并不像我们想象的那样,比如: >>> 0.25+0.25-0.4 0.09999999999999998 >>> 0.6+0.3-0. ...
- Java中实现精确的浮点数运算
我们知道,在 Java 中直接对浮点数进行运算会出现精度丢失的现象,那么如何解决这一问题呢? 我们需要借助 BigDecimal 来帮助我们进行浮点数的运算!!! 一.精确的浮点数运算示例代码 //示 ...
- python浮点数怎么运算_python中实现精确的浮点数运算详解
为什么说浮点数缺乏精确性? 在开始本文之前,让我们先来谈谈浮点数为什么缺乏精确性的问题,其实这不是Python的问题,而是实数的无限精度跟计算机的有限内存之间的矛盾. 举个例子,假如说我只能使用整数( ...
最新文章
- 马斯克发推警告:高级AI将操纵社交媒体,或引发第三次世界大战
- optee的启动过程
- Service Mesh 在超大规模场景下的落地挑战
- 白话(whitening)
- eclipse编辑器未包含main类型_Shopify模版编辑器问题排查及解决办法汇总
- 手机如何看python文件大小_如何安全地检查上传文件的大小?(How to check size of uploaded file safely in bottlepy?)...
- matlab软件编程求解方程实验报告,数学实验“线性方程组高斯消去法”实验报告内含matlab程序.doc...
- 2018, CHI CHI2016汇总all CHI
- 国内6大网络信息采集和页面数据抓取工具
- 伯努利试验及n重伯努利试验
- Dapr专题之06Actors
- PCRF 关于地址对齐,大小端
- chrome插件开发总结
- HTML给表单元素赋值,JQuery表单元素取值赋值方法总结
- HVF5220-4D-03,HVF3230-3G-02先导型二位五通电磁阀
- 碳达峰、碳中和计算原理
- jconsole是否可以在生产环境使用_使用rmi jmx JCONSOLE远程监控JVM
- 实在智能“数字员工”发布,谈AI+RPA发展趋势,发布SaaS平台,并开源可供开发者下载打造小型机器人
- Android智能手机网络防火墙开发的经验心得
- 点进来,与白洞一起体验一场沉浸式智慧轨道之旅