Деякий час тому я створив тестову програму для послідовного округлення, оскільки це в основному найгірший стрес-тест для алгоритму округлення.
Для кожного числа від 0 до 9999 він спочатку обходить до найближчого 10, потім до найближчого 100, потім до найближчого 1000. (Ви також можете подумати про це, як 10 000 балів у [0,1) округлені до 3-х місць, потім до 2, потім до 1.) Цей набір чисел має середнє значення 4999,5.
Якщо всі три заокруглень виконані з використанням методи «круглий половина вгору», то результати виглядають наступним чином (перший стовпець округлення результату, другий стовпець як багато чисел з округленням до цього результату - тобто це гістограма).
0 445
1000 1000
2000 1000
3000 1000
4000 1000
5000 1000
6000 1000
7000 1000
8000 1000
9000 1000
10000 555
Результат відрізняється від однієї "круглої половини" до найближчої тисячі 550 разів з 10 000, а середнє округлене значення - 5055 (вище, ніж початкове середнє на 55,5).
Якщо всі три округлення виконуються "круглою половиною вниз", то результати такі:
0 556
1000 1000
2000 1000
3000 1000
4000 1000
5000 1000
6000 1000
7000 1000
8000 1000
9000 1000
10000 444
Результат відрізняється від однієї "круглої половини вниз" до найближчої тисячі 550 разів з 10 000, а середня округлена величина - 4944 (занадто низька на 55,5).
Якщо всі три округлення виконуються за допомогою "круглої половини", результат:
0 445
1000 1111
2000 889
3000 1111
4000 889
5000 1111
6000 889
7000 1111
8000 889
9000 1111
10000 444
Результат відрізняється від одиничної "нечетної круглої половини" до найближчої тисячі 550 разів із 10000, а середнє округлене значення - 4999,5 (правильно).
Нарешті, якщо всі три округлення виконані за допомогою "круглої половини", результати:
0 546
1000 909
2000 1091
3000 909
4000 1091
5000 909
6000 1091
7000 909
8000 1091
9000 909
10000 1091
Результат відрізняється від однієї "круглої половини" до найближчої тисячі 450 разів із 10000, а середнє значення округлення становить 4999,5 (правильно).
Я думаю, що очевидно, що кругла половина вгору і кругла половина вниз зміщує округлені значення, так що середнє значення округлених значень більше не має таких самих очікувань, як середнє значення вихідних значень, і що "кругла половина парних" і "кругла половина непарних "усуньте зміщення, обробляючи 5 в одну сторону половини часу, а в іншу - на другу половину. Послідовне округлення збільшує зміщення.
Круглий напівчастий і напівпарний круглий вводять власний вид упередженості в розподіл: ухил до парних і непарних цифр відповідно. В обох випадках, знову ж таки, цей ухил множиться на послідовне округлення, але це гірше для половинного раунду. Я думаю, що пояснення в цьому випадку просте: 5 - це непарне число, тому половина непарної круглої форми має більше результатів, які закінчуються на 5, ніж половину круглої половини - а отже, більше результатів, які доведеться спеціально обробляти наступним округленням.
Таким чином, з чотирьох варіантів лише два є неупередженими, а з двох неупереджених варіантів кругла половина навіть дає найкращий розподіл, коли піддається повторному округленню.