2


0

Pythonでのfloatからintへの高速変換

timeit統計によると、私のプログラムで最も時間がかかるコードを次に示します。 [-1.0、1.0]間隔の浮動小数点数を符号なし整数[0、2 ** 32]に変換するのは汚い関数です。 「floatToInt」を高速化するにはどうすればよいですか?

piece = []
rng = range(32)
for i in rng:
    piece.append(1.0/2**i)

def floatToInt(x):
    n = x + 1.0
    res = 0
    for i in rng:
        if n >= piece[i]:
            res += 2**(31-i)
            n -= piece[i]

    return res

1 Answer


4


明らかなものを試しましたか?

def floatToInt(x):
    return int((x+1.0) * (2**31))