Scheme (R5RS) 및 Python ( 이 Question 참조 )과 같은 프로그래밍 언어 는 값이 주변 정수 사이에 정확히있을 때 가장 가까운 짝수로 반올림합니다.
이것에 대한 추론은 무엇입니까?
다음 계산을 쉽게 추론 할 수있는 수학적 아이디어가 있습니까?
(R5RS는 IEEE 부동 소수점 표준을이 동작의 소스로 참조합니다.)
Scheme (R5RS) 및 Python ( 이 Question 참조 )과 같은 프로그래밍 언어 는 값이 주변 정수 사이에 정확히있을 때 가장 가까운 짝수로 반올림합니다.
이것에 대한 추론은 무엇입니까?
다음 계산을 쉽게 추론 할 수있는 수학적 아이디어가 있습니까?
(R5RS는 IEEE 부동 소수점 표준을이 동작의 소스로 참조합니다.)
답변:
얼마 전 나는 연속적인 반올림을위한 테스트 프로그램을 만들었습니다. 왜냐하면 기본적으로 반올림 알고리즘에 대한 최악의 스트레스 테스트이기 때문입니다.
0에서 9,999까지의 각 숫자에 대해 먼저 가장 가까운 10으로 반올림 한 다음 가장 가까운 100으로 반올림 한 다음 가장 가까운 1000으로 반올림합니다. ([0,1)에서 10,000 포인트로 3 자리로 반올림 한 것으로 생각할 수도 있습니다. 이 숫자 집합의 평균 값은 4999.5입니다.
세 라운딩은 "라운드 절반까지"방법을 사용하여 수행하는 경우, 다음과 같은 결과를 다음이다 (첫 번째 열은 반올림 결과, 두 번째 열은 어떻게 많은 숫자가 그 결과로 반올림 -이 히스토그램이다 즉).
0 445
1000 1000
2000 1000
3000 1000
4000 1000
5000 1000
6000 1000
7000 1000
8000 1000
9000 1000
10000 555
결과는 단일 "반 반올림"과 10,000에서 가장 가까운 천 550 배까지 다르며 평균 반올림 값은 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
결과는 단일 "반올림 반올림"과 10,000에서 가장 가까운 천 550 배로 다르며 평균 반올림 값은 4944입니다 (55.5로 너무 낮음).
"올림 반올림"을 사용하여 3 개의 반올림을 모두 수행하면 결과는 다음과 같습니다.
0 445
1000 1111
2000 889
3000 1111
4000 889
5000 1111
6000 889
7000 1111
8000 889
9000 1111
10000 444
결과는 단일 "반올림 반올림"과 10,000에서 가장 가까운 천 550 배까지 다르며 평균 반올림 값은 4999.5 (올바른)입니다.
마지막으로, 3 개의 반올림이 모두 "반올림 짝수"를 사용하여 수행되면 결과는 다음과 같습니다.
0 546
1000 909
2000 1091
3000 909
4000 1091
5000 909
6000 1091
7000 909
8000 1091
9000 909
10000 1091
하나의에서 "라운드 절반도"가장 가까운 천에 결과 다릅니다 450 만 평균 둥근 값 중 시간은 4999.5 (올바른)입니다.
반올림 반올림과 반올림 반올림은 반올림 된 값을 편향하여 반올림 된 값의 평균이 더 이상 원래 값의 평균과 동일한 기대 값을 갖지 않으며 "반올림 짝수"와 "반올림 반올림"이라는 것이 분명하다고 생각합니다 "5를 한쪽으로 절반 만 처리하고 다른쪽으로 절반을 처리하여 편향을 제거하십시오. 연속적인 반올림은 바이어스를 곱합니다.
반올림 짝수 및 반올림 홀수는 분포에 고유 한 편향을 제공합니다. 두 경우 모두이 편향에 연속적인 반올림이 곱해 지지만 반올림의 경우에는 더 나쁩니다. 이 경우의 설명은 간단하다고 생각합니다. 5는 홀수이므로 반 반올림은 반올림보다 5로 끝나는 결과가 더 많으므로 다음 반올림에서 특별히 처리해야하는 결과가 더 많습니다 .
어쨌든, 네 가지 선택 중 두 가지만 편향되지 않고 두 가지 편향되지 않은 선택 중 반올림은 반올림이 반복 될 때 가장 잘 동작하는 분포를 제공합니다.
이를 은행가 반올림이라고합니다. 아이디어는 많은 반올림 연산에서 누적 오류를 최소화하는 것입니다.
항상 .5를 내림했다고 가정 해 봅시다. 은행이 매번 반 센트 씩 지불하는 작은이자 지불을 생각해보십시오.
항상 0.5를 반올림했다고 가정 해 봅시다. 당신이해야 할 것보다 더 많은이자를 지불하기 때문에 회계가 비명을 질 것입니다.