3

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

我尝试过的选项是decimal.Decimalnumpy.float32。但是Decimal,它不基于 IEEE 754,并且float32不允许使用舍入模式。令人惊讶的是,舍入模式是 IEEE 754 的标准特性,但 Python 中不存在它的内置实现。

4

1 回答 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。

于 2013-02-27T04:49:13.640 回答