目录

1.浮点数误差

2.解决方法


1.浮点数误差

浮点数一个普遍的问题就是在计算机的世界中,浮点数并不能准确地表示十进制。并且,即便是最简单的数学运算,也会带来不可控制的后果。因为,在计算机的世界中只认识0与1。

# 浮点数
print("0.1 + 0.1 = ", 0.1 + 0.1)
print("0.1 - 0.1 = ", 0.1 - 0.1)
print("0.1 * 0.1 = ", 0.1 * 0.1)  #计算机无法精确存储0.01,存储了它的近似值。
print("0.1 / 0.1 = ", 0.1 / 0.1)
print("0.3 == 3 * 0.1\t", 0.3 == 3 * 0.1)a = 0.2
b = 0.1
print("a + b = ", a + b)  #计算机无法精确存储0.3,存储了它的近似值。#对大多数实数,计算机都无法精确存储。这造成误差。## #在用计算机解决实际问题时,要考虑上述误差的积累。

运行程序,结果如下

0.1 + 0.1 =  0.2
0.1 - 0.1 =  0.0
0.1 * 0.1 =  0.010000000000000002
0.1 / 0.1 =  1.0
0.3 == 3 * 0.1     False
a + b =  0.30000000000000004

可以看出第3、5、6行的异常之处,就来自于计算机的cpu与浮点数的表示方式,我们自己在代码层面是没法控制的。在有些需要精确表示浮点数的场合,例如财务结算,这些误差就不可接受。

2.解决方法

python中的decimal模块可以解决上面的烦恼
decimal模块中,可以通过整数,字符串或原则构建decimal.Decimal对象。如果是浮点数,特别注意因为浮点数本身存在误差,需要先将浮点数转化为字符串

导入模块decimal

# 浮点数
from decimal import Decimal
print("0.1 + 0.1 = ", 0.1 + 0.1)
print("0.1 - 0.1 = ", 0.1 - 0.1)
print("0.1 * 0.1 = ", Decimal('0.1') * Decimal('0.1'))  #计算机无法精确存储0.01,存储了它的近似值。
print("0.1 / 0.1 = ", 0.1 / 0.1)
print("0.3 == 3 * 0.1\t", 0.3 == 3 * 0.1)a = 0.2
b = 0.1
print("a + b = ", Decimal(str(a)) + Decimal(str(b)))  #计算机无法精确存储0.3,存储了它的近似值。#对大多数实数,计算机都无法精确存储。这造成误差。## #在用计算机解决实际问题时,要考虑上述误差的积累。

运行结果如下

0.1 + 0.1 =  0.2
0.1 - 0.1 =  0.0
0.1 * 0.1 =  0.01
0.1 / 0.1 =  1.0
0.3 == 3 * 0.1     False
a + b =  0.3

当然精度提升的同时,肯定带来的是性能的损失。在对数据要求特别精确的场合(例如财务结算),这些性能的损失是值得的。但是如果是大规模的科学计算,就需要考虑运行效率了。毕竟原生的float比Decimal对象肯定是要快很多的。

Python浮点数误差与解决方法相关推荐

  1. Python线程安全问题及解决方法

    Python线程安全问题及解决方法 Python多线程是通过threading模块来实现的. 参考: https://mp.csdn.net/postedit/91069618 一.多线程共享全局变量 ...

  2. 通过pip下载python包缓慢的解决方法

    通过pip下载python包缓慢的解决方法 参考文章: (1)通过pip下载python包缓慢的解决方法 (2)https://www.cnblogs.com/ambitious-to-49/p/11 ...

  3. VScode Python no module的解决方法

    VScode Python no module的解决方法 参考文章: (1)VScode Python no module的解决方法 (2)https://www.cnblogs.com/andy-0 ...

  4. python爬虫中文乱码解决方法

    python爬虫中文乱码解决方法 参考文章: (1)python爬虫中文乱码解决方法 (2)https://www.cnblogs.com/surecheun/p/9694052.html 备忘一下.

  5. python爬虫 403 Forbidden 解决方法

    python爬虫 403 Forbidden 解决方法 参考文章: (1)python爬虫 403 Forbidden 解决方法 (2)https://www.cnblogs.com/tian-sun ...

  6. pycharm未识别python工具库的解决方法

    pycharm未识别python工具库的解决方法 本人遇到了已经安装了python工具库,但pycharm没有识别到的情况.后来发现,原来是我设置的运行环境没有选对.我的工具库安装在conda创建的新 ...

  7. php 浮点数比较 出错,PHP计算浮点数出错的解决方法

    PHP计算浮点数出错的解决方法 发布时间:2020-06-26 14:37:49 来源:亿速云 阅读:111 作者:Leah 这篇文章将为大家详细讲解有关PHP计算浮点数出错的解决方法,文章内容质量较 ...

  8. mac如何导入python第三方库_Mac系统中python idle导入第三方模块成功,ecplise导入python第三方模块失败解决方法...

    遇到一个比较纠结了4个月的问题,一直没有在意,今天实在忍受不了,尝试各种解决办法,终于把这个烦人的问题完美解决,不敢独享,写出来和各位大神共享. 问题:在mac OSx操作系统下,安装了python第 ...

  9. vscodepython技巧_VScode Python no module的解决方法

    遇见VScode 今天逛知乎的时候发现了这个编译器,发现不仅支持各种语言的编写,甚至还支持markdown的编写. 分分钟搭建好环境,把原来的python项目移植了过去,准备大干一场. 刚开始都没用问 ...

最新文章

  1. 视觉系统的演化之旅——视觉器官、光感受器及视觉分子
  2. Linux下安装GCC5.3.0
  3. 【模型部署】风控模型部署相关知识
  4. Python 3 集合基础和概念!
  5. 关于职场和职业发展的一些心得
  6. php基础教程文档,PHP5基础教程
  7. sar图像去噪matlab,一种基于总曲率的SAR图像变分去噪方法与流程
  8. springcloud注册demo(使⽤第⼀代Spring Cloud核⼼组件完成项⽬构建、编码及测试)
  9. ArcGIS 的 http://localhost:8399/arcgis/rest/services 无法打开,显示404 的解决办法
  10. python writerow 返回值_python – .writerow()csv返回一个数字而不是写行
  11. iptables端口转发
  12. MATLAB数字水印处理技术的实现
  13. win7 flash 提示加载失败
  14. 【项目管理】团队绩效域管理
  15. 【IT职场】如何成为T型甚至A型人物。
  16. c++ 输入数字 输出汉语读法(拼音)代码
  17. 如何平衡老师任务和自学之间的关系
  18. 情侣生日纪念日倒数提醒的便签
  19. wps表格宏被禁用如何解禁_office 2007 禁止宏提示“宏已被禁用”的解决办法
  20. 【实用工具】Visio画时序图组件

热门文章

  1. 1.实验吧_ropbaby(西普杯CTF)_onegadget
  2. 多边形游戏 动态规划C语言实现
  3. python聚类分析步骤_【复习】聚类分析的方法分类
  4. 大一计算机实践作业牡丹花,综合实践-美丽的牡丹花教案.pdf
  5. Spring Boot 如何正确读取配置文件属性
  6. css的calc计算高度
  7. python的scatter函数_python scatter函数用法实例详解
  8. 亲身试验:python不是内部或外部命令,也不是可运行的程序或批处理文件
  9. 谁不知道华为云CDN加速服务,我都会心疼好久
  10. aria2c 编译安装 Linux,Linux安装 Aria2