python 浮点数精确运算解决方案
项目github地址:bitcarmanlee easy-algorithm-interview-and-practice
欢迎大家star,留言,一起学习进步
浮点数误差
浮点数一个普遍的问题就是在计算机的世界中,浮点数并不能准确地表示十进制。并且,即便是最简单的数学运算,也会带来不可控制的后果。因为,在计算机的世界中只认识0与1。
>>> x = 4.20
>>> y = 2.10
>>> x + y
6.3000000000000007
>>> (x+y) == 6.3
False
>>> x = 1.2
>>> y = 2.3
>>> x + y
3.5
>>> (x + y) == 3.5
True
上述种种问题,就来自于计算机的cpu与浮点数的表示方式,我们自己在代码层面是没法控制的。在有些需要精确表示浮点数的场合,例如财务结算,这些误差就不可接受。
decimal模块进行十进制数学计算
python中的decimal模块可以解决上面的烦恼
decimal模块中,可以通过整数,字符串或原则构建decimal.Decimal对象。如果是浮点数,特别注意因为浮点数本身存在误差,需要先将浮点数转化为字符串。
>>> from decimal import Decimal
>>> from decimal import getcontext
>>> Decimal('4.20') + Decimal('2.10')
Decimal('6.30')
>>> from decimal import Decimal
>>> from decimal import getcontext
>>> x = 4.20
>>> y = 2.10
>>> z = Decimal(str(x)) + Decimal(str(y))
>>> z
Decimal('6.3')
>>> getcontext().prec = 4 #设置精度
>>> Decimal('1.00') /Decimal('3.0')
Decimal('0.3333')
当然精度提升的同时,肯定带来的是性能的损失。在对数据要求特别精确的场合(例如财务结算),这些性能的损失是值得的。但是如果是大规模的科学计算,就需要考虑运行效率了。毕竟原生的float比Decimal对象肯定是要快很多的。
python 浮点数精确运算解决方案相关推荐
- 浮点数相加php,利用php怎么实现一个浮点数精确运算功能
利用php怎么实现一个浮点数精确运算功能 发布时间:2020-12-15 16:06:03 来源:亿速云 阅读:94 作者:Leah 今天就跟大家聊聊有关利用php怎么实现一个浮点数精确运算功能,可能 ...
- python浮点数怎么运算_Python如何执行精确的浮点数运算
问题 你需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 解决方案 浮点数的一个普遍问题是它们并不能精确的表示十进制数. 并且,即使是最简单的数学运算也会产生小的误差,比如: >& ...
- python浮点数怎么运算_Python 浮点数运算
浮点数用来存储计算机中的小数,与现实世界中的十进制小数不同的是,浮点数通过二进制的形式来表示一个小数.在深入了解浮点数的实现之前,先来看几个 Python 浮点数计算有意思的例子: 0.1 == 0. ...
- c语言浮点数如何精确计算,浮点数精确运算的分析和解决办法
1.01 + 2.01 = 3.02 2.01 * 2.01 = 4 0401 不知你注意没有,这个很寻常的等式,你如果将它放在C++中,Java中,Basic中,它 居然是不成立的.计算机在开玩 ...
- python浮点数怎么运算_为什么说浮点数缺乏精确性? python中浮点数运算问题
我想从两个角度回答: 一:十进制小数转化成二进制小数的方法.(简单举例,看完就可以自己用笔进行运算.) 二:如何解决python中的浮点数运算问题. 关于一: 拿1.375这个十进制数举例,pytho ...
- python浮点数怎么运算_python中实现精确的浮点数运算详解
为什么说浮点数缺乏精确性? 在开始本文之前,让我们先来谈谈浮点数为什么缺乏精确性的问题,其实这不是Python的问题,而是实数的无限精度跟计算机的有限内存之间的矛盾. 举个例子,假如说我只能使用整数( ...
- python浮点数精确计算 ,小数点精确计算问题
1.浮点数计算出错 a=1.1 b=2.2 a+b 输出: 出现上面的情况,主要还是因浮点数在计算机中实际是以二进制保存的,有些数不精确. 比如说: 0.1是十进制,转化为二进制后它是个无限循环的数: ...
- php如何计算精确,简单谈谈php浮点数精确运算
bc是Binary Calculator的缩写.bc*函数的参数都是操作数加上一个可选的 [int scale],比如string bcadd(string $left_operand, string ...
- Python 浮点数运算
2019独角兽企业重金招聘Python工程师标准>>> 浮点数用来存储计算机中的小数,与现实世界中的十进制小数不同的是,浮点数通过二进制的形式来表示一个小数.在深入了解浮点数的实现之 ...
- python浮点数运算问题_python基础教程之. 浮点数运算:问题和局限
14. 浮点数运算:问题和局限¶ 浮点数在计算机硬件中表示为以 2 为底(二进制)的小数.例如,十进制小数 0.125 是1/10 + 2/100 + 5/1000 的值,同样二进制小数 0.001 ...
最新文章
- 登录界面的滑动_电脑同时登录两个微信,原来这么简单?3步搞定!
- gamma分布 pytorch_Probability distributions - torch.distributions
- python怎么安装requests库-python怎么安装requests库
- 【Python】Cookie 和 Session
- iospython开发工具_使用Python开发iOS程序
- 【Notes8】Linux开发环境,Linux命令,vi命令,/正则,Hash,iNode,文件查找与读取,Linux开机自启动
- 为何程序员上班时间总戴个耳机,看完恍然大悟...
- Cmd Markdown 编辑阅读器
- Nat Biotechnol | 大神李恒团队开发不依赖于亲本的单倍型基因组组装工具hifiasm
- 设置jstree只展示到2级_你做的私域流量属于什么级别?80%的商家都还只在第2级...
- 杭电2897邂逅明下邂逅明下
- 推荐|风控教父新书来袭(含红宝书三本风控秘籍)
- 云服务器架设网站教程_阿里云服务器购买流程详细教程及注意事项
- 数据库修改服务器ip地址吗,服务器数据库与改ip地址吗
- Struts2之访问ServletAPI
- excel 查一列字符是否在另一列中出现
- Preview on Web Server 插件
- 最快倾斜摄影三维建模-台式、便携、多机集群配置推荐
- 共享单车调度_原来共享单车是这样调度的
- 简单总结里的结构化,成长型思维