2^(-x)=Matlab中的realmin

2^(-x)=Matlab中的realmin,matlab,floating-point,precision,Matlab,Floating Point,Precision,我试图通过表达式-log2(realmin)在Matlab中找到2^(-x)=realmin的最大值x。结果是1022。但是,当我尝试从1023到1074的x的代码2^(-x)>0时,结果是1(True)。据我所知,realmin是最小的正浮点数。那么,-log2(realmin)没有给出最大的x,使得2^(-x)>0的原因是什么呢?正如前面的评论所说,realmin函数返回最小的标准化数。在使用非规范化数字时,您可以使用2^(-1075),正如我使用以下非常简单的脚本所发现的: %% Scri

我试图通过表达式-log2(realmin)在Matlab中找到2^(-x)=realmin的最大值x。结果是1022。但是,当我尝试从1023到1074的x的代码2^(-x)>0时,结果是1(True)。据我所知,realmin是最小的正浮点数。那么,-log2(realmin)没有给出最大的x,使得2^(-x)>0的原因是什么呢?

正如前面的评论所说,realmin函数返回最小的标准化数。在使用非规范化数字时,您可以使用2^(-1075),正如我使用以下非常简单的脚本所发现的:

%% Script to check the smallest possible power of two in Matlab 

power = 0;

while 2^power > 0
    power = power - 1;
end

sprintf('%d', power)
这是你的第一选择。您还可以使用
eps(0)
在Matlab中获得最小的非规范化数字,您将得到:

Trial>> log2(eps(0))

ans =

       -1074
这是正确的


你应该阅读维基百科中关于非规范化/规范化数字的页面,了解更多信息。

我不知道MatLab,但我猜它是最小的正规范化FP数字。非规范化(精度较低)可以更小。看见