浮点数和定点数

前言

大家好我是jiantaoyab,这是我所总结作为学习的笔记第七篇,在这里分享给大家,还有一些书籍《深入理解计算机系统》《计算机组成:结构化方法》《计算机体系结构:量化研究方法》,今天我们来了解定点数和浮点数

定点数

BCD编码

用 4 个比特来表示 0~9 的整数,那么 32 个比特就可以表示 8 个这样的整数。然后我们把最右边的 2 个 0~9 的整数,当成小数部分;把左边 6 个 0~9 的整数,当成整数部分。这样,我们就可以用 32 个比特,来表示从 0 到 999999.99 这样 1 亿个实数了。

在这里插入图片描述

用这种方式有缺陷

  • 本来 32 个比特我们可以表示 40 亿个不同的数,但是在 BCD 编码下,只能表示 1 亿个数
  • 这样的表示方式没办法同时表示很大的数字和很小的数字

浮点数

在现实生活中,我们想要表示一个数字很大或者很小的时候,会采用一种叫科学计数法的方法,比如我想表示10的1000次方,我并不需要画很多个零,用1.0 * 10^1000 就可以了

在计算机里,我们也可以用一样的办法,用科学计数法来表示实数。在浮点数的科学计数法的表示中,有一个IEEE的标准,任意一个二进制浮点数V可以表示成下面的形式:

