我需要在 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。