Chapter 1¶
约 612 个字 -6 行代码 1 张图片 预计阅读时间 2 分钟
除法器¶
有符号数相除,约定 remainder
符号与 被除数符号一致.
例: -7 / 2 = -3 余 -1 7 / (-2) = -3 余 1 运算的结果放在
remainder
中,高位是余数,低位是商
浮点数¶
单精度浮点数¶
用8位表示指数,23位表示尾数
第31位表示正负,30到23位表示指数,22位到0位表示尾数
指数部分有 bias = 127
的偏移量,真正的指数等于 exp - bias
Example
-0.11 = -1.1 * 2 -1 表示成单精度: 1 01111110 10000000000000000000000
15 = 1111 = 1.111 * 2 3 表示成单精度 : 0 10000010 11100000000000000000000
-15 = -1.111 * 2 3 表示成单精度 : 1 10000010 11100000000000000000000
注意:指数部分 00000000 和 11111111 作为保留数,不允许使用. 所以单精度浮点数最小可以表示 \(\pm\) 1.0 * 2 -126 \(\approx\) \(\pm\) 1.2 * 10 -38 最大可以表示 \(\pm\) 2.0 * 2 127 \(\approx\) \(\pm\) 3.4 * 10 38 精度相当于6位十进制数, 23 * \(\log2\) \(\approx\) 23 * 0.3 \(\approx\) 6
双精度浮点数¶
用11位表示指数,52位表示尾数
第31位表示正负,30到20位表示指数,19位到0位再加上另一个寄存器的32位表示尾数
指数部分有bias = 1023
的偏移量,真正的指数等于 exp - bias
最小可以表示 \(\pm\)1.0 * 2 -1022 \(\approx\) \(\pm\) 2.2 * 10 -308 最大可以表示 \(\pm\) 2.0 * 2 1023 \(\approx\) \(\pm\) 1.8 * 10 308 精度相当于16位十进制数
浮点数的上溢和下溢表示¶
非规格化数¶
exp全0,用来表示0以及非常接近0的数.
\(x=(-1)^{sign} \times ((0.fraction) \times 2^{1-bias})\)
特殊数¶
- exp全1,fraction全0,表示 \(\pm\) INF
- exp全1,fraction不全0,表示 NaN
计算¶
十进制与二进制互转¶
十进制小数转二进制¶
将十进制小数乘以二,取出整数部分,再继续对剩下的小数做同样操作.如:
- 要将0.15625转为二进制,首先将0.15625*2 = 0.313,取整数部分为0;
- 再将0.313*2 = 0.626 ,整数部分为0;
- 再0.626*2 = 1.252,整数部分为1,去掉整数,保留小数;
- 0.252*2 = 0.504,整数部分为0;
- 0.504*2 = 1.008,整数部分为1;
- 最后根据题目的精度要求保留
- 最终得到(0.15625)10=(0.00101)2=1.01*2{-3}
二进制小数转十进制¶
分别考虑整数和小数部分:
- 整数部分直接转
- 小数部分,二进制0.1对应十进制0.5(\(\frac12\)),二进制0.01对应十进制0.25(\(\frac14\)),以此类推,得到小数部分
- 最后整数和小数相加