浮點除法與乘法的效能影響
有人指出,浮點除法的計算速度比乘法慢。本文深入研究了這項斷言,並檢驗了其在現代 PC 架構中的有效性。
浮點運算中的除法在時間複雜度方面通常超過乘法。 CPU 通常在 1-2 個時脈週期內執行乘法,而除法則需要更長的過程。
為了說明效能差距,請考慮以下程式碼片段:
float f1 = 200f / 2; // vs. float f2 = 200f * 0.5;
在許多情況下,由於乘法比除法固有的效率,f2 的計算速度會更快。
這種效能差異也體現在更複雜的運算中。例如,以下循環:
float f1; float f2 = 2; float f3 = 3; for(i = 0; i < 1e8; i++) { f1 = (i * f2 + i / f3) * 0.5; //or divide by 2.0f, respectively }
使用乘以 0.5 而不是除以 2.0f 會更有效地執行,因為除法需要迭代步驟。
顯著的效能差異源自於分割的架構複雜性。與可以透過將其轉換為多次加法來並行化的乘法不同,除法涉及迭代減法,這是一種不太可並行化的操作。為了補償,有些浮點單元採用倒數近似和乘法,犧牲一些精確度來提高效率。
以上是現代 CPU 中浮點除法真的比乘法慢嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!