2013-08-29 20 views
0

我想明白這是如何計算出來的:瞭解機器精度基於位表示

表示如下數字的計算機程序:1位爲整體 跡象,對於指數5位和20位爲尾數。顯然我們需要用一個偏差來表示正數和負數。基於此,我將如何計算機器精度和最大可能數量?

+0

什麼是浮點基數?數字是否正常化?如果二進制和標準化,那麼表示是否使用未存儲的前導一位?什麼是最大和最小的指數?知道5位存儲是不夠的。它可能是[-15,16],[-16,15]和[-15,15]中的任何一個,其值爲infinities和NaN保留。 –

+0

此外,是完整有效位(具有開頭位)或減少的有效位(沒有開頭位)的20位? –

回答

0

獲得想法的一種方法是測試程序什麼時候輪到零。你可以在Python中使用這段代碼。

N = 52 
a = 1.0-2**(-N); 
print "%1.25f" % a 

嘗試N的不同值當打印出來給出了最低ñ零,它會給你多少位被用於顯著的指示。打印語句是爲了確保程序確實將數字視爲零,並且不僅顯示零。

+0

您是否在將'a'設置爲'a = 1.0-2 **( - N)'後打印'a-1'?無論如何,這是沒有用的。操作系統詢問使用非標準浮點格式的假設情況,並且假設格式的有效位中的位數是已知的。 –

0

假設正在使用的IEEE標準,對數字的表示式爲:

number = sign*(1+2^(-m)*significand)*2^(exponent-bias) 

其中m是用來存儲(整數)的位的數目有效數(或尾數),和bias等於2^(e-1) - 1,其中e是用於存儲指數的位數。

讓我們看看我們可以從中得出什麼。需要注意的是

  • 02^m - 1之間significand範圍值(在你的案件:0和1048575之間)。
  • exponent的值在02^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。

我希望我沒有得到任何錯誤,我不是這方面的專家。