浮点数在计算机中存储的方式

一张图看懂中国民航适航审定体系:从适航司到审定中心,到底谁管谁? 本文深入解析中国民航适航审定体系,从立法层到执行层的完整链条,揭示适航管理的金字塔结构和核心流程。涵盖适航司、审定中心等关键机构职能,以及型号审定、生产许可审定等全生命周期管理,展现中国适航体系的特色实践与创新探索。 阅读详情

浮点数在计算机中的存储

1996年6月4日,欧洲最新的无人驾驶火箭Ariane5初次航行时,发射后仅37秒,火箭偏离了它的飞行路径,解体并且爆炸。火箭上载有价值5亿美元的通信卫星。科学家们进行调查之后,原来只是因为小小的浮点数导致这场灾难性的后果,白白地损失了5亿美元。
作为这场事故的肇事者浮点数,它转换成整数时发生了溢出。在Ariane5的控制惯性导航系统的计算机向控制引擎喷嘴的计算机发送了一个无效数据,本应该发送飞行控制信息,而是发送了一个诊断位模式。表明将一个64位浮点数转化成16位有符号整数时,产生了溢出。
现今计算机都采用IEEE标准下的浮点数规则,方便在不同机器上的可移植性。

一.浮点数的表示:

IEEE浮点标准表示:V=(-1)^s*M*2^E。

符号(sign):s决定这个数是负数(s=1)还是正数(s=0)
尾数(significand):M是一个二进制小数
阶码(exponent):E的作用是对浮点数加权,权重是2的E次幂
将一个浮点数的位分解成3个字段,分别对这些字段进行编码:
1. 单独的符号位s占1位;
2. k位的阶码字段exp编码阶码E;
3. n位小数字段frac编码尾数M.
C语言中的float,s占1位,k占8位,n占23位,加起来32位,即4个字节。double类型的s同样占1位,只是k和n占的位数和float不同,但是计算方式一样。以下例子以float为准。
例子1:浮点数125.125D = 1111101.001B,转化规则为:先将二进制小数用二进制科学记数法表示,即1.111101001*2^6,指数E=6,因为该数为正,所以符号位s=0,由于k=8,因此偏移量Bias=2^(k-1)-1=127,所以阶码字段e=E+Bias,为133,即10000101。M=1.111101001,frac表示尾数,即科学计算法小数点后面的部分,不足23位补0。因此32位浮点数125.125在计算机中表示为01000010111110100100000000000000。8位的指数可以表示0-255指数值,但是如果指数为负则表达不了,所以Bias存在的原因为了处理指数为负的情况,这样可以表达的指数值范围就变成了[-127,128]之间。即exp=E+Bias。
浮点数在IEEE标准下又分为3类:
1. 规格化的值:当exp阶码字段不全为0也不全为1。M=1+frac。上面的例子既是规格化的值。
2. 非规格化的值:exp阶码字段全为0时,在这种情况下,实际的E=0,但是表示时为E=1-Bias而不是E=0-Bias,这是为了更加平滑地将非规格化值转化为规格化值。M=frac。
3. 特殊值:exp阶码字段全为1时称为特殊值。当小数域全为0时,得到的值为无穷。小数域为非零时,结果值称为NaN,不是一个数,比如根号-1。
平滑地将非规格化值转化为规格化值解释:
假如k=4,n=3,最大的非规格数为0 0000 111,由此可得E=1-(2^(k-1)-1)=-6,2^E=1/64,frac=1/2+1/4+1/8=7/8,M=frac,所以V=(-1)^0*2^E*M=7/512。最小的规格数为0 0001 000,E=1-(2^(k-1)-1)=-6,2^E=1/64,frac=0/8,M=1+frac=1。V=8/512。
最大的非规格数为7/512,最小的规格数为8/512,完成了平滑的转换,如果非规格数种E=-Bias,那么最大的非规格数应该为7/1024。
非规格数有两个作用:
1. 可以表示0
2. 表示那些非常接近0.0的数,非规格数在最小规格数和0之间可以表示大量的小数。

二.舍入

