标签:博客专栏 details net 注意 因此 tail load -- 技术
首先复习进位计数制的要素:
数码:用来表示进制数的元素。比如
基数:数码的个数。比如
位权:数制中每一固定位置对应的单位值称为位权。
总结来说
十进制表示公式为:
二进制表示公式为:
于是为了在计算机中准确表示浮点数,IEEE指定了一条标准来规范表示浮点数,若不对浮点数的表示作出明确的规定,同一个浮点数的表示就不是唯一的。例如\((1.75)_{10}\)可以表示成\(1.11×2^0\),\(0.111×2^1\),\(0.0111×2^2\)等多种形式。
IEEE,电气和电子工程师协会( 全称是Institute of Electrical and Electronics Engineers)是一个国际性的电子技术与信息科学工程师的协会,是目前全球最大的非营利性专业技术学会,IEEE 754 标准是IEEE二进位浮点数算术标准(IEEE Standard for Floating-Point Arithmetic)的标准编号。
IEEE754 标准中规定:
阶码:阶码是整数,阶符和 m 位阶码的数值部分共同反映 浮点数的表示范围及小数点的实际位置 ,常用移码或补码表示。IEEE754标准中采用移码的表示形式。
尾数:数符表示浮点数的符号,尾数的数值部分的位数 n 反映浮点数的 精度 ,常用原码或补码表示。IEEE754标准中采用原码的表示形式
浮点数表示法是指以适当的形式将比例因子表示在数据中,让小数点的位置根据需要而浮动。这样,在位数有限的情况下,既扩大了数的表示范围,又保持了数的有效精度。
浮点数的真值为:
其中
由上面的每个对应位置的范围,我们可以求得
a:
0,01,其中0代表是正数,所以原码和补码相同,01→\(0*2^1+1*2^0=1\),所以阶码为+1
1.1001,其中1代表是负数,所以原码为补码末尾减一(1000),按位取反(0111),对应真值为-0.0111=\(-(2^{-2}+2^{-3}+2^{-4})=-\frac{7}{16}\)
所以\(a=2^1×(-0.0111)=2^1×(-\frac{7}{16})=-\frac{7}{8}\)
b:
0,01,对应真值为+1
0.01001对应真值为+0.01001=\(+(2^{-2}+2^{-5})=+\frac{9}{32}\)
所以\(b=2^1×(+0.01001)=2^1×\frac{9}{32}=\frac{9}{16}\)
为了提高数据的表示精度同时保证数据表示的唯一性,需要对浮点数做规格化处理。
在计算机内,对非0值的浮点数,要求尾数的绝对值必须大于基数R(这里R=2)的倒数,即\(|M|≥1/R\)
0.5的二进制为0.1
符号位S为0,指数为\(e=-1\)(为啥?我猜是因为0.1中1的最高位是-1),规格化后尾数为1.0(为啥?因为M最小为1.0)。
单精度浮点数尾数域共23位,右侧以0补全,尾数域:
阶码E:
对照单精度浮点数的存储格式,将符号位S,阶码E和尾数域M存放到指定位置,得0.5的机器码:
1.5的二进制为1.1
符号位为0,指数\(e=0\)(为啥?我猜是因为1.1中1的最高位是0),规格化后尾数为1.1(为啥?因为二进制为1.1,所以M就是1.1,如果二进制是1111,M就是1.111)。
尾数域M右侧以0补全,得尾数域:
阶码E:
得1.5的机器码:
5的二进制为101
符号位为0,指数为\(e=2\),规格化后尾数为1.01(为啥?因为二进制为101,所以M就是1.01)。
单精度浮点数尾数域共23位,右侧以0补全,尾数域:
阶码E:
得5的机器码:
浮点数的表示 -- 基本格式、规格化、表示范围_starter_____的博客-CSDN博客_浮点数规格化表示
详解 浮点数的规格化表示_Hello.Aaric的博客-CSDN博客_浮点数规格化
IEEE754 浮点数的表示方法_Dablelv的博客专栏-CSDN博客_ieee 754
标签:博客专栏 details net 注意 因此 tail load -- 技术
原文地址:https://www.cnblogs.com/harrylyx/p/13234535.html