2017-12-22 1 views
1

나는 timeit을 사용하여 테스트를 실행 중이며 어떤 일이 일어나고 있는지 이해하지 못하고있다. 나는 2를 권력으로 올렸지 만 0.02 ± 0.01 초가 걸릴 때마다 평가했다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?보다 빠름

예 :이 실행할 2.5 분 소요됩니다

:

2**10000000 

이 0.01637562597170472처럼 뭔가를 즉시 반환합니다

timeit.Timer(stmt="2**10000000").timeit() 

답변

3
2**10000000 

이 2.5을지지 않습니다 실행 시간. 정수가 기본적으로 인쇄되는 방식 인 10 진수 문자열로 변환하는 데 2.5 분이 걸립니다. (2**10000000) % 10000000 또는 len(hex(2**10000000))을 시도해보십시오.

+0

바이너리 십진수 변환을위한 훨씬 빠른 알고리즘이 있지만 파이썬은 간단한 알고리즘을 사용합니다. [gmpy2] (https://github.com/aleaxit/gmpy)와 같은 써드 파티 라이브러리에서 일반적으로이 연산과 임의 정밀도 연산의보다 빠른 구현을 찾을 수 있습니다. – user2357112

+0

더 빠른 알고리즘을 사용하면이 변환은 2.5 분이 아닌 초당 처리됩니다. – user2357112

-1

@ Ryan의 추가 보조물 a = 2 ** 10000000을 추가하면 즉시 반환됩니다. 그런데 print(a)을 시도하면 실행하는 데 오랜 시간이 걸립니다.

@ Ryan이 말했듯이,이 긴 시간은 10 진수 문자열로 변환하면 비용이 들게됩니다. timeit.Timer(stmt="2**10000000").timeit()은 아무 것도 인쇄하지 않으므로 즉시 반환됩니다.