2011-09-23 148 views
70

由於Google難以閱讀定義和浮點數,我無法理解定點和浮點數。但是我沒有看到它們提供了一個關於它們究竟是什麼的簡單解釋。我能用例子得到一個簡單的定義嗎?固定點與浮點數

+0

我也很難找到一個好的定義。我正在尋找的主要內容是幫助我理解這些結果:3.11 + 42.0 = 45.110001(不是45.11),3.12 + 42.0 = 45.119999(不是45.12),3.15 + 42.0 = 45.150002(不是45.15)。 –

+0

我認爲這是一個相關的討論(特別是描述浮點數的陷阱和固定點更好的精度,以及爲什麼你永遠不會想把錢當作浮點數來描述)http://stackoverflow.com/questions/6320209/javawhy - 我們使用bigdecimal而不是double-in-the-real-world –

+0

[提及主題的隨機鏈接](https://www.khronos.org/opengles/)「OpenGL®ES OpenGL ES包含用於浮點和定點系統的**配置文件**和EGL™規範......「 –

回答

-2

採取數123.456789

  • 作爲一個整數,此數將是123
  • 作爲一個固定點(2),這 數目將是123.46(假設你四捨五入它)
  • 作爲一個浮點數,這個數將是123.456789

浮點數可以讓你用很大的精度表示大多數每個數字。固定不精確,但更簡單的電腦..

+9

您可以編寫一個數字的精度與是否寫入浮點數,整數或固定值無關它與可用的有效位數有關,例如,INT_MAX是一個可以精確表示爲int的數字,但不是浮點數,因爲它們沒有精確的31位精度代表它 – Kian

+1

固定是最精確的,只要它的大小足以處理有問題的數字。當您使用定點數進行數學運算時,如果計算的餘數超過小數點,則會發生舍入。使用浮點數,如果添加一個非常小的數字,可能會得到一個非常不準確的值。當發生數字丟失而不捨入 –

+0

這是誤導和錯誤的。固定點意味着小數點後的位數是固定的。它沒有說明它有多精確。 –

19

定點數字只是意味着有小數點後的固定數字位數。浮點數允許小數點後的位數變化。

例如,如果您有一種存儲小數點後需要正好四位數的數字的方法,那麼它是固定點。沒有這個限制,它就是浮點。

通常,當使用固定點時,程序員實際上使用一個整數,然後假設某些數字超出小數點。例如,我可能想要保留兩位數的精度,所以100的值意味着實際上意味着1.00,101意味着1.01,12345意味着123.45等等。

浮點數是更通用的,因爲它們可以表示非常小或者以相同的方式輸出非常大的數字,但是在小數點後的位置必須有額外的存儲空間是一個小的代價。

+0

當您開始對它們進行計算時,浮點使用會成爲一個問題,例如,如果您將一個非常小的和非常大的浮點數一起添加。總結的結果失去了準確性,因爲它必須表示一個有兩個極值的數字,而小數點後的數字會被削減(並且不是四捨五入的)。 –

+0

指數值在浮點中的潛在用途可能會導致計算機系統期待標準數字的問題 –

85

固定點編號具有爲整數部分(小數點左邊的部分)保留的特定位數(或位數)和爲小數部分保留的特定位數(零件小數點右側)。無論你的編號有多大或多小,它總是會爲每個部分使用相同數量的位。例如,如果您的定點格式爲十進制IIIII.FFFFF,那麼您可以表示的最大數字爲99999.99999,最小的數字爲00000.00001。處理這些數字的每一行代碼都必須具有小數點位置的內置知識。

浮點數不保留整數部分或小數部分的特定位數。相反,它儲備了一定數量的個數(稱爲尾數尾數)和一定數目的位位說其中這個數字的小數點後一位坐在內(稱爲指數)。因此,一個浮點數佔用了10個數字,其中2個數字爲指數保留,可能代表最大值9.9999999e+50和最小值0.0000001e-49

+4

那麼你忘記了浮點數字幾乎總是有符號的,所以最小值真的是'-9.9999999e + 50' 。 –

+0

此外還有指數偏置,因此您可以在0和1之間表示遠大於1,000,000和1,000,001之間的離散值。浮點運算出現很多複雜性,比如確保當偏差不足以提高精度時,不報告0作爲兩個非常相似的數字之間的差異。 –

+18

@BrianGordon:我沒有忘記符號位;我故意忽略它們以便擁有簡單的**描述,而不必擔心最小/最大與最小/最大之間的差異。我還故意排除指數偏置(與任何兩個數字之間離散值的數量無關),NaN,無窮大,正常化,漸進下溢,有符號零,大多數浮點數都是二進制的(它允許第一位的尾數被排除在外)以及其他一些不必要的方面來說明這個概念。 – Gabe

2

術語「固定點」是指數字表示的相應方式,在小數點之後(有時在小數點之前)具有固定數量的數字。 使用浮點表示法時,相對於數字的有效數字,小數點的位置可以「浮動」。例如,具有統一的小數點位置約定的定點表示可以表示數字123.45,1234.56,12345.67等,而浮點表示可以另外表示1.234567,123456.7,0.000,1234567000000000等等。

2

從我的理解中,定點算法是用整數完成的。其中小數部分存儲在固定數量的位中,或者數字乘以需要多少位數的小數精度。

例如,如果需要存儲數字12.34,並且我們只需要兩位小數點後的精度數字,則數字乘以100得到1234。當對這個數字進行數學運算時,我們會使用這個規則集。將562056.20添加到此數字將生成6854數據或68.54

如果我們要計算一個定點數的小數部分,我們使用模(%)操作數。

12.34(僞):

v1 = 1234/100 // get the whole number 
v2 = 1234 % 100 // get the decimal number (100ths of a whole). 
print v1 + "." + v2 // "12.34" 

浮點數是在編程完全不同的故事。當前的浮點數標準使用類似於23位的數字的數據,8位的指數和1,但爲符號。 See this Wikipedia link for more information on this.