IEEE 754 浮点数加减运算

您所在的位置:网站首页 浮点数和整数相加是什么 IEEE 754 浮点数加减运算

IEEE 754 浮点数加减运算

2023-07-24 13:54| 来源: 网络整理| 查看: 265

电子科技大学 - 计算机组成原理

小数的十进制和二进制转换 移码

定义:[X]移 = X + 2n ( -2n ≤ X < 2n ) X为真值,n为整数的位数

数值位和X的补码相同,符号位与补码相反

舍入方法 0舍1入 保留4位尾数: 0 00100 -> 0 0010 /* **0直接舍去 */ 1 00101 -> 1 0011 /* **1进位 */ 1 11011 -> 1 1110 末位恒置1 保留4位尾数: 0 00100 -> 0 0011 1 00101 -> 1 0011 1 11011 -> 1 1101 IEEE 754 32位单精度 Sign8位阶码 [偏移量为28-1-1 = 127的非标准移码]23位尾数 真值表达式E的取值范围N = (-1)s × 2E-127 × 1.M1到254 64位双精度 Sign11位阶码 [偏移量为211-1-1 =1023的非标准移码]252位尾数 真值表达式E的取值范围N = (-1)s × 2E-1023 × 1.M1到2046

为了确保浮点数表示的唯一性,约定 0 ≤ M < 1

各字段的含义( 以单精度为例 ) 规范浮点数

1 ≤ E ≤ 254

真值表达式:N = (-1)s × 2E-127 × 1.M,尾数部分隐含开头的1

最小的正规格化数 00000 00010000 0000 0000 0000 0000 000 最大的正规格化数 01111 11101111 1111 1111 1111 1111 111 非规范浮点数

E = 0,M ≠ 0

s0000 0000≠ 0

真值表达式:N = (-1)s × 2-126 × 0.M,尾数部分不隐含开头的1

最小的正非规格化数

s0000 00000000 0000 0000 0000 0000 001

最大的正非规格化数

s0000 00001111 1111 1111 1111 1111 111 浮点数0

E = 0,M = 0

s0000 00000000 0000 0000 0000 0000 000

有+0.0和-0.0两种零

无穷大

E全为1(255),M = 0

正无穷大

01111 11110000 0000 0000 0000 0000 000

负无穷大

11111 11110000 0000 0000 0000 0000 000 NaN Not a Number

计算sqrt(-1)或∞-∞时会返回NaN

E全为1(255),M ≠ 0

s1111 1111≠ 0 为什么要使用127作为偏移量而不是128

在这里插入图片描述 https://stackoverflow.com/questions/8909841/why-does-the-ieee-754-standard-use-a-127-bias

溢出

上溢:阶码大于机器的最大阶码,不能继续运算,一般要进行中断处理

下溢:阶码小于最小阶码,当做零处理,机器可以继续运算

规格化浮点数

当尾数结果为00.0x…x 或 11.1x…x 尾数左移,阶码减1,直到尾数形式为00.1x…x 或 11.0x…x

当尾数结果为01.x…x 或 10.x…x 尾数右移,阶码加1,尾数形式变为00.1x…x 或 11.0x…x

阶码加减

设: AE、BE为阶码,CE为结果阶码

[ AE + BE ]移 = ( AE + BE ) + 127 = ( AE + 127 ) + ( BE + 127 ) - 127 = [ AE ]移 + [ BE ]移 -127 = [ AE ]移 + [ BE ]移 + [ -127 ]补 = [AE]移 + [BE]移 + 129

= ( [AE]移 + [BE]移 + 129 ) mod 28

[ AE - BE ]移 = ( AE - BE ) + 127 = ( AE + 127 ) - ( BE + 127 ) + 127 = [ AE ]移 - [ BE ]移 + 127

= ( [AE]移 - [BE]移 + 127 ) mod 28

浮点数加减

设: A = 2AE × AM,B = 2BE × BM AE、BE为阶码,AM、BM为尾数

在这里插入图片描述

舍入

右移时:

0舍1入末位恒置1 例题

x = 0.5, y = 0.4375, 32位单精度表示,求x + y和x - y

转换为二进制 0.5 x 2 = 1.0 取1

0.1 → 1.0 x 2 -1 [x]浮 =

00111 11100000 0000 0000 0000 0000 000-1 + 127 = 126 0.4375 x 2 = 0.875 取00.8750 x 2 = 1.750 取10.7500 x 2 = 1.500 取10.5000 x 2 = 1.000 取1

-0.0111 → 1.11 x 2-2

[y]浮 =

10111 11011100 0000 0000 0000 0000 000-2 + 127 = 125 求阶差

(0111 1110 - 0111 1101 + 127)mod 28 = 1 y向x对齐 y = 0.111 x 2-1 [y]浮 =

10111 11101110 0000 0000 0000 0000 000 尾数加减 +00.0000 0000 0000 0000 0000 00000.0010 0000 0000 0000 0000 00000.0010 0000 0000 0000 0000 000

结果为00.0x…x,左规 得到1.0… x 2-4

结果 = 0.0625

00111 10110000 0000 0000 0000 0000 000-4 + 127 = 123 -00.0000 0000 0000 0000 0000 00000.1110 0000 0000 0000 0000 00000.1110 0000 0000 0000 0000 000

结果 = 0.9345

00111 11101110 0000 0000 0000 0000 000


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3