왜 일부 언어는 가장 가까운 EVEN 정수로 반올림합니까?


44

Scheme (R5RS) 및 Python ( 이 Question 참조 )과 같은 프로그래밍 언어 는 값이 주변 정수 사이에 정확히있을 때 가장 가까운 짝수로 반올림합니다.

이것에 대한 추론은 무엇입니까?
다음 계산을 쉽게 추론 할 수있는 수학적 아이디어가 있습니까?

(R5RS는 IEEE 부동 소수점 표준을이 동작의 소스로 참조합니다.)


4
floating-point-gui.de 를 읽었습니까 ?
Basile Starynkevitch

1
IEEE는 다중 반올림 모드를 허용합니다. 이것은 그들 중 하나입니다. 일부 언어는 실행 중에 반올림 모드를 변경할 수도 있습니다.
Tobias Brandt

5
Wikipedia에서 반올림하기위한 타이 브레이킹 섹션과 각각의 배후에있는 추론 을 읽을 수 있습니다 .


1
"정확도는 부동 소수점 수와의 토론 문제이지만"토론의 문제는 아니지만 매우 정확하게 지정됩니다. 예를 들어 42.5와 같이 여기에 관련된 숫자는 이진 분수이므로 정확하게 표현할 수 있습니다. 정확하게 표현할 수없는 것은 소수를 포함한 이진 이외의 분수입니다.
svick

답변:


39

얼마 전 나는 연속적인 반올림을위한 테스트 프로그램을 만들었습니다. 왜냐하면 기본적으로 반올림 알고리즘에 대한 최악의 스트레스 테스트이기 때문입니다.

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로 끝나는 결과가 더 많으므로 다음 반올림에서 특별히 처리해야하는 결과가 더 많습니다 .

어쨌든, 네 가지 선택 중 두 가지만 편향되지 않고 두 가지 편향되지 않은 선택 중 반올림은 반올림이 반복 될 때 가장 잘 동작하는 분포를 제공합니다.


55

이를 은행가 반올림이라고합니다. 아이디어는 많은 반올림 연산에서 누적 오류를 최소화하는 것입니다.

항상 .5를 내림했다고 가정 해 봅시다. 은행이 매번 반 센트 씩 지불하는 작은이자 지불을 생각해보십시오.

항상 0.5를 반올림했다고 가정 해 봅시다. 당신이해야 할 것보다 더 많은이자를 지불하기 때문에 회계가 비명을 질 것입니다.


6
그러나 왜 홀수이고 홀수하지 않습니까?
ratchet freak

17
@ratchetfreak-너무 작은 숫자는 0에서 멀지 않게 반올림합니다. 그 외에는 임의적입니다.
Jonathan Dursi

15
@ratchetfreak : 숫자 1로 시작하여 2로 나누고 홀수로 반올림하면 어떻게됩니까? 0.5는 1로 반올림됩니다. 다시 2로 나누면 어떻게됩니까? 0.5는 1로 반올림됩니다. 절대 0이되지 않습니다.
gnasher729

13
나는 짝수도 홀수보다 선호되어야한다고 생각합니다. 후속 반올림 딜레마. 실제로 두 개는 (정확히) 두 개가 다소 빈번한 작업입니다.
Marc van Leeuwen

4
통계에서도 중요합니다. 데이터 세트의 모든 소수 멤버가 반올림되면 평균과 같은 설명 통계가 반올림되는 것보다 (약간) 높아집니다. 케네스 로스 만 (Kenneth Rothman)의 역학 개론 (Etrodemiology)은 데이터베이스를 더 높은 숫자로 점진적으로 편향시키는 것으로 항상 .5 (또는 .005 등)를 반올림하지만 항상 짝수 또는 홀수로 반올림하는 것은 평균을 편향시키지 않습니다.
Will Murphy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.