Python 学习:浮点数
在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 学习:浮点数相关推荐
- python科学计数法转换_对比Python学习Go 基本数据结构
公众号文章不方便更新,可关注底部「阅读原文」博客,文章随时更新. 本篇是「对比 Python 学习 Go」[1] 系列的第三篇,本篇文章我们来看下 Go 的基本数据结构.Go 的环境搭建,可参考之前的 ...
- python学习之第三课时--基本数据类型及区别,变量
python学习之第三课时--基本数据类型及区别,变量 基本数据类型及区别 1. 数字类型(int) 数字型--变量值直接是数字,没有双引号"" 整数 2. 浮点数(float ...
- Python学习---Python安装与基础1205
1.0. 安装 1.1.1. 下载 官网下载地址:https://www.python.org/downloads/release/python-352/ 1.1.2. 配置环境变量 因为在安装的时候 ...
- 廖Python学习笔记一
1. 廖Python学习笔记 大的分类 如函数 用二级标题,下面的用三级 如输入输出 1.1.1. 输入输出 1.1.1.1. 输出 用 print() 在括号里加上字符串,就可以向屏幕上输出指定的文 ...
- Python学习记录day3
2019独角兽企业重金招聘Python工程师标准>>> Python学习记录 day3 今天是银角大王武sir讲课.先回顾了上节课所学,然后讲到了面向对象思想. set set是一个 ...
- Python 学习笔记(3)对txt文件的读与写操作(下)
上一章节我们讨论了如何对txt文本文件进行读写操作,这一张将讨论如何进行二进制文件的写与读.<Python 学习笔记(3)对txt文件的读与写操作(上)>的链接如下https://blog ...
- Python学习笔记:常用内建模块3:struct
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习笔记:基础
前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...
- Python学习教程:0基础学Python?手把手教你从变量和赋值语句学
这篇Python学习教程将手把手教你入门学Python,从变量和赋值语句学起,前面也有专门给大家出过相关的详细教程,有需要的伙伴,可以找一下前面的教程! 导读:在本文中,你会学到如何处理数字.定义与使 ...
- python学习-知识点回顾(Python3的安装,编译器、一些关键知识点、数据类型、数据类型转换、运算符优先级)
文章目录 说明 python特点 Python3下载 PyCharm 标识符 python保留字 行与缩进 基本数据类型 Python数据类型转换 Python运算符优先级 说明 首先说明:本篇博文知 ...
最新文章
- 数据结构之【栈】的基本操作C语言实现
- YOLOv3改进方法增加特征尺度和训练层数
- (计算机组成原理)第二章数据的表示和运算-第二节2:原码、反码、补码和移码的作用
- Python TypeError: descriptor '__init__' requires a 'super' object but received a 'str' 错误
- MogDB与PostgreSQL分区策略语法测试
- jvm参数配置在什么地方_JVM参数配置
- STC官方软件波特率计算器使用方法
- 标准正态分布表(scipy.stats)
- c++builder excel 插入分页符
- 医学影像技术要学计算机吗,医学影像学和医学影像技术的区别
- 翻译狗文档免费下载手册(补充版)
- 空降了位前阿里的领导,三个月后我被离职了!
- Taylor Swift - Mean-pdf
- 【学习笔记之计算机组成原理篇】计算机系统概论
- 解构瑞幸小鹿茶:两大战场、一套逻辑、一个梦想
- Webgl实现的天气效果(下雨、下雪)
- 英特尔第十代处理器为什么不支持win7_为什么英特尔新推出,i7处理器不支持w7系统,只支持w10...
- JVM系列:JIT技术概述
- 用php打出2020年是庚子鼠年,2020是庚子金鼠年 说说鼠的那些事
- 刘润年度演讲2022:进化的力量(演讲全文)
热门文章
- egg自带ctx.curl下载文件
- 看不懂idea的文档怎么办【安利一款idea翻译插件】
- scala调用java可变参数函数
- #学习笔记#什么是Http协议
- 博弈论——最后通牒与讨价还价
- 【领域泛化】论文介绍《Respecting domain relations Hypothesis invariance for domain generalization》
- 如何像微博那样固定背景
- php snmp,PHP启动报错 php提示SNMP错误的解决方法
- hadoop2.5.2学习13-MR之新浪微博-DF的实现
- WGAN(Wasserstein GAN)看这一篇就够啦,WGAN论文解读