1. 程式人生 > >關於課堂動手動腦以及課後實驗性的問題的總結整理

關於課堂動手動腦以及課後實驗性的問題的總結整理

img 進制數 std big 分享 isp 大於 結果 family

1.Welcome1.java

驗證結果截圖:

技術分享

2.Welcome2.java

驗證結果截圖:

技術分享

3.JavaAppArguments.java

驗證結果截圖:

技術分享

4.Addition.java

驗證結果截圖:

技術分享

5.TestDouble.java

驗證結果截圖:

技術分享

問題:為什麽double類型的數值進行運算得不到“數學上精確”的結果?

十進制數的二進制表示可能不夠精確

浮點數或是雙精度浮點數無法精確表示的情況並不少見。浮點數值沒辦法用十進制來精確表示的原因要歸咎於CPU表示浮點數的方法。這樣的話您就可能會犧牲一些精度,有些浮點數運算也會引入誤差。以上面提到的情況為例,2.4的二進制表示並非就是精確的2.4。反而最為接近的二進制表示是 2.3999999999999999。原因在於浮點數由兩部分組成:指數和尾數。浮點數的值實際上是由一個特定的數學公式計算得到的。您所遇到的精度損失會在任何操作系統和編程環境中遇到。

計算機表示浮點數的方法:

s 符號位
M 表示有效數字,大於1小於2.
2^E 表示指數位。


例子:十進制的9,轉化成二進制:1001.0,用二進制的科學表示法表示:1.001 * 2^3,此時s=0,
M=1.001,2^E=2^3,E= 3;
32為的處理機中,1位表示符號位,8位表示指數位,23位表示有效數字位。我們知道科學技術法中E存在負數的情況(10 ^ -3) 所以E必須拿出一半的表示值來表示負數。
E為8位,它的取值範圍為0-255;所以這個中間值就是127,他相當於0的作用。
對於上個例子 E=3 ,E+中間值=3 + 127 = 130; 130的二進制表示:10000010。有效數字計算機擦去省略第一個1的策略來存儲。

6.TestBigDecimal

驗證結果截圖:

技術分享

7.Verify

驗證結果截圖:

技術分享

原因:

對於第一個輸出,源程序直接就按部就班執行輸出x,y的值,對於第二個,源程序直接將x+y計算輸出,再輸出要輸出的結果。

關於課堂動手動腦以及課後實驗性的問題的總結整理