相当于 float128
Equivalent of float128
如何使用 Python 中 __float128
的等效项?我应该为 decimal.getcontext()
使用什么精度?我的意思是,精度是以小数位还是位来指定的?
from decimal import *
getcontext().prec = # 34 or 128 ?
是否可以为给定操作设置精度 "locally",而不是使用 getcontext().prec
设置精度 "globally"?
根据 Simon Byrne 的评论,是否有可能用 Decimal
模拟 IEEE 754 定义的 __float128
?如果我想要四倍精度,我在 Python 中还有哪些其他选项?
遗憾的是,Python 仅支持一种浮点类型,即底层架构的双精度类型。
根据架构的不同,numpy 可以声明一个 float128,但众所周知它不是始终可用的。
如果你在 numpy 之外需要它,(或者在 numpy 不支持它的平台上),你可以看看 bigfloat package on pypi which is a wrapper around GNU MPFR library。但请注意,它目前处于测试版级别,您必须准备好从源代码构建它。
在@MarkDickinson 的评论(他是 bigfloat 的作者)之后,gmpy2 是另一个围绕 MPFR 的包装器,它在 pypi 上被声明为稳定的并且更丰富且维护得更好。
我是 gmpy2
的维护者。除了包装 MPFR 之外,gmpy2
还包装 GMP(用于整数和有理数)和 MPC(用于复杂算术)。 MPFR 和 MPC 都使用二进制表示,而 Decimal
使用十进制表示。
这里是一个简单的例子,展示了 float128
.
等价物的使用
>>> import gmpy2
>>> gmpy2.set_context(gmpy2.ieee(128))
>>> gmpy2.get_context()
context(precision=113, real_prec=Default, imag_prec=Default,
round=RoundToNearest, real_round=Default, imag_round=Default,
emax=16384, emin=-16493,
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.sin(gmpy2.mpfr("1.2"))
mpfr('0.932039085967226349670134435494826026',113)
对于 2.0.x 系列,gmpy2.ieee()
仅创建支持 32、64 或 128 位格式的上下文。开发分支支持更广泛的精度。
如何使用 Python 中 __float128
的等效项?我应该为 decimal.getcontext()
使用什么精度?我的意思是,精度是以小数位还是位来指定的?
from decimal import *
getcontext().prec = # 34 or 128 ?
是否可以为给定操作设置精度 "locally",而不是使用 getcontext().prec
设置精度 "globally"?
根据 Simon Byrne 的评论,是否有可能用 Decimal
模拟 IEEE 754 定义的 __float128
?如果我想要四倍精度,我在 Python 中还有哪些其他选项?
遗憾的是,Python 仅支持一种浮点类型,即底层架构的双精度类型。
根据架构的不同,numpy 可以声明一个 float128,但众所周知它不是始终可用的。
如果你在 numpy 之外需要它,(或者在 numpy 不支持它的平台上),你可以看看 bigfloat package on pypi which is a wrapper around GNU MPFR library。但请注意,它目前处于测试版级别,您必须准备好从源代码构建它。
在@MarkDickinson 的评论(他是 bigfloat 的作者)之后,gmpy2 是另一个围绕 MPFR 的包装器,它在 pypi 上被声明为稳定的并且更丰富且维护得更好。
我是 gmpy2
的维护者。除了包装 MPFR 之外,gmpy2
还包装 GMP(用于整数和有理数)和 MPC(用于复杂算术)。 MPFR 和 MPC 都使用二进制表示,而 Decimal
使用十进制表示。
这里是一个简单的例子,展示了 float128
.
>>> import gmpy2
>>> gmpy2.set_context(gmpy2.ieee(128))
>>> gmpy2.get_context()
context(precision=113, real_prec=Default, imag_prec=Default,
round=RoundToNearest, real_round=Default, imag_round=Default,
emax=16384, emin=-16493,
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.sin(gmpy2.mpfr("1.2"))
mpfr('0.932039085967226349670134435494826026',113)
对于 2.0.x 系列,gmpy2.ieee()
仅创建支持 32、64 或 128 位格式的上下文。开发分支支持更广泛的精度。