SORU
20 AĞUSTOS 2008, ÇARŞAMBA


Şamandıra ve çift karşılaştırma için en etkili yolu

double float iki iki değeri karşılaştırmak için en etkili yolu ne olurdu?

Bu yaptığın doğru değil sadece:

bool CompareDoubles1 (double A, double B)
{
   return A == B;
}

Ama mesela şöyle bir şey:

bool CompareDoubles2 (double A, double B) 
{
   diff = A - B;
   return (diff < EPSILON) && (-diff < EPSILON);
}

İşleme. atık gibi görünüyor

Herkes akıllı şamandıra karşılaştırıcısı biliyor mu?

CEVAP
16 EYLÜL 2008, Salı


Son derece dikkatli yukarıdaki önerilerden herhangi birini kullanarak. Bu bağlamda bağlıdır.

Uzun zamandır düşünülen bir sistemde hata izleme geçirdima==beğer|a-b|<epsilon. Temel sorunlar:

  1. Bir algoritma eğer örtülü varsayımıa==bveb==csonraa==c.

  2. Satır inç ve satır cinsinden aynı epsilon kullanarak mils (.001 inch) cinsinden ölçülür.a==bama1000a!=1000b. (Bu epsilon veya max ULPS) sorar neden olur.

  3. Açıların kosinüs ve satır uzunluğu, her ikisi için de aynı epsilon kullanımı!

  4. Bir karşılaştırma gibi kullanarak bir koleksiyon öğeleri sıralamak için işlev. (Bu durumda dahili C operatör çiftler için == kullanarak doğru sonuçlar üretti.)

Dediğim gibi: bu bağlam ve beklenen boyutuna bağlıdırbirveb.

,:: Numeric_limits&BTW std lt;çift>::epsilon (), "makine epsilon". Ve bir sonraki değer bir çift tarafından temsil edilebilir 1.0 arasındaki farktır. Karşılaştırma işlevi, Ama yaLnızca eğer beklenen değerleri 1'den daha az ise kullanılabilir sanırım.

Eğer temelde çiftler aritmetik (burada iki katına bazı durumlarda int değerleri tutmak için kullanıyoruz) int de matematik doğru olacaktır. Örneğin 4.0 2.0/1.0 1.0 ile aynı olacaktır. Bu kesirler (4.0/3.0) neden böyle şeyler yapmadığınız sürece ya da bir int boyutu dışarı çıkmayın.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Perihelion

    Perihelion

    23 NİSAN 2008
  • psidot

    psidot

    2 Kasım 2006
  • WePlayWeWatch

    WePlayWeWatc

    3 Temmuz 2013