如何在Python中访问IEEE 754定义的舍入模式?

3 投票
1 回答
1154 浏览
提问于 2025-04-17 17:16

我需要在Python中精确计算单精度浮点数。

我尝试过的选项有 decimal.Decimalnumpy.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的维护者。

撰写回答