![在这里插入图片描述](https://img-blog.csdnimg.cn/5dbfa54fd4d8473fbdfe285687095cb5.jpeg#pic_center)
-
总结自伯克利的CS61C2021秋季课程,Nick主讲和CMU2015年讲CS APP的课程,标题均是floating point,相比而言CMU讲得比较详细,我先看了一遍CS61C再看了一遍CMU的课程,点击floating point点击slides可以下载pdf(讲得很详细可以自己看一下,我挑了几张贴出来),课程主页https://inst.eecs.berkeley.edu/~cs61c/fa21/
![在这里插入图片描述](https://img-blog.csdnimg.cn/e039913122f64266bbacd7d2e7aacd87.png)
-
P&H是课本章节,中文版是计算机组成与设计硬件软件接口RISCV
![在这里插入图片描述](https://img-blog.csdnimg.cn/3c5ef34d181a44ff8c6e459eb51d32d2.png)
-
还有个浮点数网站可以玩一玩https://www.h-schmidt.net/FloatConverter/IEEE754.html
![在这里插入图片描述](https://img-blog.csdnimg.cn/f2dcdfd5734a4a1e9bad7fe72436544b.png)
-
浮点数表示法是伯克利提出的,因为小数点是可以浮动的,降低了精度但是表示范围变大了(Can represent a very large range with roughly the same “precision”),而且希望和整数的补码表示法一致(32个0还是0),并且希望不用对浮点数进行比较就能排序(Make it possible to sort without needing to do floating-point comparisons)
-
float是单精度32位4字节,double是8字节双精度,先掌握float,float不能表示的就有+∞, -∞, Not-A-Number (NaN), exponent overflow, exponent underflow, +/- zero这么多种特殊情况,能表示的又分为normal format和denorm,最大可表示到
2
127
=
2
120
∗
2
7
=
128
∗
(
2
10
)
12
=
128
∗
1
0
36
=
2
∗
1
0
38
2^{127}=2^{120}*2^7=128*(2^{10})^{12}=128*10^{36}=2*10^{38}
2127=2120∗27=128∗(210)12=128∗1036=2∗1038,根据
2
10
=
1
0
3
2^{10}=10^3
210=103换算得到
![在这里插入图片描述](https://img-blog.csdnimg.cn/a979a07927af47a6b078e7d48a5e6803.png)
-
偏置计算方法bias = 2 ^ (k - 1) - 1,k 是指数位数,8位指数计算得到bias = 127(正数负数各站一半,bias gives us a balanced value),小数部分可以表示为fraction, F, mantissa, M, significand
![在这里插入图片描述](https://img-blog.csdnimg.cn/52cab08f2bb944a6a83ff4e3f74ad6d2.png)
-
先掌握normal format,即1.xxx
![在这里插入图片描述](https://img-blog.csdnimg.cn/6d037afa6efd43f1890d26c4c822efd5.png)
-
denorm format用于表示0附近的数,0.xxx,指数部分为0000_0000,此时小数部分不需要+1,然后指数部分E = 1 - Bias(这一部分CMU讲得比较好,为了实现两种表示方法的平滑过渡,可以用8位数字,指数部分k = 4偏置为7,小数部分为3位),老师当时评论those IEEE folks are really smart
![在这里插入图片描述](https://img-blog.csdnimg.cn/a15a503d190b404eaa0f20c3c0e4aad8.png)
-
overflow部分指数部分为1111_1111,首先是Inf然后是NaN,NAN通常是sqer(-1)或者0/0,NAN不能比较大小,+INF是1.0/0.0,-INF是-1.0/0.0,INF可以比较大小
![在这里插入图片描述](https://img-blog.csdnimg.cn/5157c9a5eafe46098a7dfb77e52c29b7.png)
-
浮点数中存在+/- 0,表示太小而不能表示的数字
![在这里插入图片描述](https://img-blog.csdnimg.cn/89e0dc1598b34bab95b8afe29cc59dbf.png)
-
总结一下
![在这里插入图片描述](https://img-blog.csdnimg.cn/5065cb4a862f4fcb8d7aceaccc62b5ff.png)
-
如何比较浮点数,先比较符号位再比较指数(无符号比较,使用偏置可以直接比较大小,如果使用补码不能直接比较大小),最后比较小数部分(指数部分比较重要用于区分数字分布,在数轴上可以看出)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9cf7f880e58c401dadb1c537add2e8bc.png)
-
CMU课程中得C代码可以写一下,看下是如何得到NAN和INF的,直接定义a = 1e20,CMU课程中老师讲得好,这些0和1其实不是真实的数字,只是我们看待问题的角度不同(大意)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)