Java'da, kayan noktalı sayıları temsil etmek için iki ana tür vardır: float (32 bit) ve double (64 bit). float daha az hassas ve daha az bellek kullanırken, double daha yüksek hassasiyet sağlar ve kayan noktalı sayılar için varsayılan tercih edilen türdür.
Önemli özellikler:
Delta ile karşılaştırma örneği:
public class DoubleComparison { public static void main(String[] args) { double a = 0.1 + 0.2; double b = 0.3; double epsilon = 1e-10; if (Math.abs(a - b) < epsilon) { System.out.println("Hata payıyla eşittir"); } else { System.out.println("Eşit değil"); } } }
Soru: Aşağıdaki kod ne yazdırır?
System.out.println(0.1 + 0.2 == 0.3);
Cevap: Bu kod false yazdırır, çünkü 0.1 + 0.2 toplamının IEEE 754 ikili formatında tam olarak 0.3'e eşit olmamasının sebebi, float ve double türlerinde ondalıklı sayıların saklanmasıyla ilgili özelliklerdir.
Hikaye
Büyük bir finansal projede, para hesaplamak için double türü kullanıldı. Pratikte küçük işlemler genellikle hata birikmesine yol açarak, nihai toplamların birkaç sent farklı olmasına neden oldu. Bu sorun, double'ın BigDecimal ile değiştirilmesiyle çözüldü.
Hikaye
Bir oyun motorunda, büyük değerlerle dünya objelerinin koordinatlarını saklamak için float dizisi kullanıldı. Büyük mesafelere hareket ederken, nesnelerin konum doğruluğu kaybolmaya başladı ve bu da nesnelerin ekrandaki "titremesine" yol açtı. Float'ın double ile değiştirilmesi ve koordinatların merkeze alınması sorunu çözdü.
Hikaye
İstatistik analiz programında, double değerlere
==operatörü ile karşılaştırma yapılmış ve beklenmedik bir şekilde "eşleşmeme" sayısı elde edilmiştir. Delta ile karşılaştırmaya geçtikten sonra programın mantığı düzgün çalışmaya başladı.