Banker’s Round (Bankacı yuvarlaması)
Bu yazımda C sharp’ ta sayıları yuvarlamada default olarak kullanılan bankacı yuvarlamasının, nasıl çalıştığını ve neden en iyi algoritma olduğundan bahsedeceğim
Öncelikle aşağıdaki yuvarlamalar ve çıktılarını inceleyelim
1 2 |
Console.WriteLine("4.5 = " + decimal.Round(4.5m)); Console.WriteLine("5.5 = " + decimal.Round(5.5m)); |
Çıktı:
1 2 |
4.5 = 4 5.5 = 6 |
Algoritma çalışma mantığı basit, yuvarlanacak ondalık sayının en yakın çift sayısına yuvarlıyor yukarıdaki örnek gibi 4.5’e en yakın ondalık çift sayı 4, 5.5’e en yakın çift sayı ise 6’dır.Algoritmayı anladığımıza göre şimdi, yuvarlamada neden en iyi algoritma onu inceleyelim.
Elimizde aşağıda tanımlanan bir sayı kümesi olduğunu varsayalım ve bu dizinin ortalamasını 3 farklı yöntemle ele alalım. İlki gerçek yöntem, İkinci yöntem olan Math.Ceiling ise en yakın sayıya yuvarlama yöntemi, Üçüncü yöntem ise makalemizin ana konusu olan bankacı yuvarlaması.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var dizi = new[] { 1.5m, 2.5m, 3.5m, 5.5m, 6.5m, 7.5m, 7.5m, 8.5m, 9.5m, 10.5m, 4.5m, 15.5m }; var toplamBankerRound = 0; var toplamEnBuyukSayiRound = 0; for (int i = 0; i < dizi.Length; i++) { var sayiBanker = (int)Math.Round(dizi[i]); var sayiCeiling = (int)Math.Ceiling(dizi[i]); toplamEnBuyukSayiRound += sayiCeiling; toplamBankerRound += sayiBanker; } Console.WriteLine("En Yakın Sayıya Yuvarlanan Sayıların Toplamı: " + toplamEnBuyukSayiRound); Console.WriteLine("Bankacı Yuvarlaması ile Sayıların Toplamı: " + toplamBankerRound); Console.WriteLine("Sayıların Gerçek Toplamı: " + dizi.Sum()); Console.WriteLine("********************************************************"); Console.WriteLine("Bankacı Yuvarlaması ile Sayıların Ortalaması: " + toplamBankerRound / dizi.Length); Console.WriteLine("En Yakın Sayıya Yuvarlanan Sayıların Ortalaması: " + toplamEnBuyukSayiRound / dizi.Length); Console.WriteLine("Gerçek Ortalama: " + dizi.Average()); |
Çıktı:
1 2 3 4 5 6 7 |
En Yakin Sayiya Yuvarlanan Sayilarin Toplami: 89 Bankaci Yuvarlamasi ile Sayilarin Toplami: 84 Sayilarin Gerçek Toplami: 83,0 ******************************************************** Bankaci Yuvarlamasi ile Sayilarin Ortalamasi: 7 En Yakin Sayiya Yuvarlanan Sayilarin Ortalamasi: 7 Gerçek Ortalama: 6,9166666666666666666666666667 |
Ortalama alınırken fark olmasa da genel toplamda en yakın sonucu bankacı yuvarlaması veriyor.
Nedeni ise, buçuklu sayıların yuvarlamasını eşit bir şekilde aşağı yada yukarı olarak dağıtıyor böylece gerçek sonuca daha yakın çıkıyor.