Bahasa pemrograman seperti Skema (R5RS) dan Python ( lihat Pertanyaan ini ) berputar menuju bilangan bulat genap terdekat saat nilainya tepat di antara bilangan bulat di sekitarnya.
Apa alasan di balik ini?
Apakah ada ide matematika yang membuat perhitungan berikut lebih mudah untuk dipikirkan?
(R5RS merujuk standar titik mengambang IEEE sebagai sumber perilaku ini.)
scheme
numbers
numeric-precision
python-3.x
Profpatsch
sumber
sumber
Jawaban:
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).
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:
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:
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:
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.
sumber
Ini disebut pembulatan bankir. Idenya adalah untuk meminimalkan kesalahan kumulatif dari banyak operasi pembulatan.
Katakanlah Anda selalu dibulatkan 0,5 ke bawah. Pikirkan semua pembayaran bunga kecil itu, bank mengantongi setengah sen setiap kali ...
Katakanlah Anda selalu dibulatkan 0,5 ke atas. Akuntansi akan menjerit karena Anda membayar bunga lebih dari yang seharusnya.
sumber