IEEE标准表示的浮点数限制了浮点数的范围和精度,,因为需要将值x匹配到对应的x’,这就是舍入。
IEEE浮点格式定义了4中不同的舍入方式,默认的舍入方式是找最近的匹配。其它3种分别为向上舍入、向下舍入、向零舍入。
最近匹配:又称向偶数舍入。找到一个最接近的匹配值,比如1.2舍入为1.0,但是如果是两个可能的中间值的话就需要一种判断方法,定义为总是向最低有效数字为偶数舍入。比如1.5舍入成2.0。这种方法运用于二进制小数时,最低有效位的值0认为是偶数,1认为是奇数。比如舍入到小数点后2位(最近的匹配值为1/4,即每次按1/4来舍入),10.00011(2*(3/32))向下舍入为10.00(2),10.11100(2*(7/8))向上舍入成11.00(3)。

三.浮点运算

浮点数的运算计算出来的值其实并不是算出来是多少就是多少,因为浮点数表示的范围和精度都有限,所以会进行舍入,匹配到一个值。举个例子,假如0.1+0.2=0.3,但是浮点数的表示中没有0.3这个值,那它会将0.3按最近匹配匹配到一个可以表示的值进行输出。所以在程序中,这种误差如果累积下来,计算出来的结果可能偏差会极大。另外浮点加法不具有结合性,即(a+b)+c不一定等于a+(b+c),因为过程中可能会出现舍入。浮点乘法不具有结合性和分配性,原因也是舍入或者溢出。

总结:

回到Ariane5爆炸的原因,浮点数为64位,k=11,既可以表示2^(e-Bias)这么大,Bias=2*(k-1)-1=2013,即可表示2^(2^12-1-2-13)=2^128次方,有符号整数为16位,最大可以表示2^15-1。只要速率变大,会溢出是很正常的事,所以说。。。。老司机要注意速度,不要动不动就飙车,哈哈。

ComfyUI整合包、秋叶ComfyUI、Florence节点报错下载并加载Florence2模型No module named ‘timm.layers‘、ComfyUI报错解决 步骤操作1打开2地址栏输入cmd并回车3输入命令:4安装完成后重新打开 ComfyUI,执行工作流,即可解决报错。 阅读详情

相关推荐

无线充电效率从75%到90%+:深入拆解LCC补偿网络如何成为电动汽车和智能车竞赛的‘稳压器’

本文深入探讨了LCC补偿网络如何显著提升无线充电效率至90%以上,成为电动汽车和智能车竞赛中的关键技术。通过分析LCC的三元件结构和双模式切换特性,揭示了其在负载突变和线圈错位情况下的稳定性优势,并展示了实际应用中的效率提升和产业化挑战。

weixin_42528191的博客 396

浮点数的这些坑,你未必知道

我猜作为开发工程师,大部分人都用过浮点数。但是你是否用对了呢?你是否知道,浮点数有近一半的值,在-1与+1以内呢? 今天的大纲有: 1、基本数据类型 2、认识浮点数规律 3、我在浮点数上踩过的坑 在计算机的眼中,一切都是数字,一切都是二进制。 一、基本数据类型 关于数值,你应该时刻牢记在心里的三点, 1、每个基本类型的数值都是有范围限制的,不是无限大的。 2、无论是boolean,int,float,string,struct,object,最终都对应计算机的一个byte或者多个byt

donlian的专栏 1016

cadence capture CIS 之使用access创建数据库(.mdb)

cadence capture CIS 之使用access创建数据库(.mdb)准备工作新建数据库 准备工作 1、一台电脑; 2、安装 Microsoft access database; 新建数据库 打开你准备创建数据库的位置,右键单击——》新建——》 Microsoft access database(注意:文件格式要选*.mdb) 打开数据库文件,创建——》表; 对数据表进行编辑,编辑表头、编辑表的内容、增加表的数量; 编辑表头:选中要编辑的表——》表设计 编辑内容:类似于excel添

weixin_42256550的博客 3147

IEEE754浮点数的表示

在学习浮点数的表示之前,先看一下二进制和十进制之间的转换。再来学习IEEE754标准的浮点数。

FPGA开发 | 高速接口与数字IC设计 2371

BraTS数据集保姆级使用指南:从下载、预处理到可视化(附Python脚本)

