2017-08-07 67 views
2

我試圖通過表達式-log2(realmin)找到在Matlab中2 ^( - x)= realmin的最大值x。結果是1022.但是,當我嘗試代碼2 ^( - x)> 0(範圍從1023到1074的x)時,結果爲1(真)。根據我的理解,realmin是最小的正浮點數。那麼,爲什麼-log2(realmin)沒有給出最大的x使得2 ^( - x)> 0?2 ^( - x)= Matlab中的realmini

+1

我不知道MatLab,但我猜這是最小的正數**正常** FP編號。反正常(不太精確)可能更小。請參閱https://en.wikipedia.org/wiki/Denormal_number –

回答

3

如前面的評論所述,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 

這是正確的。

您應該閱讀非規範化/標準化數字的維基百科頁面以瞭解更多信息。