고정 소수점 및 임의 정밀도 계산의 관련성


10

비 부동 소수점 컴퓨팅 라이브러리 / 패키지는 거의 없습니다. 왜 거기에 부동 소수점 표현의 다양한 부정확성을 감안할 때, 문제가 발생하지 적어도 몇몇 이 높은 정확도의 가치를 고정 소수점 작업의 복잡성을 수 있습니다 필드.

고정 소수점 고유 값 솔버를 사용하는 데 큰 어려움이 있습니까? 얼마나 느리고 빠르며 부정확하고 정확합니까?

관련 : 이것이것


Milind R, 질문 해 주셔서 감사합니다. 귀하의 질문이 흥미롭지 만 사이트에 적합하지 않은 것 같습니다. 지침 에 대해서는 사이트 FAQ 를 참조하십시오. 귀하의 질문을 살펴보면 사이트에 적합한 질문의 요소가 있다고 생각하지만, 그것이 질문의 시작이라고 생각합니다. 계산 과학에서 정수 산술 및 고정 소수점 산술의 많은 응용 프로그램이 있는지 묻고 이러한 산술을 부동 소수점과 비교하는 것이 좋습니다. 게시물을 수정하는 것이 좋습니다.
Geoff Oxberry

그렇습니다. 당신이 추측 할 수있는 제 질문은 왜 우리가 집중 숫자에서 정수 및 고정 소수점 수학으로 크게 전환 할 수 없는지에 관한 것입니다. 제 대신 편집 해 주시겠습니까? 나는 실제로 시도했지만 내 질문이 어떻게 적절하지 않은지 모르겠습니다.
Milind R

5
이에 대한 객관적인 기술적 해답이 있다고 생각합니다. 거의 모든 과학적 계산 (예 : 선형 해석)을 실행하면 정확한 스토리지에 필요한 비트 수가 기하 급수적으로 증가합니다. 따라서 유용한 작업을 위해서는 부정확성에 대한 강력한 지원이 필요합니다.
Geoffrey Irving 17

@MilindR : 계산 기하학 커뮤니티는 동시에 성능이 높고 정확한 실수 계산에 관심이있었습니다. 나는 당신과 관련된 모든 실질적인 문제가이 연구 영역에서 관찰 될 수 있다고 생각 합니다. 검색 할 수있는 예는 라이브러리 LEDA입니다.
shuhalo

삼각 행렬의 0은 어떻습니까? 그들은으로 저장 될 수 없습니다 어떤 부정확 한 오류가 발생하기 쉬운 부동 소수점 이외의?
Milind R

답변:


5

특정 상황에서 고정 소수점 산술을 사용하는 것이 적절할 수 있습니다. 일반적으로 과학 컴퓨팅의 경우 (적어도 대부분의 사람들은 그것을 생각한다는 의미에서) 직면 한 큰 동적 범위를 표현할 필요성 때문에 적합하지 않습니다. 예를 들어 고유 값 문제를 언급하지만 과학에서는 매우 자주 행렬의 가장 작은 고유 값에 관심이 있습니다 (예 : 양자 시스템의 기본 상태 계산). 고정 소수점을 사용하면 작은 고유 값의 정확도는 일반적으로 큰 고유 값에 비해 상당히 저하됩니다. 행렬에 큰 비율로 변하는 항목이 포함 된 경우 작은 고유 값은 작업 정밀도에서 완전히 표현할 수 없습니다. 이것은 숫자 표현에 문제가 있습니다. 이러한 인수는 중간 계산 방법에 관계없이 유지됩니다. 계산 결과에 적용하기 위해 스케일링을 수행 할 수 있지만 이제는 부동 소수점을 발명했습니다. 요소가 잘 동작하지만 고유 값이 너무 잘 동작하지 않는 행렬을 만드는 것은 쉽습니다.Wilkinson 행렬 또는 정수 항목이 포함 된 행렬 ). 이러한 예는 병리 적으로 보일 수있는 것이 아니며, 과학의 최첨단에서 발생하는 많은 문제는 매우 잘못 작동하는 행렬과 관련이 있으므로이 맥락에서 고정 소수점을 사용하는 것은 나쁜 생각입니다.

