Matlab是如何存储这么大的只有64位的数字的



双精度(即64位(浮点运算中的最大数字为1.111...110 x 2^(512)(其中在基点之后有51个1(。这个数字小于2 x 2^(512) == 2^(513) == 8^(171) < 10^(171)。因此,当我分配x = 10^(171)时,我期望x将被存储为Inf。然而,事实并非如此。在交互控制台中调用x显示1.0000e+171。我能想到的唯一解释是,Matlab使用超过64位来存储x。但是快速检查whos x发现x存储在8个字节中。

事实上,不会被存储为Inf10的最大功率是10^308

有人能解释一下这里发生了什么吗?

对不起,我在这里犯了一个简单的错误。在64位算术中,11位用于对指数进行编码。因此,我们有2^(11) = 2048可能的指数,所以它们的范围从-10231024,而不是像我想的那样从-511512。因此,64位算术中的最大数字是1.111…110 x 2^(1024($,这实际上是(指数有3个有效数字(10^(308.6),证实了我的实验结果。

最新更新