Beberapa waktu yang lalu saya membuat program uji untuk pembulatan berturut-turut, karena pada dasarnya ini merupakan uji stres terburuk untuk algoritma pembulatan.
Untuk setiap angka dari 0 hingga 9.999, putaran pertama ke 10 terdekat, kemudian ke 100 terdekat, lalu ke 1000 terdekat. (Anda juga bisa menganggap ini sebagai 10.000 poin dalam [0,1) dibulatkan menjadi 3 tempat, lalu ke 2, lalu ke 1.) Kumpulan angka ini memiliki nilai rata-rata 4.999,5.
Jika ketiga pembulatan dilakukan dengan menggunakan metode "pembulatan setengah ke atas", maka hasilnya adalah sebagai berikut (kolom pertama adalah hasil pembulatan, kolom kedua adalah berapa banyak angka yang dibulatkan ke hasil itu - yaitu itu adalah histogram).
0 445
1000 1000
2000 1000
3000 1000
4000 1000
5000 1000
6000 1000
7000 1000
8000 1000
9000 1000
10000 555
Hasilnya berbeda dari satu "putaran setengah ke atas" ke seribu terdekat 550 kali dari 10.000 dan nilai rata-rata bulat adalah 5055 (lebih tinggi dari rata-rata aslinya sebesar 55,5).
Jika ketiga pembulatan dilakukan dengan "pembulatan setengah ke bawah", maka hasilnya adalah:
0 556
1000 1000
2000 1000
3000 1000
4000 1000
5000 1000
6000 1000
7000 1000
8000 1000
9000 1000
10000 444
Hasilnya berbeda dari satu "putaran setengah ke bawah" ke seribu terdekat 550 kali dari 10.000 dan nilai rata-rata bulat adalah 4.944 (terlalu rendah dengan 55.5).
Jika ketiga pembulatan dilakukan menggunakan "round half odd", hasilnya adalah:
0 445
1000 1111
2000 889
3000 1111
4000 889
5000 1111
6000 889
7000 1111
8000 889
9000 1111
10000 444
Hasilnya berbeda dari satu "putaran setengah ganjil" ke seribu terdekat 550 kali dari 10.000 dan nilai bulat rata-rata adalah 4.999,5 (benar).
Akhirnya, jika ketiga pembulatan dilakukan menggunakan "round half even", hasilnya adalah:
0 546
1000 909
2000 1091
3000 909
4000 1091
5000 909
6000 1091
7000 909
8000 1091
9000 909
10000 1091
Hasil berbeda dari single "putaran setengah bahkan" ke terdekat ribu 450 kali dari 10.000 dan rata-rata nilai bulat adalah 4999,5 (yang benar).
Saya pikir itu jelas bahwa setengah setengah atas dan ke bawah setengah bias nilai bulat, sehingga rata-rata nilai bulat tidak lagi memiliki harapan yang sama dengan rata-rata nilai asli, dan bahwa "setengah setengah genap" dan "setengah setengah ganjil" msgstr "hapus bias dengan memperlakukan 5 setengah jalan waktu dan separuh lainnya setengah jalan. Pembulatan berturut-turut menggandakan bias.
Babak setengah genap dan setengah setengah ganjil memperkenalkan jenis bias mereka sendiri untuk distribusi: masing-masing bias terhadap angka genap dan ganjil. Dalam kedua kasus, sekali lagi, bias ini dikalikan dengan pembulatan berturut-turut, tetapi lebih buruk untuk putaran setengah aneh. Saya pikir penjelasan dalam kasus ini sederhana: 5 adalah angka ganjil, jadi setengah babak ganjil memiliki hasil lebih banyak yang berakhir pada 5 dari pada setengahnya genap - dan oleh karena itu, lebih banyak hasil yang harus ditangani secara khusus oleh putaran berikutnya .
Jadi bagaimanapun, dari empat pilihan, hanya dua yang tidak bias, dan dari dua pilihan yang tidak bias, setengah babak bahkan memberikan distribusi berperilaku terbaik ketika dikenakan pembulatan berulang.