為何很大的浮點大數加一個很小的數計算結果不是預期

來源:互聯網
上載者:User

標籤:

通常浮點數被表示成N=S*rj S稱為尾數,可正可負,j稱為階碼可正可負。r是基數,在電腦中取以2的倍數。

電腦中為了提高精度,進行規格化操作:即假設N=11.0101  則規格化表示為N=0.110101*210表示,因為該規格化使得浮點數的表示精度最高。

機器中浮點數由兩部分組成:階碼和尾數。基數為2

 

階碼由階符跟階碼組成,尾數由數符跟尾數組成

其中階碼是整數,階符和階碼的位元m合起來反映浮點數的表示範圍及小數點的實際位元。尾數是小數,其位元反映了浮點數的精度。

還有機器零這個概念:即浮點數尾數為0,或者階碼小於等於所能表示的最小數。機器都把該浮點數看成0.並稱該0為機器0.

 

電腦中兩個浮點數加減法的運算步驟:

1、對階,使兩個數的小數點位置對齊。則需要使階碼一樣。也就是咱們數學經常做的x*100+y*1000 = x*0.1*1000+y*1000  因為電腦中對階是低階向高階對齊。則當兩個數值相差很大的時候,在進行對階的時候小數點需要向左移動,導致末端的資料會出現丟失的現象。一個很簡單的例子,比如0.10100*2100跟0.10000*21000,則進行對階的時候則小的這個數需要階碼需要加100,又因為精度為5位,則使得左邊的數表示為0.00001*21000而導致出現精度丟失現象。

2、尾數求和。則如第一個例子的0.10100*2100跟0.10000*21000對階相加之後的結果為0.10001*21000

3、規格化,即將小數點的最高位移到為1,因為當前最高位為1所以不用移動

4、舍入,為提高精度,考慮尾數右移時丟失的數值。

5、溢出判斷。

 

這裡只講為啥相加會有精度丟失的現象。相減也是同一個道理,對階導致的精度丟失。

為何很大的浮點大數加一個很小的數計算結果不是預期

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.