IEEE754二进制浮点数算术标准

对于32位浮点数

sign: 符号,1位

exponent: 指数,8位,偏码

fraction: 分数,23位,原码

特殊值

 

指数域的编码值 = 指数的实际值 + 127

这样按照字典序的顺序就可以比较两个指数域的编码值的大小,在比较两个浮点数大小时比使用原码方便

规约形式

“规约”是指用唯一确定的浮点形式去表示一个值。

即要求fraction部分最高有效位为1,且指数域的编码值不为0

由于这种表示下的尾数有一位隐含的二进制有效数字(因为最高位总是1,所以按照规约数解析时,自动在最前面添加1,这个1是不存储在bit中的,非规约数不会自动添加1),为了与二进制科学计数法的尾数(mantissa)相区别,IEEE754称之为有效数(significant)。

IEEE754要求

exponent编码值为全0,fraction部分存储的编码值不为全0时,按照非规约数解析,此时实际指数看作-126而不是-127

exponent为1~2e-1,-2e-2~-1,按照规约数解析

非规约形式

exponent为0,fraction不为0,之所以同时存在非规约形式,是因为绝对值最小的规约浮点数为1.0*2-126,绝对值次小的规约浮点数为(1+2-23)*2-126,两者距离2-149,而绝对值最小的规约浮点数于0的距离是2-126,可以看出,两个绝对值很小的规约浮点数之间的距离比它们到0的距离近很多,这样导致两个不等的很小的规约浮点数的差变成0,这种方式称作突然式下溢出(abrupt underflow)。而渐进式下溢出(gradual underflow)因为引入非规约浮点数,最小的非规约浮点数的绝对值为2-23*2-126,次小的为2-22*2-126,两者距离2-149,同时,最小的非规约浮点数与0之间的距离也是2-149

浮点数举例

参考文献:https://zh.wikipedia.org/wiki/IEEE_754

原文地址:https://www.cnblogs.com/N3ptuner/p/12000038.html

时间: 2024-09-29 11:28:45

IEEE754二进制浮点数算术标准的相关文章

IEEE二进制浮点数算术标准学习

看到有网上有个项目是要求将浮点数用二进制表示出来,需要用IEEE754标准,查了查维基和深入理解计算机系统,重新学习了一遍浮点数在计算机中的表示和内存中的存储, 先简单的做个笔记,后面需要更深入的理解. IEEE754定义了四种表示浮点数的方式:单精度(32bit),双精度(64bit),延伸单精度(43bit以上),延伸双精度(79bit以上),后两者很少使用,这里讲的是前面两种. 用二进制来表示浮点数分三个部分,以下都已32bit的单精度为例,双精度类似可以推算出来: 三部分为:符号位(si

二进制浮点数,IEEE标准

额...啥叫IEEE标准?别着急啊,往后看,这一次我和大家一起学习一下浮点数,这里没有无符号,没有补码,俗话说得好,上帝给你关了一扇门,肯定给你打开一扇窗,没有那种东西饿,肯定有别的.如果你真正进入了浮点数的世界,离着你称霸武林不远了! 写在前面 整数运算虽然能解决计算机当中有关信息的一部分分存储,运算等功能,但却仍然是不够的.否则结社我们要做一个超市的库存管理系统,那么所有的商品的价格只能是整数,还有就是银行的利息也只能是整数!!是不是想想就开心!!哈哈哈,屌丝! so,有时我们需要更精确的数

深入理解计算机系统(2.7)---二进制浮点数,IEEE标准(重要)

本文转载地址:http://www.cnblogs.com/zuoxiaolong/p/computer11.html 2.6我们进行了二进制整数运算的最后一役,本次LZ将和各位一起进入浮点数的世界,这里没有无符号,没有补码,但是有各种各样的惊奇.倘若你真正的进入了浮点数的世界,一定会发现它原来是这么有意思,而不是像之前一样,觉得了解浮点数的内容没什么用,只要会简单的使用就行了.当然,这其中也可能有部分猿友是觉得这部分内容太难,而对它失去了学习的兴趣. 就像之前的LZ一样,曾经对IEEE标准望而

IEEE 二进制浮点数的表示

朋友在谈一个物流相关的项目,是以前项目的一个延续,涉及到后台的扩展,手机端的App,外加两个App的对接的蓝牙打印机.这个项目前后说了一个多月了吧,最近才草拟了协议.项目本来不复杂,但是客户却如此的拖延.我觉得客户做事好慢,而朋友觉得是自己的就是自己的,不是自己的急也没有用.不断的打电话询问客户,可能最后还被压价,反而更没办法做了.他其实比我还急,但是人家的心态好.的确凡事急不得. 浮点数 在 C 语言中,有两种存储浮点数的方式,分别是 float 和 double ,当然了还有long dou

IEEE 754浮点数表示标准

二进制数的科学计数法 C++中使用的浮点数包括采用的是IEEE标准下的浮点数表示方法.我们知道在数学中可以将任何十进制的数写成以10为底的科学计数法的形式,如下 其中显而易见,因为如果a比10大或者比1小都能够再次写成10的指数的形式,如 然而要想在二进制的世界中将数字写成以10为底的科学计数法的形式,着实有点麻烦,因为你首先需要将二进制的数先化成10进制的表示方法,然后才能写成科学计数法的形式.但是如果我们稍微变通一下科学计数法的标记方法,问题就变得特别的简单了.之所以数学上使用的科学计数法选

js浮点数算术出现多为小数

/****************************************解决JS浮点数(小数)计算加减乘除的BUG Start****************************************/ 问题:js浮点数运算问题---莫名出现多位小数 // 原因:这是由于在运算的时候先把浮点数转化成二进制后进行运算,// 但是有的小数在二进制编码后出现无限循环,// 因而导致计算出现了误差,在其它变成语言中也有类似的问题. /**** 加法函数,用来得到精确的加法结果** 说明:

Question20180128 十进制转换成二进制浮点数

如何将十进制的浮点数 转换二进制的浮点数,分为两部分: 1. 先将整数部分转换为二进制, 2. 将小数部分转换为二进制, 然后将整数部分与小数部分相加. 以 20.5 转换为例,20转换后变为10100:0.5  要转换二进制,需要乘2, 乘完之后 取整数部分,然后用乘的结果减去整数部分, 然后接着乘2, 直至最后没有小数或者小数出现循环,  即乘完.如果等于0, 就取前面不为0的部分. 0.5 * 2  = 1.0 (取1) 0 * 2 = 0   (0) 所以,  转换后 0.5 = 0.1

如何理解IEEE 754标准对Java中float值和double值的规定

在Java语言中,我们可以使用float和double这两种基本数据类型来表示特定的数据. 这两种数据类型,本质上是浮点数(floating-point number),浮点是一种对于实数的近似值数值表现法,由一个有效数字加上幂数来表示. 之所以使用浮点数,是因为计算机在使用二进制运算的过程中,无法将所有的十进制小数准确的换算为二进制,只能使用近似值来表示. 使用浮点数表示数值的方法很多,在Java中,和C语言一样,float和double都采用了使用最为广泛的IEEE 754标准. IEEE

Java之道系列:BigDecimal如何解决浮点数精度问题

如题,今天我们来看下java.math.BigDecimal是如何解决浮点数的精度问题的,在那之前当然得先了解下浮点数精度问题是什么问题了.下面我们先从IEEE 754说起. IEEE 754 IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的"浮点数运算符&qu