IEEE二进制浮点数算术标准学习
看到有网上有个项目是要求将浮点数用二进制表示出来,需要用IEEE754标准,查了查维基和深入理解计算机系统,重新学习了一遍浮点数在计算机中的表示和内存中的存储,
先简单的做个笔记,后面需要更深入的理解。
IEEE754定义了四种表示浮点数的方式:单精度(32bit),双精度(64bit),延伸单精度(43bit以上),延伸双精度(79bit以上),后两者很少使用,这里讲的是前面两种。
用二进制来表示浮点数分三个部分,以下都已32bit的单精度为例,双精度类似可以推算出来:
三部分为:符号位(sign)、指数(exponent)、尾数(significand,存储二进制小数部分),下面是维基上的图:
单精度浮点数中,sign为1bit,exponent为8bit,significand为23bit,三部分组成32bit。
还有一个概念比较重要“指数偏移值”,在IEEE754中指浮点数表示中的指数域(exponent)的编码值为指数的实际值加上一个固定值,这个固定值的算法是2e-1 - 1
在单精度浮点数中为128-1 = 127.
小数部分定义是f=0.fn-1fn-2...f0,二进制小数点在最高有效位的左边,而有小数定义为M=1 + f,所以M表示成1.fn-1...f0,通过调整指数,使有效数M在1~2之间
看一个例子8.25,
转换成二进制表示1000.01 可以表示成 1.00001 *23
所以指数E = 3 + 127 = 130
所以8.25在内存中表示是:
0 10000010 00001000000000000000000
其中对于小数部分如何转换成二进制,可以按一下方式小数部分*2,取整数部分值(0或者1)
,然后继续取结果的小数部分*2,在取整数部分,一直循环,直到取得想要的位数,
如0.25 *2 = 0.5, 整数部分为0,然后0.5*2=1.0,整数部分为1,所以二进制表示为0.0100000..00
指数的取值范围是从-126~127,所以当一个浮点数如0.25,时可以表示成1.000*2-2
所以指数偏移值为-2 + 127=125
在内存中表示是
0 01111101 00000000000000000000000
以上都是浮点表示中规格化值的用法,其他还有非规格化和特殊值两种,以后再补充。
IEEE二进制浮点数算术标准学习的更多相关文章
- IEEE二进制浮点数算术标准(IEEE 754)
整理自IEEE 754 IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0) ...
- IEEE 754二进制浮点数算术标准
可能很多人都遇到过浮点数精度丢失的问题,下面以JavaScript为例. 1 - 0.9 = 0.09999999999999998 纳尼,不应该是0.1么,怎么变成0.099999999999999 ...
- IEEE754二进制浮点数算术标准
对于32位浮点数 sign: 符号,1位 exponent: 指数,8位,偏码 fraction: 分数,23位,原码 特殊值 指数域的编码值 = 指数的实际值 + 127 这样按照字典序的顺序就 ...
- IEEE 二进制浮点数的表示
朋友在谈一个物流相关的项目,是以前项目的一个延续,涉及到后台的扩展,手机端的App,外加两个App的对接的蓝牙打印机.这个项目前后说了一个多月了吧,最近才草拟了协议.项目本来不复杂,但是客户却如此的拖 ...
- IEEE 754浮点数表示标准
二进制数的科学计数法 C++中使用的浮点数包括采用的是IEEE标准下的浮点数表示方法.我们知道在数学中可以将任何十进制的数写成以10为底的科学计数法的形式,如下 其中显而易见,因为如果a比10大或者比 ...
- IEEE 754 浮点数在计算机中的表示方法
IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denorma ...
- 深入理解计算机系统(2.7)---二进制浮点数,IEEE标准(重要)
2.6我们进行了二进制整数运算的最后一役,本次LZ将和各位一起进入浮点数的世界,这里没有无符号,没有补码,但是有各种各样的惊奇.倘若你真正的进入了浮点数的世界,一定会发现它原来是这么有意思,而不是像之 ...
- 蓝牙(Bluetooth) IEEE 802.15.1 协议学习
catalogue . 蓝牙概念 . 配对和连接 . 机密安全性 . 蓝牙协议分类 . 蓝牙协议栈 1. 蓝牙概念 蓝牙(Bluetooth)是一种无线技术标准,可实现固定设备.移动设备和楼宇个人域网 ...
- DICOM:DICOM标准学习路线图(初稿)
题记: DICOM医学图像处理专栏撰写已有两个年头,积累了近百篇文章.起初只是用于记录自己科研.工作中遇到的疑难问题,专注于图像处理(主要是医学图像,这也正是专栏名称最初的由来):后来逐渐延伸到了DI ...
随机推荐
- 通过SQL Server 2008数据库复制实现数据库同步备份
SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...
- Generate SQL from Excel
Tips: SUBSTITUTE(D4,"'","''")---if D4 contain ', this function will convert ' ...
- Android使用ViewPager做轮播
ViewPager.html div.oembedall-githubrepos { border: 1px solid #DDD; list-style-type: none; margin: 0 ...
- day--6_python常用模块
常用模块: time和datetime shutil模块 radom string shelve模块 xml处理 configparser处理 hashlib subprocess logging模块 ...
- varchar(n),nvarchar(n) 长度、性能、及所占空间的说明
varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...
- Jmail发送邮件
注册jmail windows --> 运行 --> cmd --> cd jmail目录 --> regsvr32 jmail.dll --> 注册成功 public ...
- 315. Count of Smaller Numbers After Self
You are given an integer array nums and you have to return a new counts array. The counts array has ...
- 第十章 DOM
10.1节点层次 html元素通过元素节点表示,特性节点通过特性节点表示,文档类型节点通过文档类型节点访问,这些类型都继承一个基类型. 10.1.1 Node类型 JavaScript中的所有节点类型 ...
- C语言正则表达式详解 regcomp() regexec() regfree()详解
标准的C和C++都不支持正则表达式,但有一些函数库可以辅助C/C++程序员完成这一功能,其中最著名的当数Philip Hazel的Perl-Compatible Regular Expression库 ...
- Android菜鸟成长记13 -- 初识application
二.Application 简介 Application 类是用来维护应用程序全局状态.你可以提供自己的实现,并在 AndroidManifest.xml文件的 <application> ...