반올림
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.
1. 개요
반올림은 특정 기수법에서 절반 미만은 버리고, 절반 이상은 윗자리에 1을 더하는 연산이다. 반올림은 다양한 종류가 있으며, 가장 가까운 정수로 반올림, 올림 반올림, 내림 반올림, 오사오입, 오사육입 등 여러 방법이 존재한다. 반올림은 계산 과정에서 오차를 발생시킬 수 있으며, 이중 반올림과 같은 경우 오차를 더욱 키울 수 있다. 프로그래밍 언어에서는 반올림을 위한 다양한 함수를 제공하며, IEEE 754 표준은 부동 소수점 연산에서의 반올림 방법을 정의한다. "테이블 작성자의 딜레마"는 초월 함수를 정확하게 반올림하는 데 드는 계산 비용을 예측하기 어렵다는 문제를 나타낸다.
더 읽어볼만한 페이지
반올림 | |
---|---|
개요 | |
정의 | 어떤 수 y를 더 다루기 쉬운 다른 수 x로 바꾸는 것. |
목적 | 계산을 더 간단하게 만들기 숫자를 보고하거나 전달할 때 더 의미있게 만들기 |
종류 | |
올림 | 특정 자릿수에서 값을 올리는 방식. |
내림 | 특정 자릿수에서 값을 버리는 방식. |
반올림 | 특정 자릿수에서 값을 올리거나 버리는 방식. |
반올림의 예시 | |
소수점 둘째 자리에서 반올림 | 은 로 반올림됨 |
소수점 셋째 자리에서 반올림 | 는 1.41로 반올림됨 |
백의 자리에서 반올림 | 은 으로 반올림될 수 있음 |
참고 문헌 |
2. 정의
특정 기수법에서 절반 미만이면 0으로 버리고, 절반 이상이면 윗자리에 1을 더한다.[1]
특정 기수법에서 절반 미만이면 0으로 버리고, 절반 이상이면 윗자리에 1을 더하는 것을 반올림이라고 한다. 반올림은 임의의 폭으로 가능하지만, 특별히 언급하지 않는 한 반올림 폭을 1로 한다. 임의의 폭으로 반올림하려면, 반올림하기 전에 폭으로 나누고, 반올림한 후에 폭을 곱한다.
가장 기본적인 반올림은 임의의 숫자를 정수로 대체하는 것이다.[2] 반올림은 임의의 반올림 폭에 대해 가능하지만, 특별히 언급하지 않는 한 반올림 폭을 1로 한다.[4] 임의의 반올림 폭으로 반올림하려면, 반올림하기 전에 반올림 폭으로 나누고, 반올림한 후에 반올림 폭을 곱한다.[4]
주로 정수에 대해 언급하지만, 음수에 대해서도 적절히 언급한다.[5]
3. 종류
주로 정수에 대해 언급하지만, 음수에 대해서도 적절히 언급한다. 정수 부분을 그대로 남기고 소수점 이하를 0으로 만드는 반올림을 "내림"이라고 한다. 소수점 이하가 0이 아닌 경우 정수 부분을 1 증가시키고 소수점 이하를 0으로 만드는 반올림을 "올림"이라고 한다.
음수를 고려하면, "내림", "올림"에 준하는 반올림은 4가지 종류가 있다.
"내림", "올림"은 계산이 단순하지만, 반올림 오차의 상계가 1 (최대가 1에 가까움)로 크다. 게다가 오차가 항상 같은 부호라는 바이어스가 있어, 반올림한 수를 많이 더하면 개수에 비례하여 오차가 누적된다. 그래서 제한된 목적에만 사용된다.
수치가 증가해서는 곤란하거나 감소해서는 곤란한 경우 "내림"이나 "올림"이 사용된다.
반올림 오차를 작게 억제하려면, 가장 가까운 정수(두 개가 있는 경우에는 그 중 하나)로 반올림하면 된다. 이것을 "최근접 반올림"이라고 한다. 단, 단순히 "최근접 반올림"이라고 하면 "짝수 반올림"을 의미하는 경우가 많으므로 주의해야 한다. "최근접 반올림"에서는 반올림 오차는 최대 0.5이며, 바이어스는 소수 부분이 랜덤(즉, 에서 균등 분포)인 경우 발생하지 않는다.
소수 부분이 정확히 0.5인 경우 어느 쪽으로 반올림할지에 따라 몇 가지 변종이 있다. 컴퓨터에서는 프로세서에 따라 "사사오입"과 "오사육입"을 균등하게 사용하며, 바이어스를 0으로 하는 경우도 있다.
알시알 마작의 점수 계산에서는 과거에 "사사오입(四捨六入)"이 채택되었는데, 이는 반올림하는 자리가 반드시 짝수이기 때문이며, 실질적으로는 "가장 가까운 정수로 반올림"이다. 뉴질랜드에서는 현금 결제 시 스웨디시 라운딩으로 단수 처리가 이루어지는데, 이는 십진법에서 '''이사사입''' 또는 '''칠사팔입'''이라고 불린다. 5를 단위로 한 단수가 3 미만이면 버리고, 3 이상이면 올림한다.
IEEE 754에서 반올림 모드로 정해진 것은 * 최근접 반올림(짝수), * 0으로의 반올림, * 양의 무한대 방향으로의 반올림, * 음의 무한대 방향으로의 반올림 4가지이며, "IEEE 반올림"이라고 총칭한다.
전형적인 반올림 문제는 다음과 같다.
반올림 문제 | 예시 입력 | 결과 | 반올림 기준 |
---|---|---|---|
무리수를 분수로 근사 | 22/7 | 분모 1자리 | |
유리수를 더 작은 분모를 가진 분수로 근사 | 399 / 941 | 3 / 7 | 분모 1자리 |
분수를 분수 소수로 근사 | 5 / 3 | 소수점 4자리 | |
분수 소수를 더 적은 자릿수를 가진 수로 근사 | 2.18 | 소수점 2자리 | |
소수 정수를 더 많은 후행 0을 가진 정수로 근사 | 유효 숫자 3자리 | ||
지수 표기법을 사용하여 큰 소수 정수를 근사 | 유효 숫자 3자리 | ||
지정된 양의 배수로 값을 근사 | 48.2 | 45 | 15의 배수 |
유한 집합의 실수 각각을 정수로 근사하여 반올림된 수의 합이 수의 반올림된 합과 같도록 함[3] | {0, 0, 1} | 반올림된 요소의 합은 요소의 반올림된 합과 같음 |
3. 1. 사사오입 (四捨五入)
4 이하의 숫자는 버리고, 5 이상의 숫자는 올리는 방법이다. 四捨五入|사사오입일본어은 일반적으로 가장 널리 사용되는 반올림 방법이다.[3] 소수 부분이 0.5일 때 항상 올림하므로, 양의 편향(positive bias)이 발생할 수 있다.십진법에서는 다음과 같이 반올림을 한다.
# 반올림할 자리를 구한다.
# 4 이하이면 0으로 버리고 5 이상이면 0으로 버린 후 윗자리에 1을 더한다.
- 73
- * 일의 자리에서 반올림: 70
- * 십의 자리에서 반올림: 100
- 51.6137
- * 소수점 넷째 자리에서 반올림: 51.614
- * 소수점 셋째 자리에서 반올림: 51.61
- * 소수점 둘째 자리에서 반올림: 51.6
- * 소수점 첫째 자리에서 반올림: 52
- * 일의 자리에서 반올림: 50
- * 십의 자리에서 반올림: 100
1000부터 1200까지의 정수를 100의 자리까지 어림하는 방법에 따라 다음 표와 같이 어림할 수 있다.
100의 자리까지 어림 | 1000 | 1001 - 1049 | 1050 | 1051 - 1059 | 1060 - 1099 | 1100 | 1101 - 1149 | 1150 | 1151 - 1159 | 1160 - 1199 | 1200 |
---|---|---|---|---|---|---|---|---|---|---|---|
사사오입(일반적인 반올림) | 1000 | 1100 | 1200 |
십진법에서 소수 부분이 0.5 미만이면 버리고, 0.5 이상이면 올림하는 "반올림"을 "사사오입"이라고 한다. JIS Z 8401에서 규칙 B로 규정하고 있다.[58] "사사오입"이라는 명칭은 소수 첫째 자리가 4 이하면 버리고, 5 이상이면 올림하는 것에 해당한다는 데에서 유래했다. 일반적으로 '''R 반올림'''이라고도 한다.
양수에 대해서는 0.5를 더한 후 버리는 단순한 알고리즘으로 구할 수 있다. 음수에 대해 정상적인 결과를 얻으려면 버림은 음의 무한대로 반올림해야 한다. (0으로 반올림하면 예를 들어 -2가 -1로 반올림된다.) 단, 0.5를 더하고 음의 무한대로 반올림하면, 소수 부분이 0.5일 경우 절대값이 감소한다. (예를 들어 -1.5는 -1로 반올림된다.) 한편, JIS Z 8401에서는 음수를 절대값으로 반올림한다. (-1.5는 -2로 반올림된다.)[58]
소수 부분이 0.5일 때 항상 증가하는 방향으로 반올림되기 때문에, (소수 부분이 무작위가 아닌 경우에는) 약간의 양의 편향이 발생할 수 있다.
3. 2. 오사오입 (Round-to-nearest-even)
5 미만의 숫자는 버림하며 5 초과의 숫자는 올림한다. 5의 경우에는 5의 앞자리가 홀수인 경우엔 올림을 하고 짝수인 경우엔 버림을 하여 짝수로 만든다. 예를 들어 53.45는 53.4로, 32.75는 32.8로 반올림한다.[51][52] 이를 오사오입(round-to-nearest-even)이라고 한다. 자연과학 및 공학의 유효 숫자에서 많이 쓰이며, IEEE 754 표준에서 이진 부동 소수점 연산의 기본 반올림 모드로 사용된다.소수 부분이 정확히 0.5인 경우 정수 부분이 짝수면 "0으로 반올림", 홀수면 "무한대로 반올림"[55]이 되기 때문에 "짝수 버리고 홀수 올림"이라고 불리기도 한다.
여러 번 더해도 반올림 오차가 특정 쪽으로 치우쳐 누적되지 않는다. 다만, 짝수+0.5는 나타나지만 홀수+0.5는 나타나지 않는 데이터처럼 분포에 특수한 특징이 있는 경우에는 편향(bias)이 발생할 수 있다.
"오사오입"은 "은행가의 반올림 (bankers' rounding)", "은행 반올림"[54], "JIS 반올림"[53], "ISO 반올림"이라고도 불린다. JIS Z 8401에서 규칙 A로 정해져 있으며, 규칙 B(사사오입)보다 "바람직하다"고 여겨진다.
3. 3. 오사육입 (五捨六入)
사사오입과는 반대로 5를 버리고, 6 이상을 올리는 방법이다. 5 미만은 내림, 5 초과는 올림으로 사사오입과 동일하다.[56] 나머지가 0.1의 정수 배수만 취할 수 있는 경우에 한정하여 실용적이다. 이 경우 오사오입과 같은 결과가 된다.예를 들어, 마작의 일부 로컬 룰에서는 최종 득점을 오사육입하는 경우가 있다. 이 경우 나머지는 항상 0.1의 정수 배수(100의 배수를 1000의 배수로 반올림)이므로, 반올림 결과는 오사오입과 같은 결과가 된다.
1000부터 1200까지의 정수를 100의 자리까지 어림하는 방법에 따라 다음 표와 같이 어림할 수 있다.
100의 자리까지 어림 | 1000 | 1001 - 1049 | 1050 | 1051 - 1059 | 1060 - 1099 | 1100 | 1101 - 1149 | 1150 | 1151 - 1159 | 1160 - 1199 | 1200 |
---|---|---|---|---|---|---|---|---|---|---|---|
올림 | 1000 | 1100 | 1200 | ||||||||
버림 | 1000 | 1100 | 1200 | ||||||||
사사오입(일반적인 반올림) | 1000 | 1100 | 1200 | ||||||||
오사오입(더 정확한 반올림) | 1000 | 1100 | 1200 | ||||||||
오사육입(매우 드묾) | 1000 | 1100 | 1200 |
주어진 숫자를 반올림, 내림, 올림, 오사육입, 짝수로 반올림을 사용하여 대체한 결과는 다음과 같다. 이 예시에서는 반올림 간격은 0.1이다.[58]
주어진 숫자 | 내림 | 올림 | 반올림 | 오사육입 | 짝수로 반올림 |
---|---|---|---|---|---|
8.05 | 8.0 | 8.1 | 8.1 | 8.0 | 8.0 |
8.051 | 8.0 | 8.1 | 8.1 | 8.0 | 8.1 |
8.15 | 8.1 | 8.2 | 8.2 | 8.1 | 8.2 |
8.25 | 8.2 | 8.3 | 8.3 | 8.2 | 8.2 |
8.263 | 8.2 | 8.3 | 8.3 | 8.3 | 8.3 |
8.347 | 8.3 | 8.4 | 8.3 | 8.3 | 8.3 |
8.35 | 8.3 | 8.4 | 8.4 | 8.3 | 8.4 |
8.45 | 8.4 | 8.5 | 8.5 | 8.4 | 8.4 |
'''굵은 글씨'''는 반올림의 경우와 다른 결과가 나오는 숫자이다.
3. 4. 기타 반올림 방법
내림(Rounding down영어)은 항상 아래쪽 정수로 반올림하는 방식으로, floor 또는 음의 무한대 방향으로 반올림이라고도 한다. 예를 들어 23.7은 23으로, -23.2는 -24로 반올림된다.올림(Rounding up영어)은 항상 위쪽 정수로 반올림하는 방식으로, ceiling 또는 양의 무한대 방향으로 반올림이라고도 한다. 예를 들어 23.2는 24로, -23.7은 -23으로 반올림된다.
0으로 반올림(Rounding toward zero)은 양수는 내림, 음수는 올림하는 방식이다. 이는 절삭과 같으며, 무한대에서 멀어지는 반올림이라고도 한다. 예를 들어 23.7은 23으로, -23.7은 -23으로 반올림된다.
0에서 멀어지는 반올림(Rounding away from zero)은 양수는 올림, 음수는 내림하는 방식이다. 이를 무한대로 반올림이라고도 한다. 예를 들어 23.2는 24로, -23.2는 -24로 반올림된다.
홀수로 반올림(Round-to-nearest-odd)은 5 미만은 버리고, 5 초과는 올리며, 5의 경우 앞자리가 짝수이면 올리고 홀수이면 버려서 홀수로 만든다.
확률적 반올림(Stochastic rounding)은 반올림할 자리의 값에 따라 확률적으로 올림 또는 내림을 결정한다. 예를 들어 1.6은 확률 0.4로 1로, 확률 0.6으로 2로 반올림된다.
폰 노이만 반올림은 항상 홀수 쪽으로 반올림한다. 이진법에서는 버린 후 LSB를 설정한다.
4. 반올림 오차
반올림 오차는 반올림으로 인해 발생하는 오차를 의미한다. 반올림 오차의 상계는 사용하는 반올림 방법에 따라 달라진다.
여러 번의 계산을 순차적으로 할 때, 반올림 방법에 따라서 결과에 큰 영향을 줄 수 있다. 1982년 밴쿠버 증권 거래소에서 새로 설정한 주가 지수의 경우, 초기값은 1000.000이었으나 22개월 후 약 520으로 하락했다. 이는 매일 수천 번 지수를 재계산하면서 소수점 3자리에서 절삭(내림)하여 반올림 오차가 누적되었기 때문이다. 같은 기간 동안 절삭 대신 가장 가까운 천분위수로 반올림하여 다시 계산한 결과, 지수 값은 1098.892로 수정되었다.[4]
반올림 오차는 여러 번의 계산 과정에서 누적될 수 있으며, 특히 많은 수를 더하거나 뺄 때 주의해야 한다.
다음은 여러가지 반올림 방법에 따른 반올림 오차를 나타낸 표이다.
값 | 기능적 방법 | 임의의 방법 | |||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
방향 반올림 | 가장 가까운 정수로 반올림 | 더 짧은 정밀도를 위해 준비하기 위한 반올림 | 교대로 동률 풀기 | 임의의 동률 풀기 | 확률적 | ||||||||||||
아래로 (−∞ 방향) | 위로 (+∞ 방향) | 0 방향 | 0에서 멀어짐 | 절반 아래로 (−∞ 방향) | 절반 위로 (+∞ 방향) | 0 방향 절반 | 0에서 멀어짐 절반 | 짝수로 절반 | 홀수로 절반 | 평균 | SD | 평균 | SD | 평균 | SD | ||
+2.8 | +2 | +3 | +2 | +3 | +3 | +3 | +3 | +3 | +3 | +3 | +2 | +3 | 0 | +3 | 0 | +2.8 | 0.04 |
+2.5 | +2 | +2 | +2 | +2.505 | 0 | +2.5 | 0.05 | +2.5 | 0.05 | ||||||||
+2.2 | +2 | +2 | +2 | +2 | 0 | +2 | 0 | +2.2 | 0.04 | ||||||||
+1.8 | +1 | +2 | +1 | +2 | +1 | +1.8 | 0.04 | ||||||||||
+1.5 | +1 | +1 | +1 | +1.505 | 0 | +1.5 | 0.05 | +1.5 | 0.05 | ||||||||
+1.2 | +1 | +1 | +1 | +1 | 0 | +1 | 0 | +1.2 | 0.04 | ||||||||
+0.8 | 0 | +1 | 0 | +1 | +0.8 | 0.04 | |||||||||||
+0.5 | 0 | 0 | 0 | +0.505 | 0 | +0.5 | 0.05 | +0.5 | 0.05 | ||||||||
+0.2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +0.2 | 0.04 | ||||||||
−0.2 | −1 | 0 | −1 | −1 | −0.2 | 0.04 | |||||||||||
−0.5 | −1 | −1 | −1 | −0.495 | 0 | −0.5 | 0.05 | −0.5 | 0.05 | ||||||||
−0.8 | −1 | −1 | −1 | −1 | 0 | −1 | 0 | −0.8 | 0.04 | ||||||||
−1.2 | −2 | −1 | −1 | −2 | −1.2 | 0.04 | |||||||||||
−1.5 | −2 | −2 | −2 | −1.495 | 0 | −1.5 | 0.05 | −1.5 | 0.05 | ||||||||
−1.8 | −2 | -2 | −2 | −2 | 0 | −2 | 0 | −1.8 | 0.04 | ||||||||
−2.2 | −3 | −2 | −2 | −3 | −2 | −2.2 | 0.04 | ||||||||||
−2.5 | −3 | −3 | −3 | −2.495 | 0 | −2.5 | 0.05 | −2.5 | 0.05 | ||||||||
−2.8 | −3 | −3 | −3 | −3 | 0 | −3 | 0 | −2.8 | 0.04 |
만약 소수 부분이 0.5가 아니라면, 가장 가까운 정수로 반올림하는 방법으로 인한 반올림 오차는 대칭적이다.
고정 소수점 숫자의 큰 집합을 균등하게 분포된 소수 부분으로 반올림할 때, 소수 부분이 0.5인 숫자를 제외하면 모든 값의 반올림 오차는 통계적으로 서로 상쇄된다.
실제로 부동 소수점 숫자가 일반적으로 사용되는데, 이는 간격이 균등하지 않기 때문에 더 많은 계산적 주의가 필요하다.
정수 정의역과 치역을 가진 함수의 정확한 값을 평가하기 위해 반올림된 산술 연산을 사용할 수 있다. 예를 들어, 정수 n이 완전 제곱수라는 것이 알려져 있으면, n을 부동 소수점 값 z로 변환하고, 부동 소수점을 사용하여 z의 근사 제곱근 x를 계산한 다음, x를 가장 가까운 정수 y로 반올림하여 제곱근을 계산할 수 있다. n이 너무 크지 않으면, x의 부동 소수점 반올림 오차가 0.5보다 작으므로 반올림된 값 y는 n의 정확한 제곱근이 된다.
'홀수로 반올림'(round to odd)[51]은 '짝수로 반올림'의 대칭이다. 소수 부분이 0.5보다 작으면 "내림", 소수 부분이 0.5보다 크면 "올림"이라는 점은 '최근접 반올림'과 동일하지만, 소수 부분이 정확히 0.5인 경우 "내림"과 "올림" 중 결과가 홀수가 되는 쪽으로 반올림한다는 점이 다르다.
소수점 0.5의 데이터가 유한 비율로 존재하는 경우, "사사오입"에서는 오차가 발생하지만, "홀수로 반올림"에서는 오차가 없다. 즉, 다수를 더해도 반올림 오차가 특정 측으로 치우쳐 누적되는 일이 없다. 다만, 짝수+0.5는 나타나지만 홀수+0.5는 나타나지 않는 데이터와 같이 분포에 특수한 특징이 있는 경우에는 오차가 발생할 수 있다.
4. 1. 반올림의 상대오차
실수 x를 부동소수점 기계 숫자로 나타낸 것을 fl(x)라고 할 때, 반올림 오차를 구하는 과정은 다음과 같다. 우선 십진수 양의 실수 x는 정규화된 형태로 나타낼 수 있다.:
인 경우 bk에 1을 더해주어 반올림을 하게 되고, 인 경우 bk 이후 모든 숫자들을 절단한다. k자리로 반올림하는 경우의 상대오차를 구한다면 상대오차가 최대가 되는 값을 찾아야 한다. 이때 bk+1이 5 이상인지 미만인지에 따라 두 가지로 나눈다. 인 경우
:
인 경우는 인 경우보다 상대오차가 작다. 따라서 반올림의 상대오차는
이다.
5. 특수한 반올림
반올림은 다음과 같은 특수한 경우에 적용될 수 있다.
- 지정된 배수로 반올림: 숫자를 특정 값의 가장 가까운 배수로 반올림한다. 예를 들어, 달러를 센트 단위로 반올림하거나, 정수를 1000 단위로 반올림하는 경우가 있다.[3]
- 로그 스케일 반올림: 로그 척도를 사용하여 숫자를 반올림한다. 저항기 값 표시에 사용되는 E12 계열과 같이, 선호 숫자를 사용하는 경우가 대표적이다.
- 부동 소수점 반올림: 부동 소수점 산술에서 주어진 값을 지정된 유효 숫자를 가진 값으로 변환한다. 이때, 반올림 결과가 오버플로될 수 있으며, 이 경우 적절한 무한대 또는 표현 가능한 가장 큰/작은 유한수로 처리된다.
- 간단한 분수로 반올림: 주어진 숫자를 분자와 분모가 특정 최댓값을 넘지 않는 가장 가까운 분수로 반올림한다. 페이 수열, 스턴-브로콧 트리, 연분수와 관련이 있다.
- 사용 가능한 값으로 반올림: 목재, 종이 등 표준 크기로 판매되는 제품의 경우, 계산된 값을 가장 가까운 표준 크기로 반올림한다.[12][13]
5. 1. 지정된 배수로 반올림
숫자를 특정 값의 가장 가까운 배수로 반올림하는 것은 일반적인 연산 작업이다. 예를 들어, 초의 십분의 일, 달러의 백분의 일, 정수 다스 또는 천 단위 등으로 반올림하는 경우가 이에 해당한다.[3]일반적으로 숫자 x를 특정 양의 값 m의 배수로 반올림하는 공식은 다음과 같다.
:
예를 들어, 2.1784달러를 센트 단위(0.01의 배수)로 반올림하는 경우를 생각해보자. 2.1784 / 0.01 = 217.84를 계산하고, 이를 218로 반올림한다. 마지막으로 218 × 0.01 = 2.18을 계산하여 최종 결과 2.18달러를 얻는다.
미리 정해진 유효 숫자 자릿수로 반올림할 때는 증분 m이 반올림할 숫자의 크기에 따라 달라진다. 사람에게 표시하기 위해서는 일반적으로 십진법을 사용하며(예: m = 1/1000 또는 25/100), 디지털 컴퓨터에 저장된 중간 값의 경우 이진법을 사용한다(m은 2의 거듭제곱에 정수를 곱한 값).[3]
추상적인 두 개의 인수 "roundToMultiple()" 함수는 여러 경우에 증분에 대한 암묵적인 값 m = 1과 함께 사용되며, 이때는 정수로 반올림 섹션에 제시된 12개의 별개의 구체적인 정의를 가진 단일 인수 함수 "round()"로 축소된다.[3]
5. 2. 로그 스케일 반올림
이러한 유형의 반올림은 '''로그 척도 반올림'''이라고도 하며, 지정된 거듭제곱으로 반올림의 한 종류이다. 로그 척도 반올림은 어떤 수의 로그를 취하고 로그 척도에서 가장 가까운 값으로 반올림하여 계산한다.예를 들어, 저항기는 로그 척도에서 선호 숫자를 사용하여 값을 표기한다. 특히, 10% 정확도를 가지는 저항기의 경우 100, 120, 150, 180, 220 등의 공칭 값을 10의 배수로 반올림하여 사용한다. (E12 계열). 만약 계산 결과 165옴의 저항기가 필요하다면, log(150) = 2.176, log(165) = 2.217, log(180) = 2.255 이다. 165의 로그값은 180의 로그값에 더 가깝기 때문에, 다른 조건이 없다면 180옴 저항기를 선택하는 것이 일반적이다.
값 x ∈ (a, b)영어가 a 또는 b로 반올림되는지 여부는 x2 값이 ab 곱보다 큰지 작은지에 따라 결정된다. 저항기 예시에서 1652 = 27225이고, 150 × 180 = 27000 이므로, 165는 180으로 반올림된다.
5. 3. 부동 소수점 반올림
부동 소수점 산술에서 반올림은 주어진 값 x|x영어를 지정된 유효 숫자를 가진 값 y|y영어로 변환하는 것을 목표로 한다. 즉, y|y영어는 x|x영어의 크기에 따라 달라지는 숫자 m|m영어의 배수여야 한다. 숫자 m|m영어은 부동 소수점 표현의 기수(일반적으로 2 또는 10)의 거듭제곱이다.이 세부 사항을 제외하고 위에서 논의된 반올림의 모든 변형은 부동 소수점 숫자의 반올림에도 적용된다.
반올림된 결과가 지시된 반올림에 대한 결과를 오버플로하는 경우, "0에서 멀어지는 반올림"의 경우에는 적절한 부호 있는 무한대이고, "0으로 반올림"의 경우에는 가장 높은 표현 가능한 양의 유한수(또는 x|x영어가 음수인 경우 가장 낮은 표현 가능한 음의 유한수)이다. 일반적인 경우인 ''가장 가까운 숫자로 반올림''에 대한 오버플로의 결과는 항상 적절한 무한대이다.
5. 4. 간단한 분수로 반올림
어떤 맥락에서는 주어진 숫자를 "깔끔한" 분수로 반올림하는 것이 바람직할 수 있다. 즉, 분자와 분모가 주어진 최댓값을 넘지 않는 가장 가까운 분수이다. 이 문제는 고정된 소수점 또는 이진수 자릿수로, 또는 주어진 단위의 배수로 값을 반올림하는 문제와는 상당히 다르다. 이 문제는 페이 수열, 스턴-브로콧 트리, 연분수와 관련이 있다.5. 5. 사용 가능한 값으로 반올림
완성된 목재, 필기 용지, 커패시터와 같이 몇 가지 표준 크기로만 판매되는 제품의 경우, 설계 과정에서 계산된 근사값을 가장 가까운 표준 크기로 반올림하는 방법이 사용된다.[12][13] 예를 들어 "가장 가까운 표준 값으로 내림", "가장 가까운 표준 값으로 올림", "가장 가까운 표준 값으로 반올림"과 같은 방식이다.로그 척도에서 동일한 간격으로 배치된 선호 값의 경우, 주어진 값에 가장 가까운 선호 값을 선택하는 것은 일종의 확대 축소 반올림으로 볼 수 있으며, 이러한 반올림된 값은 직접 계산할 수 있다.[14]
6. 프로그래밍 언어에서의 반올림 함수
대부분의 프로그래밍 언어는 분수를 반올림하는 함수나 특수 구문을 제공한다.[60] 초기 수치 언어는 절삭(0으로)하는 한 가지 방법만 제공했지만, 최근에는 최소한 네 가지 기본 반올림 함수(올림, 내림, 가장 가까운 정수로, 0으로)를 제공하는 경우가 많다. 동률 처리 방법은 언어 및 버전에 따라 다를 수 있으며, 프로그래머가 선택할 수 있다.
IEEE 754 표준을 따르는 언어는 여러 반올림 모드를 제공하고, 사용자가 선택할 수 있도록 하는 경우가 많다. 예를 들어, C99에서는 `round` 함수(사사오입), `fegetround`/`fesetround` (반올림 모드 설정) 등을 제공한다.
일반적인 함수
- '''내림''' (floor): 주어진 수보다 작거나 같은 가장 큰 정수를 반환한다. `floor` 함수로 표현한다.
- '''올림''' (ceil): 주어진 수보다 크거나 같은 가장 작은 정수를 반환한다. `ceil` 또는 `ceiling` 함수로 표현한다.
- '''절삭''' (trunc): 소수점 이하 자릿수를 버리고 0에 가까운 정수를 반환한다. `trunc`, `truncate`, `fix` 함수로 표현한다.