결과의 크기를 알고 지수에 비트를 낭비하지 않으려면 중간체에 대해 이야기합시다. 고정 소수점을 사용하면 실제로 큰 고통을 겪고 더 높은 정밀도로 작업하지 않는 한 일반적으로 치명적인 취소 및 반올림의 효과가 악화됩니다. 성능 패널티는 엄청날 것이며, 동일한 가수 비트 폭을 가진 부동 소수점 표현을 사용하는 것이 더 빠르고 정확할 것이라고 추측합니다.

고정 소수점이 빛날 수있는 영역은 기하학적 컴퓨팅의 특정 영역입니다. 특히 정확한 산술이 필요하거나 모든 숫자의 동적 범위를 미리 알고있는 경우 고정 소수점을 사용하면 표현의 모든 비트를 활용할 수 있습니다. 예를 들어, 두 선의 교점을 계산하려고하는데 어떻게 든 두 선의 끝 점이 단위 제곱에 맞게 정규화되었다고 가정합니다. 이 경우 교차점은 동등한 부동 소수점 수를 사용하는 것보다 지수의 비트를 낭비하는 것보다 더 많은 정밀도로 표현할 수 있습니다. 이제이 계산에 필요한 중간 숫자를 더 정밀하게 계산하거나 최소한 매우 신중하게 수행 해야하는 경우가 거의 있습니다 (두 숫자의 곱을 다른 숫자로 나눌 때와 같이 매우 조심해야합니다 ). 이와 관련하여 고정 소수점은 계산 관점이 아닌 표현 관점에서 더 유리 합니다. 알고리즘 출력의 동적 범위에서 명확한 상한 하한을 설정할 수있는 경우 일반적으로 사실입니다. . 이것은 거의 발생하지 않습니다.

나는 부동 소수점 표현이 조잡하거나 부정확하다고 생각했습니다 (왜 지수에 비트를 낭비합니까?!). 그러나 시간이 지남에 따라 그것이 실제로 실수에 대한 가장 좋은 표현 중 하나임을 깨달았습니다. 실제로 사물은 로그 스케일로 표시되므로 실제 데이터는 광범위한 지수에 걸쳐 있습니다. 또한 가능한 가장 높은 상대 정확도를 달성하려면 로그 스케일에 대한 작업이 필요하므로 지수 추적이 더 자연 스럽습니다. "자연적인"표현에 대한 유일한 다른 경쟁자는 대칭 수준 지수 입니다. 그러나 덧셈과 뺄셈은 그 표현에서 훨씬 느리며 IEEE 754의 하드웨어 지원이 부족합니다 . 부동 소수점 표준에 대한 많은 생각이있었습니다., 수치 선형 대수 기둥으로. 나는 그가 숫자의 "올바른"표현이 무엇인지 알고 있다고 생각할 것입니다.


4

정확한 산술 / 고정 점 산술이 그다지 사용되지 않는 이유의 예로 다음을 고려하십시오.

  • 과학 계산에 사용되는 거의 모든 다른 방법에서와 같이 유한 요소 방법에서 우리는 실제 세계에 가까운 근사치 인 선형 또는 비선형 시스템에 도달합니다. 예를 들어, FEM에서 풀어야 할 선형 시스템은 원래 부분 미분 방정식에 대한 근사치 일뿐입니다 (자체는 실제 세계의 근사치 일 수 있음). 근사에 지나지 않는 것을 해결하기 위해 왜 엄청난 노력을 기울였습니까?

  • 오늘날 우리가 사용하는 대부분의 알고리즘은 본질적으로 반복적입니다 : Newton의 방법, Conjugate Gradients 등. 우리는 문제의 해에 대한 반복의 정확도가 충분하다고 만족할 때마다이 반복을 종료합니다. 다시 말해, 우리는 정확한 해결책을 갖기 전에 종료합니다. 이전과 마찬가지로 근사 만 계산한다는 것을 알고있을 때 왜 반복 체계에 대해 정확한 산술을 사용해야합니까?


인정하는 것은 실망 스럽지만 네 대답은 기본적으로 정확한 계산의 대규모 사용을 십자가에 못 박습니다. 나는 float곧 뒤를 볼 수 없을 것 같아요 .
Milind R

