ProgramlamaJava geliştiricisi

Java'da float ve double veri türleriyle çalışma özellikleri nelerdir? Her birini ne zaman kullanmalıyız ve kayan noktalı sayılarla çalışırken hangi tuzaklar vardır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap

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.

  • Float ne zaman kullanılmalı: Bellek hacmi ile ilgili çok katı gereksinimler varsa (örneğin, büyük bir dizi sayısı, kaynak kısıtlı bir cihaz).
  • Double ne zaman kullanılmalı: Özel kısıtlamalar yoksa, genellikle her zaman, çünkü double daha iyi bir hassasiyet sağlar.

Önemli özellikler:

  • Kayan nokta işlemleri hata birikmesine yol açabilir.
  • Float/double karşılaştırması için == kullanmayın, hata payıyla karşılaştırma yapın.

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"); } } }

Aklı karıştıran soru

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.

Bilgisi eksik olanların yaşadığı gerçek hata örnekleri


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ı.