本帖最后由 nemon 于 2024-6-12 15:59 编辑
《Rust实战》第5章的标题是“深入理解数据”,但是这一章的示例却是CPU模拟器,这是肿么联系起来的呢?
CPU是有指令集的,指令就意味着一系列固化在硬件里的运算,如果抽象来的思考,把一次指令执行可以认为是有输入有输出的一个函数。那么就可以把每个指令编一个号(对应一个操作码),这样,程序就变成了指令编号和数据的集合——于是,在CPU面前,一切都是数据。顺便提一句,这给编程带来了灵活性,但是也留下了隐患。本章没有解释rust如何解决这个隐患,但是却花了大量篇幅讨论了相同的一段内存在不同解释下的意义——或者我们用原本的角度去描述,就是整数、浮点数、定点数 的规范。
书上有的部分不详述了,聊一下作者的一个疏漏。
其实也不算疏漏,大多数教材讲浮点数的时候,都会提到这个式子:
书上这里负一忘了加括号了,这是印刷错误,暂且不提,我们来聊一聊0。但实际上,为了节约长度,真实的式子是:
可以看出,由于引入了“1”这个常量,是无法表示浮点数0的,所以这里补充一下课外知识——IEEE R32.24 标准强行规定, b = 0 , e = 0 , m= 0 时,N = 0 。而且为了减少0与最小数字和最小数字与次小数字之间步长的突 然下跌,还有个,subnormal规定:当指数位全 0 的时候,指数表示为 -126 而不是 -127( 和指数为最低 位为 1 一致),此时公式改成: