Diğer cevapları okuma avantajım oldu. Burada böyle büyük bir tamsayı ile konum uğraşan de o yüzden benim gibi başlayanlar insanlar nedenini bilmeli için Python
ve bc
bunu sağ çağrışımlı bu olmadığını, üslü genişlemesini hangi vasıta 6^36
biz değerlendirirken ziyade 6^46656
oldukça büyük olan. 1
Aşağıdaki komutlardaki varyasyonları kullanarak, hem time
ayrılmış sözcüğün hem de komutun çıktısının belirli bir elemanı için bir ortalama çıkarabiliriz :
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}'
Başka bir rotaya gidip dosyayı karşılaştırmadan tamamen kaldırmak mümkündür. Ayrıca, böyle bir şey ile BC'nin zamanlama karşılaştırabilirsiniz dc
olarak, komuta tarihsel eski ikincisi için "ön uç işlemcisi" dir. Aşağıdaki komutlar zamanlandı:
echo 6^6^6 | bc
echo 6 6 6 ^ ^ p | dc
echo print 6**6**6 | python2.7
Not dc
komut sola birleşim olduğu üs için. 2
time
1000 yineleme için (bash) ile bazı sonuçlarımız var (saniye olarak):
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
ve dc
bu bağlamda karşılaştırılabilir performans sunar.
GNU komutundan daha az kesin 3 sonuç (ölçek hassasiyeti burada geçerli değil ancak sonuçlar benzer):/usr/bin/time
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
Bir avantajı /usr/bin/time
sunduğu olmasıdır -v
sonunda yararlı olabilir çok daha fazla bilgi verir seçeneği.
Python modülüyle konuşmak için bunu dahili olarak değerlendirmek mümkündür 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
Bu daha önce gördüğümüzden biraz daha hızlı. Tercümanın kendisini deneyelim:
>>> 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
Bu gördüğüm en hızlı şey.
Bunun gibi daha küçük bir üssü değerlendiriyorsak 6^6
, zaman komutu şaşırtıcı sonuçlar verir - for
şu anda kullandığımız aynı döngü komutlarını kullanarak :
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
Yani daha küçük bir tamsayı bc
ile aniden çok daha hızlı ?? Sistemin yeniden başlatılmasından ikinci çalışmaya kadar hiçbir fark yoktur. Ancak aynı zamanda, timeit
Python için kullanırsak , şunu elde ederiz:
python2.7 -m timeit -n 100000 -r 1 'print 6**6' | grep loops
100000 loops, best of 1: 0.468 usec per loop
Bu mikrosaniye , milisaniye değil, bu yüzden for
döngü kullanan daha yavaş sonuçlarla uyuşmuyor . Belki bunu daha ileri düzeyde test etmek için başka araçlar gerekir ve diğerlerinin de açıkladığı gibi burada gözle görünenden daha fazlası var. Görünüşe göre Python soru senaryosunda daha hızlıydı, ancak sonuçların bunun ötesinde çizilip çizilemeyeceği belli değil ...
1. Echo'nun aritmetik genişlemesi gibi bir şeyin kapsamı dışında olduğunu söylemeye gerek yok, yani echo $((6**6**6))
- bash
bunun için de doğru bir ilişki olabilir 6^6^6 = 6^(6^6)
.
2. Bununla karşılaştırın: 6 6 ^ 6 ^ p
.
3. GNU zaman komutunun BSD UNIX'te çalıştırıldığında daha fazla bilgi sağlaması mümkündür (GNU zaman bilgisi belgesi): 'Zaman' ile gösterilen çoğu bilgi 'wait3' sistem çağrısından türetilmiştir. Rakamlar sadece 'wait3' tarafından döndürülenler kadar iyidir. Birçok sistem, 'zamanın' raporlayabileceği tüm kaynakları ölçmez; bu kaynaklar sıfır olarak bildirilir. Kaynakların çoğunu veya tümünü ölçen sistemler, 4.2 veya 4.3BSD'ye dayanmaktadır. Daha sonra BSD sürümleri, daha az kaynak ölçen farklı bellek yönetim kodları kullanır. - Durum bilgisi döndüren 'wait3' çağrısı olmayan sistemlerde, bunun yerine 'times' sistem çağrısı kullanılır. 'Wait3' den çok daha az bilgi veriyor, bu yüzden bu sistemlerde 'zaman' kaynakların çoğunu sıfır olarak rapor ediyor.