2013-08-24 46 views

回答

0

在某些使用2次冪除數的情況下,使用自行研究的計算餘數的方法可以做得更好,但通常半途體面的編譯器會盡可能使用可變除數,或者「奇怪」的因子不適合任何模式。

請注意,一些CPU甚至沒有乘法操作,所以(在那些上)乘法對於加法來說相當慢(對於32位乘法至少是64x)。 (但是,如果乘數是文字,智能編譯器可能會對此進行改進。)稍大一些的數字沒有分隔操作,或者有很慢的分隔操作。 (在一個具有快速乘法器的CPU上,乘法的速度可能只比加法速度快4倍,但在「普通」硬件上,它的速度比32位速度低16-32倍,除此之外,速度比乘法慢2-4倍,但可以在某些硬件上要慢得多。)

其餘的操作是在硬件很少實施,並且可能需要正常A % B地圖,沿着A - ((A/B) * B)(一些額外的作業線的東西,以確保正確的符號,等)。

(我瞭解這個東西,而微程序爲SUMC computer for RCA/NASA早在70年代初的指令集。)

+1

其餘部分(對於'%')經常作爲除法操作的一部分輸出。 x86和MIPS實現了這一點,它涵蓋了現代處理器的一個相當大的子集。 – nneonneo

+0

@nneonneo - 啊,是的,我忘記了。雖然有幾個處理器不能從其餘部分中分離出來(作爲一個單獨的結果),並且通常這樣獲得的其餘部分不符合語言的定義。順便說一句,有時令人沮喪的是,沒有一種通用的語言提供* divide-with-remainder *操作,因爲當你需要餘數時,你經常需要商。 (儘管我認爲有些編譯器可以在正確的環境下一起優化這兩個操作。) –

+0

Python很常見,並且它具有'divmod'來達到這個目的:) – nneonneo

0

不,編譯器將以最有效的方式實現%。

在速度方面,+和 - 是最快的(同樣快,通常由同一個硬件完成)。

*,/和%慢得多。乘法基本上是通過你在小學時學到的方法完成的 - 將第一個數字乘以第二個數字中的每個數字並加上結果。通過二進制使一些黑客成爲可能。從幾年前開始,乘數比加法慢3倍。司應該類似於繁殖。剩餘部分與部門相似(實際上它通常是同時計算)。

確切的差異取決於CPU類型和精確模型。您需要查找特定機器的CPU規格表中的延遲。

+0

是否有任何來源,我可以從獲得更多的信息?也許我錯過了一些問題。 –

+0

最好的學習方法 - 學習裝配和數字電路設計。作爲獎勵,您將瞭解您的計算機是如何工作的,以及如何完成工作。 –