如何在Python中访问IEEE 754定义的舍入模式?
我需要在Python中精确计算单精度浮点数。
我尝试过的选项有 decimal.Decimal
和 numpy.float32
。不过,Decimal
不是基于IEEE 754标准的,而 float32
也不支持使用不同的舍入模式。让人惊讶的是,舍入模式是IEEE 754的标准功能,但在Python中却没有内置的实现。
1 个回答
2
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的维护者。