2 Ocak 2025 Perşembe

Programlamada Round-Off Error (Yuvarlama Hatası) Nedir?

Round-off error (yuvarlama hatası), bilgisayarların sınırlı hassasiyete sahip sayı sistemleri kullanması nedeniyle ortaya çıkan bir hata türüdür. Özellikle kesirli (floating-point) sayılar ile yapılan işlemler sırasında, bazı sayıların tam olarak temsil edilememesi veya işlemler sonucunda küçük farkların birikmesiyle meydana gelir.

Neden Oluşur?

  1. Kesirli sayıların tam temsil edilememesi

    • Bilgisayarlar genellikle ikili (binary) sayı sistemi kullanır. Ancak, bazı ondalıklı sayılar (örneğin 0.1) ikili sistemde sonsuz bir tekrar deseni oluşturur ve tam olarak temsil edilemez.

    • Örnek Python Kodu:
      print(0.1 + 0.2)  # Beklenen: 0.3

    • Çıktı:
      0.30000000000000004
  2. Hassasiyetin sınırlı olması

    • Float (kayan noktalı) sayılar belirli bir bit sayısı ile temsil edilir. Örneğin, IEEE 754 standardına göre 64-bit bir double değişken yaklaşık 15-17 basamak hassasiyet sunar. Daha fazla basamağa ihtiyaç duyulursa, bilgiler kaybolabilir ve yuvarlama hataları oluşur.
  3. Aritmetik işlemler sırasında birikme

    • Küçük yuvarlama hataları, tekrar eden işlemler sonucunda büyüyerek hesaplamalarda belirgin farklara neden olabilir.

Örnekler ve Çözümler

Örnek 1 (Python): Yuvarlama hatasının birikmesi

total = 0.0
for i in range(10):
    total += 0.1


print(total)  # Beklenen: 1.0, Gerçek çıktı: 0.9999999999999999
Çözüm: decimal veya fractions modülü kullanılabilir.
from decimal import Decimal

total = sum(Decimal("0.1") for _ in range(10))
print(total)  # Çıktı: 1.0



Örnek 2 (Python): Karşılaştırma Hatası
x = 0.1 + 0.2
if x == 0.3:
    print("Eşit")
else:
    print("Eşit değil")  # Bu çalışır çünkü x tam olarak 0.3 değildir.

Çözüm: Mutlak fark (epsilon) ile karşılaştırma yapmak
import math

x = 0.1 + 0.2
if math.isclose(x, 0.3, rel_tol=1e-9):
    print("Eşit")  # Daha güvenilir karşılaştırma yöntemi

Sonuç
  • Round-off error, kesirli sayıların tam olarak temsil edilememesi nedeniyle oluşur.
  • Küçük hatalar tekrar eden işlemlerle büyüyebilir.
  • decimal, fractions veya math.isclose() gibi yöntemler ile bu hatalar azaltılabilir.
  • Sayısal hesaplamalar yaparken bu hataların farkında olmak önemlidir.