SORU
22 EKİM 2008, ÇARŞAMBA


Çarpma veya bölme kullanmalıyım?

İşte çok eğlenceli bir soru

Hadi bir değişkenin değerini yarım gereken basit bir işlemi gerçekleştirmek için. Vardırgenelliklebunu yapmanın iki yolu vardır:

y = x / 2.0;
// or...
y = x * 0.5;

Kullandığımızı varsayarak standart operatörler daha iyi performansa sahip olan dil ile sağlanan?

Çarpma ben kodu ne zaman sadık kalmaya çalışıyorum bu yüzden genellikle daha iyi olduğunu tahmin ediyorum, ama bu teyit etmek istiyorum.

Ancak kişisel olarak cevap için ilgileniyorumPython2.4-2.5, diğer diller için de bir cevap göndermek için çekinmeyin! Ve eğer isterseniz, meraklısı yolu (bit shift operatörleri kullanarak gibi) başka bir şey göndermek için çekinmeyin.

CEVAP
22 EKİM 2008, ÇARŞAMBA


Python:

time python -c 'for i in xrange(int(1e8)): t=12341234234.234 / 2.0'
real    0m26.676s
user    0m25.154s
sys     0m0.076s

time python -c 'for i in xrange(int(1e8)): t=12341234234.234 * 0.5'
real    0m17.932s
user    0m16.481s
sys     0m0.048s

çarpma 33% daha hızlı

Lua:

time lua -e 'for i=1,1e8 do t=12341234234.234 / 2.0 end'
real    0m7.956s
user    0m7.332s
sys     0m0.032s

time lua -e 'for i=1,1e8 do t=12341234234.234 * 0.5 end'
real    0m7.997s
user    0m7.516s
sys     0m0.036s

=>gerçek bir fark

LuaJİT:

time luajit -O -e 'for i=1,1e8 do t=12341234234.234 / 2.0 end'
real    0m1.921s
user    0m1.668s
sys     0m0.004s

time luajit -O -e 'for i=1,1e8 do t=12341234234.234 * 0.5 end'
real    0m1.843s
user    0m1.676s
sys     0m0.000s

=>sadece %5 daha hızlı

bölmek için daha çarpmak için daha hızlı, ama İŞLEMCİ daha gelişmiş VMs ya JİTs kullanarak yaklaştıkça, bu avantajı ortadan Python. sonuç: İleride bir Python VM bunu önemsiz kılacak oldukça mümkün

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dcigs

    dcigs

    9 EYLÜL 2006
  • pleated-jeans

    pleated-jean

    6 HAZİRAN 2013
  • Within Temptation

    Within Tempt

    18 EYLÜL 2006