SORU
31 Mayıs 2012, PERŞEMBE


Python 3.x yuvarlama davranışı

Sadece yeniden okuma What’s New In Python 3.0 ve bu devletler:

Round() yuvarlama stratejisi ve dönüş türü değişti işlevi. Tam yarım durumlarda hemen en yakın hatta sonuç yerine yuvarlanır sıfır uzakta. (Örneğin, round(2.5) şimdi döner daha 2 yerine 3.)

ve round belgeleri:

-Dahili tip yuvarlak destek(), değerleri yuvarlanır eğer iki katları ise en yakın n eksi 10 için birden fazla güç; aynı derecede yakın, yuvarlama bile seçimi doğru yapılır

Yani, altındav2.7.3:

In [85]: round(2.5)
Out[85]: 3.0

In [86]: round(3.5)
Out[86]: 4.0

beklerdim. Ancak, altında şimdiv3.2.3:

In [32]: round(2.5)
Out[32]: 2

In [33]: round(3.5)
Out[33]: 4

Bu karşı-sezgisel ve anlıyorum ne kadar aykırı görünüyor yuvarlama (ve insanların Seyahat bağlı). İngilizce benim ana dilim değil bildiğimi sanıyordum bunu okuyana kadar yuvarlama ne demek :-/ eminim zamanda v3 bazı tartışma olmalı tanıtıldı bu, ama benim aramak için iyi bir neden bulamadı.

  1. Herkes bu değişti neden üzerine bir fikir var mı?
  2. Orada herhangi bir diğer ana programlama dilleri (örnC, C , Java, Perl,.. ) (bana) tutarsız yuvarlama sıralama mı bu?

Burada neyi kaçırıyorum?

GÜNCELLEME: @Li-aungYip yorum re "Bankacı yuvarlama" verdi bana bu hakkı arama terimi/anahtar kelimeler arama ve buldum bu YÜZDEN soru: Why does .NET use banker's rounding as default?, O yüzden olacağım okuma dikkatle.

CEVAP
31 Mayıs 2012, PERŞEMBE


Python 3.0 bu şekilde bazı dil uygulamaları otobüsü henüz değil ama standart yuvarlama yöntemi bu gün olarak kabul edilir.

Basit "her zaman 0.5" yüksek sayı doğru hafif bir sapma tekniği sonuçları. yuvarlak Hesaplamalar, çok sayıda, bu önemli olabilir. Python 3.0 yaklaşımı bu sorunu ortadan kaldırır.

Ortak kullanım yuvarlama, birden fazla yöntem yoktur. 754 kayan noktalı matematik için uluslararası standart IEEE, tanımlar five different rounding methods (Python 3.0 tarafından kullanılan varsayılan). Ve başkaları da vardır.

Bu davranış, olması gerektiği kadar yaygın olarak bilinir. Otomasyon, eğer yanlış hatırlamıyorsam, bu yuvarlama yöntemi erken bir evlat oldu. Otomasyon round komutu aslında birkaç seçenek sunuyor, ama gidiş-doğru-hatta IEEE 754 olarak varsayılan. Görünüşe göre mühendis olan uygulanan round komut var çok sıkıcı bütün isteklerine "bu iş böyle öğrendim okulda" uygulamaya koydu sadece: round 2.5 rounding as taught in school geçerli bir Otomasyon komut. :-)

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • MarinaHD2001

    MarinaHD2001

    7 ŞUBAT 2009
  • UrAvgConsumer

    UrAvgConsume

    1 Ocak 2012
  • Vsauce

    Vsauce

    30 Temmuz 2007