Pythonで単精度浮動小数点を正確に計算する必要があります。
私が試したオプションはとdecimal.Decimal
ですnumpy.float32
。ただしDecimal
、IEEE 754に基づいてfloat32
いないため、丸めモードを使用できません。驚くべきことに、丸めモードはIEEE 754の標準機能ですが、Pythonには組み込みの実装がありません。
Pythonで単精度浮動小数点を正確に計算する必要があります。
私が試したオプションはとdecimal.Decimal
ですnumpy.float32
。ただしDecimal
、IEEE 754に基づいてfloat32
いないため、丸めモードを使用できません。驚くべきことに、丸めモードはIEEE 754の標準機能ですが、Pythonには組み込みの実装がありません。
gmpy2ライブラリは、必要なことを行います。
>>> import gmpy2
>>> gmpy2.set_context(gmpy2.ieee(32))
>>> ctx=gmpy2.get_context()
>>> ctx
context(precision=24, real_prec=Default, imag_prec=Default,
round=RoundToNearest, real_round=Default, imag_round=Default,
emax=128, emin=-148,
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.const_pi().digits(2)
('110010010000111111011011', 2, 24)
>>> ctx.round=gmpy2.RoundDown
>>> gmpy2.const_pi().digits(2)
('110010010000111111011010', 2, 24)
>>> ctx.round=gmpy2.RoundUp
>>> gmpy2.const_pi().digits(2)
('110010010000111111011011', 2, 24)
>>>
gmpy2 は、GMP、MPFR、および MPC 任意精度ライブラリへのアクセスを提供します。MPFR は、ユーザー定義可能な精度と指数の制限に対して正しく丸められた算術演算をサポートします。
免責事項: 私は gmpy2 を保守しています。