2
다음은 timeit 통계에 따라 프로그램에서 가장 많은 시간이 걸리는 코드입니다. [-1.0, 1.0] 간격의 부동 소수점을 부호없는 정수 [0, 2 ** 32]로 변환하는 것은 더티 함수입니다. floatToInt
을 어떻게 가속화 할 수 있습니까?파이썬에서 float에서 int 로의 변환이 더 빠릅니다.
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
아니요, 저는 더 복잡한 작업을 수행했습니다. 이것은 10 배 빠르게 작동했습니다. –
2 ** 31은 매회 2147483648로 평가됩니다. 여기서 속도에 중점을 두었으므로 2 ** 31을이 상수로 바꾸면 시간이 중요한 코드 세그먼트에서 계산해야 할 계산이 한 번 줄어 듭니다. – PaulMcG
나는 timeit과 2 ** 31으로 체크했다. 방정식에 "x"가 없을 때만 느리다. – pixelbeat