本文提供BraTS数据集的完整使用指南,涵盖从下载、预处理到可视化的全流程,并附有Python脚本示例。详细解析了医学影像处理中的数据结构、标准化流程和可视化技巧,帮助初学者快速掌握BraTS数据集的应用方法,提升医学影像分析效率。

weixin_27310417的博客 462

Quartus II 13.1 出现 ‘‘can‘t find design entity <Filename>‘‘ 问题的解决方法

Quartus II 13.1 出现 ''can't find design entity '' 问题的解决方法

qq_62076686的博客 1万+

浮点数的储存

详细解析浮点数的存储以及为什么浮点数不能直接比较

m0_73790767的博客 3453

实战分享:如何用本地替换和插桩调试搞定Kasada最新版x-kpsdk-cd环境检测

本文深入解析Kasada最新版x-kpsdk-cd环境检测机制,提供动态请求拦截、本地替换和函数插桩等实战调试策略。通过Proxy保护破解、关键函数断点调试和环境检测对抗方案,帮助逆向工程师有效应对从280位扩展到294位的加密数组挑战,实现高效补环境调试。

weixin_29251567的博客 569

计算机系统基础---浮点数

简单回顾一下,简单来说,用定点数表示数字时,会约定小数点的位置固定不变,整数部分和小数部分分别转换为二进制,就是定点数的结果。 但用定点数表示小数时,存在数值范围、精度范围有限的缺点,所以在计算机中,我们一般使用「浮点数」来表示小数。 这篇文章,我们就来详细看一下浮点数到底是如何表示小数的,以及浮点数的的范围和精度有多大。 什么是浮点数? 首先,我们需要理解什么是浮点数? 之前我们学习了定点数,其中「定点」指的是约定小数点位置固定不变。那浮点数的「浮点」就是指,其小数点的位置是可以是漂浮不定的。 这怎么理解

椰汁菠萝 5908

DFT知识点扫盲——DFT scan chain

实际在项目中synccell一般直接上ULVT,既然是SDF,就是带Scan接口的DFF,SN (set negtive)是低置位,RP(reset positive)是高复位,既没有SN也没有RP的就是无复位寄存器。1:定义:满足可测试性设计(DFT),将设计中所有的触发器连接到一条或者若干条链上,称为scan chain,将一个复杂的时序电路转换为简单的组合电路进行测试,这一步是在逻辑综合(DC)中实现。当SE=1当SI=1时,电路进入scan状态,当SI=0时,电路工作在normal状态。

笨蛋大乌龟的博客 4933

6、探索音乐结构中的统一性:贝多芬《英雄交响曲》第一乐章的深度剖析

本文深入剖析了贝多芬《英雄交响曲》第一乐章的音乐结构,探讨其统一性的来源及表现形式。通过主题与动机、和声与调性、旋律与节奏、织体与动态等多方面的分析,揭示了这部作品在技术层面和情感表达上的卓越成就。

b9c0d的博客 518

浮点数在内存中的存储方式

目录 一、存储准则 二:浮点数的存储与读取方式 (一)将浮点数存储进内存 (二)将浮点数从内存中拿出 1.E不全为0或者不全为1 2.E全为0 3.E全为1 三、图解与举例 四、代码练习 一、存储准则 根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式: (-1)^S * M * 2^E (-1)^s表示符号位,当s=0,V为正数;当s=1,V为负数。 M表示有效数字,大于等于1,小于2。 2^E表示指数位。 二:...

wenjiahui123的博客 1万+

【图论】系列(七)图论的中心性度量方法及重要性评价指标

图论中的中心性度量方法是用来衡量图中各个节点(或顶点)相对重要性的指标。

qq_30066733的博客 1075

数据在计算机中的存储方式(三)——浮点数在计算机中的存储方式

然后这篇浮点数在计算机中的存储,限于作者的知识水平,所以只是带着大家揭开了一点点它的·面纱。很多的内容并没有给大家讲清楚,比如精度的问题,浮点数的比较和数据的取舍等等……如果大家感兴趣,推介一本非常经典的书籍叫做《深入理解计算机系统》,这本书带着大家详细探究了计算机中的这些底层逻辑的东西。看完之后,我相信你会大有收益的。不过这本书阅读起来也确实有点难度,可以在日常学习和生活中慢慢去研读。我们一起加油,与君共勉😊!

