SORU
14 Temmuz 2011, PERŞEMBE


Hangi sırayla yüzen en kesin sonucu almak için eklenmelidir?

Bu benim son görüşme de soruldu bir soru olduğunu bilmek istiyorum(Aslında sayısal analiz teorisi unutmayın, lütfen yardım edin bana:) bilmiyorum

Kayan noktalı sayılar biriken bazı fonksiyon yazalım:

std::accumulate(v.begin(), v.end(), 0.0);

v std::vector<float>, örneğin bir.

  • Bunları biriktiren önce bu sayıları sıralamak için daha iyi olurdu?

  • Hangisi en kesin cevap verecek?

Kuşkulanıyorumsıralamaartan düzende sayılar aslında sayısal hata yapardaha azbunu kendime ispat edemiyorum ne yazık ki ama.

P. S. ben bu muhtemelen hiçbir şey gerçek dünya programlama ile ilgisi var farkında merak ediyorum.

CEVAP
14 Temmuz 2011, PERŞEMBE


Tahminin temelde doğru, sipariş (büyüklük) genellikle biraz şeyleri artırır artan sıralama. Tek duyarlıklı (32 bit) yüzer ve 1 milyar değerler 1 / (1 milyar), ve bir değere eşit 1'e eşit vardır ekliyoruz olduğu bir durumu düşünün. Eğer 1 İlk gelirse, o zaman toplam duyarlılık kaybı nedeniyle, 1 1, (1 / 1 milyar) 1 gelir. Her ayrıca hiçbir etkisi toplam vardır.

Eğer küçük değerler ilk olacak en az miktar için bir şey olsa bile ben o zaman 2^30 onları, sonra ise 2^25 veya geri döndüm durumu, her biri ayrı ayrı değil etkileyen toplam daha fazla. Hala daha hile ihtiyacım olacak.

Bu durum bir uç, ama genel olarak ekleyerek iki değer benzer durumlara daha doğru daha ekleyerek iki değerden çok farklı büyüklükleri, beri "at" daha az bit hassas, daha küçük bir değer bu şekilde. Sayıları sıralayarak, benzer büyüklükteki değerleri birlikte grup ve artan sırayla onları ekleyerek küçük değerleri "" üst üste büyük sayıların büyüklüğüne ulaşmak. bir şans ver

Eğer negatif sayılar söz konusu, hala, kolay "" bu yaklaşım. atlatmak için. Toplam üç değerleri, {1, -1, 1 billionth} düşünün. Arithmetically doğru miktar 1 billionth, ama eğer benim ilk ayrıca küçük değeri içeriyorsa o zaman benim son toplamı 0 olacaktır. 6 order, sadece 2 "" - {1, -1, 1 billionth} {-1, 1, 1 billionth}. doğru 6 emir sonuçlar bu doğru ölçekli büyük-büyüklük değeri girişi (0.0000001%), ama 4 onları sonucudur yanlış ölçeğin gerçek çözüm (100%). Çözmek istediğiniz özel sorun eski yeterince iyi olup olmadığını size söyleyecektir.

Aslında, sadece sıralanmış sırayla ekleyerek daha fazla oyun oynayabilirsiniz. Eğer çok çok küçük değerler, bir orta sayıda orta halli değerleri ve az sayıda büyük değerleri, öyleyse bu en doğru ilk ekleme kadar tüm küçük olanlar, daha sonra ayrı ayrı toplam orta halli olanlar, eklemek bu iki toplamları birlikte ekleyin büyük olanlar. Değil hiç de önemsiz bulmak için en doğru kombinasyonu kayan nokta eklemeler, ama başa çıkmak için gerçekten kötü durumda sakladığın bütün dizi çalışan toplam farklı büyüklükleri, eklemek her yeni değer için toplam iyi maçlar onun büyüklüğü ve ne zaman bir çalışan toplam başlatır almak için fazla büyük, büyüklük, Ekle içine sonraki toplam artık yeni bir tane. Kendi mantıksal aşırı için alınan, bu işlemi keyfi olarak hassas bir tür, bu yüzden () toplamı gerçekleştirmek için eşdeğerdir. Ama büyüklüğü azalan ekleyerek basit bir seçim göz önüne alındığında, artan daha iyi bir tahmin.

Kulağa biraz ilişkisi için gerçek dünya programlama, beri bazı durumlarda, hesaplama gidebilir çok kötü bir şekilde yanlış eğer yanlışlıkla kesecek bir "ağır" kuyruk oluşan çok sayıda değerleri her biri için ayrı ayrı çok küçük etkiler toplamının veya eğer atmak çok hassas çok küçük değerler tek tek tek etkileyen son birkaç bit toplamı. Kuyruk zaten önemsiz olduğu durumlarda muhtemelen umurumda değil. Eğer sadece ilk etapta az sayıdaki değerler ekleyerek birlikte iseniz örneğin sadece toplamından birkaç önemli rakamlar kullanıyorsun.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • george sarintzotis

    george sarin

    2 Aralık 2007
  • Le Cargo !

    Le Cargo !

    24 HAZİRAN 2007
  • MultiPlayStationMan

    MultiPlaySta

    17 Aralık 2009