2.3 浮点数的表示和运算
2.3.1 浮点数的表示
1、浮点数的表示
浮点数通常表示为:
N=rE×MN=rE×M
r:阶码的底,通常为2E:阶码,反映浮点数的表示范围和小数点的实际位置,用补码或移码表示M:尾数,其位数反映了小数的精度,用原码或补码表示
例:阶码和尾数都用补码表示,求a、b的真值
a = 0,01; 1.1001b = 0,01; 0.01001a:
阶码0,01对应真值+1尾数0.1001对应真值-0.0111,也可看作-111右移四位:−724−247故a=21×(−724)=−78a=21×(−247)=−87b:
阶码对应真值+1尾数0.01001对应真值+0.01001,也可看作+1001右移五位:+925+259故b=21×925=916b=21×259=169
2、浮点数的规格化
规定尾数的最高位必须是一个有效值。
左规:当浮点数运算的结果为非规格化时要进行规格化处理,将尾数左移一位,阶码减1 ( 基数为2时):
001; 00100(1)=21×(+0.01001)21×(+0.01001)-->20×(+0.10010)20×(+0.10010)= 000; 01001(0)
右规:当浮点数运算的结果尾数出现溢出(双符号位为01或10)时,将尾数右移一位,阶码加1 (基数为2时)。
例:a=010; 00.1100;b = 010; 00.1000,求a+b
a=22×00.1100b=22×00.1000a+b=22×(00.1100+00.1000)=22×01.0100(发生溢出)=23×00.1010a=22×00.1100b=22×00.1000a+b=22×(00.1100+00.1000)=22×01.0100(发生溢出)=23×00.1010
规格化后的尾数满足:1r≤∣M∣≤1r1≤∣M∣≤1
规格化的目的:增加数据表示的精度
3、IEEE 754 标准
尾数前隐含一位1
类型数阶阶码尾数数值总位数偏置值短浮点数1823327FH(127)长浮点数11152643FFH(1023)临时浮点数11564803FFFH规格化的短浮点数的真值为:(−1)S×1.M×2E−127(−1)S×1.M×2E−127;规格化的长浮点数的真值为:(−1)S×1.M×2E−1023(−1)S×1.M×2E−1023。对于短浮点数而言,偏置值取127,此时阶码(移码)的表示范围为**-126~127**:
真值补码移码-128*1000 00001111 1111-127*1000 00010000 0000-1261000 00100000 0001………………00000 00000111 1111………………1270111 11111111 1110-128和-127的作用:
E=0E=0且M=0M=0,则真值为0;E=0E=0且M≠0M=0,为非规格化数,真值=(−1)S×0.M×2−126=(−1)S×0.M×2−126;E=255E=255且M≠0M=0,真值为‘NaN’(非数值);E=255E=255且M=0M=0,真值为正或负无穷。
例:将 -0.75D 转换为IEEE 754 的单精度浮点数格式表示
将十进制转化为二进制
−0.75D=−0.11B−0.75D=−0.11B
将小数的高位变为1 (对应尾数隐含的1)
−0.11=−(1.1)2×2−1−0.11=−(1.1)2×2−1
数符:1
尾数:取小数点后面部分,并补0
.1000 0000 0000 0000 0000 000
阶码:真值+偏移量
(−1+127)D=126D=01111110B(−1+127)D=126D=01111110B
结果:1 0111 1110 1000 0000 0000 0000 0000 000
例:IEEE 754的单精度浮点数 C0 A0 00 00 H的值是多少
化为二进制
1100 0000 1010 0000 0000 0000 0000 0000数符:1阶码:1000 0001尾数:0100 0000 0000 0000 0000 000尾数:加上隐含的1
(1.01)2(1.01)2阶码
先看作无符号数:1000 0001B = 129D移码-偏置值:129-127=2真值:−(1.01)2×22=−(1.25)10×22=−5.0−(1.01)2×22=−(1.25)10×22=−5.0
2.3.2 浮点数的运算
1、加减运算
步骤:
对阶尾数加减规格化舍入判溢出
例:已知十进制数X=−5256X=−2565、Y=+591024Y=+102459,按机器补码浮点运算规则计算X-Y,结果用二进制表示,浮点数格式如下:阶符取2位,阶码取3位,数符取2位,尾数取9位
5D=101B,1256=2−8X=−101×2−8=−0.101×2−5D=−0.101×2−1015D=101B,2561=2−8X=−101×2−8=−0.101×2−5D=−0.101×2−101
阶码
-101,补码为:1011阶符取两位、阶码取三位:11011尾数
-0.101,补码为1.011数符取两位,尾数取九位:11.011000000可得X:11011;11.011000000同理:59D=111011B,11024=2−10Y=+111011×2−10=+0.111011×2−4D=+0.111011×2−10059D=111011B,10241=2−10Y=+111011×2−10=+0.111011×2−4D=+0.111011×2−100
阶码
-100,补码为1100阶符取两位、阶码取三位:11100尾数
+0.111011,补码为0.111011数符取两位,尾数取九位:00.111011000
(1)对阶
使两个数的阶码相等,小阶向大阶看齐,尾数每右移一位,阶码加1。
[ΔE]补=11011−11100=11011+00100=11111[ΔE]补=11011−11100=11011+00100=11111
11111为-1的补码,故ΔE=−1ΔE=−1,X的阶码比Y的阶码小1
阶码每加1,尾数右移一位,则有新的X:11100;11.101100000(右移之后前面补1)
此时,X=−0.0101×2−100X=−0.0101×2−100
(2)尾数相加减
首先有 -Y= 11100;11.000101000
尾数相加,得:
11.101100000+11.00010100010.11000100011.101100000+11.00010100010.110001000
相当于提取公因式
(3)规格化
由于上一步发生了溢出,因此需要右规
尾数右移一位,阶码加1,得:X-Y=11101;11.011000100
(4)舍入
{% hint style=“info” %}“0”舍“1”入法:类似于十进制数运算中的“四舍五入”法,即在尾数右移时,被移去的最高数值位为0,则舍去;被移去的最高数值位为1, 则在尾数的末位加1。这样做可能会使尾数又溢出,此时需再做一次右规。
恒置“1”法:尾数右移时,不论丢掉的最高数值位是“1”还是“0”, 都使右移后的尾数末位恒置“1”。这种方法同样有使尾数变大和变小的两种可能。
{% endhint %}
无舍入
(5)判断溢出
未发生溢出
结果真值为2−3×(−0.1001111)22−3×(−0.1001111)2
2、强制类型转换
数据类型16位机器32位机器64位机器char888short161616int163232long323264long long646464float163232double646464char --> int --> long --> double 以及 float --> double,不会损失精度。
对于32位系统:
int:表示整数,范围为−231∼231−1−231∼231−1,有效数字32位float:表示整数及小数,范围±[2−126∼2127×(2−2−23)]±[2−126∼2127×(2−2−23)],有效数字23+1=24位int --> float:可能损失精度(有效数字比float多)float --> int:可能溢出(超出int表示范围)及损失精度(小数部分)
热门文章
- 正在阅读:如何调整Word文档的行高 行高的调整方法【详解】如何调整Word文档的行高 行高的调整方法【详解】
 - U22国足挽尊!足协年度4目标仅完成一项,无缘世界杯、世青、世少
 - 《画狐》2025年春季特别活动:绘梦之旅,与狐共舞,赢取神秘大奖!
 - 噢咿噢梦之起点:2025盛夏狂欢庆典暨全服跨服竞技挑战赛盛大开启
 - 如何让生活更充实?五个简单方法教你!
 - 呜啦乱世纪:2025年4月7日开启的跨时空冒险大作战
 - 《超级宗师》2025年度盛夏巅峰之战:跨服宗师争霸赛暨全服庆典活动
 - 毫安与伏/欧姆换算
 - 手机足球手游排行榜TOP10推荐
 - 风暴之眼:2025海岛争霸·远征者联盟全球争锋赛暨新纪元启幕盛典