2017-02-01 11 views
1

파이썬에서 __float128에 해당하는 작업 방법은 무엇입니까? decimal.getcontext()에 어떤 정밀도를 사용해야합니까? 내 말은, 소수 자릿수 또는 비트로 지정된 정밀도입니까? float128에 해당

from decimal import * 
getcontext().prec = # 34 or 128 ? 

그것은 getcontext().prec와 함께 "세계"를 설정하기보다는, 주어진 작업에 "로컬"정밀도를 설정할 수 있습니까?

Simon Byrne 주석에 따르면 Decimal으로 IEEE 754에 정의 된대로 __float128을 시뮬레이션 할 수 있습니까? 4 배 정밀도를 원한다면 파이썬에서 어떤 다른 옵션을 사용할 수 있습니까?

+1

답변은 [문서] (https://docs.python.org/3/library/decimal.html)에서 찾으실 수 있습니다. – vaultah

+0

@vaultah 나는 사전에 문서를 참조했는데 예, 그렇지만 올바르게 이해했는지 확인하고 싶었습니다. '.prec'가 실제로 ** decimal ** places를 설정했는지 확인하고 싶었습니다. 예를 들면 ... –

+0

'decimal'은 10 진수 부동 소수점을 구현 한 값이므로 소수점 이하 자릿수를 사용합니다. 이것은 바이너리 형식 인'__float128'보다 다른 답을 줄 것입니다. –

답변

2

저는 gmpy2의 관리자입니다. MPFR을 래핑하는 것 외에도 gmpy2은 GMP (정수 및 유리수의 경우)와 MPC (복잡한 산술의 경우)를 래핑합니다. MPFR 및 MPC는 모두 십진수 표현을 사용하는 Decimal에 비해 이진 표현을 사용합니다.

다음은 float128에 해당하는 빠른 사용 예입니다. 커널 2.0.x 시리즈

>>> import gmpy2 
>>> gmpy2.set_context(gmpy2.ieee(128)) 
>>> gmpy2.get_context() 
context(precision=113, real_prec=Default, imag_prec=Default, 
     round=RoundToNearest, real_round=Default, imag_round=Default, 
     emax=16384, emin=-16493, 
     subnormalize=True, 
     trap_underflow=False, underflow=False, 
     trap_overflow=False, overflow=False, 
     trap_inexact=False, inexact=False, 
     trap_invalid=False, invalid=False, 
     trap_erange=False, erange=False, 
     trap_divzero=False, divzero=False, 
     trap_expbound=False, 
     allow_complex=False) 
>>> gmpy2.sin(gmpy2.mpfr("1.2")) 
mpfr('0.932039085967226349670134435494826026',113) 

, gmpy2.ieee()는 32, 64 또는 128 비트 포맷을 지원하기 위해 컨텍스트를 생성한다. 개발 지점 지원은 더 넓은 범위의 정밀도입니다.

+0

Btw., 얼마나 더 느린 IEEE soft float128이 하드웨어 배정도와 얼마나 비교되는지 알 수 있습니까? –

+0

@ EcirHana 10 배 느린 것으로 시작 하겠지만 작동에 따라 다릅니다. 나중에 벤치 마크를 실행할 수 있습니다. – casevh

1

불행히도 파이썬은 기본 아키텍처의 이중 유형 인 단 하나의 부동 소수점 유형 만 네이티브로 지원합니다.

아키텍처에 따라 numpy는 float128을 선언 할 수 있지만 일관되게 사용할 수 없다고 알려져 있습니다.

numpy가 아닌 곳에서 (또는 numpy가 지원하지 않는 플랫폼에서) 필요한 경우 GNU MPFR library 주위의 래퍼 인 bigfloat package on pypi을 볼 수 있습니다. 그러나 현재 베타 레벨로 선언되어 있으므로 출처에서 빌드 할 준비가되어 있어야합니다. @ 후


MarkDickinson의 코멘트 (그는 bigfloat의 저자), gmpy2이 pypi에 안정적으로 선언하고 모두 풍부하고 더 나은 유지입니다 MPFR 주위에 다른 래퍼입니다.

+0

'bigfloat '의 저자로 말하면 사람들이'gmpy2'를 대신 보도록 권하고 싶습니다. :-) 그것은 더 잘 유지되고, MPFR (그리고 그 이상)을 감싸는 것과 같은 일을합니다. –

+0

BTW, NumPy의 'float128'이 실제로 IEEE 754 binary128 유형 (double-double 또는 zero-padded float80 유형과 반대) 인 플랫폼을 알고 계십니까? –

+0

@ MarkDickinson : 귀하의 의견에 감사드립니다! 나는 그것을 내 직책에 포함시켰다. 불행히도 나는 엄청난 숫자의 사용자가 아니다 ... –