当前位置: 首页 > news >正文

python 不等于None 不等于空_python中输入0.1+0.2结果却不等于0.3?原来编程语言是这么算的……...

点击上方“Python全家桶”,“星标”或"置顶"

关键时刻,第一时间送达

9e0b2f24def56d3d4f519cefb2aee84c.png

来源 | 机器之心

作者 | Parul Malhotra

参与 | 高璇、张倩

打开你的 Python,输入「0.1+0.2=」,结果是多少?0.30000000000000004 对不对?为什么结果不是 0.3?本文作者给出了详细的解释。

从小我们就知道 0.1 + 0.2=0.3。但是,在光怪陆离的计算世界中,运算方式却大相径庭。

我最近开始用 JavaScript 进行编码,在阅读数据类型时,我注意到 0.1 + 0.2 不等于 0.3 的奇怪行为。我向 Stack Overflow 寻求帮助,在上面找到了一些有用的帖子。如下图所示:

6ccd2ad0f8f1933d5198e3cd9d49ecb9.png Stack Overflow 界面图像 经过大量的研究和数学运算后,我得出结论,这不是错误。 这是数学运算中的浮点运算。 让我们进一步了解内在机制。 问题描述: 为什么 0.1 + 0.2 = 0.30000000000000004? 如果你用 Java 或 C 语言编过程,那你一定知道用于存储值的不同数据类型。 我们在前面的讨论中将考虑两种数据类型: 整数型和浮点型。 整数型存储整数,而浮点型存储小数。 在这之前,我们先来了解一个小概念: 为了实现计算,数字是如何表示的? 极小数和极大数通常用科学计数法表示,即: 968d7c59e0f51a9a5acf1885adeba228.png 同样,如果一个用科学计数法书写的数字小数点前有一个非零的十进制数,则该数字是标准化写法。 例如,0.0005606 用科学计数法的标准化写法为: 55a7ddf801c4fd0eb8e76a2c3ee5803b.png Significant 是指不包含零的有效数字,base 表示所使用的进制——此处为十进制(10)。 Exponent(指数)表示小数点需要向左或向右移动的步数。 现在,有两种显示浮点数的方法: 单精度和双精度。 在进行浮点运算时,单精度使用 32 位,而双精度使用 64 位。 与许多其他编程语言不同,JavaScript 并未定义不同类型的数字数据类型,而是始终遵循国际 IEEE 754 标准,将数字存储为双精度浮点数。 这种格式以 64 位存储数字,其中数字(分数)存储在位 0 到 51 中,指数存储在位 52 到 62 中,符号存储在位 63 中。 c2a6740538d34c3b212066c88420caa4.png IEEE754 双精度标准 我们按 IEEE754 标准用 64 位表示 0.1。 第一步是将十进制的 0.1 转换为二进制的 0.1。 首先将 0.1 乘以 2,然后将小数点前的数字分离出来,得到其相应的二进制数。 4de3fc32a31c7331de744e5b71a05081.png 重复此操作至 64 位。 然后把它们按升序排列,获取尾数,再根据双精度标准,我们将把其四舍五入到 52 位。 5a0e1027bd22376a3d20618ad222455c.png 尾数 用科学计数法表示二进制 0.1 并只保留前 52 位: c9e1ba6fa9dcfb6302cd02c48edf4189.png 尾数部分处理好后。 现在我们用下面的方式处理指数: fd4d078efe99dd35551d10440302686d.png 这里,11 代表我们要使用的 64 位表示的指数位数,-4 代表科学计数中的指数。 所以最终数字 0.1 的表示形式是: 62a6bd8f292d36fa4c9147db7c6dfc60.png 同理,0.2 表示为: e4973d9533f08f1a1c31ae99fca5755a.png 将两个数相加,得到: 844ec6de43304dbe1abe79b48ee75140.png 转换为浮点数,它变成: 0ec98b0de65764391ecce088d40a4e4d.png 这就是 0.1 + 0.2 = 0.30000000000000004 的原因。 原文链接: https://medium.com/better-programming/why-is-0-1-0-2-not-equal-to-0-3-in-most-programming-languages-99432310d476 往期 精彩回顾
  • 哪种Python IDE最适合你?这里有一份优缺点列表

  • Python 3.8.0 发布!

  • 用 Python 爬取网易严选妹子内衣信息,探究妹纸们的偏好

  • 从未这样玩过!第一次使用 Python 分析 14 亿条数据

  • 爬 Boss 直聘,分析 Python 工作现状

  • 动画:如何给面试官写一个满意的冒泡排序

关注公众号,回复关键

字领取对应资源

2c0ec65173b45c2553b22eba6acb63ac.png

请把我分享给你身边更多的人

喜欢的话给小编一个在看

3134bda9295556ed79ff8d3b982c0e02.gif

相关文章:

  • ihtml2document能不能根据id获取dom_javascript的DOM对象
  • 《高级分形艺术——核心算法、软件实现及创作技巧》
  • c语言fread函数的用法_Sparklyr 1.2支持foreach函数了
  • 一段对话,解决一个Exchange问题
  • ucosiii源码分析笔记 pdf下载_方舟编译器学习笔记14 DriverRunner源码分析
  • wxWidgets在windows VC++下的安装
  • python serial_浅谈python中的多线程和多进程
  • StatCVS 对使用CVS的项目进行深入统计的开源工具
  • 2020无人用的邮箱和密码大全_2020年之微波炉怎么用 微波炉使用注意事项大全
  • 用C原生API写Symbian日志文件
  • go make function_Go中复制文件的3种技巧
  • 猪猪宝贝
  • 简述python文件操作_Python文件操作的几个要点与示例
  • 读书小结
  • tomcat线程被打满怎么排查_Tomcat面试题(2020最新版)
  • canvas 绘制双线技巧
  • Flex布局到底解决了什么问题
  • golang 发送GET和POST示例
  • JS+CSS实现数字滚动
  • SegmentFault 社区上线小程序开发频道,助力小程序开发者生态
  • vue 配置sass、scss全局变量
  • windows下mongoDB的环境配置
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 安装python包到指定虚拟环境
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 手写双向链表LinkedList的几个常用功能
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 延迟脚本的方式
  • 移动端解决方案学习记录
  • 阿里云API、SDK和CLI应用实践方案
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • ![CDATA[ ]] 是什么东东
  • #pragma multi_compile #pragma shader_feature
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (11)MATLAB PCA+SVM 人脸识别
  • (20050108)又读《平凡的世界》
  • (3)nginx 配置(nginx.conf)
  • (a /b)*c的值
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (TOJ2804)Even? Odd?
  • (搬运以学习)flask 上下文的实现
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (一)SpringBoot3---尚硅谷总结
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (原創) 如何將struct塞進vector? (C/C++) (STL)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • .java 9 找不到符号_java找不到符号
  • .NET Core/Framework 创建委托以大幅度提高反射调用的性能
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • @ModelAttribute注解使用
  • @modelattribute注解用postman测试怎么传参_接口测试之问题挖掘
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured