亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么浮點數不準確?

為什么浮點數不準確?

揚帆大魚 2019-05-22 13:47:02
為什么浮點數不準確?為什么有些數字在存儲為浮點數時會失去準確性?例如,十進制數9.2可以精確地表示為兩個十進制整數(92/10)的比率,兩者都可以用二進制(0b1011100/0b1010)精確表示。但是,存儲為浮點數的相同比率永遠不會完全等于9.2:32-bit "single precision" float: 9.1999998092651367187564-bit "double precision" float: 9.199999999999999289457264239899814128875732421875這樣一個看似簡單的數字如何在64位內存中表達“太大” ?
查看完整描述

4 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

這不是一個完整的答案(mhlester已經涵蓋了很多我不會復制的好地方),但我想強調一個數字的表示取決于你工作的基礎。

考慮分數2/3

在良好的基礎10中,我們通常會將其寫成類似的東西

  • 0.666 ...

  • 0.666

  • 0.667

當我們查看這些表示時,我們傾向于將它們中的每一個與分數2/3相關聯,即使只有第一個表示在數學上等于分數。第二和第三表示/近似的誤差大約為0.001,實際上比9.2和9.1999999999999993之間的誤差差。事實上,第二個表示甚至沒有正確舍入!然而,我們沒有將0.666作為數字2/3的近似值的問題,所以我們不應該在大多數程序中如何逼近9.2。(是的,在某些程序中它很重要。)

數字基數

所以這里的數字基礎是重要的。如果我們試圖在基數3中代表2/3,那么

(2/3)10 = 0.2 3

換句話說,通過切換基數,我們可以得到相同數字的精確有限表示!外賣是即使你可以將任何數字轉換為任何基數,所有有理數在某些基礎上都有精確的有限表示,但在其他基數中沒有。

為了把這一點推到家里,讓我們看看1/2。盡管這個完全簡單的數字在基數10和2中具有精確表示,但它可能會讓您感到驚訝,它需要在基數3中重復表示。

(1/2)10 = 0.5 10 = 0.1 2 = 0.1111 ... 3

為什么浮點數不準確?

因為它們經常是近似于在基數2中無法有限地表示的有理數(數字重復),并且通常它們近似于在任何基數中可能無法在有限多個數字中表示的實數(可能是無理數)數。


查看完整回答
反對 回復 2019-05-22
?
Smart貓小萌

TA貢獻1911條經驗 獲得超7個贊

雖然所有其他答案都很好,但仍有一件事缺失:

這是不可能的代表無理數(如π, ,sqrt(2),log(3)等)精確!

這就是他們被稱為非理性的原因。世界上沒有多少比特存儲就足以容納其中一個。只有符號算術才能保持其精度。

雖然如果你將數學需求限制在有理數,但只有精度問題變得易于管理。您需要存儲一對(可能非常大)整數ab保存分數所代表的數字a/b。所有算術都必須在分數上完成,就像在高中數學中一樣(例如a/b * c/d = ac/bd)。

當然,你仍然會遇到同樣的麻煩時pisqrt,log,sin,等都有涉及。

TL; DR

對于硬件加速算術,只能表示有限數量的有理數。每個不可表示的數字都是近似的。無論系統如何,都不能表示某些數字(即無理數)。


查看完整回答
反對 回復 2019-05-22
?
慕的地10843

TA貢獻1785條經驗 獲得超8個贊

有無數的實數(很多你不能枚舉它們),并且有無限多的有理數(有可能枚舉它們)。

浮點表示是有限的(就像計算機中的任何東西一樣),因此不可避免地會有很多很多數字無法表示。特別是,64位只允許您區分18,446,744,073,709,551,616個不同的值(與無窮大相比無差別)。按照標準慣例,9.2不是其中之一。對于某些整數m和e,可能具有m.2 ^ e形式的那些。


您可能會想出一個不同的計算系統,例如10,其中9.2將具有精確的表示。但其他數字,比如1/3,仍然無法代表。


另請注意,雙精度浮點數非常準確。它們可以表示任意數字,范圍很廣,最多可包含15個精確數字。對于日常生活計算,4或5位數就足夠了。你永遠不會真正需要那些15,除非你想要計算你一生中的每一毫秒。


查看完整回答
反對 回復 2019-05-22
  • 4 回答
  • 0 關注
  • 1662 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號