Chapter 3 | Arithmetic for Computer¶
约 926 个字 40 张图片 预计阅读时间 5 分钟
3.1 Introduction - 数值表达 -
3.2 Signed and Unsigned Numbers - Possible Representations
- 溢出
3.3 Arithmetic--Addition & Subtraction and ALU
- CLA
- 行波
3.4 Multiplication
3.5 Division
3.6 Floating point numbers
Introduction¶
- 一个数字只是一个数字,未指明含义它并不表征任何意义
Arithmetic¶
overflow
$OverFlow = C_{n} \oplus C_{n-1}$
Delay的计算
这里跟数字逻辑的基本相同
CLA¶
Multiplication¶
Multiplicand=被乘数
Multiplier=乘数
- 乘法不能用补码操作
V1¶
- 不断移动位置(左移动),做加法
- 移动被乘数
- 对乘数的最后一位判断,是1,结果加上当前的被乘数
V2¶
- 不移动被乘数,而是移动乘积product
- 对于128bits的product,高64bits进行算术运算,然后不断右移
example
V3¶
- 之前V2里面的Product低64bits没有任何用处,这里用来装乘数,使之右移移除的bit进行判断
- 129bits是为了保存进位(个人感觉用不到啊
有符号乘法¶
- 记录符号,转为绝对值相乘
Booth Algorithm
适用于式子中1比较多的情况,将多的加法转换为shift(左到右的序列)
根据相邻的两个bits判断对这一位要做什么操作,±被乘数
- 与上面的思想类似,在一个寄存器左半部分,右半部分 分别 放置 Result,乘数;每次根据乘数最低位的序列对Result部分进行操作,比如 add 被乘数;
- 需要注意的是,计算这个序列是从 -1 位(默认为0)开始的
- shift操作每次都要进行 11、00 的情况相当于operation环节是空的
Example
Division¶
Dividend=被除数,
Divisor=除数
Quotient 商
V1¶
- 除数最开始在Divisor左64bits,被除数在Remainder右64bits,
Note
V2¶
改进
-
除数不动,被除数左移,进行计算,小于零则回退,左移remainder置0;大于零左移remainder置1
-
shift right
针对的是最后一步,把余数部分的结果右移1bit
example
- 注意最后一步
有符号除法¶
remainder
高位,符号由被除数决定- 低位 商
- Overflow and division-by-zero don’t produce errors
- Just return defined results
- Faster for the common case of no error
Floating point Numbers¶
- 单精度 float 1 + 8 + 23
- 双精度 double 1 + 11 + 52
为了节省符号位的空间,exponent
我们都加上了一个biased
$$ 于是可以表示: (-1){sign}(1+significand)*2 $$
Range¶
Exponents
- 00000000 and 11111111 reserved
精度¶
计算精度与小数位数相关
加法¶
- Alignment 对齐 一般由较小的数向大的变
- The proper digits have to be added
- Addition of significands
- Normalization of the result 归一化处理
- Rounding 进位
Algorithm¶
example
乘法¶
- 记得exponent部分相加之后减去一个
bias
- $y={exponent - bias},y_1+y_2=ex_1+ex_2-2bias,ex_1+ex_2=y+2bias$
IEEE 拓展 精确算术运算¶
注意!
这个Blog定义的概念跟课本上的不一致
-
这些bits的作用是在运算过程中保留精度便于之后进位损失的精度不超过0.5ulp
sticky bit
在Round bit之后的所有位中只要有1就存为1,这个bit不一定要用到,是为了检测类似2.500000000与2.500000001
的区别Guard bit
要保留的最低位之后的第一位Round bit
- 舍入规则:
- 如果guard bit是0,那么直接截断。
- 如果guard bit是1且round bit或sticky bit至少一个是1,那么向上舍入(加1至尾数的最后一位)。
- 如果仅仅guard bit是1,那么执行向偶数舍入(如果尾数的最后一位是0则不变,如果最后一位是1则加1)。
题目¶
浮点数计算¶
Answer
Answer
如果先计算后两个数,结果会发生变化,因为中间过程的GRTbit发生了变化,导致保持的精度变化