任意精度的正确舍入浮点运算,通过mpfr。

bigfloat的Python项目详细描述


bigfloat包是一个提供任意精度的python包 正确舍入的二进制浮点运算。它是作为 Cython包装在GNU MPFR library周围。两行python代码应该给出 想法:

>>> from bigfloat import *
>>> with precision(200) + RoundTowardZero:
...     print(sqrt(2))
...
1.4142135623730950488016887242096980785696718753769480731766796
>>> with quadruple_precision:
...     const_pi()
...
BigFloat.exact('3.14159265358979323846264338327950280', precision=113)

功能

  • 支持Python2(2.6或更高版本)和Python3(3.2或更高版本)
  • 准确的重复性,正确的四舍五入结果跨平台; 精确定义的语义与ieee 754-2008标准兼容。
  • 支持使用Python整数和浮点数的混合类型操作
  • 支持在任何IEEE二进制文件中模拟IEEE 754算法 IEEE754-2008中描述的交换格式无限,南斯, 支持有符号零和次正规。
  • 通过Context对象轻松控制舍入模式和精度 以及python的with语句。

文件

完整的package documentation托管在 阅读文档。继续阅读,快速浏览。

快速游览

bigfloat包很小,使用起来很简单。这里有一个快速的 参观它的一些特点。

出于演示目的,请从:

>>> from bigfloat import *

注意,这个导入隐藏了四个内置的python函数,即 absmaxminpow。正常使用时 可能只想导入 真的需要。

主要类是BigFloat类:

>>> BigFloat(1)  # can be constructed from an integer, float or string
BigFloat.exact('1.0000000000000000', precision=53)
>>> BigFloat('3.14159') ** 2 / 6.0  # can combine with ints and floats
BigFloat.exact('1.6449312880166664', precision=53)
>>> BigFloat('0.1', precision(200)) # high-precision value from string
BigFloat.exact('0.1000000000000000000000000000000000000000000000000000
0000000002', precision=200)

新创建的BigFloat实例引用当前的上下文 确定要使用的精度和舍入模式。这个电流 上下文由Context实例表示,可以检索 通过调用getcontext

>>> getcontext()
Context(precision=53, emax=1073741823, emin=-1073741823,
        subnormalize=False, rounding=ROUND_TIES_TO_EVEN)

precision(200)参数传递给BigFloat构造函数 上面也是Context的一个例子:

>>> precision(200)
Context(precision=200)

可以使用^{tt16}设置用于计算的上下文$ 函数,但对上下文进行临时更改的更好方法 使用python的with语句:

>>> with precision(1000):
...     print sqrt(2)
...
1.41421356237309504880168872420969807856967187537694807317667973
7990732478462107038850387534327641572735013846230912297024924836
0558507372126441214970999358314132226659275055927557999505011527
8206057147010955997160597027453459686201472851741864088919860955
232923048430871432145083976260362799525140798964

这里,sqrtbigfloat包导出。如您所见,这些函数在 整数和浮点数以及BigFloat实例,但始终 返回一个BigFloat实例。

舍入模式也可以类似地控制。上面和下面是 π的界,精确到53个有效位:

>>> with RoundTowardPositive:
...     const_pi()
...
BigFloat.exact('3.1415926535897936', precision=53)
>>> with RoundTowardNegative:
...     const_pi()
...
BigFloat.exact('3.1415926535897931', precision=53)

正如您所期望的,with像上面这样的语句可以是 嵌套的。Context对象也可以使用addition进行组合:

>>> with RoundTowardPositive + precision(24):
...     BigFloat(1) / 3
...
BigFloat.exact('0.333333343', precision=24)

对应于ieee 754交换的各种Context对象 格式是预定义的:

>>> quadruple_precision
Context(precision=113, emax=16384, emin=-16493, subnormalize=True)
>>> half_precision
Context(precision=11, emax=16, emin=-23, subnormalize=True)
>>> with half_precision:
        log(2)
...
BigFloat.exact('0.69336', precision=11)

安装

bigfloat包是available on the Python package index,可以在通常的 方法使用easy_installpip。或者,开发来源 可以从github上的项目homepage下载。

有关更全面的安装说明,请参见full documentation

反馈

欢迎反馈!请使用GitHub issue tracker报告问题。 或者,你可以直接在dickinsm@gmail.com联系马克·迪金森。 提供建议、投诉、错误报告等。

许可证

Bigfloat软件包版权所有(c)2009–2014 Mark Dickinson

bigfloat包是免费软件:您可以重新分发和/或修改它 根据由 自由软件基金会,或者许可证的第3版,或者 选项)任何更高版本。

bigfloat包的发布是希望它会有用,但是 没有任何保证;甚至没有对适销性或 适合某一特定目的。参见GNU Lesser通用公共许可证 更多细节。

你应该收到GNU Lesser通用公共许可证的副本 以及bigfloat包如果没有,请参见<;http://www.gnu.org/licenses/>;。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java将多个线程中的函数放入单个队列   数组在Java中,如何在不改变整数顺序的情况下找到整数组的顺序?   java控制器属于表示层?   java Apache Ivy和本地Maven repo如何处理使用Maven 3构建的快照   Java可与泛型类型进行比较   java这个表达式在泛型中是什么意思   JavaEclipse和TeamCity插件   java检测构造函数中的final是否为空   java如何在StanfordCoreNLP管道中同时使用词汇化和依赖性解析器?   java在AntUnit控制台日志中显示完整异常堆栈跟踪   lambda如何与Java 8供应商建立连锁关系   如何让GRPC的重试机制在Kubernetes集群中使用grpcjava工作?   如何使用openjdk:7 Docker映像和Gradle包装器避免“EC参数错误”?   java将集合映射扩展为一维映射新的“无法推断函数接口类型”