2017'den beri56 mesaj
Adsız by NeverTellLie posted 2 Mayıs 2017 22:37 Hatam nedir acaba?
Akış

Hocam biraz araştırdım ama bulamadım phyton ile ilgili bir yazı var ama c dilinde de uygulanır mı bilmiyorum. Kayan Noktalı Sayılarla Aritmetik İşlemler: Sorunlar ve Kısıtlamalar — Resmi Python 3 KılavuzuBen Kenobi dedi: ↑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))lBen Kenobi dedi: ↑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.int CompareFloat(float float1, float float2) { float precision = 0.001; if(((float1 - precision) < float2) && ((float1 + precision) > float2)) return 1; else return 0; }
Örnek kullanımif (CompareFloat(k1, 0.0f))
--- Gönderi Güncellendi ---
Ekleme: float yerine double yaparsan precision değerini 0.000001 düşürebilirsin ve 0.0f yerine 0.0 yazman gerekir.
Çerez tercihleriniz Sitenin çalışması için zorunlu çerezler kullanılır. Ölçüm ve reklam çerezleri yalnız onay verirseniz çalışır. Ayrıntılar