[英]Output and speed of own defined power() function is different than inbuilt python pow() function
[英]Complexity of inbuilt function used in Python3 to compute pow(a,b)
使用迭代的函數以及n為偶數時n =(axa) n / 2和n為奇數時[[axa) (n-1)/ 2 ] xa的事實是否會比python中的內置函數產生更好的結果3。
不,您將無法執行Python內置操作。 原因很簡單,就CPython而言,那些內置操作運行C代碼。 您不會通過編寫Python代碼來擊敗C代碼。
如果我們專門考慮您的情況,您的解決方案將需要實例化多個整數或浮點對象,進行比較,相乘, 所有這些工作都在Python中完成 ! 這是內置的冪運算符無法執行的操作,因為Python的一條指令以C語言計算冪,並且僅實例化一個對象,這就是您想要的值。
我們可以通過使用dis
來查看python字節碼來看到。
>>> import dis
>>> dis.dis('a**b')
1 0 LOAD_NAME 0 (a)
2 LOAD_NAME 1 (b)
4 BINARY_POWER
6 RETURN_VALUE
>>> dis.dis("""
r = 1
while b > 1:
if b % 2:
b = (b - 1) / 2
a *= a
r *= a
else:
b /= 2
a *= a
r *= a""")
2 0 LOAD_CONST 0 (1)
2 STORE_NAME 0 (r)
3 4 SETUP_LOOP 66 (to 72)
6 LOAD_NAME 1 (b)
8 LOAD_CONST 0 (1)
10 COMPARE_OP 4 (>)
12 POP_JUMP_IF_FALSE 70
4 14 LOAD_NAME 1 (b)
16 LOAD_CONST 1 (2)
18 BINARY_MODULO
20 POP_JUMP_IF_FALSE 52
5 22 LOAD_NAME 1 (b)
24 LOAD_CONST 0 (1)
26 BINARY_SUBTRACT
28 LOAD_CONST 1 (2)
30 BINARY_TRUE_DIVIDE
32 STORE_NAME 1 (b)
6 34 LOAD_NAME 2 (a)
36 LOAD_NAME 2 (a)
38 INPLACE_MULTIPLY
40 STORE_NAME 2 (a)
7 42 LOAD_NAME 0 (r)
44 LOAD_NAME 2 (a)
46 INPLACE_MULTIPLY
48 STORE_NAME 0 (r)
50 JUMP_ABSOLUTE 6
9 52 LOAD_NAME 1 (b)
54 LOAD_CONST 1 (2)
56 INPLACE_TRUE_DIVIDE
58 STORE_NAME 1 (b)
10 60 LOAD_NAME 2 (a)
62 LOAD_NAME 2 (a)
64 INPLACE_MULTIPLY
66 STORE_NAME 2 (a)
68 JUMP_ABSOLUTE 6
70 POP_BLOCK
11 72 LOAD_NAME 0 (r)
74 LOAD_NAME 2 (a)
76 INPLACE_MULTIPLY
78 STORE_NAME 0 (r)
80 LOAD_CONST 2 (None)
82 RETURN_VALUE
我會讓你猜猜內置的效率有多高。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.