2017-09-04 3 views
0

더 일반적인 double 형 및 long double 형보다 더 중요한 자리수를 저장할 수있는 부동 소수점 변수를 선언하고 싶습니다. (아마도 믿을만한) 8 배수 (256 비트) 약 70 자릿수를 줄 수 있습니다.C++에서 octuple 정밀 부동 소수점 변수 선언하기

어떻게 그러한 변수를 선언합니까? 그리고 크로스 플랫폼 컴플 라이언트는 (고정 너비 정수와 반대되는) 문제가 될 것입니까?

도움을 주시면 감사하겠습니다.

+3

예 C++ 표준에서 이러한 데이터 유형이 지정되지 않았으므로 문제가됩니다. "bignum"라이브러리가 있습니다. 조금이라도 검색하면 휴대용 방식으로 처리 할 수 ​​있습니다 (적어도 원본과 텍스트를 직렬화하는 경우). –

+0

컴파일러가 8 배 정밀도를 제공하는 것은 극히 드뭅니다. 불편한 구문과 일부 기능이 빠져있는 4 배 정밀도를 제공 할 수도 있지만 (소프트웨어에서 에뮬레이트 됨, https://stackoverflow.com/questions/5451447/quadruple-precision-in-c-gcc), 그렇지 않습니다. 외부 라이브러리를 사용하고자한다면 MPFR을 선택하는 것이 좋습니다. http://www.mpfr.org –

+0

실제로 많은 정밀도가 필요한지 다시 생각해 볼 가치가 있습니다. 사실상 모든 계산 작업은 * 정확도가 떨어집니다. . 매우 작은 숫자의 산술 안정성 문제가있는 일부 작업은 로그 공간에서 작업하면 더 잘 해결할 수 있습니다. 마지막으로, 대신 정수에서 작업하도록 계산을 확장하는 것이 좋습니다. –

답변

5

C++ 표준은 double까지의 정밀도를 요구합니다. 그 부동 소수점 구성표의보다 미세한 세부 사항은 구현에 맡겨져 있습니다.

IEEE754 4 배 정밀도 long double은 36 개의 유효 숫자만을 제공합니다. 나는 서면의 시점에 시스템을 우연히 만난 적이 없다. 그것은 십진 정밀도을 구현한다.

가장 좋은 방법은 GNU Multiple Precision Arithmetic Library과 같은 것을 사용하거나 이진 부동 소수점을 원할 경우 The GNU Multiple Precision Floating Point Reliable Library입니다.

+2

GMP는 정수와 이성을 제공합니다. MPFR은 부동 소수점 유형의보다 직접적인 다중 정밀도 버전입니다. –

관련 문제