답변:
실수 계산을하고 실제 답을 알고 싶습니다. 그러나 나는 추측 할 수있다. 그것은 사회 학적 문제라고 생각합니다.
정확한 실제 산술 작업을하는 사람들의 커뮤니티는 소프트웨어 개발에 익숙하지 않은 이론가들로 구성됩니다. 따라서 그들은 일반적으로 구현 과제를 학생들에게 위임 하거나 ( Norbert Müller의 iRRAM 은 예외적으로 ) 자체 장난감 구현이 있습니다.
사람들이 어떻게이 필요한 이론적 배경이없는 모조 필요한 프로그램이있다. 이론적 근거가 확실하지 않으면 정확한 실제 산술을 정확하게 설계하기가 어렵습니다. 예를 들어, for
정밀도 손실로 인해 허용 할 수없는 성능을 얻을 수 있으므로 루프 에 많은 수의 실수를 추가하는 것은 실수 입니다. 많은 수의 실수를 추가하려면 부분 합계의 크기를 고려하여 트리와 같은 구조로 수행해야합니다. 에서 얻을 어려운 또 다른 일이 있다는 것입니다 <
그리고 =
단순히 존재하지 않는 실수에 총 부울 함수로 (당신은 할 수 있습니다 =
그 중 하나를 반환하지만 false
하거나 발산, 그리고 <
두 개의 동일한 실수를 부여 할 때 발산을).
마지막으로 정확한 실제 산술을 위해 라이브러리를 구현하는 방법을 아는 것은 확실하지 않습니다. 그것들은 단지 일부 데이터 유형과 함수를 정의하는 일반적인 라이브러리가 아닙니다. 정확한 실제 산술에는 종종 특별한 제어 모드가 필요합니다. 예를 들어, iRRAM은 main
표준 입력 및 출력뿐만 아니라 프로그램의 주요 실행 (문자 그대로 하이재킹 )을 대신하므로 정밀도 손실이 발생할 때 프로그램을 다시 실행할 수 있습니다. Haskell에서 실제 산술 라이브러리는 Staged
모나드 (기본적으로 Reader
모나드)에서 발생합니다. 대부분의 사람들은 실수가 "단지 다른 데이터 유형"이기를 기대하지만 그 점에 대해서는 의구심이 있습니다.
일반적으로 사람들은 항상 부동 소수점 오류에 관심을 갖습니다. 그러나 나는 Andrej에 동의하지 않으며, 사회적인 이유로 플로트가 임의의 정밀한 현실보다 (대부분의 경우) 선호된다고 생각하지 않습니다.
정확한 실수 계산에 대한 주요 주장은 성능 중 하나라고 생각합니다 . 짧은 대답은 성능이 정밀도보다 중요 할 때마다 부동 소수점 숫자를 사용하는 것입니다 .
떠오르는 응용 분야 는 자동차 또는 비행기의 공기 역학 을 설계하기 위해 전산 유체 역학 을 사용하는 것입니다. 계산 에서 작은 오류 는 많은 광범위한 프로세서에서 발견되는 전용 부동 소수점 단위 를 사용함으로써 천문학적 이득으로 쉽게 구성됩니다 .
특히, 고정 된 수의 비트를 사용하여 넓은 범위의 실수를 나타내는 문제는 언뜻보기에는 그리 사소한 것이 아닙니다. 수치 시뮬레이션에서 값은 매우 다양 할 수 있으므로 (예 : 난기류가있는 경우) 고정 소수점 계산이 적합하지 않습니다.
하드웨어에 의해 정밀도가 고정되지 않은 경우에도 임의의 정밀도 숫자를 사용하면 부동 소수점 숫자를 사용하는 것보다 몇 배나 느릴 수 있습니다. 사실, 좋은 경우에도 모든 숫자가 합리적이며 행렬을 거꾸로하는 것과 같은 간단한 조작으로 인해 분모가 크고 제어하기가 어려울 수 있습니다 ( 예는 여기 참조 ). 많은 대형 선형 최적화 패키지는이 정확한 문제로 인해 대략적인 솔루션을 찾기 위해 적절한 반올림 모드와 함께 부동 소수점을 사용합니다 (예 : 여기에 있는 대부분의 프로그램 참조 ).