2017-12-22 20 views
1

私はtimeitでテストを実行しており、何が起こっているのか理解していません。私は2を評価していますが、それは0.02±0.01秒かかると言われています。私は間違って何をしていますか?時間がそれよりも速い

例:これは実行に2.5分かかります

2**10000000 

これは0.01637562597170472のようなものを即座に返します。

timeit.Timer(stmt="2**10000000").timeit() 

答えて

3
2**10000000 

これは2.5になりません。実行する分。整数がデフォルトでどのように出力されるかは、10進文字列に変換するのに2.5分かかります。 (2**10000000) % 10000000またはlen(hex(2**10000000))を試してください。

+0

バイナリ10進変換のアルゴリズムははるかに高速ですが、Pythonでは単純なアルゴリズムを使用しています。あなたは[gmpy2](https://github.com/aleaxit/gmpy)のようなサードパーティのライブラリで一般的に速く、この操作の実装と任意精度数学を見つけることができます。 – user2357112

+0

より速いアルゴリズムでは、この変換に2.5分ではなく、2分の1がかかります。 – user2357112

-1

@Ryanの追加補足a = 2 ** 10000000を試してみるとすぐに戻ります。しかし、あなたがprint(a)を試してみると、実行に時間がかかります。

@ Ryanが言っているように、この長い時間は10進数の文字列に変換することによってコストがかかります。 timeit.Timer(stmt="2**10000000").timeit()は何も印刷しないので、すぐにも戻ります。

関連する問題