我想明白這是如何計算出來的:瞭解機器精度基於位表示
表示如下數字的計算機程序:1位爲整體 跡象,對於指數5位和20位爲尾數。顯然我們需要用一個偏差來表示正數和負數。基於此,我將如何計算機器精度和最大可能數量?
我想明白這是如何計算出來的:瞭解機器精度基於位表示
表示如下數字的計算機程序:1位爲整體 跡象,對於指數5位和20位爲尾數。顯然我們需要用一個偏差來表示正數和負數。基於此,我將如何計算機器精度和最大可能數量?
獲得想法的一種方法是測試程序什麼時候輪到零。你可以在Python中使用這段代碼。
N = 52
a = 1.0-2**(-N);
print "%1.25f" % a
嘗試N的不同值當打印出來給出了最低ñ零,它會給你多少位被用於顯著的指示。打印語句是爲了確保程序確實將數字視爲零,並且不僅顯示零。
您是否在將'a'設置爲'a = 1.0-2 **( - N)'後打印'a-1'?無論如何,這是沒有用的。操作系統詢問使用非標準浮點格式的假設情況,並且假設格式的有效位中的位數是已知的。 –
假設正在使用的IEEE標準,對數字的表示式爲:
number = sign*(1+2^(-m)*significand)*2^(exponent-bias)
其中m
是用來存儲(整數)的位的數目有效數(或尾數),和bias
等於2^(e-1) - 1
,其中e
是用於存儲指數的位數。
讓我們看看我們可以從中得出什麼。需要注意的是
0
和2^m - 1
之間significand
範圍值(在你的案件:0和1048575之間)。exponent
的值在0
和2^e - 1
之間。但是,這兩個極值都是爲例外(低於正常值的數字,infinites和NAN)保留的,稱爲非標準化數字。因此,
(1+2^(-m)*significand)
的最小值是1,最大的值是2-2^(-m)
(你的情況2-2 ^( - 20),約1,999999046)。exponent-bias
的最小非例外值是-2^(e-1)+2
(在你的情況下是-14),最大值是2^(e-1)-1
(在你的情況下是15)。所以事實證明:
2^(-2^(e-1)+2)
(你的情況2 ^( - 14),約0,000061035)(2-2^(-m))*(2^(2^(e-1)-1))
(你的情況(2-2 ^( - 20))*(2^15),約65535,96875)。至於「機器精度」,我不知道你的意思,但是一個(在這裏21)調用m+1
二進制精度,在小數位數而言精度log10(2^(m+1))
,你這是約6.3。
我希望我沒有得到任何錯誤,我不是這方面的專家。
什麼是浮點基數?數字是否正常化?如果二進制和標準化,那麼表示是否使用未存儲的前導一位?什麼是最大和最小的指數?知道5位存儲是不夠的。它可能是[-15,16],[-16,15]和[-15,15]中的任何一個,其值爲infinities和NaN保留。 –
此外,是完整有效位(具有開頭位)或減少的有效位(沒有開頭位)的20位? –