Val2 doğru. Val3'ü uzun süre kullandıktan sonra doğru değil. Görünüşe göre, kayan noktalı sayıların çift temsilinin bazı özellikleri. EPSİLON'u artırmak gereklidir. Uykulu bir kafa düşünemiyorum. Belki bilen biri müdahale edebilir.
Geliştiricilerin bunu hangi nedenlerle yazdığını anlamak gerekli olacaktır.
//+------------------------------------------------------------------+//| Сравнивает два значения типа double. |//| RESULT |//| Возвращает истину, если значения равны и |//| ложь в противном случе. |//+------------------------------------------------------------------+bool CEnvironment::DoubleEquals( constdouble a, constdouble b)
{
//---return ( fabs (a-b)<= 16 * DBL_EPSILON * fmax ( fabs (a), fabs (b)));
//---
}
DBL_EPSILON, uygulamada 1.0 sayısına 1 (bir!) anlamlı üs biti farkı tanımlar. Pratikte böyle bir fark oluşmaz - sayılar ya kesinlikle eşittir ya da birden fazla anlamlı bit ile farklılık gösterebilir. Bu nedenle, en az anlamlı 4 bitteki (veya mevcut yaklaşık 16'dan yaklaşık bir buçuk son önemli ondalık basamaktaki) farkı yok saymak için 16*DBL_EPSILON gibi bir şey almanız gerekir.
Elbette, sayı aralığının az çok bilindiği ve tahmin edilebilir olduğu durumlar vardır. 0...1000 diyelim. Bu durumda yaklaşık eşitlik için karşılaştırma yapmak için 1000*16*DBL_EPSILON gibi bir sabit alabilirsiniz. Ancak böyle bir karşılaştırmanın aslında tüm kayan nokta fikrini sabit bir noktaya dönüştürdüğünü unutmayın (tahmin edin neden).
#import ex5'in optimizasyonun kötülüğü olduğu ortaya çıktı.
Küresel optimizasyon olasılığı açısından - evet.
Kodu küçültmeye çalışmadan oldukça agresif satır içi işlemimiz var. Bu nedenle global optimizasyon modunda çok iyi kod üretiyoruz.
Bu, ortaya çıkan hızı ön plana koyduğumuz derleme zamanında görülebilir.
fxsaber
kodunuzda bir hata var
Teşekkürler, düzelttim.
Hala bir hata
sonunda 5 olmalı
Hala bir hata
Bu bir hata değil, yuvarlamadır. Standart versiyonun yaptığı tam olarak budur.
İşte size kod, test edin
İşte size kod, test edin
Val2 doğru. Val3'ü uzun süre kullandıktan sonra doğru değil. Görünüşe göre, kayan noktalı sayıların çift temsilinin bazı özellikleri. EPSİLON'u artırmak gereklidir. Uykulu bir kafa düşünemiyorum. Belki bilen biri müdahale edebilir.
Geliştiricilerin bunu hangi nedenlerle yazdığını anlamak gerekli olacaktır.
Görünüşe göre köpek buraya gömülmüş.
Görünüşe göre köpek buraya gömülmüş.
Bacaklar RSDN forumundan büyüyor
Elbette, sayı aralığının az çok bilindiği ve tahmin edilebilir olduğu durumlar vardır. 0...1000 diyelim. Bu durumda yaklaşık eşitlik için karşılaştırma yapmak için 1000*16*DBL_EPSILON gibi bir sabit alabilirsiniz. Ancak böyle bir karşılaştırmanın aslında tüm kayan nokta fikrini sabit bir noktaya dönüştürdüğünü unutmayın (tahmin edin neden).
Bazen orijinalinden birkaç büyüklük sırası daha hızlı olan CopyTicks varyantı (> 0'dan)