首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >有没有比python的Decimal更快的替代品?

有没有比python的Decimal更快的替代品?
EN

Stack Overflow用户
提问于 2008-10-12 05:03:06
回答 4查看 15.3K关注 0票数 17

有没有人知道在python中有更快的decimal实现?

如下面的示例所示,标准库的十进制模块比float慢大约100倍。

代码语言:javascript
复制
from  timeit import Timer

def run(val, the_class):
    test = the_class(1)
    for c in xrange(10000):
        d = the_class(val)
        d + test
        d - test
        d * test
        d / test
        d ** test
        str(d)
        abs(d)    

if __name__ == "__main__":
    a = Timer("run(123.345, float)", "from decimal_benchmark import run")
    print "FLOAT", a.timeit(1)
    a = Timer("run('123.345', Decimal)", "from decimal_benchmark import run; from decimal import Decimal")
    print "DECIMAL", a.timeit(1)

输出:

代码语言:javascript
复制
FLOAT 0.040635041427
DECIMAL 3.39666790146
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-12 05:11:38

Python库是目前最好的任意精度数学库之一,在GMPY上有一个GMP绑定。我会尝试这种方法。

票数 11
EN

Stack Overflow用户

发布于 2011-11-19 16:47:42

你可以试试cdecimal

代码语言:javascript
复制
from cdecimal import Decimal

从Python3.3开始,cdecimal实现现在是decimal标准库模块的内置实现,所以您不需要安装任何东西。只需使用decimal即可。

对于Python2.7,安装cdecimal并使用它而不是decimal应该可以提供类似于Python3默认获得的加速。

票数 23
EN

Stack Overflow用户

发布于 2014-06-25 20:33:07

使用cDecimal

将以下内容添加到您的基准测试:

代码语言:javascript
复制
a = Timer("run('123.345', Decimal)", "import sys; import cdecimal; sys.modules['decimal'] = cdecimal; from decimal_benchmark import run; from decimal import Decimal")
print "CDECIMAL", a.timeit(1)

我的结果是:

代码语言:javascript
复制
FLOAT 0.0257983528473
DECIMAL 2.45782495288
CDECIMAL 0.0687125069413

(Python 2.7.6/32、Win7/64、AMD Athlon II 2.1 AMD)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/195116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档