Ş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
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:
Bir algoritma eğer örtülü varsayımıa==bveb==csonraa==c.
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.
Açıların kosinüs ve satır uzunluğu, her ikisi için de aynı epsilon kullanımı!
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.
Bir nesneyi klonlamak için en etkili y...
HTML elemanları jQuery kullanarak oluş...
Dize gelen özel karakterleri kaldırmak...
Tamsayı tabanlı bir güç işlevi uygulam...
Kont varlıklar için kakao Çekirdeği Ve...