왜 일부 언어는 가장 가까운 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.