V = ( − 1 ) S ∗ M ∗ 2 E V = (-1)^S * M * 2^E V=(1)SM2E

  • (-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数
  • M表示有效数字,大于等于1,小于2
  • 2^E表示指数位

举例来说,十进制的5.0,写成二进制是101.0,相当于1.01×2^2那么,按照上面V的格式,可以得出s=0,M=1.01,E=2

十进制的-5.0,写成二进制是-101.0,相当于-1.01×2^2。那么,s=1,M=1.01,E=2

IEEE 754规定,对于32位的浮点数,最高的1位是符号位s,接着的8位是指数E,剩下的23位为有效数字M。

在这里插入图片描述

对于64位的浮点数,最高的1位是符号位S,接着的11位是指数E,剩下的52位为有效数字M

在这里插入图片描述

IEEE 754对有效数字M和指数E,还有一些特别规定,1≤M<2,也就是说,M可以写成1.xxxxxx的形式,其中xxxxxx表示小数部分。**IEEE 754规定,在计算机内部保存M时,默认这个数的第一位总是1,因此可以被舍去,只保存后面的xxxxxx部分。**比如保存1.01的时候,只保存01,等到读取的时候,再把第一位的1加上去。这样做的目的,是节省1位有效数字。以32位浮点数为例,留给M只有23位,将第一位的1舍去以后,等于可以保存24位有效数字

至于指数E,情况就比较复杂。

首先,E为一个无符号整数(unsigned int)。这意味着,如果E为8位,它的取值范围为0255;如果E为11位,它的取值范围为02047。但是,我们知道,科学计数法中的E是可以出现负数的,所以IEEE 754规定,E的真实值必须再减去一个中间数,对于8位的E,这个中间数是127;对于11位的E,这个中间数是1023。

比如,2^11的E是15,所以保存成32位浮点数时,必须保存成15+127=132,即01111011。

然后,指数E还可以再分成三种情况:

**(1)E不全为0或不全为1。**这时,浮点数就采用上面的规则表示,即指数E的计算值减去127(或1023),得到真实值,再将有效数字M前加上第一位的1。

**(2)E全为0。**这时,浮点数的指数E等于1-127(或者1-1023),有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数。这样做是为了表示±0,以及接近于0的很小的数字。

**(3)E全为1。**这时,如果有效数字M全为0,表示±无穷大(正负取决于符号位s);如果有效数字M不全为0,表示这个数不是一个数(NaN)

可以用这个网站查浮点数的二进制表示

https://www.h-schmidt.net/FloatConverter/IEEE754.html

在这里插入图片描述

浮点数的加法

我们先来看9.1怎么转为二进制, 9换算之后就是 1001,0.1采用乘以 2,然后看看是否超过 1。如果超过 1,我们就记下 1,并把结果减去 1,进一步循环操作

在这里插入图片描述

然后,我们把整数部分和小数部分拼接在一起,9.1 这个十进制数就变成了 1001.000110011…这样一个二进制表示

把它对应到浮点数的格式中,s = 0,M=00100011001100110011 001(最多32位截断掉了),E = 3+127,s+E+M最终表示为0 10000010 0010 0011001100110011 001

那浮点数的加法是怎么算的?

先对齐、再计算,两个浮点数的指数位可能是不一样的,所以我们要把两个的指数位,变成一样的,然后只去计算有效位的加法就好了,这里涉及丢失精度的问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/727830.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript基础4之原型的原型继承、原型链和理解对象的数据属性、访问器属性

JavaScript基础 原型原型继承问题解决 原型链isPrototypeOf()Object.getPrototypeOf() 理解对象数据属性访问器属性 原型 原型继承 继承是面向对象编程的另一个特征&#xff0c;通过继承进一步提升代码封装的程度&#xff0c;JavaScript中大多是借助原型对象实现继承的特性。…

蜘蛛池是什么意思,怎么生成蜘蛛池

蜘蛛池是由自然界中的蜘蛛群落构成的一个小生态系统&#xff0c;也是身处自然界中的游客们可以在风雨中体验到最贴近自然气息的地方。 点开我主页面 Baidu蜘蛛的作用&#xff1a; 引蜘蛛逐渐收录&#xff0c;降权引蜘蛛可以疗伤&#xff0c;排名/收录不稳定&#xff0c;没有收…

等离子体密度诊断集

文章目录 等离子体密度诊断电子密度诊断朗缪尔探针法 (Langmuir Probe)干涉度量法 (Interferometer)全息法 (Holographic Method)离子密度诊断光腔衰减震荡 (Cavity Ring-Down Spectroscopy, CRDS)发射光谱法 (OES)中性粒子密度吸收光谱法 (Absorption Spectroscopy, AS)发射光…

【Linux篇】gdb的使用

&#x1f49b;不要有太大压力&#x1f9e1; &#x1f49b;生活不是选择而是热爱&#x1f9e1; &#x1f49a;文章目录&#x1f49a; 1. 背景知识2. 使用 1. 背景知识 1. 程序发布的方式有两种&#xff0c;debug模式和release模式 2. Linux下&#xff0c;gcc和g编译生成的可执行…

LeetCode每日一题[c++]-找出字符串的可整除数组

题目描述 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 给你一个下标从 0 开始的字符串 word &#xff0c;长度为 n &#xff0c;由从 0 到 9 的数字组成。另给你一个正整数 m 。word 的 可整除数组 div 是一个长度为 n 的整数数组&#xff0c;并满足&#xff…

mongodb4.2升级到5.0版本,升级到6.0版本, 升级到7.0版本案例

今天一客户想把自己当前使用的mongodb数据库4.2版本升级到7.0版本。难道mongodb能直接跳跃升级吗? 经过几经查找资料&#xff0c;貌似真不行呀。确定升级流程如下: 还得从mongo4.2升级到5.0。其次再从5.0升级到6.0。最后再从6.0升级到7.0。 开始升级之前将数据进行备份 这一步…

国家积极推进长城国家文化公园建设

长城脚下&#xff0c;文化绽放——国家积极推进长城国家文化公园建设 在中华大地的北方&#xff0c;横亘着一条巨龙&#xff0c;它见证着中华民族的沧桑岁月&#xff0c;承载着我们的民族记忆&#xff0c;它就是——长城。这座千年的雄关&#xff0c;不仅是中国的象征&#xf…

WPF —— TextBox 控件详解

TextBox控件是WPF中最基本的文字输入控件。它允许最终用户在一行、对话输入、或多行编写&#xff0c;就像是个编辑器。 关于TextBox常用的属性 FontFamily 字体样式 宋体 楷体等 FontWeight 字体粗细 &#xff0c; Bold加粗 FontStyle 字体样式 斜体和…

Git Cherry-Pick命令详解:轻松选取与移植提交

前言 在Git版本控制系统中&#xff0c;git cherry-pick是一个非常实用的功能&#xff0c;它允许开发人员选择性地将某一个或多个提交&#xff08;commit&#xff09;从一个分支复制到另一个分支&#xff0c;从而实现了对特定改动的精确移植。这对于重现特定补丁、回溯修复bug、…

【软件测试】测试工具推荐

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 本…

[Unity实战]使用NavMeshAgent做玩家移动

其实除了Character Controller, Rigidbody&#xff0c;我们还可以使用NavMeshAgent去做。这么做的好处是能避免玩家去莫名其妙的地方&#xff08;毕竟基于烘焙过的导航网格&#xff09;&#xff0c;一般常见于元宇宙应用和mmo。 根据Unity手册&#xff0c;NavMeshAgent 也有和…

Stringbuffer 和 Stringbuilder 的区别是什么?

StringBuffer 和 StringBuilder 是 Java 中用于处理字符串的两种常用类&#xff0c;它们都允许我们修改字符串&#xff0c;即进行字符串的拼接、插入和删除等操作。尽管两者都提供了可变字符串的功能&#xff0c;但它们之间有一些关键的区别&#xff0c;特别是在线程安全性和性…

学c++对Python有帮助吗?

学习C对Python编程确实有帮助&#xff0c;尽管这两种语言在许多方面有很大的不同。以下是学习C可能对Python编程产生帮助的几个方面&#xff1a; 理解底层概念&#xff1a;C是一种更接近硬件的编程语言&#xff0c;它要求程序员更深入地理解内存管理、指针、数据类型等底层概念…

【在线普法】无端遭受他人殴打,反击抵抗时不慎致滋事者受伤住院,这样的行为是否构成正当防卫?

反击滋事者致其受伤 是否承担民事责任 无端遭受他人殴打&#xff0c;反击抵抗时不慎致滋事者受伤住院&#xff0c;这样的行为是否构成正当防卫&#xff1f;是否应承担民事责任&#xff1f;近日&#xff0c;重庆市九龙坡区人民法院审结了一起健康权纠纷案&#xff0c;认定本案中…

第二十三章 javascript请求方式Ajax

文章目录 一、Ajax的概念二、Ajax的使用使用流程xhr 状态码&#xff1a;xhr.readyStatehttp 状态码&#xff1a;xhr.status 三、发送数据的数据格式 - Content-Type四、其他1. POST和GET的区别2. AJAX的兼容问题3. 个别设备中ajaxGet请求的缓存问题4. XMLHttprequest常见事件 一…

Dubbo分布式服务框架:原理深度解析与实战应用探索(一)

本系列文章简介&#xff1a; 在本系列文章中&#xff0c;我们将深入探索Dubbo分布式服务框架的原理和实战应用。我们将从Dubbo的架构设计开始&#xff0c;详细解析其内部的工作原理和核心组件。我们将探讨Dubbo的服务治理机制、负载均衡策略、容错机制等&#xff0c;并通过实际…

Linux:文件权限详解及修改方法

文章目录 1、Linux文件权限1.1、如何查看到文件权限1.2、ll命令介绍 2、权限分类2.1、文件权限2.2、文件夹权限 3、权限修改3.1、修改文件/文件夹权限1&#xff09;chmod指令2&#xff09;chmod指令符号 3.2、修改文件/文件夹所属用户3.3、修改文件/文件夹所属群组 4、参考 1、…

AI产品摄影丨香水

AI电商产品拍摄丨&#xff08;可指定产品&#xff09; 均为概念图 可换产品 可指定产品&#xff0c;可换logo 工具&#xff1a;StartAI 搭配“手机摄影”风格使用效果更佳哦 咒语&#xff1a;anha perfume in bottle on stone surface, in the style of everyday american…

和为K的子数组

题目&#xff1a; 使用前缀和的方法可以解决这个问题&#xff0c;因为我们需要找到和为k的连续子数组的个数。通过计算前缀和&#xff0c;我们可以将问题转化为求解两个前缀和之差等于k的情况。 假设数组的前缀和数组为prefixSum&#xff0c;其中prefixSum[i]表示从数组起始位…

JQuery的基础笔记

前言&#xff1a; j --> JavaScript Query --> 查询 jquery的入口函数 等DOM结构渲染完毕即可执行内部代码 相当于原生js的DOMContentLoaded 不同于原生js中的load是等一切加载完毕再执行 用法&#xff1a;&#xff08;推荐第二种&#xff09; $(document).ready(…