- '''가장 가까운 정수로 반올림''' (round): 가장 가까운 정수로 반올림한다. `round` 함수로 표현하며, 동점 처리 방식(예: 사사오입, 오사오입)은 언어마다 다를 수 있다.
프로그래밍 언어별 `round` 함수 동작 예시
주의 사항
- C 언어 등에서 부동 소수점 형식을 정수 형식으로 형 변환할 때, 소수 부분이 버려지는 경우가 많다. (0으로 반올림)
- C 언어의 `modf` 함수는 실수를 정수부와 소수부로 분할하며, 정수부는 0으로 반올림된다.
- 일부 언어(Ruby, PHP 등)는 소수점 이하 몇 자리에서 반올림할지 지정할 수 있지만, 2진 부동 소수점 표현의 한계로 인해 정확한 결과를 얻지 못할 수 있다.
- `round` 함수가 반환하는 값은 정수이지만, 형은 부동 소수점형인 경우가 많다.
7. 기타 반올림 표준
일부 학문 분야 또는 기관에서는 반올림에 대한 표준 또는 지침을 발표했다.[50]
1966년 중반에 발표된 지침에서, 미국 연방 기상 조정관실은 기상 데이터를 가장 가까운 정수로 반올림하도록 결정했으며, "반올림" 규칙을 적용했다. 예를 들어 1.5는 정수로 반올림하면 2가 되고, -1.5는 -1이 된다. 그 이전에는 동률 규칙이 "0에서 먼 방향으로 반올림"이었다.[50]
일부 기상학자들은 정수로 반올림된 0.0도와 -0.5도 사이(0.0도 제외)의 온도를 나타내기 위해 "−0"으로 표기할 수 있다. 이 표기법은 크기가 아무리 작더라도 음수 부호가 중요하다고 간주될 때 사용된다. 예를 들어, 섭씨 눈금에서 온도를 반올림할 때, 0도 미만은 어는점을 나타낸다.
8. 이중 반올림
같은 값을 두 번 이상 반올림하는 것은 피해야 한다. 특히, 정밀도가 다른 두 번의 연속적인 반올림은 최종 정밀도로 한 번 반올림하는 것과 동일한 결과를 보장하지 않을 수 있다.[16] 예를 들어, 9.46을 소수점 한 자리로 반올림하면 9.5가 되고, 짝수로 반올림하는 경우 정수로 반올림하면 10이 되지만, 정수로 직접 반올림하면 9가 된다.
Borman과 Chatfield[16]는 소수점 한 자리로 반올림된 데이터를 정수로 표현된 사양 한계와 비교할 때 반복적인 반올림의 영향을 논의했다.
1995년에서 1997년 사이에 진행된 ''Martinez v. Allstate''와 ''Sendejo v. Farmers'' 소송에서 보험 회사는 보험료를 반복해서 반올림하는 것이 허용되며 실제로 필요하다고 주장했다. 미국 법원은 보험 회사의 주장에 반하여 판결하고 단일 반올림을 보장하기 위한 규칙을 채택하도록 명령했다.[17]
일부 컴퓨터 언어와 IEEE 754-2008 표준은 간단한 계산에서 결과를 두 번 반올림해서는 안 된다고 규정한다. 이는 서로 다른 기계에서 동일하게 실행되도록 설계된 Java에서 특히 문제였으며, x87 부동 소수점과 함께 이를 달성하기 위해 특별한 프로그래밍 기법을 사용해야 했다.[18][19] Java 언어는 차이가 중요하지 않은 경우 다른 결과를 허용하도록 변경되었으며, 결과가 정확하게 일치해야 하는 경우 strictfp 한정자를 사용해야 한다. strict floating point는 Java 17에서 복원되었다.[20]
일부 알고리즘에서는 중간 결과를 더 큰 정밀도로 계산한 다음 최종 정밀도로 반올림해야 한다. 중간 계산에 적절한 반올림을 선택하여 반복적인 반올림을 피할 수 있다.
짝수 반올림을 할 때, 잘라내기가 과도하게 이루어지는 예와 올림이 과도하게 이루어지는 예는 다음과 같다.
- 122.51은 123으로 반올림해야 한다. 하지만 먼저 122.5로 반올림하면, 다음은 122가 되어 잘라내기가 과도하게 된다.
- 123.49도 123으로 반올림해야 한다. 하지만 먼저 123.5로 반올림하면, 다음은 124가 되어 올림이 과도하게 된다.
9. 테이블 작성자의 딜레마 (Table-maker's dilemma)
윌리엄 카한이 제시한 개념으로, 초월 함수를 올바르게 반올림하는 데 필요한 계산 비용을 예측하는 것이 어렵다는 문제를 지적한다. IEEE 754 표준은 사칙 연산, 제곱근 등에 대해서는 정확하게 반올림된 결과를 보장하지만, 더 복잡한 함수에 대해서는 이러한 보장이 없다.[24]
겔폰트-슈나이더 정리와 린데만-바이어슈트라스 정리를 사용하면, 많은 표준 초등 함수가 일부 잘 알려진 인수를 제외하고 초월수 결과를 반환하는 것으로 증명될 수 있다. 따라서 이론적인 관점에서 볼 때, 이러한 함수를 정확하게 반올림하는 것은 항상 가능하다. 그러나 이러한 함수의 구현 시, 정확하게 반올림된 결과를 보장하기 전에 주어진 정밀도에 대해 결과의 정확성을 계산해야 하는 한계를 결정하는 데 많은 계산 시간이 소요되거나 불가능할 수 있다.[25]
일부 프로그래밍 패키지는 정확한 반올림을 제공한다. GNU MPFR 패키지는 정확하게 반올림된 임의 정밀도 결과를 제공한다. 다른 일부 라이브러리는 IEEE 754 배정밀도 (binary64)에서 정확한 반올림으로 기본 함수를 구현한다.
- IBM의 ''정확한 이식 가능한 수학 라이브러리'' (APMathLib 또는 MathLib, libultim이라고도 불림)[28][29][30]: 가장 가까운 값으로만 반올림한다. 최대 768비트의 작업 정밀도를 사용한다. 2001년에 GNU C 라이브러리에 포함되었지만,[31] "느린 경로"(정확한 반올림 제공)는 2018년부터 2021년까지 제거되었다.
- CRlibm: 이전 Arénaire 팀(LIP, ENS 리옹)에서 작성되었으며, 2003년에 처음 배포되었다.[32] 4가지 반올림 모드를 지원하며 가장 어려운 반올림 사례에 대한 지식을 사용하여 증명된다.[33][34] Metalibm(2014)이 뒤를 이었으며, 이는 공식적인 증명을 자동화한다.[35]
- 선 마이크로시스템즈의 libmcr (2004): 4가지 반올림 모드로 제공된다.[36][37] 어려운 경우, 이 라이브러리는 다중 정밀도도 사용하며 Table-maker's dilemma가 발생할 때마다 단어 수가 2씩 증가한다(머신의 일부 제한에 도달할 가능성이 매우 낮을 경우 정의되지 않은 동작).
계산된 자릿수에 관계없이 반올림된 값을 결정할 수 없는 계산 가능한 수가 존재한다. 특정 인스턴스를 제공할 수는 없지만 이는 정지 문제의 결정 불가능성에서 비롯된다.
참조
[1]
서적
'Linear Algebra as an Introduction to Abstract Mathematics.'
World Scientific
2016
[2]
논문
Mathematical foundation of computer arithmetic
1977-07
[3]
문서
[4]
서적
Accuracy and stability of numerical algorithms
https://books.google[...]
2002
[4]
논문
Rounding Errors to Knock Your Stocks Off
[4]
뉴스
Ever had problems rounding off figures? This stock exchange has
https://www5.in.tum.[...]
1983-11-08
[4]
뉴스
Vancouver stock index has right number at last
https://www5.in.tum.[...]
1983-11-29
[5]
웹사이트
java.math.RoundingMode
https://docs.oracle.[...]
Oracle
[6]
웹사이트
decimal – Decimal fixed point and floating point arithmetic
https://docs.python.[...]
Python Software Foundation
[7]
문서
Engineering Drafting Standards Manual
https://web.archive.[...]
NASA
[8]
서적
Postcards 4 Language Booster: Workbook with Grammar Builder
Pearson Education
[8]
서적
Microsoft Pascal Compiler for the MS-DOS Operating System User's Guide
Microsoft Corporation
[9]
문서
Schedule 1 of the Decimal Currency Act 1969
[10]
문서
IBM z/Architecture Principles of Operation
https://www.ibm.com/[...]
[11]
arXiv
Deep Learning with Limited Numerical Precision
2016-02-09
[12]
웹사이트
Zener Diode Voltage Regulators
https://www.kennethk[...]
2010-11-24
[13]
문서
Build a Mirror Tester
https://stellafane.o[...]
[14]
간행물
Excel Formula Calculates Standard 1%-Resistor Values
https://www.electron[...]
Electronic Design
2002-01-21
[15]
웹사이트
Monte Carlo Arithmetic: a framework for the statistical analysis of roundoff errors
http://web.cs.ucla.e[...]
IEEE Computation in Science and Engineering
2000-03-28
[16]
논문
Avoid the perils of using rounded data
2015-11-10
[17]
서적
Class Action Dilemmas: Pursuing Public Goals for Private Gain
https://archive.org/[...]
RAND
2000
[18]
논문
When is double rounding innocuous?
ACM
1995-07
[19]
웹사이트
Efficiently producing default orthogonal IEEE double results using extended IEEE hardware
https://www.open-std[...]
Intel
1998-10
[20]
웹사이트
JEP 306: Restore Always-Strict Floating-Point Semantics
http://openjdk.java.[...]
2021-09-12
[21]
논문
A mechanically checked proof of the correctness of the kernel of the AMD5K86 floating-point division algorithm
https://www.cs.utexa[...]
2016-08-02
[22]
논문
Emulation of a FMA and correctly-rounded sums: proved algorithms using rounding to odd
https://inria.hal.sc[...]
2016-08-02
[23]
웹사이트
21718 – real.c rounding not perfect
https://gcc.gnu.org/[...]
[24]
웹사이트
A Logarithm Too Clever by Half
https://people.eecs.[...]
2008-11-14
[25]
서적
Handbook of Floating-Point Arithmetic
"[[Birkhäuser]]"
2010
[26]
웹사이트
NA Digest Sunday, April 18, 1999 Volume 99 : Issue 16
https://netlib.org/n[...]
1999-04-18
[27]
웹사이트
Math Library for Java
http://www.alphawork[...]
[28]
웹사이트
Accurate Portable Mathematical Library
http://oss.software.[...]
[29]
Github
dreal-deps/mathlib
[30]
웹사이트
libultim – ultimate correctly-rounded elementary-function library
http://www.math.utah[...]
[31]
웹사이트
Git - glibc.git/commit
https://sourceware.o[...]
Sourceware.org
[32]
논문
Fast and correctly rounded logarithms in double-precision
2007-01
[33]
웹사이트
CRlibm – Correctly Rounded mathematical library
http://lipforge.ens-[...]
[34]
Github
taschini/crlibm
[35]
conference
Metalibm: A Mathematical Functions Code Generator
https://hal.science/[...]
2014
[36]
웹사이트
libmcr – correctly-rounded elementary-function library
http://www.math.utah[...]
2021-02-25
[37]
Github
simonbyrne/libmcr
[38]
웹사이트
The CORE-MATH project
https://core-math.gi[...]
2022-08-30
[39]
conference
The CORE-MATH Project
https://inria.hal.sc[...]
2022
[40]
웹사이트
Math Functions — The LLVM C Library
https://libc.llvm.or[...]
[41]
문서
YBC 7289 clay tablet
http://it.stlawu.edu[...]
Duncan J. Melville
2006
[42]
간행물
Rules for Rounding Off Numerical Values
American Standards Association
[43]
서적
Probability and theory of errors
https://archive.org/[...]
J. Wiley & Son
[44]
서적
Logarithmic and Other Mathematical Tables with Examples of their Use and Hints on the Art of Computation
https://archive.org/[...]
Henry Holt
1882
[45]
서적
The Theory of Measurements
https://archive.org/[...]
Jefferson Laboratory of Physics
[46]
서적
Selected Techniques of Statistical Analysis for Scientific and Industrial Research, and Production and Management Engineering
McGraw-Hill
2014-01-30
[47]
웹사이트
The Introduction of the Euro and the Rounding of Currency Amounts
https://ec.europa.eu[...]
2011-08-19
[48]
학술저널
Quantifying Quantitative Literacy: Age Heaping and the History of Human Capital
http://repositori.up[...]
2009
[49]
웹사이트
ECMA-262 ECMAScript Language Specification
http://www.ecma-inte[...]
[50]
간행물
Federal Meteorological Handbook No. 1
http://www.ofcm.gov/[...]
OFCM
2005
[51]
문서
'"The Art of Computer Programming" D. E. Knuth (1997, § 4.2.2)'
[52]
서적
C언어에 의한 수치 계산 입문 - 해법 · 알고리즘 · 프로그램 (UNIX & Information Science)
사이언스사
[53]
서적
수치 계산 공학
1989-04-26
[54]
문서
'"최근접 짝수에게 둥글게 함", "짝수 둥글게 함", "최근접 둥글게 함", "JIS 둥글게 함", "ISO 둥글게 함", "은행가의 둥글게 함", "은행 둥글게 함", "오사오입", "짝버림 홀수 올림"이라는 용어를 채용하고 있는 문헌은, 현재로서는 발견할 수 없었다. 자세한 내용은, 노트를 참조.'
[55]
문서
부의 수의 경우도 포함한 명시적 표현으로서는, 그렇게 된다.
[56]
문서
물론 이것은 기수법에 의존한 명칭이다. 본문에서는 십진법에 있어서의 성질을 설명하고 있지만, [[십이진법]]에 있어서 「오사육입」이라고 불리울 처리은 통상의 반수 올림이다.
[57]
문서
일반적으로 함수의 수치 계산의 경우, ...000과 같이 0이 계속되고 있어도, 아래의 자리수에서 위의 자리수로부터의 자리 빌림이 발생할지도 모른다. 또 lexer에 의한 [[리터럴]]의 읽어들임의 경우, 부동 소수점수의 표현으로서 본래 있을 수 없는 자리수까지 기술되고 있는, XXX...XXX.5000000000000000000000001
라고 하는 경우의 아래의 자리수의 취급을 어떻게 해야 할까, 라고 하는 점도 문제가 된다 (전술과 같은 딱 경계였던 경우, 아래의 자리수는 반드시 무의미하다고는 말할 수 없을지도 모른다).
[58]
문서
JIS Z8401:2019, p.2, 2 e) 「수치를 나타내는 경우, 항상 둥글게 하는 폭을 나타내는 것이 바람직하다.」
[59]
웹사이트
2진 소수의 10진 자리수에서의 둥글게 하기
https://blog.practic[...]
2016-12-23
[60]
문서
짝수에게 둥글게 하기가 추천되고 있으며, 서서히 표준이 되어 갈 것으로 생각된다{{요출처|date=2017년 8월}}. Microsoft의 일부 환경 등, 사양으로 명시하고 있는 것도 있다. 그러나, C99도 C++11도 Java도 ECMAScript(JavaScript)도 다른 룰을 사양에 정하고 있다.
[61]
문서
이 프레이즈에 포함되는 「테이블 메이커」란, 「[[수표]]」를 계산해, 그것을 출판하기를 꾀하는 자, 라는 의미이다. 수표는 일반적으로, 거기에 인쇄되고 있는 자리수의 범위내는 반드시 올바른 것이 아니면 안 되는 것이 요구된다 (일 것이다)라고 하는 배경이 있다. 예를 들어, 상한과 하한의 양쪽을 계산하는 것으로 결과가 어떤 범위내에 반드시 있는 것을 보증하는 것과 같은 수법이, 수표의 정확성을 위해서 활용되어 왔다, 라고 하는 역사가 있다.
[62]
웹사이트
Introduction to the Table Maker's Dilemma
https://perso.ens-ly[...]
2019-03-10
[63]
웹사이트
積算における金額の端数処理について(お知らせ)
http://www.city.odat[...]
大館市契約検査課
2014-02-21
[64]
웹사이트
国土交通省土木工事標準積算基準書(共通編)
https://www.mlit.go.[...]
国土交通省
2019-09-20
[65]
웹사이트
工事費積算における数値の取扱い(例)
https://www.mlit.go.[...]
国土交通省
2019-09-20
[66]
웹사이트
平成30年10月版 土木工事標準積算基準書(改定・訂正)
https://www.pref.sai[...]
埼玉県
2019-09-20
[67]
웹사이트
単価表における諸雑費及び端数処理について(お知らせ)
http://www.city.kawa[...]
川崎市建設緑政局総務部技術監理課積算システム担当
2019-09-19
[68]
웹사이트
「土木工事工事費積算要領及び基準の運用」の一部改定について
https://www.mlit.go.[...]
国土交通省
2018-03-20
관련 사건 타임라인
( 최근 20개의 뉴스만 표기 됩니다. )
입사 1년여만 ‘독성간질환’ 발병…“더 싼 인력으로 반도체 산업 키우는 법 반대”
본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.
문의하기 : help@durumis.com