다른 답변을 읽는 이점이 있습니다. 우리는 여기에 같은 거대한 정수 나왔습니다 거래 둘 것을 왜 나 같은 우선 사람들이 이유를 알고 있어야 위해 Python
그리고 bc
할 권리 연관 이 아니라고 거듭 제곱을 확장하는 수단 6^36
우리가 평가하고 오히려 6^46656
상당히 큰있다. 1
다음 명령에서 변형을 사용하여 time
예약어 및 명령 출력의 특정 요소에 대한 평균을 추출 할 수 있습니다 .
for i in {1..1000}; do (time echo 6^6^6 | bc > /dev/null) 2>&1; done | grep 'rea' | sed -e s/.*m// | awk '{sum += $1} END {print sum / NR}'
for i in {1..1000}; do (/usr/bin/time -v sh -c 'echo 6^6^6 | bc > /dev/null') 2>&1; done | grep 'Use' | sed -e s/.*:// | awk '{sum += $1} END {print sum / NR}'
다른 경로로 이동하여 파일을 비교에서 완전히 제거 할 수 있습니다. 또한 역사적 으로 전자는 "프론트 엔드 프로세서"이기 때문에 bc의 타이밍을 dc
명령 과 비교할 수 있습니다 . 다음 명령이 시간이 초과되었습니다.
echo 6^6^6 | bc
echo 6 6 6 ^ ^ p | dc
echo print 6**6**6 | python2.7
참고 dc
명령은 왼쪽 연관되어 지수합니다. 2
time
1000 반복 (초) 동안 (bash)에 대한 결과가 있습니다 .
0.229678 real bc
0.228348 user bc
0.000569 sys bc
0.23306 real dc
0.231786 user dc
0.000395 sys dc
0.07 real python
0.065907 user python
0.003141 sys python
bc
그리고 dc
이러한 맥락에서 유사한 성능을 제공합니다.
덜 정확한 3 개 의 결과 /usr/bin/time
즉, GNU time
명령 (규모의 정밀도는 여기 유효하지 않습니다하지만 결과는 유사하다) :
0.2224 user bc
0 sys bc
0.23 Elapsed bc
0.22998 user dc
0 sys dc
0.23 Elapsed dc
0.06008 user python
0 sys python
0.07 Elapsed python
장점은 궁극적으로 유용 할 수있는 훨씬 더 많은 정보를 /usr/bin/time
제공하는 -v
옵션을 제공한다는 것 입니다.
파이썬 모듈 과 대화하기 위해 이것을 내부적 으로 평가하는 것도 가능 timeit
합니다 :
python2.7 -m timeit -n 1000 -r 1 'print 6**6**6' | grep 'loops'
1000 loops, best of 1: 55.4 msec per loop
그것은 우리가 전에 보았던 것보다 조금 빠릅니다. 통역사 자체를 시험해 봅시다 :
>>> import timeit
>>> import sys
>>> import os
>>> T = timeit.Timer("print 6**6**6")
>>> n = int(1000)
>>> f = open(os.devnull, 'w')
>>> sys.stdout = f
>>> t = t.timeit(n)
>>> sys.stdout = sys.__stdout__
>>> print t/n
0.0553743481636
내가 본 것 중 가장 빠릅니다.
우리가보다 적은 지수를 평가 6^6
하면 time for
명령어는 우리가 사용한 것과 같은 루프 명령어를 사용 하여 놀라운 결과를 낳습니다 .
0.001001 bc real
0.000304 user
0.000554 sys
0.014 python real i.e. 10x more than bc??
0.010432 user
0.002606 sys
따라서 작은 정수 bc
를 사용하면 갑자기 훨씬 빠릅니다. 시스템 재부팅에서 두 번째 실행까지 차이가 없습니다. 그러나 동시에 timeit
파이썬에 사용하면 다음과 같은 이점이 있습니다.
python2.7 -m timeit -n 100000 -r 1 'print 6**6' | grep loops
100000 loops, best of 1: 0.468 usec per loop
이것은 밀리 초가 아닌 마이크로 초 이므로 for
루프를 사용하는 훨씬 느린 결과와 일치하지 않습니다 . 이것을 테스트하기 위해 다른 도구가 필요할 수도 있고 다른 사람들이 설명했듯이 여기에서 눈을 맞추는 것 이상이 있습니다. 그것은 질문의 시나리오에서 파이썬이 더 빠른 것처럼 보이지만 그 이상으로 결론을 도출 할 수 있는지 확실하지 않습니다 ...
1. 에코의 산술 확장 즉, 같은의 범위를 넘어 말할 필요도없이 echo $((6**6**6))
- bash
또한, 즉 바로 연관 될 일이 6^6^6 = 6^(6^6)
.
2. 이것과 비교하십시오 : 6 6 ^ 6 ^ p
.
3. GNU time 명령은 BSD UNIX에서 실행될 때 더 많은 정보를 제공 할 수 있습니다 (GNU 시간 정보 문서) : 'time'으로 표시되는 대부분의 정보는 'wait3'시스템 호출에서 파생됩니다. 숫자는 'wait3'에 의해 반환 된 숫자만큼만 유효합니다. 많은 시스템이 '시간'이보고 할 수있는 모든 리소스를 측정하지는 않습니다. 해당 자원은 0으로보고됩니다. 대부분 또는 모든 리소스를 측정하는 시스템은 4.2 또는 4.3BSD를 기반으로합니다. 이후의 BSD 릴리스는 더 적은 리소스를 측정하는 다른 메모리 관리 코드를 사용합니다. -상태 정보를 반환하는 'wait3'호출이없는 시스템에서는 'times'시스템 호출이 대신 사용됩니다. 'wait3'보다 훨씬 적은 정보를 제공하므로 해당 시스템에서 'time'은 대부분의 자원을 0으로보고합니다.