@MilindR : 당신이 겨냥한 것이 확실하지 않습니다. 망치가있는 것 같고 아무도 손톱이 없거나 망치가 유용한 도구라고 생각하지 않습니다. 그러나 그것은 우리가 당신을 좋아하지 않기 때문이 아닙니다. 우리는 이러한 문제에 대해 오랫동안 생각해 왔으며 단순히 우리가 가지고있는 드라이버가 적절한 도구라고 결정했습니다. 나는 단지 실용적인 접근 방식이므로 그것에 대해 좌절감을 느끼지 않습니다 (우리가 근사치 만 할 때 왜 정확한 산술을 사용합니까?
Wolfgang Bangerth

완벽하게 정상적인 문제가 너무 심하게 조절되어 효과적으로 녹지 않기 때문에 좌절합니다. 또한 부동 소수점의 부정확 한 특성과 비교하여 임의의 정밀도의 이상이 매우 유망 해 보였으므로 값을 저장하는 것에서 출력하는 것입니다.
Milind R

문제는 반올림 오류를 분석하기가 매우 어렵다는 것입니다. 나는 수치 해석과 수치 선형 대수를 배우기 시작한 날에 이것을 깨달았습니다. 따라서 문제를 완전히 피하고 컨디셔닝을 문제가 아닌 시스템으로 만드는 것은 폭풍우로 세상을 빼앗아 야합니까? 생각했다. 물론 나는 그 한계를 이해하지만 거래 차단기보다 자극적 인 것처럼 보였습니다. 프로세서에서 트랜지스터를 축소하는 데 어려움이 증가한 것과 같습니다. 예, 분석하기는 어렵지만 인텔은 여전히 ​​그렇습니다.
Milind R

2
문제가 너무 열악하여 해결하기 어려운 경우, 그 해결책은 섭동에 안정적이지 않습니다. 그것은 부동 소수점 표현이 아니라 원래 문제의 문제입니다. 예, 정확한 표현을 사용하여 문제에 대한 해결책을 얻을 수 있습니다. 그러나 솔루션은 안정적이지 않으므로 실제로 찾고있는 것과는 아무런 관련이 없습니다. 숫자 표현이 문제라고 생각하면 잘못된 트리를 짖고 있습니다.
Wolfgang Bangerth

3

올바른 반올림을 위해이 라이브러리를 살펴보면 CRlibm 문서에서 일반적으로 알고리즘이 정확해야합니다 (추리 증명). 왜? 함수 결과의 안정성과 수렴 속도는 "한 사이즈에 맞는"답변이 없습니다. 요컨대, "무료 점심"은 없습니다 – 당신의 추론이 옳다는 것을 증명하기 위해 노력해야합니다. 이는 기본 하드웨어가 아닌 모델링되고있는 함수의 동작 때문입니다 (예를 들어 정수 또는 부동 소수점 단위를 사용하든 상관없이 오버플로 / 언더 플로, 비정규 숫자 등과 같은 "gotchas"가 있음) 정수로 수렴하려는 경우 결과를 찾는 데 사용되는 알고리즘이 반드시 안정적인 것은 아닙니다.

Eigen은 각각 다른 속성을 가진 행렬 해결을위한 다양한 알고리즘을 가진 C ++ 라이브러리입니다. 이 페이지 에는 매트릭스 해결에 사용되는 다양한 알고리즘의 속도 대 정확도 트레이드 오프에 대해 설명하는 표가 있습니다. 나는 아이겐 도서관이 당신이 원하는 것을 할 수 있다고 생각합니다. :-)


감사합니다 .. 매우 유익하고 좋은 링크입니다. 그러나 제한된 반올림 범위와 함께 고정 소수점을 사용하면 더 정확한 출력이 생성되지 않습니까? 부동 소수점과 달리 표현 자체가 정확하기 때문에?
Milind R

1
다른 관점에서 문제를 공격하는 것이 좋습니다. 논리를 소개하면서 문제 해결에 정의, 추론 및 결론 / 결과의 세 부분이 있다는 것을 배웁니다. 문제 해결의 "정의"단계에서 주로 작업하는 데 익숙 할 것입니다. 일반적으로 문제를 "정의"할 수 있습니다. 그러나 좌절 한 경우 때때로 "추론"부분에서 더 많은 작업이 필요한 더 어려운 유형의 문제가 발생한 경우가 있습니다.
mda

나는 단지 모호하게 당신을 이해합니다 ... 나는이 문제를 "정의"할 수있는 곳을 볼 수 없습니다. 추론은 필수적입니다.
Milind R

몇 년 후, 나는 실제로 당신을 이해합니다 :-)
Milind R

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.