실수 계산 : 부동 소수점 대 TTE 대 도메인 이론 대 등


19

현재 가장 인기있는 언어의 실수 계산은 여전히 ​​부동 소수점 연산을 통해 수행됩니다. 반면에, 2 형 효과 성 (TTE) 및 도메인 이론과 같은 이론은 오랫동안 실수의 정확한 계산을 약속했습니다. 분명히 부동 소수점 정밀도 문제는 관련성이 줄어들지 않았으므로 왜 이러한 이론이 더 주류가되지 않았으며 왜 더 눈에 띄게 구현되지 않았습니까?

예를 들어 부동 소수점 오류에 대해 크게 신경 쓰지 않는 응용 프로그램 도메인이 있습니까? 상당한 복잡성 문제가 있습니까?

답변:


17

실수 계산을하고 실제 답을 알고 싶습니다. 그러나 나는 추측 할 수있다. 그것은 사회 학적 문제라고 생각합니다.

정확한 실제 산술 작업을하는 사람들의 커뮤니티는 소프트웨어 개발에 익숙하지 않은 이론가들로 구성됩니다. 따라서 그들은 일반적으로 구현 과제를 학생들에게 위임 하거나 ( Norbert Müller의 iRRAM 은 예외적으로 ) 자체 장난감 구현이 있습니다.

사람들이 어떻게이 필요한 이론적 배경이없는 모조 필요한 프로그램이있다. 이론적 근거가 확실하지 않으면 정확한 실제 산술을 정확하게 설계하기가 어렵습니다. 예를 들어, for정밀도 손실로 인해 허용 할 수없는 성능을 얻을 수 있으므로 루프 에 많은 수의 실수를 추가하는 것은 실수 입니다. 많은 수의 실수를 추가하려면 부분 합계의 크기를 고려하여 트리와 같은 구조로 수행해야합니다. 에서 얻을 어려운 또 다른 일이 있다는 것입니다 <그리고 =단순히 존재하지 않는 실수에 총 부울 함수로 (당신은 할 수 있습니다 =그 중 하나를 반환하지만 false하거나 발산, 그리고 <두 개의 동일한 실수를 부여 할 때 발산을).

마지막으로 정확한 실제 산술을 위해 라이브러리를 구현하는 방법을 아는 것은 확실하지 않습니다. 그것들은 단지 일부 데이터 유형과 함수를 정의하는 일반적인 라이브러리가 아닙니다. 정확한 실제 산술에는 종종 특별한 제어 모드가 필요합니다. 예를 들어, iRRAM은 main표준 입력 및 출력뿐만 아니라 프로그램의 주요 실행 (문자 그대로 하이재킹 )을 대신하므로 정밀도 손실이 발생할 때 프로그램을 다시 실행할 수 있습니다. Haskell에서 실제 산술 라이브러리는 Staged모나드 (기본적으로 Reader모나드)에서 발생합니다. 대부분의 사람들은 실수가 "단지 다른 데이터 유형"이기를 기대하지만 그 점에 대해서는 의구심이 있습니다.


나는 정확한 실제 산술에 대해 거의 무지하지만 카한 요약을 구현할 수 없습니까?
jjg

1
흠, 나는 그렇게 생각하지 않습니다. 정확한 실제 산술을 중간 산술을 자체 조정하여 원하는 출력 정밀도를 달성하는 간격 산술이라고 생각하십시오.
Andrej Bauer

3
실제 숫자는 무한한 대상이라는 사실과 프로그래밍 방식으로 수행 할 수있는 결과에 대한 프로그래머의 이해 부족과 더불어 하드웨어 지원 부족도 중요하다고 생각합니다. 사람들이 정확성을 위해 상당한 시간과 메모리 오버 헤드가있는 것을 사용하도록 설득하기는 어렵습니다.
Kaveh

1
공동 유형으로 실제 계산을 구현하는 데 약간의 활동이 있음을 알았습니다. 공동성 유형은 여전히 ​​정확히 까다 롭다는 느낌이 들지만 (나는 확실히 전문가가 아닙니다) 정확한 실제 계산을보다 광범위하게 사용할 수 있다고 약속합니까?
SorcererofDM

3
일련의 숫자 스트림 또는 고정 수렴 률을 가진 다른 구현을 사용하는 구현은 너무 느리게 수렴한다는 점에서 처음부터 장애가 있습니다. 또한 스트림 기반 구현을 사용하면 다음 근사값을 얻기 위해 이전의 모든 근사값을 계산해야하는 경향이 있습니다. 이는 설계 실수이기도합니다.
Andrej Bauer

10

일반적으로 사람들은 항상 부동 소수점 오류에 관심을 갖습니다. 그러나 나는 Andrej에 동의하지 않으며, 사회적인 이유로 플로트가 임의의 정밀한 현실보다 (대부분의 경우) 선호된다고 생각하지 않습니다.

정확한 실수 계산에 대한 주요 주장은 성능 중 하나라고 생각합니다 . 짧은 대답은 성능이 정밀도보다 중요 할 때마다 부동 소수점 숫자를 사용하는 것입니다 .

떠오르는 응용 분야 는 자동차 또는 비행기의 공기 역학 을 설계하기 위해 전산 유체 역학 을 사용하는 것입니다. 계산 에서 작은 오류 는 많은 광범위한 프로세서에서 발견되는 전용 부동 소수점 단위 를 사용함으로써 천문학적 이득으로 쉽게 구성됩니다 .

특히, 고정 된 수의 비트를 사용하여 넓은 범위의 실수를 나타내는 문제는 언뜻보기에는 그리 사소한 것이 아닙니다. 수치 시뮬레이션에서 값은 매우 다양 할 수 있으므로 (예 : 난기류가있는 경우) 고정 소수점 계산이 적합하지 않습니다.

하드웨어에 의해 정밀도가 고정되지 않은 경우에도 임의의 정밀도 숫자를 사용하면 부동 소수점 숫자를 사용하는 것보다 몇 배나 느릴 수 있습니다. 사실, 좋은 경우에도 모든 숫자가 합리적이며 행렬을 거꾸로하는 것과 같은 간단한 조작으로 인해 분모가 크고 제어하기가 어려울 수 있습니다 ( 예는 여기 참조 ). 많은 대형 선형 최적화 패키지는이 정확한 문제로 인해 대략적인 솔루션을 찾기 위해 적절한 반올림 모드와 함께 부동 소수점을 사용합니다 (예 : 여기에 있는 대부분의 프로그램 참조 ).


1
정확한 형태의 실제 계산과 부동 소수점 계산 사이에 입증 된 격차가 있습니까?
SorcererofDM

1
내가 아는 한, 나는 두렵다. Sean Gao는 실제에 대한 대략적인 의사 결정 절차의 복잡성 (그 논문 초록 참조)에 대한 흥미로운 결과를 가지고 있으며 , 행렬의 역 분모는 물론 결정 요인 처럼 최악의 경우에도 집니다.
코디

-6

π

내 요점은 정확하게 계산하려면 친숙한 자연 이름뿐만 아니라 특수 이름에 대한 자리 표시자가 있어야한다는 것입니다. 언젠가는 실제 세계의 어떤 것에 적용하기 위해 정확한 가치를 추정하려고 할 것입니다. 결과적으로 매우 전문적인 요구가없는 한 전체 문제를 처음부터 근사치로 처리하는 것이 훨씬 효율적입니다.

아르 자형

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