2010-07-07 48 views
4

我在想最近浮點數學如何在計算機上工作,並且很難理解公式背後的所有技術細節。我需要了解加法,減法,乘法,除法和餘數的基礎知識。有了這些,我將能夠做出trig函數和公式。浮點算法在C

我可以猜出一些事情,但它有點不清楚。我知道一個固定點可以通過一個信號標誌,一個基數和一個尾數來分隔一個4字節的整數。有了這個,我們有一個1位標誌,一個5位基數和一個10位尾數。 32位字是完美的浮點值:)

要添加兩個浮點數,我可以簡單地嘗試添加兩個mantissas並將進位添加到5位基數?這是一種做浮點數學的方法(或者定點數學,爲真),還是我完全錯了?

我看到的所有解釋都使用公式,乘法等等,它們看起來如此複雜以至於我猜想的東西會更簡單一些。我需要一個解釋更直接的開始程序員,而不是數學家。

+0

爲什麼你想*寫*新的浮點功能,而不是簡單地使用從標準數學庫中的函數? – 2010-07-07 21:56:00

+6

我同意這是他應該*做的。然而,想要知道它是如何工作的,肯定沒有錯。應該有更多像這樣的人。 – 2010-07-07 22:09:42

+5

@Daniel 因爲他想學習?本質上,K&R的「The C Programming Language」中的所有練習都要實現常見的unix實用程序。 – Tyler 2010-07-07 22:11:17

回答

1

基數取決於表示形式,如果你使用基數r = 2你永遠不能改變它,這個數字甚至沒有任何數據告訴你哪個基數有。我認爲你錯了,你的意思是指數。

要在浮點數中添加兩個數字,您必須通過旋轉尾數來使指數等於另一個數。右邊一位表示指數+ 1,左邊一位表示指數-1,當您有指數相同的數字時,您可以添加它們。

值(X)=尾數*基數^指數

adding these two numbers 

    101011 * 2^13 
    001011 * 2^12 

would be the same as adding: 

    101011 * 2^13 
    000101 * 2^13 

使得指數等於一個到另一個可以操作之後。 你也必須知道表示是否有隱含的位,我的意思是,最重要的位必須是1,所以通常,iee標準中它已知存在,但它沒有被表示,雖然它用於操作。

我知道這可能有點混亂,我不是最好的老師,所以你有任何疑問,只是問。

+0

我的意思是指數。謝謝:)數學總是有點令人困惑,但它適合我。別擔心,你是一位好老師。 :) – 2010-07-07 22:42:51

+0

我似乎記得Kahan有關使用格式對齊mantissas的相同位數的pre-IEEE 754系統的長篇謾罵,以及此類系統具有的不良屬性。如果你這樣做,你肯定不會得到正確的舍入結果。我不記得它是哪一個,但它是http://www.cs.berkeley.edu/~wkahan/上的出版物之一 – 2011-04-14 07:57:50

1

跑步,不要走路,以獲得Knuth的Seminumerical Algorithms其中包含精妙的直覺和算法背後做多精度和浮點算術。