2009-09-14 81 views
0

我嘗試我的手在谷歌編程挑戰賽,有是一個使用雙值的問題處理...浮點數

我有一個很難用C編碼,總是莫名其妙地我的答案會從不同在某些情況下的實際答案...

我想知道的是,哪種語言具有最好的浮點實現和處理?

這已經發生了很多次,我覺得是時候換用更好的語言來處理漂浮物了。有任何想法嗎?

回答

1

我想知道哪種語言具有最好的浮點實現和處理能力?

Fortran或彙編器;許多其他人沒有標準化的機制來訪問所有類型(80位實數等)和處理器舍入模式(通常也可用作C語言中的編譯器擴展)。

但是,浮點不是無限精確的,多個精度值可能需要無限的空間來表示某些值。

一些表達另一種方法是計劃或支持有理數其他口齒不清家庭語言 - 所以1/3被存儲整數1和整數3

如果你使用比較的結果表示那麼您應該閱讀Java規範並設置您的C環境以使用相同的舍入模式和算法; java.lang.Math trig函數基於netlib而不是C標準庫。

還記得(你應該在學校教過什麼),如果你的輸入只給予一定數量的有效數字,不要將結果報告給比你更有意義的數字。

4

IEEE 754指定了關於浮點數的「你需要知道的一切」。這不是你使用的編程語言,也不是涉及的編譯器/硬件。

如果你想精確非整數,你需要使用一個十進制類如由.NETPythonJava提供,例如。

+3

十進制類型不比常規浮點型更精確,只不過它們在用十進制表示分數時恰好是精確的。這是一個UI的問題。 – SingleNegationElimination 2009-09-14 06:50:51

3

幾乎所有語言的fp都委託給硬件。做浮點計算是昂貴的,但是很有用,所以現代處理器幾乎都有一些內置邏輯來進行這些計算。用這種語言來重塑這個特殊的車輪是非常愚蠢的。

這就是說,有幾件事你可以做,取決於你想要什麼你的FP計算。如果您需要雙精度硬件通常可用的更高精度,則可以使用一些重新發明方向的庫,可能是因爲您必須解決一個特別惡劣的條件系統方程組,例如GMP提供了許多具有任意精度的數字格式。這將比硬件FP慢大約一個數量級,但也許你需要。

如果您遇到1.0/10.0 == 10.000000002問題,可能是因爲您試圖操縱貨幣,那麼您需要以不同的方式進行計算,例如許多語言只提供一個特殊的數字類以大多數會計師所期望的方式使用十進制數字。你也可以使用上面提到的bignum庫。

如果您需要更多的計算資源,現代GPU的配備了數十或數百個fp核心,現在提供了一些非常方便的API來訪問它們。你可能想看看OpenCL,它爲這種解決方案提供了一個可移植的抽象。