あんまり変わんないけど、pythonで巨大数を速く作る
はじめに
最大値を求めるコードを書くときに、最大値を仮おきしたい。
その際、どのようにしたら高速に作れるか調べた。
結果、どの方法もあんまり変わらなかった。 もっと値を大きく設定した場合に差が出るかもしれないが、必要なさそうなので検証しない。
検証
ビット演算、累乗、floatのinfで比較した。
def gettime(): return time.perf_counter() s = gettime() INF = 1 << 30 e1 = gettime() - s print(e1) s = gettime() a = 10**9 e2 = gettime() - s print(e2) s = gettime() c = float('inf') e3 = gettime() - s print(e3)
ちなみに、ビット演算は30回シフトすれば109を超える。
結果
1.3999999999847468e-06 2.6000000000192536e-06 1.8399999999973993e-05
結果、floatのinfが一番遅く、bit演算が一番速かった。
しかし、floatのinfのほうがbit演算で算出した値より遥かに大きいので
bit演算で更に大きな値を求めた場合、floatのinfと比べてどうなるのか検証が必要である。 (やらない)
しかし、そんなに速度に変わりがないように思われるので、気にならなければfloatのinfを使うのが良さそう。
まとめ
巨大な値を作成する速度を比較した。
結果、bit演算が一番高速だった。
しかし、速度の差が小さいので、常に最大値を取れるfloatのinfが良さそうではある。