2010-03-23 2 views
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 

답변

4

분명히 시도해 보셨습니까?

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

아니요, 저는 더 복잡한 작업을 수행했습니다. 이것은 10 배 빠르게 작동했습니다. –

+3

2 ** 31은 매회 2147483648로 평가됩니다. 여기서 속도에 중점을 두었으므로 2 ** 31을이 상수로 바꾸면 시간이 중요한 코드 세그먼트에서 계산해야 할 계산이 한 번 줄어 듭니다. – PaulMcG

+0

나는 timeit과 2 ** 31으로 체크했다. 방정식에 "x"가 없을 때만 느리다. – pixelbeat

관련 문제