비 부동 소수점 컴퓨팅 라이브러리 / 패키지는 거의 없습니다. 왜 거기에 부동 소수점 표현의 다양한 부정확성을 감안할 때, 문제가 발생하지 적어도 몇몇 이 높은 정확도의 가치를 고정 소수점 작업의 복잡성을 수 있습니다 필드.
고정 소수점 고유 값 솔버를 사용하는 데 큰 어려움이 있습니까? 얼마나 느리고 빠르며 부정확하고 정확합니까?
비 부동 소수점 컴퓨팅 라이브러리 / 패키지는 거의 없습니다. 왜 거기에 부동 소수점 표현의 다양한 부정확성을 감안할 때, 문제가 발생하지 적어도 몇몇 이 높은 정확도의 가치를 고정 소수점 작업의 복잡성을 수 있습니다 필드.
고정 소수점 고유 값 솔버를 사용하는 데 큰 어려움이 있습니까? 얼마나 느리고 빠르며 부정확하고 정확합니까?
답변:
특정 상황에서 고정 소수점 산술을 사용하는 것이 적절할 수 있습니다. 일반적으로 과학 컴퓨팅의 경우 (적어도 대부분의 사람들은 그것을 생각한다는 의미에서) 직면 한 큰 동적 범위를 표현할 필요성 때문에 적합하지 않습니다. 예를 들어 고유 값 문제를 언급하지만 과학에서는 매우 자주 행렬의 가장 작은 고유 값에 관심이 있습니다 (예 : 양자 시스템의 기본 상태 계산). 고정 소수점을 사용하면 작은 고유 값의 정확도는 일반적으로 큰 고유 값에 비해 상당히 저하됩니다. 행렬에 큰 비율로 변하는 항목이 포함 된 경우 작은 고유 값은 작업 정밀도에서 완전히 표현할 수 없습니다. 이것은 숫자 표현에 문제가 있습니다. 이러한 인수는 중간 계산 방법에 관계없이 유지됩니다. 계산 결과에 적용하기 위해 스케일링을 수행 할 수 있지만 이제는 부동 소수점을 발명했습니다. 요소가 잘 동작하지만 고유 값이 너무 잘 동작하지 않는 행렬을 만드는 것은 쉽습니다.Wilkinson 행렬 또는 정수 항목이 포함 된 행렬 ). 이러한 예는 병리 적으로 보일 수있는 것이 아니며, 과학의 최첨단에서 발생하는 많은 문제는 매우 잘못 작동하는 행렬과 관련이 있으므로이 맥락에서 고정 소수점을 사용하는 것은 나쁜 생각입니다.
결과의 크기를 알고 지수에 비트를 낭비하지 않으려면 중간체에 대해 이야기합시다. 고정 소수점을 사용하면 실제로 큰 고통을 겪고 더 높은 정밀도로 작업하지 않는 한 일반적으로 치명적인 취소 및 반올림의 효과가 악화됩니다. 성능 패널티는 엄청날 것이며, 동일한 가수 비트 폭을 가진 부동 소수점 표현을 사용하는 것이 더 빠르고 정확할 것이라고 추측합니다.
고정 소수점이 빛날 수있는 영역은 기하학적 컴퓨팅의 특정 영역입니다. 특히 정확한 산술이 필요하거나 모든 숫자의 동적 범위를 미리 알고있는 경우 고정 소수점을 사용하면 표현의 모든 비트를 활용할 수 있습니다. 예를 들어, 두 선의 교점을 계산하려고하는데 어떻게 든 두 선의 끝 점이 단위 제곱에 맞게 정규화되었다고 가정합니다. 이 경우 교차점은 동등한 부동 소수점 수를 사용하는 것보다 지수의 비트를 낭비하는 것보다 더 많은 정밀도로 표현할 수 있습니다. 이제이 계산에 필요한 중간 숫자를 더 정밀하게 계산하거나 최소한 매우 신중하게 수행 해야하는 경우가 거의 있습니다 (두 숫자의 곱을 다른 숫자로 나눌 때와 같이 매우 조심해야합니다 ). 이와 관련하여 고정 소수점은 계산 관점이 아닌 표현 관점에서 더 유리 합니다. 알고리즘 출력의 동적 범위에서 명확한 상한 및 하한을 설정할 수있는 경우 일반적으로 사실입니다. . 이것은 거의 발생하지 않습니다.
나는 부동 소수점 표현이 조잡하거나 부정확하다고 생각했습니다 (왜 지수에 비트를 낭비합니까?!). 그러나 시간이 지남에 따라 그것이 실제로 실수에 대한 가장 좋은 표현 중 하나임을 깨달았습니다. 실제로 사물은 로그 스케일로 표시되므로 실제 데이터는 광범위한 지수에 걸쳐 있습니다. 또한 가능한 가장 높은 상대 정확도를 달성하려면 로그 스케일에 대한 작업이 필요하므로 지수 추적이 더 자연 스럽습니다. "자연적인"표현에 대한 유일한 다른 경쟁자는 대칭 수준 지수 입니다. 그러나 덧셈과 뺄셈은 그 표현에서 훨씬 느리며 IEEE 754의 하드웨어 지원이 부족합니다 . 부동 소수점 표준에 대한 많은 생각이있었습니다., 수치 선형 대수 기둥으로. 나는 그가 숫자의 "올바른"표현이 무엇인지 알고 있다고 생각할 것입니다.
정확한 산술 / 고정 점 산술이 그다지 사용되지 않는 이유의 예로 다음을 고려하십시오.
과학 계산에 사용되는 거의 모든 다른 방법에서와 같이 유한 요소 방법에서 우리는 실제 세계에 가까운 근사치 인 선형 또는 비선형 시스템에 도달합니다. 예를 들어, FEM에서 풀어야 할 선형 시스템은 원래 부분 미분 방정식에 대한 근사치 일뿐입니다 (자체는 실제 세계의 근사치 일 수 있음). 근사에 지나지 않는 것을 해결하기 위해 왜 엄청난 노력을 기울였습니까?
오늘날 우리가 사용하는 대부분의 알고리즘은 본질적으로 반복적입니다 : Newton의 방법, Conjugate Gradients 등. 우리는 문제의 해에 대한 반복의 정확도가 충분하다고 만족할 때마다이 반복을 종료합니다. 다시 말해, 우리는 정확한 해결책을 갖기 전에 종료합니다. 이전과 마찬가지로 근사 만 계산한다는 것을 알고있을 때 왜 반복 체계에 대해 정확한 산술을 사용해야합니까?
float
곧 뒤를 볼 수 없을 것 같아요 .
올바른 반올림을 위해이 라이브러리를 살펴보면 CRlibm 문서에서 일반적으로 알고리즘이 정확해야합니다 (추리 증명). 왜? 함수 결과의 안정성과 수렴 속도는 "한 사이즈에 맞는"답변이 없습니다. 요컨대, "무료 점심"은 없습니다 – 당신의 추론이 옳다는 것을 증명하기 위해 노력해야합니다. 이는 기본 하드웨어가 아닌 모델링되고있는 함수의 동작 때문입니다 (예를 들어 정수 또는 부동 소수점 단위를 사용하든 상관없이 오버플로 / 언더 플로, 비정규 숫자 등과 같은 "gotchas"가 있음) 정수로 수렴하려는 경우 결과를 찾는 데 사용되는 알고리즘이 반드시 안정적인 것은 아닙니다.
Eigen은 각각 다른 속성을 가진 행렬 해결을위한 다양한 알고리즘을 가진 C ++ 라이브러리입니다. 이 페이지 에는 매트릭스 해결에 사용되는 다양한 알고리즘의 속도 대 정확도 트레이드 오프에 대해 설명하는 표가 있습니다. 나는 아이겐 도서관이 당신이 원하는 것을 할 수 있다고 생각합니다. :-)
수학에서 고정밀 산술이 유용한 몇 가지 좋은 예를 보려면 Jonathan Borwein과 David Bailey 의 ' Mathematics by Experiment' 책을 참조하십시오 . 내가 읽지 않은 이 속편 도 있습니다 .