在Python语言中,浮点数是有精度的,通常有精度缺失,这是由于浮点数是使用2进制进行计算的,如下所示:

>>> print(0.3 - 0.2)
>>> print(0.3 - 0.2 == 0.1)0.09999999999999998
False

让我们考虑十进制的 1 / 3 是 0.3333333,十进制的 2 / 3 是 0.6666666,如果两者相加只会得到 0.9999999,它不等于 1。同样,0.3、0.2 也不能用二进制准确表示您使用了多少有效数字。 分母为 5 和 2 倍数的分数只能用十进制精确表示,同样分母为 2 倍数的分数只能用二进制精确表示。 浮点数使用 IEEE 标准 754 在内部存储,该标准仅在 15-17 位有效数字范围内是正确的。

我们可以使用内置的decimal (十进制) 模块来改变精度并获得准确的结果。 getcontext().prec 可用于设置每个十进制值的精度。 默认精度为 28 位。

为什么 0.1 + 0.2 = 0.30000000000000004?

在开始回答之前,让我们先了解一个小概念:出于计算目的,数字是如何表示的? 非常小的和非常大的数字通常以科学记数法存储,表示为:

当一个数字以科学计数法表示时,小数点前有一个非零十进制数据,该数字被标准化。例如,以科学记数法表示数字 0.0005606 :

该表示法有一个显著的特点是:前面的数字是不为0的个位数,基数是10,指数表示小数点向前(-4,负整数)或向后(正整数)移动的位数。

在计算机编程语言中,浮点数运算通常有两种表示数字的方法:单精度和双精度。 单精度使用 32 位,双精度使用 64 位进行浮点运算。与许多其他编程语言不同,JavaScript 没有定义不同类型的数字数据类型,并且始终按照国际 IEEE 754 标准将数字存储为双精度浮点数。IEEE 754标准格式以64位来存储浮点数,其中小数存储在第0-51位,值数存储在第52-62位,符号存储在第63位。

按照IEEE 754的标准,以64位来表示0.1,

第一步是将 (0.1) 基数 10 转换为其二进制等效值(基数 2)。
为此,我们将从 0.1 乘以 2 开始,并将小数点前的数字分开以获得二进制等价物。

在对 64 位重复此操作时,我们将按升序排列它们以获得我们的尾数,我们将根据双精度标准将其四舍五入为 52 位。

以科学形式表示并四舍五入到前 52 位将产生:

对于指数,我们需要使用以下公式来计算:

11表示用于指数的64位表示法的位数,-4表示科学计数法中的指数。

最终0.1按照IEEE 754的二进制表示是:

相似的,0.2按照IEEE 754的二进制表示是:

把这两个数字加和得到:

最后,0.1+0.2 的结果用二进制表示是:

这就是为啥0.1+0.2=0.30000000000000004的理由。

Python 学习:浮点数相关推荐

  1. python科学计数法转换_对比Python学习Go 基本数据结构

    公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...

  2. python学习之第三课时--基本数据类型及区别,变量

    python学习之第三课时--基本数据类型及区别,变量 基本数据类型及区别 1. 数字类型(int) 数字型--变量值直接是数字,没有双引号""   整数 2. 浮点数(float ...

  3. Python学习---Python安装与基础1205

    1.0. 安装 1.1.1. 下载 官网下载地址:https://www.python.org/downloads/release/python-352/ 1.1.2. 配置环境变量 因为在安装的时候 ...

  4. 廖Python学习笔记一

    1. 廖Python学习笔记 大的分类 如函数 用二级标题,下面的用三级 如输入输出 1.1.1. 输入输出 1.1.1.1. 输出 用 print() 在括号里加上字符串,就可以向屏幕上输出指定的文 ...

  5. Python学习记录day3

    2019独角兽企业重金招聘Python工程师标准>>> Python学习记录 day3 今天是银角大王武sir讲课.先回顾了上节课所学,然后讲到了面向对象思想. set set是一个 ...

  6. Python 学习笔记(3)对txt文件的读与写操作(下)

    上一章节我们讨论了如何对txt文本文件进行读写操作,这一张将讨论如何进行二进制文件的写与读.<Python 学习笔记(3)对txt文件的读与写操作(上)>的链接如下https://blog ...

  7. Python学习笔记:常用内建模块3:struct

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. Python学习笔记:基础

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. Python学习教程:0基础学Python?手把手教你从变量和赋值语句学

    这篇Python学习教程将手把手教你入门学Python,从变量和赋值语句学起,前面也有专门给大家出过相关的详细教程,有需要的伙伴,可以找一下前面的教程! 导读:在本文中,你会学到如何处理数字.定义与使 ...

  10. python学习-知识点回顾(Python3的安装,编译器、一些关键知识点、数据类型、数据类型转换、运算符优先级)

    文章目录 说明 python特点 Python3下载 PyCharm 标识符 python保留字 行与缩进 基本数据类型 Python数据类型转换 Python运算符优先级 说明 首先说明:本篇博文知 ...

最新文章

  1. 数据结构之【栈】的基本操作C语言实现
  2. YOLOv3改进方法增加特征尺度和训练层数
  3. (计算机组成原理)第二章数据的表示和运算-第二节2:原码、反码、补码和移码的作用
  4. Python TypeError: descriptor '__init__' requires a 'super' object but received a 'str' 错误
  5. MogDB与PostgreSQL分区策略语法测试
  6. jvm参数配置在什么地方_JVM参数配置
  7. STC官方软件波特率计算器使用方法
  8. 标准正态分布表(scipy.stats)
  9. c++builder excel 插入分页符
  10. 医学影像技术要学计算机吗,医学影像学和医学影像技术的区别
  11. 翻译狗文档免费下载手册(补充版)
  12. 空降了位前阿里的领导,三个月后我被离职了!
  13. Taylor Swift - Mean-pdf
  14. 【学习笔记之计算机组成原理篇】计算机系统概论
  15. 解构瑞幸小鹿茶:两大战场、一套逻辑、一个梦想
  16. Webgl实现的天气效果(下雨、下雪)
  17. 英特尔第十代处理器为什么不支持win7_为什么英特尔新推出,i7处理器不支持w7系统,只支持w10...
  18. JVM系列:JIT技术概述
  19. 用php打出2020年是庚子鼠年,2020是庚子金鼠年 说说鼠的那些事
  20. 刘润年度演讲2022:进化的力量(演讲全文)

热门文章

  1. egg自带ctx.curl下载文件
  2. 看不懂idea的文档怎么办【安利一款idea翻译插件】
  3. scala调用java可变参数函数
  4. #学习笔记#什么是Http协议
  5. 博弈论——最后通牒与讨价还价
  6. 【领域泛化】论文介绍《Respecting domain relations Hypothesis invariance for domain generalization》
  7. 如何像微博那样固定背景
  8. php snmp,PHP启动报错 php提示SNMP错误的解决方法
  9. hadoop2.5.2学习13-MR之新浪微博-DF的实现
  10. WGAN(Wasserstein GAN)看这一篇就够啦,WGAN论文解读