舉個十進制的例子 -10.375:
如果該數是正的,則 sign bit 或是 1,反之 0。而接下來 7 個 bits,(例子中使用 1000010),表示二進制科學記號的指數次方,而處理步驟如下,得到實際次方:
接著繼續計算尾數(mantissa)部分,假設數字表示成二進制科學記號,如下圖二,分別對應三個欄位(sign, mantissa, exponent)如下:
計算二進制的值 1000010: 1*64+0*32+0*16+0*8+0*4+1*2+0*1 = 66.
並且減去 63,就會得到指數部分, 這種方式是為了使用負數的次方關係。
因此二進制如圖二中的可以對照十進制的科學記號:
尾數部分指得是在小數點之後的部分(補充說明:小數點之前稱作首數)。 由於是二進制科學記號,因此首數一定為 1,除了 0 的表示法比較特別外,因此只會使用尾數記錄。
$$-(1+2^{-2}+2^{-5}+2^{-6}) * 2^{3} = -10.375 = -1.0375 * 10^{1}$$
Input
輸入有多組測資,每一行將會有長度為 16 的字串,只會由 0 跟 1 夠成。第一個字元表示 sign bit,接下來七個字元表示 exponent,剩餘的表示 mantissa。
Output
在程式開始前輸出一行 "Program 6 by team X"。對於每組測資輸出一行,格式如下:
程式結束前,輸出一行 "End of program 6 by team X" 。
使用十進制的科學符號表示法。 在 Column 1 中,如果是正數則輸出空白,負數則輸出一個減號 "-"。 在 Column 2 中,輸出一個位數。 在 Column 3 中,有一個小數點。 在 Columns 4 - 9 中,表示 6 位的浮點數精準度。 而剩餘的部分表示指數,確切的格式請參考範例測資。
特別注意,內建的表示法將根據不同語言而有所不同,建議在此題不要使用。
Sample Input
1100001001001100 0011111100000000 1011111110000000 0000000010101010 0011011111100000 1001111011100000 0101011001010101 0100011011101101 0111111111111111 1100001000101100 0000000000000000 1000000000000000
Sample Output
Program 6 by team X -1.037500e+001 1.000000e+000 -1.500000e+000 1.804180e-019 7.324219e-003 -2.182787e-010 1.117389e+007 2.465000e+002 3.682143e+019 -9.375000e+000 0.000000e+000 0.000000e+000 End of program 6 by team X
沒有留言:
張貼留言