2012-10-08 81 views

回答

8

我會假設你正在談論的x86,但很多的下方也同樣適用於其它架構

浮點運算是昂貴的,因爲在浮點數操作要比操作更貴整數。就這麼簡單。整數的格式使得加法和減法在硬件中實現起來非常簡單。浮點數(幾乎總是)在IEEE 754實施,其中存儲的數字作爲一個標誌,指數和尾數,允許非常大和非常小的數字的表示,但它是在運行速度爲代價。如果數字只有3位小數,則可以使用整數,最後除以3即可;精度範圍廣泛使事情複雜化。

這就是說,現代處理器的浮點數比以前更好。浮點數學最初是在一個可選的協處理器上實現的 - 特別是Intel 80387 - 它只能通過特殊指令訪問。您可以將值壓入x87堆棧,執行操作,然後將其彈回到硬件寄存器中。非常慢,因爲它必須離開處理器。更重要的是,這些特定的操作變得「有風險」使用,因爲你不能確定處理器是否存在 - 如果不存在,你的程序將工作,但它會使用模擬協處理器的軟件例程。如果你是一名遊戲開發人員,並且你不能依賴inverse square root,那麼你可以自己完成這項工作,並且你可以在所有系統上同樣快速運行 - 在某些系統上運行速度並不快,而在其他系統上速度要慢得多。

如今,處理器有special floating point operations而設計的性能,更重要的是,保證在那裏。所以它們非常快,而浮點運算不可避免地比整型運算慢,但它們通常不足以解決問題 - 尤其是以錯誤和複雜性爲代價。更重要的是,this answer表明,在大多數情況下,這是一種洗滌。

在任何情況下,性能現在已經足夠好,以至於舊的諺語在編程時間比機器時間更重要,並且您肯定會花更多時間編寫一些避免浮點數的奇特算法只會使用它們。

+0

好的答案謝謝! – Siddhartha

相關問題