私はtimeitでテストを実行しており、何が起こっているのか理解していません。私は2を評価していますが、それは0.02±0.01秒かかると言われています。私は間違って何をしていますか?時間がそれよりも速い
例:これは実行に2.5分かかります
:
2**10000000
これは0.01637562597170472のようなものを即座に返します。
timeit.Timer(stmt="2**10000000").timeit()
私はtimeitでテストを実行しており、何が起こっているのか理解していません。私は2を評価していますが、それは0.02±0.01秒かかると言われています。私は間違って何をしていますか?時間がそれよりも速い
例:これは実行に2.5分かかります
:
2**10000000
これは0.01637562597170472のようなものを即座に返します。
timeit.Timer(stmt="2**10000000").timeit()
2**10000000
これは2.5になりません。実行する分。整数がデフォルトでどのように出力されるかは、10進文字列に変換するのに2.5分かかります。 (2**10000000) % 10000000
またはlen(hex(2**10000000))
を試してください。
@Ryanの追加補足a = 2 ** 10000000
を試してみるとすぐに戻ります。しかし、あなたがprint(a)
を試してみると、実行に時間がかかります。
@ Ryanが言っているように、この長い時間は10進数の文字列に変換することによってコストがかかります。 timeit.Timer(stmt="2**10000000").timeit()
は何も印刷しないので、すぐにも戻ります。
バイナリ10進変換のアルゴリズムははるかに高速ですが、Pythonでは単純なアルゴリズムを使用しています。あなたは[gmpy2](https://github.com/aleaxit/gmpy)のようなサードパーティのライブラリで一般的に速く、この操作の実装と任意精度数学を見つけることができます。 – user2357112
より速いアルゴリズムでは、この変換に2.5分ではなく、2分の1がかかります。 – user2357112