对于浮点数的计算,首先可以看加减操作。浮点数的加减法分为5个操作:对阶 尾数加减 规格化 舍入 判溢出五个步骤:
1)对阶 将两个科学记数法表示的数 的阶数对齐。
例如:9.85211*10^12 + 9.66007*10^10 (这里写的是十进制数)
对于这种加法,阶数小的数向阶数大的数靠拢。这样做的好处是方便处理尾数。
2)尾数相加减 加减法
3)规格化 规格化指的是让尾数的首位有效(不是0),将尾数控制在0.01~1内
4)舍入 根据题目要求,有时候可能需要舍去几位尾数。常见做法是四舍五入,或者直接暴力抹除并进1.
5)判溢出 因为阶码不能超过表示上限。
------
例题:十进制数x=- 5/256 y=+59/1024 按照补码规则计算X-Y
(在此处规定浮点数标准为:阶符2位,阶码3位,数符取2位,尾数取9位 阶码和尾数都使用补码表示)
解答: X 从十进制转换为二进制,5->101 5/256-->101/28 那么-5/256--->-101/28--> -0.101*2-101
Y:59-->111011 1/1024--->2-10 那么Y=59/1024--->0.111011* 2-100
将X和Y转换为补码形式:
X:-101-->11101(原码)-->11011(补码)
Y:-100--->11011(原码)-->11100(补码) 0.111011--->00 111011000(原码、补码)
所以,X用补码表示是11011 11 011000000 Y用补码表示是11100 00 111011000 前面5位是阶符和阶码,中间2位是数符,后9位是尾数。
在完成数码转换后,进行浮点数的加减法:
1) 对阶:小阶对大阶
求阶差: 11011+00100=11111 x和y的阶数相差为1 为了小阶对大阶,修改X的阶码。
对齐:X的原码形式阶符+阶码是11101,加1以后变成11110,再取补码得11010。再将尾数右移一位,尾数变成了-0.0101,再转补码就是11 101100000.补码变成了11100 11 101100000
-Y的补码是11100 11 000101000
X-Y的补码=X的补码+-Y的补码,X+(-Y)= 11100 10 110001000
注意:数符部分出现了10 ,说明计算过程中出现了进位溢出,稍后处理
3)规格化:11100 10 110001000(补码)--->-1.001111*2-100 --->-0.1001111*2-011 对应的机器码变化是11100 10 110001000(补码)---> 11101 11 011000100(补码)
4)舍入 这道题没有要求舍去,所以不用处理
5)判溢出 无最大最小溢出,无需处理