NeverTellLie
Öğrenci
- Katılım
- 14 Nisan 2017
- Mesajlar
- 56
- Reaksiyon puanı
- 2
- Puanları
- 8
- Yaş
- 28
Hatam nedir acaba?
Bir ekleme de ben yapayım.
float aritmetiği ile int aritmetiği farklıdır.(buna tabi ki long ve double gibi değerler de dahil)
k >= 0 dediğin zaman k'nın sıfıra eşit olduğu bir değer için yanlış sonuç bulma ihtimali var.
Çünkü yapılan işlemler sonucu k'nın 0 değil de ona çok yakın 0.0000000001 olma ihtimali var.(Birkaç aritmetik işlem sonucunda kesinlikle böyle olur)
Tabi söz konusu double olunca senin bunu farketme olasılığın çok düşüyor ve programda farkedilmeyen hata oluşuyor. (20 kez doğru çalışan program 1 kez yanlış çalışabiliyor)
Dolayısıyla kayar sayılarda eşitlik işleminin nasıl kontrol edildiğini araştır, bir fonksiyon ile kontrol ediliyor.
int CompareFloat(float float1, float float2)
{
float precision = 0.001;
if(((float1 - precision) < float2) && ((float1 + precision) > float2))
return 1;
else
return 0;
}
if (CompareFloat(k1, 0.0f))
Kitabın henüz çok başında olduğunu tahmin ediyorum.
O yüzden örnekler sadece fonksiyonun işlevini göstermeye yönelik yani anlamsız.
Float problemini birden fazla yöntemle çözebilirsin.
Benim önerim bunun için kendi fonksiyonunu kullanman.
Precision değerini değiştirebilirsin ama bu değerden daha küçük rakamlar için yanlış sonuç verme ihtimali doğabilir.
Örnek kullanımKod:int CompareFloat(float float1, float float2) { float precision = 0.001; if(((float1 - precision) < float2) && ((float1 + precision) > float2)) return 1; else return 0; }
--- Gönderi Güncellendi ---Kod:if (CompareFloat(k1, 0.0f))
Ekleme: float yerine double yaparsan precision değerini 0.000001 düşürebilirsin ve 0.0f yerine 0.0 yazman gerekir.