对于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

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

  1. IEEE 754二进制浮点数算术标准

    可能很多人都遇到过浮点数精度丢失的问题,下面以JavaScript为例. 1 - 0.9 = 0.09999999999999998 纳尼,不应该是0.1么,怎么变成0.099999999999999 ...

  2. IEEE二进制浮点数算术标准(IEEE 754)

    整理自IEEE 754 IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0) ...

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

    看到有网上有个项目是要求将浮点数用二进制表示出来,需要用IEEE754标准,查了查维基和深入理解计算机系统,重新学习了一遍浮点数在计算机中的表示和内存中的存储, 先简单的做个笔记,后面需要更深入的理解 ...

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

    2.6我们进行了二进制整数运算的最后一役,本次LZ将和各位一起进入浮点数的世界,这里没有无符号,没有补码,但是有各种各样的惊奇.倘若你真正的进入了浮点数的世界,一定会发现它原来是这么有意思,而不是像之 ...

  5. 震惊!计算机连0.3+0.6都算不对?浅谈IEEE754浮点数算数标准

    >>> 0.3+0.6 0.8999999999999999 >>> 1-0.9 0.09999999999999998 >>> 0.1+0.1+ ...

  6. IEEE 二进制浮点数的表示

    朋友在谈一个物流相关的项目,是以前项目的一个延续,涉及到后台的扩展,手机端的App,外加两个App的对接的蓝牙打印机.这个项目前后说了一个多月了吧,最近才草拟了协议.项目本来不复杂,但是客户却如此的拖 ...

  7. [学习笔记]Javascript采用二进制浮点数和四舍五入的错误

    1.样例 var a = .3 - .2 //0.09999999999999998 var b = .2 - .1 //0.1 a == b //false 出现这样的原因在于 1.Javascri ...

  8. IEEE 754浮点数表示标准

    二进制数的科学计数法 C++中使用的浮点数包括采用的是IEEE标准下的浮点数表示方法.我们知道在数学中可以将任何十进制的数写成以10为底的科学计数法的形式,如下 其中显而易见,因为如果a比10大或者比 ...

  9. Knowledge Point 20180305 十进制转换成二进制浮点数

    如何将十进制的浮点数 转换二进制的浮点数,分为两部分: 1. 先将整数部分转换为二进制, 2. 将小数部分转换为二进制, 然后将整数部分与小数部分相加. 以 20.5 转换为例,20转换后变为1010 ...

随机推荐

  1. js 同步 异步 宏任务 微任务 文章分享

    分享一篇 写的很好的 宏任务 微任务  同步异步的文章 文章原地址: https://juejin.im/post/59e85eebf265da430d571f89 这一次,彻底弄懂 JavaScri ...

  2. 基于Flask和百度AI实现与机器人对话

    实现对话机器人主要有个步骤 : 一.前端收集语音传入后端 二.后端基于百度AI接口进行语音识别,转换成文字 三.对文字进行自定义验证或通过图灵端口进行处理,生成回复内容 四.将文字通过百度AI接口合成 ...

  3. Linq to AD

    輕鬆找出域中所有用戶,組,而且還可以更改 LINQ to Active Directory https://linqtoad.codeplex.com/ LINQ to LDAP http://lin ...

  4. Codeforces Round #571 (Div. 2)

    A. Vus the Cossack and a Contest 签. #include <bits/stdc++.h> using namespace std; int main() { ...

  5. vue项目,前端导出excel

    今天研究一下前端如何导出excel,边查边实践,边记录 1.安装依赖库 xlsx:这是一个功能强大的excel处理库,但是上手难度也很大,还涉及不少二进制的东西 file-saver:ES5新增了相关 ...

  6. c 判断数字是否有限

    /* isfinite example */ #include <stdio.h> /* printf */ #include <math.h> /* isfinite, sq ...

  7. JAVA RPC (十) nio服务端解析

    源码地址:https://gitee.com/a1234567891/koalas-rpc 企业生产级百亿日PV高可用可拓展的RPC框架.理论上并发数量接近服务器带宽,客户端采用thrift协议,服务 ...

  8. IntelliJ跳转到抽象方法的实现

    ctrl + b (等价于ctrl + 鼠标点击方法名)会调到这个类型的抽象方法中: 如果想要跳转到这个方法的具体实现可以使用 ctrl + alt + 鼠标点击方法名. IntelliJ快速查找一个 ...

  9. nginx 配置简单 301 重定向

    server { listen ; server_name your.first.domain; rewrite ^(.*) http://your.second.domain:8000$1 perm ...

  10. 安装curl依赖库后yum不能使用问题解决

    安装curl 1)  进入/home目录下,解压curl-7.54.0.tar.gz [root@localhost home]# tar zxvf curl-7.54.0.tar.gz 2)  依次 ...