부동 소수점 오류 완화
Floating-point error mitigation부동소수점 오차 완화란 일반적으로 고정된 공간에서 실수를 정확하게 나타낼 수 없기 때문에 발생하는 오류를 최소화하는 것입니다.정의상 부동소수점 오류를 제거할 수 없으며, 기껏해야 관리할 수 있을 뿐입니다.
휴베르토 MSierra는 1956년 특허 "계산기를 위한 부동 소수점 산술 제어 수단"[1]에서 다음과 같이 언급했습니다.
따라서 상황에 따라서는 중요한 데이터 디짓의 대부분이 레지스터 용량을 초과할 수 있습니다.따라서 얻은 결과는 완전히 틀린 것은 아니더라도 거의 의미가 없을 수 있습니다.
1936년 Konrad Zuse에 의해 개발된 Z1은 부동소수점 산술이 적용된 최초의 컴퓨터였기 때문에 부동소수점 오차가 발생하기 쉬웠다.그러나 초기 컴퓨터는 작동 시간이 밀리초로 측정되어 크고 복잡한[2] 문제를 해결할 수 없었기 때문에 부동소수점 오류로 인한 문제는 거의 발생하지 않았습니다.그러나 오늘날 슈퍼컴퓨터 시스템의 퍼포먼스는 페타플롭으로 측정되므로 부동소수점 오류가 계산 문제 해결사의 주요 관심사입니다.
다음 항에서는 부동소수점 오류를 경감하는 다양한 방법의 장점과 단점에 대해 설명합니다.
수치오차분석
수치 [3][4]: 5 분석의 주요 초점은 아니지만, 수치 오차 분석은 부동 소수점 반올림 오차의 분석과 최소화를 위해 존재한다.
몬테카를로 산술
몬테카를로 산술에 의한 오차 분석은 알고리즘의 데이터 값에 작은 오차를 반복적으로 주입하고 결과에 대한 상대적 영향을 결정함으로써 달성된다.
정밀도 확대
정밀도의 확장은 처음에 고려했던 것보다 더 큰 실제 값의 표현을 사용하는 것이다.IEEE 754 규격에서는 정밀도는 실수의 표현에 사용할 수 있는 자리수로 정의되어 있습니다.프로그래밍 언어에는 단일 정밀도(32비트), 이중 정밀도(64비트) 및 4중 정밀도(128비트)가 포함될 수 있습니다.정밀도를 높이면 오차의 영향이 덜 중요해지거나 덜 중요해지지만, 결과의 진정한 정확성은 여전히 알려져 있지 않습니다.
가변 길이 산술
가변 길이 산술은 사용 가능한 메모리에 의해서만 제한된 가변 길이의 자릿수 문자열로 숫자를 나타냅니다.가변 길이 산술 연산은 고정 길이 형식의 부동 소수점 명령보다 상당히 느립니다.고성능이 필수가 아니지만 정밀도가 높은 경우에는 결과의 실제 정확도는 알 수 없지만 가변 길이 산술이 유용할 수 있습니다.
부동소수점 연산의 오차항 사용
Knuth 및 Möller에 의해 TwoSum[5] 또는 2Sum으로 알려진 부동소수점 알고리즘과 그 단순하지만 제한된 버전인 FastTwoSum 또는 Fast2Sum(6개의 연산 대신 3개의 연산)을 사용하면 부동소수점 덧셈의 (정확한) 오차항을 얻을 수 있습니다.또한 FMA(Fused Multi-Add)를 사용하여 2개의 연산으로 반올림한 부동 소수점 곱셈의 (정확한) 오차항을 얻을 수 있으며, FMA를 사용할 수 없는 경우(Dekker로 인한 알고리즘으로) 17개의 연산을 얻을 수 있다.이러한 오차항은 부동소수점 확장 또는 보정 알고리즘과 같은 최종 결과의 정확도를 개선하기 위해 알고리즘에서 사용할 수 있습니다.
부동 소수점 덧셈 또는 곱셈의 결과를 오차항과 가장 가까운 값으로 반올림한 연산(그러나 위에서 언급한 알고리즘과는 약간 다름)이 IEEE 754-2019 표준에서 표준화되어 권장되었다.
다른 기수 선택
기수를 특히 2진수에서 10진수로 변경하면 오류를 줄이고 재무 애플리케이션과 같은 일부 애플리케이션에서 반올림을 더 잘 제어할 수 있습니다.
구간 산술
구간 산술은 수학 계산에서 반올림 오류와 측정 오류에 대한 경계를 설정하는 데 사용되는 수학 기술입니다.값은 다음과 [6]같은 다양한 방법으로 나타낼 수 있는 간격입니다.
- inf-sup: True 값의 하한 및 상한
- 미드 레이드: 근사치 및 오차 한계(구간의 중간점과 반지름이라고 함)
- triplex: 오차의 근사치, 하한 및 상한.
"구간 산술은 조사 대상 수학 모델에서 하나의 부동소수점 수를 실제 변수 값의 근사치로 사용하는 대신 변수와 일련의 실수를 가능한 값으로 연관시킴으로써 제한된 정밀도를 인정합니다.저장 및 계산을 쉽게 하기 위해 이러한 세트는 [7]간격으로 제한됩니다."
구간 산술식의 평가는 광범위한 [7]값을 제공할 수 있으며 실제 오차 [8]: 8 경계를 심각하게 과대 평가할 수 있습니다.
구스타프손의 우넘
Unums(유니버설 번호)[9]는 John Gustafson이 제안한 가변 길이 산술의 확장입니다.unums에는 지수에 대한 가변 길이 필드가 있으며, 유효 길이와 오류 정보는 단일 비트인 ubit로 전달되며, 이는 최하위 비트(ULP)[9]: 4 에서 발생할 수 있는 오류를 나타냅니다.
William Kahan은 [8]unums의 효능에 대해 의문을 제기했다.
유계 부동 소수점
유계 부동 소수점은 Alan Jergensen이 [10]제안하고 특허를 취득한 방법입니다.데이터 구조에는 표준 IEEE 754 데이터 구조 및 해석뿐만 아니라 표현된 실제 값과 부동 소수점 [11]표현에 의해 저장된 값 사이의 오류에 대한 정보가 포함됩니다.
유계 부동 소수점은 구스타프슨의 우넘과 구간 [10][12]산술 연구의 파생물이라는 비판을 받아왔다.
레퍼런스
- ^ "Floating decimal point arithmetic control means for calculator: United States Patent 3037701". FreePatentsOnline.com. 1962-06-05. Retrieved 2022-01-21.
- ^ "History of Computer Development & Generation of Computer". WikiEducator. September 2014. Retrieved 2018-02-17.
- ^ Trefethen, Lloyd N. (1992). "The Definition of Numerical Analysis" (PDF). SIAM. Retrieved 2018-02-16.
- ^ Higham, Nicholas John (2002). Accuracy and Stability of Numerical Algorithms (2 ed.). Society for Industrial and Applied Mathematics (SIAM). ISBN 978-0-89871-521-7.
- ^ https://people.eecs.berkeley.edu/~jrs/https/httpsr.pdf[베어 URL PDF]
- ^ "IEEE Standard for Interval Arithmetic". IEEE Std 1788-2015. 2015-06-30. doi:10.1109/IEEESTD.2015.7140721.
- ^ a b Hickey, T.; Ju, Q.; van Emden, M.H. (September 2001). "Interval Arithmetic: from Principles to Implementation" (PDF). Journal of the ACM. 48 (5): 1038–1068. CiteSeerX 10.1.1.43.8001. doi:10.1145/502102.502106. S2CID 15105694. Retrieved 2018-02-16.
- ^ a b Kahan, William (July 2016). "A Critique of John L. Gustafson's THE END of ERROR — Unum Computation and his A Radical Approach to Computation with Real Numbers" (PDF). Retrieved 2018-02-17.
- ^ a b Gustafson, John Leroy (2016-02-04) [2015-02-05]. The End of Error: Unum Computing. Chapman & Hall / CRC Computational Science. Vol. 24 (2nd corrected printing, 1st ed.). CRC Press. ISBN 978-1-4822-3986-7. Retrieved 2016-05-30. [1] [2]
- ^ a b Trader, Tiffany (2018-01-17). "Inventor Claims to Have Solved Floating Point Error Problem". HPCwire. Retrieved 2022-03-01.
- ^ 미국 특허 11023230B2, Jorgensen, Alan A., "부동소수점 연산 중 오류에 대한 계산 및 유지에 관한 부속서 및 그 방법" 2021-06-01 발표
- ^ "Has the Decades-Old Floating Point Error Problem been Solved?". insideHPC. 2018-01-17. Retrieved 2022-03-01.