我很好奇它爲什麼它乘法的速度比在python中獲取能力要快得多(儘管從我讀過的這個很可能在其他許多語言中也是如此)。例如它的速度更快做計算能力的速度(在python中)
x*x
比
x**2
我想**操作比較一般,也可以處理分數的權力。但是,如果這就是爲什麼它慢得多,爲什麼它不執行一個int指數檢查,然後只是做乘法?
編輯:下面是一些示例代碼我想...
def pow1(r, n):
for i in range(r):
p = i**n
def pow2(r, n):
for i in range(r):
p = 1
for j in range(n):
p *= i
現在,POW2僅僅是一個簡單的例子,並且顯然不是優化!
但即使如此,我發現使用n = 2和r = 1,000,000,那麼pow1需要約2500毫秒,pow2需要約1700毫秒。
我承認,對於大的n值,pow1確實比pow2快得多。但這並不令人感到意外。
如果你改變你的循環由1/1000秒,而不是通過1S去,會發生什麼? – Nosredna 2009-06-19 20:42:11
是的,在這種情況下,**比我瘋狂的循環更快!好吧,我想我只需要處理這樣一個事實,即對於小型指數來說,乘法和不使用**會更快。 – Christwo 2009-06-19 21:13:21
我已經對此進行了博客(http://numericalrecipes.wordpress.com/2009/06/05/binary-exponentiation/),但通過平方搜索指數(http://en.wikipedia.org/wiki/ Exponentiation_by_squaring)也可以讓您更好地瞭解如何有效計算整數指數的權力,以及爲什麼它們對於小指數(<4)可能稍微慢一點。 – Jaime 2009-06-19 23:32:47