반올림 오차
Round-off error반올림 오차라고도 하는 [1][2]반올림 오차는 정확한 산수를 사용하여 주어진 알고리즘에 의해 생성된 결과와 유한정밀, 반올림된 산수를 사용하여 동일한 알고리즘에 의해 생성된 결과의 차이를 말한다.[3] 반올림 오류는 실수의 표현과 이들과 함께 한 산술 연산의 부정확함 때문이다. 이것은 정량화 오류의 한 형태다.[4] 근사 방정식이나 알고리즘을 사용할 때, 특히 실수(이론적으로 무한히 많은 숫자를 갖는 숫자)를 나타내기 위해 미세하게 많은 숫자를 사용할 때, 수치 분석의 목표 중 하나는 계산 오류를 추정하는 것이다.[5] 계산 오류(숫자 오류라고도 함)는 잘림 오류와 반올림 오류를 모두 포함한다.
반올림 오차를 포함하는 입력과 함께 계산 순서가 만들어지면 오류가 누적되어 때로는 계산을 지배할 수 있다. 상태가 좋지 않은 문제에서는 상당한 오류가 누적될 수 있다.[6]
간단히 말해서, 숫자 계산에 관련된 반올림 오류의 두 가지 주요 측면이 있다.[7]
- 디지털 컴퓨터는 숫자를 나타낼 수 있는 능력에 대해 규모와 정밀도가 제한되어 있다.
- 어떤 수치 조작은 반올림 오류에 매우 민감하다. 이것은 컴퓨터가 산술 연산을 수행하는 방식뿐만 아니라 수학적 고려사항 모두에서 발생할 수 있다.
표현 오류
한정된 숫자의 문자열을 사용하여 숫자를 표시하려고 시도함으로써 발생하는 오류는 표현 오류라고 하는 반올림 오류의 한 형태다.[8] 십진수 표현에서 표현 오류의 몇 가지 예는 다음과 같다.
표기법 | 표현 | 근사치 | 오류 |
---|---|---|---|
1/7 | 0.142 857 | 0.142 857 | 0.000 000 142 857 |
ln 2 | 0.693 147 180 559 945 309 41... | 0.693 147 | 0.000 000 180 559 945 309 41... |
로그10 2 | 0.301 029 995 663 981 195 21... | 0.3010 | 0.000 029 995 663 981 195 21... |
3√2 | 1.259 921 049 894 873 164 76... | 1.25992 | 0.000 001 049 894 873 164 76... |
√2 | 1.414 213 562 373 095 048 80... | 1.41421 | 0.000 003 562 373 095 048 80... |
e | 2.718 281 828 459 045 235 36... | 2.718 281 828 459 045 | 0.000 000 000 000 000 235 36... |
π | 3.141 592 653 589 793 238 46... | 3.141 592 653 589 793 | 0.000 000 000 000 000 238 46... |
표현에서 허용되는 자릿수를 증가시키면 반올림 오차의 크기를 줄일 수 있지만, 소수 자릿수로 제한되는 표현은 여전히 셀 수 없이 많은 실수에 대해 어느 정도의 반올림 오차를 일으킬 수 있다. 계산의 중간 단계에 사용되는 추가 자릿수를 가드 자릿수라고 한다.[9]
여러 번 반올림하면 오류가 누적될 수 있다.[10] 예를 들어 9.945309를 소수점 2자리(9.95)로 반올림했다가 다시 소수점 1자리(10.0)로 반올림하면 총 오차는 0.054691이다. 9.945309를 소수점 1자리(9.9)로 한 번에 반올림하면 오차(0.045309)가 적다.
부동 소수점제
고정점수제도와 비교해 부동소수제도는 실수를 나타내는 것이 효율적이어서 현대 컴퓨터에서도 널리 사용되고 있다. 실제 숫자 은(는) 무한하고 연속적인 반면 부동 소수점 시스템 은(는) 유한하고 이산적이다. 따라서 반올림 오차를 초래하는 표현 오차는 부동 소수점 체계에서 발생한다.
부동 소수점 체계 표기법
부동 소수점 시스템 은(는) 다음과 같은 의{\의 정수로 특징지어진다.
- : base 또는 radix
- : 정밀도
- , : 지수 범위, 여기서 은(는) 하한이고 은(는) 상한이다.
- F에는 다음과 같은 형식이 있다.
- where is an integer such that for , and is an integer such that .
표준화된 부동 소수계
- 가 0이 한 앞자리 d 0 {\ d_{이 항상 0이 아닌 경우 부동 소수점 숫자 시스템이 정규화된다[3] 이후 mantissa d은 0형입니다. d1d2. 깨지dp− 1{\displaystyle d_{0}.d_{1}d_{2}\ldots d_{p-1}}, 정규화된 시스템에서 조금이라도 숫자의 mantissa가 1≤ mantissa<>β{\displaystyle 1\leq{\text{mantissa}}<>를 조금이라도 IEEE부동 소수 점 숫자의 \beta}. 그러므로, 정규화된 형태는±1.b.쭉 펼쳐져 b 2 ^{ 서 b ,1 {\1}. 이진에서는 선행 자릿수가 항상 1이기 때문에 기록되지 않고 암묵적 비트라고 한다. 이것은 표현 오류로 인한 반올림 오차를 줄일 수 있도록 추가적인 정밀도를 제공한다.
- 부동 소수점 시스템 은 유한하고 이산적이기 때문에 모든 실수를 나타낼 수 없으며 이는 무한 실수는 반올림 규칙을 통해 일부 유한 숫자만으로 근사치가 가능하다는 것을 의미한다. ( 에 의한 지정된 실수 x 의 부동 소수점 근사치를 나타낼 수 있다.
- 정규화된 부동 소수점 총 수는
- (- 1) p- ( - L+ )+ 여기서
- 이(가) 양수 또는 음수 기호 선택 항목 카운트
- (- ) displaystyle)(\이(가) 선행 자릿수를 카운트함
- - 남은 맨티사 카운트
- - + 개 변수 선택
- 이(가 때 대소문자를 계산한다
- (- 1) p- ( - L+ )+ 여기서
IEEE 표준
IEEE 표준에서 기본은 이진수(: = 2 표준화가 사용된다. IEEE 표준은 부호, 지수 및 맨티사를 부동 소수점 워드의 개별 필드에 저장하며, 각각은 고정 너비(비트 수)를 가진다. 부동 소수점에 가장 많이 사용되는 두 가지 정밀도 수준은 단일 정밀도와 이중 정밀도다.
정밀도 | 기호(비트) | 지수(비트) | 맨티사(비트) |
---|---|---|---|
싱글 | 1 | 8 | 23 |
더블 | 1 | 11 | 52 |
기계 엡실론
기계 엡실론은 부동 소수점 시스템에서 반올림 오차 수준을 측정하는 데 사용할 수 있다. 여기 두 가지 다른 정의가 있다.[3]
- c 로 표시된 엡실론은 부동 소수점 시스템에서 0이 아닌 실수 x을(를) 나타낼 때 가능한 최대 절대 상대적 오류다.
- 그런 내가(1+ϵ)을 f;1{\displaystyle fl(1+\epsilon)> 1}{\displaystyle \epsilon}그 머신 입실론, 표시된 mϵ ch{\displaystyle \epsilon_{마하}}, 가장 작은 번호 ϵ.따라서, f나는(1+δ))fl(1)=1{\displaystyle fl(1+\delta)=fl(1)=1} 때마다δ<>ϵ m는 ch{\displaysty.
다른 반올림 규칙에서 반올림 오류
라운딩 규칙에는 라운드 바이 쵸프와 라운드 투 니어 두 가지가 있다. IEEE 표준은 라운드 투 니어티(round-to-neear)를 사용한다.
- 라운드 바이 찹: 의 base- 확장은(- ) h {\ ( 자리 다음에 잘린다.
- 이 반올림 규칙은 항상 결과를 0으로 이동시키기 때문에 편향되어 있다.
- 라운드 투 니어: ( x) 이(가) 가장 가까운 부동 소수점 로 설정되며 동점이 있으면 마지막 저장된 자릿수가 짝수인 부동 소수점 번호가 사용된다.
- 기본 이(가) 2{\인 IEEE 표준의 경우, 이는 동점이 있을 때 마지막 가 0 0과(와) 같도록 반올림됨을 의미한다
- 이 반올림 규칙은 더 정확하지만 계산적으로 더 비싸다.
- 동점이 있을 때도 마지막 저장된 자릿수가 되도록 반올림하면 체계적으로 반올림 또는 반올림되지 않는다. 단순히 편향된 라운딩으로 인해 장시간 계산에서 원치 않는 느린 드리프트가 발생할 가능성을 피하기 위해서다.
- 다음 예제는 두 라운딩 규칙에 따른 반올림 오차 수준을 보여준다.[3] 반올림 규칙(반올림 규칙)은 일반적으로 반올림 오차가 적다.
x | 라운드 바이 찹 | 반올림 오류 | 라운드 투 니어티 | 반올림 오류 |
---|---|---|---|---|
1.649 | 1.6 | 0.049 | 1.6 | 0.049 |
1.650 | 1.6 | 0.050 | 1.7 | 0.050 |
1.651 | 1.6 | 0.051 | 1.7 | -0.049 |
1.699 | 1.6 | 0.099 | 1.7 | -0.001 |
1.749 | 1.7 | 0.049 | 1.7 | 0.049 |
1.750 | 1.7 | 0.050 | 1.8 | -0.050 |
IEEE 표준에서 반올림 오류를 계산하는 중
반올림과 IEEE의 이중 정밀도를 사용한다고 가정해 보자.
- 예 십진수9) =(의) 스타일) 로 재배열 가능
바이너리 의 오른쪽에 있는 53r d 53^{ 비트는1 {\이고 다른 0이 아닌 비트가 뒤따르기 때문에 라운드업, 즉 d 비트에 1비트를 추가해야 한다. 따라서 IEEE 표준의.4 {\.4에서 표준화된 부동 소수점 표현은 다음과 같다.
- ( )= 3 9.
- 이제 반올림 오차는 9 을(를) 4 로 나타낼 때 계산할 수 있다
이 표현은 무한 꼬리를 버림으로써 도출된다.
오른쪽 꼬리에서 1× - = 2- 2을(를) 라운딩 단계에서 추가했다.
- 그 다음 (4) =- × - + 2- =4 +(0. ) × - .44 - 0 2
- 따라서 반올림 는( 2- ) 입니다
기계 엡실론을 사용하여 반올림 오차 측정
기계 엡실론 {\를 사용하여 위의 두 라운딩 규칙을 사용할 때 반올림 오차 수준을 측정할 수 있다. 다음은 공식과 그에 상응하는 증거다.[3] 기계 엡실론의 첫 번째 정의는 여기서 사용된다.
정리
- 라운드 바이 쵸프: m a = 1-
- 라운드 투 니어티: a h = 1 - {\{1^{
증명
Let where , and let be the floating-point representation of . 바이 쵸프를 사용하고 있기 때문에x - ( ) = d 2… -p - p + . … d - -1 × 0. d 2… d× = + 1 n -. d1d2. 깨지×β nxdp.dp+1dp+2. 깨지d0입니다. d1d2. 깨지×β− p{\displaystyle{\begin{정렬}{\frac{x-fl())}{)}}&={\frac{d_{0}.d_{1}d_{2}\ldots d_{p-1}d_{p}d_{p+1}\ldots \times \beta ^{n}-d_{0}.d_{1}d_{2}\ldots d_{p-1}\times ^{n}}{d_{0}.d_{1}\beta.d_{2}\ldots \times ^{n}}}\\&, ={\frac{d_{p}.d_{p+1}\ldots \times}{d_{0}.d_{1}d_{2}\ldots \times}^{n}\beta}^{n-p}\\& \beta, ={\frac{d_{p}.d_{p+1}d_{p+2}\ldots}{d_{0}.d_{1}d_{2}\ldots}}\times \beta\beta ^{-p}\end{정렬}}}*에서 순서를 결정하려고는 최대 크기의 이 수량은 필요성을 찾는 최대의 분자이고,.그분분모의 정석 정상화된 시스템)이므로 분모의 최소값은 1 1이다 분자는(- ). (- 1) (- )= -1)로 . Thus, . 따라서 by = - 는 round-by-chop. 근친상간이라는 증거는 비슷하다.
- 기계 엡실론의 첫 번째 정의는 라운드 투 니어 규칙을 사용할 때 두 번째 정의와 상당히 동등하지는 않지만 라운드 바이 찹의 정의와 동등하다는 점에 유의하십시오.
부동 소수점 산술로 인한 반올림 오류
일부 숫자를 정확히 부동 소수점 숫자로 나타낼 수 있고 그러한 숫자를 기계 번호라고 부르더라도 부동 소수점 산술을 수행하면 최종 결과에서 반올림 오차가 발생할 수 있다.
덧셈
기계 덧셈은 추가할 두 숫자의 소수점을 줄지어 추가한 다음 그 결과를 다시 부동 소수점 숫자로 저장하는 것으로 구성된다. 덧셈 자체는 더 높은 정밀도로 할 수 있지만 결과는 지정된 정밀도로 반올림해야 하며, 이로 인해 반올림 오차가 발생할 수 있다.[3]
예를 들어 IEEE에서 - 에 을(를) 다음과 같이 두 배의 정밀도로 추가하는 것이 좋다.
- 은1. … 로 저장된다 IEEE 표준에서 가장 중요한 것이 사용되기 때문이다. 따라서 + - 은 IEEE 이중 에서 1 과 같고 반올림 오차는 - 2이다
이 예에서, 큰 숫자와 작은 숫자를 추가할 때 반올림 오차가 도입될 수 있다는 것을 알 수 있다. 왜냐하면 지수를 일치시키기 위해 맨티사스에서 소수점이 이동하면 일부 자릿수의 손실이 발생할 수 있기 때문이다.
곱하기
일반적으로 p -자리 맨티사의 제품은 최대 자리까지 포함하므로 결과가 맨티사에 맞지 않을 수 있다.[3] 따라서 결과에는 반올림 오류가 포함될 것이다.
- 예를 들어, 기본 = =을(를 갖는 정규화된 부동 소수점 을 고려해 보십시오 그 다음 ()= ()= = 그러나 ()= 6 에 주목하십시오. 반올림 오차는 - )= - =
나누기
일반적으로 -자리 맨티사의 지수는 -digits 이상을 포함할 수 있다.[3] 따라서 결과에는 반올림 오류가 포함될 것이다.
- 예를 들어 의 표준화된 부동 소수점 시스템이 여전히 사용되고 있다면, 1/ = 1/ 그러나 f ( /)= ( 0.…)= - )=따라서 꼬리 0.…- - = …이(가) 잘린다.
감산취소
거의 동일한 두 숫자를 빼는 것을 감산취소라고 한다.[3]
- 선행 숫자가 취소되면 결과가 너무 작아서 정확히 나타낼 수 없으며 으로 표시될
- 예를 들어 < m h <\로 하고 기계 엡실론의 두 번째 정의를 여기에서 사용한다. + )-( -) 에 대한 해결책은
It is known that and are nearly equal numbers, and . However, in the floating-point number system, . Although is easily big enough to be represented, both instances of have been rounded away giving .
- 예를 들어 < m h <\로 하고 기계 엡실론의 두 번째 정의를 여기에서 사용한다. + )-( -) 에 대한 해결책은
- 다소 큰 을(를) 사용하더라도 결과는 일반적인 경우 여전히 상당히 신뢰할 수 없다 어떤 부동 소수점 숫자에서 가장 불확실한 것이 맨 오른쪽의 숫자이기 때문에 값의 정확성에 대한 믿음이 크지 않다.
- For example, . 결과 - 는 분명히 표현할 수 있지만, 별로 믿음이 가지 않는다.
반올림 오차 누적
오류는 부정확한 표현으로 인해 반올림 오류가 있는 초기 입력에 일련의 계산이 적용될 때 확대되거나 누적될 수 있다.
불안정한 알고리즘
입력의 작은 변화만이 출력에서 작은 변화만 만들어 낸다면 알고리즘이나 숫자 프로세스를 안정이라고 하고 출력에서 큰 변화가 생성되면 불안정한 상태라고 한다.[11]
일반적으로 일부 알고리즘을 실행할 때 일련의 계산이 이루어진다. 결과의 오차량은 알고리즘의 안정성에 따라 달라진다. 반올림 오류는 불안정한 알고리즘에 의해 확대된다.
예를 들어, = + 5 d n}}}\,{\는 = , 1, 1, 1, 2, n It is easy to show that . Suppose is our initial value and has a small representation error , which means the initial input to this algorithm is 대신 그런 다음 알고리즘은 다음과 같은 계산 순서를 한다.
반올림 오차는 후속 계산에서 증폭되므로 이 알고리즘은 불안정하다.
잘못된 조건의 문제
안정적 알고리즘을 사용하더라도 문제 자체의 상태가 좋지 않을 때 반올림 오차가 누적돼 문제 해결이 여전히 부정확할 수 있다.
문제의 조건 번호는 입력의 상대적 변화에 대한 용액의 상대적 변화 비율이다.[3] 입력의 상대적 변화가 작을 경우 용액의 상대적 변화가 작을 경우 문제가 잘 해결된다. 그렇지 않으면 그 문제는 조건이 좋지 않다.[3] 즉, 조건 번호가 [\보다 "매우 큼"이면 문제가 잘못된 조건이다.
조건 번호는 잘못된 조건의 문제를 해결할 때 발생할 수 있는 반올림 오류의 척도로 도입된다.[7]
실제 사례: 반올림 오류 확대로 인한 패트리엇 미사일 고장
걸프전 당시인 1991년 2월 25일 사우디아라비아 다란에 있는 미국 패트리엇 미사일 배터리가 들어오는 이라크 스커드 미사일을 요격하지 못했다. 스커드는 미군 막사를 강타하여 28명의 군인을 죽였다. 당시 총경리청의 보고서 '패트리엇 미사일 방어: 사우디아라비아 다흐란에서 발생한 소프트웨어 문제로 시스템 장애가 발생했다"고 밝혔다. 구체적으로는, 시스템의 내부 시계에 의해 측정된, 10분의 1초의 시간을 10으로 곱해, 초 단위의 시간을 생산했다. 이 계산은 24비트 고정 포인트 레지스터를 사용하여 수행되었다. 특히 중단 없는 바이너리 확장성을 갖는 값 1/10은 라딕스 포인트 이후 24비트로 잘렸다. 10분의 1초의 시간을 주는 큰 숫자로 곱한 작은 도마뱀붙이 오류는 상당한 오류로 이어졌다. 실제로 패트리엇 배터리는 100시간 정도 상승했으며, 쉽게 계산해 보면 커팅오차가 커져서 발생하는 시간오차는 0.34초 정도인 것으로 나타났다. (The number 1/10 equals . In other words, the binary expansion of 1/10 is . Now the 24 bit register in the Patriot stored instead introducing an error of binary, or about decimal. 시간에서 1초의 10분의 1을 곱하면 = 60\times 이 된다. 스커드는 초속 약 1676m로 이동하며, 따라서 이번에는 0.5km 이상 이동한다. 이는 들어오는 스커드가 패트리엇이 추적한 '거리문' 밖에 있을 정도로 충분히 먼 거리였다. 아이러니하게도 코드 일부에서 잘못된 시간 계산이 개선되었지만 전부는 아니라는 점이 문제의 원인이 되었는데, 이는 부정확성이 취소되지 않았다는 것을 의미했기 때문이다.[12]
참고 항목
참조
- ^ Butt, Rizwan (2009), Introduction to Numerical Analysis Using MATLAB, Jones & Bartlett Learning, pp. 11–18, ISBN 978-0-76377376-2
- ^ Ueberhuber, Christoph W. (1997), Numerical Computation 1: Methods, Software, and Analysis, Springer, pp. 139–146, ISBN 978-3-54062058-7
- ^ a b c d e f g h i j k Forrester, Dick (2018). Math/Comp241 Numerical Methods (lecture notes). Dickinson College.
- ^ Aksoy, Pelin; DeNardis, Laura (2007), Information Technology in Theory, Cengage Learning, p. 134, ISBN 978-1-42390140-2
- ^ Ralston, Anthony; Rabinowitz, Philip (2012), A First Course in Numerical Analysis, Dover Books on Mathematics (2nd ed.), Courier Dover Publications, pp. 2–4, ISBN 978-0-48614029-2
- ^ Chapman, Stephen (2012), MATLAB Programming with Applications for Engineers, Cengage Learning, p. 454, ISBN 978-1-28540279-6
- ^ a b Chapra, Steven (2012). Applied Numerical Methods with MATLAB for Engineers and Scientists (3rd ed.). The McGraw-Hill Companies, Inc. ISBN 9780073401102.
- ^ Laplante, Philip A. (2000). Dictionary of Computer Science, Engineering and Technology. CRC Press. p. 420. ISBN 978-0-84932691-2.
- ^ Higham, Nicholas John (2002). Accuracy and Stability of Numerical Algorithms (2 ed.). Society for Industrial and Applied Mathematics (SIAM). pp. 43–44. ISBN 978-0-89871521-7.
- ^ Volkov, E. A. (1990). Numerical Methods. Taylor & Francis. p. 24. ISBN 978-1-56032011-1.
- ^ Collins, Charles (2005). "Condition and Stability" (PDF). Department of Mathematics in University of Tennessee. Retrieved 2018-10-28.
- ^ Arnold, Douglas. "The Patriot Missile Failure". Retrieved 2018-10-29.
추가 읽기
- Matt Parker (2021). Humble Pi: When Math Goes Wrong in the Real World. Riverhead Books. ISBN 978-0593084694.
외부 링크
- MathWorld에서 반올림 오류.
- Goldberg, David (March 1991). "What Every Computer Scientist Should Know About Floating-Point Arithmetic" (PDF). ACM Computing Surveys. 23 (1): 5–48. doi:10.1145/103162.103163. Retrieved 2016-01-20. ([1], [2])
- 20 유명한 소프트웨어 재해