4 回答

TA貢獻2037條經(jīng)驗 獲得超6個贊
這不是一個完整的答案(mhlester已經(jīng)涵蓋了很多我不會復制的好地方),但我想強調一個數(shù)字的表示取決于你工作的基礎。
考慮分數(shù)2/3
在良好的基礎10中,我們通常會將其寫成類似的東西
0.666 ...
0.666
0.667
當我們查看這些表示時,我們傾向于將它們中的每一個與分數(shù)2/3相關聯(lián),即使只有第一個表示在數(shù)學上等于分數(shù)。第二和第三表示/近似的誤差大約為0.001,實際上比9.2和9.1999999999999993之間的誤差差。事實上,第二個表示甚至沒有正確舍入!然而,我們沒有將0.666作為數(shù)字2/3的近似值的問題,所以我們不應該在大多數(shù)程序中如何逼近9.2。(是的,在某些程序中它很重要。)
數(shù)字基數(shù)
所以這里的數(shù)字基礎是重要的。如果我們試圖在基數(shù)3中代表2/3,那么
(2/3)10 = 0.2 3
換句話說,通過切換基數(shù),我們可以得到相同數(shù)字的精確有限表示!外賣是即使你可以將任何數(shù)字轉換為任何基數(shù),所有有理數(shù)在某些基礎上都有精確的有限表示,但在其他基數(shù)中沒有。
為了把這一點推到家里,讓我們看看1/2。盡管這個完全簡單的數(shù)字在基數(shù)10和2中具有精確表示,但它可能會讓您感到驚訝,它需要在基數(shù)3中重復表示。
(1/2)10 = 0.5 10 = 0.1 2 = 0.1111 ... 3
為什么浮點數(shù)不準確?
因為它們經(jīng)常是近似于在基數(shù)2中無法有限地表示的有理數(shù)(數(shù)字重復),并且通常它們近似于在任何基數(shù)中可能無法在有限多個數(shù)字中表示的實數(shù)(可能是無理數(shù))數(shù)。

TA貢獻1911條經(jīng)驗 獲得超7個贊
雖然所有其他答案都很好,但仍有一件事缺失:
這是不可能的代表無理數(shù)(如π, ,sqrt(2)
,log(3)
等)精確!
這就是他們被稱為非理性的原因。世界上沒有多少比特存儲就足以容納其中一個。只有符號算術才能保持其精度。
雖然如果你將數(shù)學需求限制在有理數(shù),但只有精度問題變得易于管理。您需要存儲一對(可能非常大)整數(shù)a
并b
保存分數(shù)所代表的數(shù)字a/b
。所有算術都必須在分數(shù)上完成,就像在高中數(shù)學中一樣(例如a/b * c/d = ac/bd
)。
當然,你仍然會遇到同樣的麻煩時pi
,sqrt
,log
,sin
,等都有涉及。
TL; DR
對于硬件加速算術,只能表示有限數(shù)量的有理數(shù)。每個不可表示的數(shù)字都是近似的。無論系統(tǒng)如何,都不能表示某些數(shù)字(即無理數(shù))。

TA貢獻1785條經(jīng)驗 獲得超8個贊
有無數(shù)的實數(shù)(很多你不能枚舉它們),并且有無限多的有理數(shù)(有可能枚舉它們)。
浮點表示是有限的(就像計算機中的任何東西一樣),因此不可避免地會有很多很多數(shù)字無法表示。特別是,64位只允許您區(qū)分18,446,744,073,709,551,616個不同的值(與無窮大相比無差別)。按照標準慣例,9.2不是其中之一。對于某些整數(shù)m和e,可能具有m.2 ^ e形式的那些。
您可能會想出一個不同的計算系統(tǒng),例如10,其中9.2將具有精確的表示。但其他數(shù)字,比如1/3,仍然無法代表。
另請注意,雙精度浮點數(shù)非常準確。它們可以表示任意數(shù)字,范圍很廣,最多可包含15個精確數(shù)字。對于日常生活計算,4或5位數(shù)就足夠了。你永遠不會真正需要那些15,除非你想要計算你一生中的每一毫秒。
添加回答
舉報