簡單問題: 爲什麼(7**3) ** 24 % 25
幾乎沒有時間運行,但7 ** 3 ** 24 % 25
沒有終止?Python冪運算和分組順序
回答
因此,7 ** 3 ** 24
被評估爲7 ** 282429536481
(硬),而(7**3) ** 24
只是343 ** 24
(簡單)。
作爲一個有趣的旁註:CPython的,其中有一個窺視孔優化器,能夠優化掉與常量合併的「容易」的情況。但「硬」的情況下只能摺疊3 ** 24
。
>>> def foo():
return 7 ** 3 ** 24 % 25
...
>>> def bar():
return (7**3) ** 24 % 25
...
>>> dis.dis(foo)
2 0 LOAD_CONST 1 (7)
3 LOAD_CONST 5 (282429536481)
6 BINARY_POWER
7 LOAD_CONST 4 (25)
10 BINARY_MODULO
11 RETURN_VALUE
>>> dis.dis(bar)
2 0 LOAD_CONST 7 (1L)
3 RETURN_VALUE
OOOOOOOOH是的!這與常規數學中的相同。對不起,我很蠢。 – 2015-04-02 03:47:22
是的,1.6910144928582986e + 238680647722是相當大的。 :-)當然,如果我們只關心mod 25,我們可以使用pow的三參數形式來快速得到結果。 – DSM 2015-04-02 03:47:54
當它用上標寫出時,順序是顯而易見的,但在這種表示法中,我沒有意識到發生了什麼。 – 2015-04-02 03:48:29
- 1. Python中的模冪運算
- 2. Python數學運算順序
- 3. Python中的模冪運算算法
- 4. Python中的時序模冪運算:語法與函數
- 5. C++運算順序:分工與另外
- 6. 簡化模冪運算C++
- 7. C++中的模冪運算
- 8. Java:處理冪運算
- 9. C++:實現模冪運算
- 10. 評估順序和運算符<<
- 11. Python分配順序
- 12. 順序分組值
- 13. 數學運算順序算法
- 14. 在javascript中的順序算術運算
- 15. 兩個列表性能的Python冪運算
- 16. 分組和按順序不工作
- 17. 如何拆分順序和組合verilog
- 18. 蔚藍冪等運算的模式?
- 19. Maple中的快速模冪運算
- 20. 使用模冪運算的C編程
- 21. XOR乘法和算術運算的順序
- 22. 分組順序depands在SQL
- 23. 多播分組順序
- 24. Python - 奇怪/意外的行爲 - 運算符的優先順序
- 25. 如何在C#中執行模乘和冪運算?
- 26. 如何提高日誌和冪運算的消耗
- 27. Python:按字母順序對列表進行排序/分組
- 28. Python的 - 組順序的數組成員
- 29. Rx運算符的執行順序
- 30. 邏輯運算符的執行順序
運算符優先級.. – wim 2015-04-02 03:42:03
@wim具體是什麼?如果'%'優先於'**',那麼它將計算343到24的冪,這幾乎不需要時間。否則,它與快速表達相同。 – 2015-04-02 03:43:02