m0_75166412的博客 1484

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

详解浮点数在计算机中的存储方式

详解浮点数在计算机中的存储方式存储方式(以单精度为例)存储原理1、符号位2、指数位3、尾数位附1,十进制浮点数转二进制附2,二进制浮点数转十进制附3,移位存储(移码)为什么采用移码而不是补码? 存储方式(以单精度为例) 存储原理 先解释存储原理,更容易理解后面的内容。 例 4.25 这个浮点数 先将其转换为二进制,即 100.01 然后再用二进制科学计算法表示,转换过程为:100.01 -> 1.0001 ^ 2 -> >1.0001 ^ 10 最终,十进制8.25的二进制为 1.

qq_41726670的博客 1万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

计算机中浮点数存储方式

计算机中存储小数有两种方式,分别是定点数和浮点数。 1. 定点数 定点数就是小数点的位置固定不变的数,小数点的位置通常有两种约定方式:定点整数和定点小数。 定点整数就是纯整数,因为小数点在最低有效数值位之后。定点小数的小数点在最高有效数值之前。这里对定点数暂时不做详解。 2. 浮点数 2.1 简单概述 计算机中小数采用浮点数方式保存,采用工业标准IEEE754标准。一个浮点数的表现形式如下: (−1)S2E(b0b1b2b3...bn−1) (-1)^S2^E(b_{0}b_{1}b_{2}b_{3}...

分享空间 2102

浮点数在计算机中存储方式(转)

今天深入学习了一下浮点数在计算机的存储方式,下面文章将的比较好,但关于指数的存储没看懂,于是百度了另一篇,给了我教好的讲解,地址 http://blog.youkuaiyun.com/nethibernate/article/details/6120382 ---------------------------------------------------------------------

invLong的专栏 1182

【C】计算机中浮点数的存储方式

计算机中的浮点数存储遵循IEEE 754 标准,它定义了浮点数的二进制表示方式。

yishaobai的博客 1084

浮点数在计算机中存储方式

文章路径:https://www.cnblogs.com/jillzhang/archive/2007/06/24/793901.html

weixin_40035790的博客 188

浮点数在计算机中的存储方式详解

常见的浮点数: 3.14159 1E10 浮点型在内存中的存储 浮点数家族包括: float、double、long double 类型。 浮点数表示的范围:float.h中定义 浮点数存储的例子: int main() { intn = 9; float*pFloat = (float*)&n; printf("n的值为:%d\n",n); printf("*pFl...

学无止境 7875

浮点数在计算机中存储方式---IEEE754格式存储

简单总结: 单精度浮点数: 1位符号位   8位阶码位   23位尾数 双精度浮点数: 1位符号位   11位阶码位   52位尾数 单精度float型存储在内存中的大小为4个字节,即32位。  x           xxxxxxxx    xxxxxxxxxxxxxxxxxxxxxxx 数符(1b)     阶码(8b)      尾数(23b)

蚂蚁辣舞的学习历程 8575

浮点数在计算机内存中的存储方式

我们知道,对于一个整数,在计算机内存中是以二进制的形式来存储的,但对于一个浮点数尼?假如仍以浮点数的二进制来存储,那小数点的位置如何来固定尼?所以人们就想到可以用二进制的科学计数法来保存,例如:5.5,其二进制数为101.1,则用二进制的科学计数法可以表示为 1.011 * 2^2,这样小数点的位置就是固定的。 任何一个浮点数可以表示为下面的形式(国际标准IEEE 754): (-1)^S ...

The Laughing Uncle的博客 7475

一道面试题引发的问题:浮点数和整数在计算机种的存储方式

1.先看题目:     给出下面代码的输出:    [html] view plaincopy float a = 1.0f;   cout  (int)a  endl;   cout  (int&)a  endl;        // (int&)a , 是什么意思呢?    cout  boolalpha  ( (int)a == 

fjxichao的专栏 928
上一篇: txt文件导入mysql
下一篇: 数据结构与算法学习--邻接表
UKey_
博客等级 码龄10年 258粉丝 186原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值