イヌツムリのメモ

学習したことのメモである。しかし、他の人が読んでもわかるように書こう。

あんまり変わんないけど、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が良さそうではある。