Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
十进制Python与浮点运行时_Python_Floating Point_Decimal - Fatal编程技术网

十进制Python与浮点运行时

十进制Python与浮点运行时,python,floating-point,decimal,Python,Floating Point,Decimal,这只是一个关于使用这两种不同数据类型之间的运行时差异的一般性问题 我的测试: test = [100.0897463, 1.099999939393,1.37382829829393,29.1937462874847272,2.095478262874647474] test2 = [decimal.Decimal('100.0897463'), decimal.Decimal('1.09999993939'), decimal.Decimal('1.37382829829'), decimal

这只是一个关于使用这两种不同数据类型之间的运行时差异的一般性问题

我的测试:

test = [100.0897463, 1.099999939393,1.37382829829393,29.1937462874847272,2.095478262874647474]
test2 = [decimal.Decimal('100.0897463'), decimal.Decimal('1.09999993939'), decimal.Decimal('1.37382829829'), decimal.Decimal('29.1937462875'), decimal.Decimal('2.09547826287')]

def average(numbers, ddof=0):
    return sum(numbers) / (len(numbers)-ddof)

%timeit average(test)
%timeit average(test2)
运行时的区别是:
1000000个循环,最好为3:364纳秒/循环
10000个回路,最好为3个:每个回路80.3µs


所以使用十进制比使用浮点数慢大约200倍。这种类型的差异是否正常,是否与我在决定使用哪种数据类型时所期望的一致?

使用
float
可以获得更快的速度,因为Python
float
在可用时使用硬件浮点寄存器(并且在现代计算机上可用),而
Decimal
使用完整的标量/软件实现


但是,当
float
类型出现经典浮点精度问题时,使用
Decimal
可以获得更好的控制。例如,请参阅经典的StackOverflow Q&A。

根据您看到的时差,您可能正在使用Python 2.x。在Python2.x中,
decimal
模块是用Python编写的,速度相当慢。从Python3.2开始,
decimal
模块被重写为C,速度更快

在我的系统上使用Python2.7时,
decimal
模块的速度大约慢了180倍。使用Python3.5时,
decimal
模块的速度仅慢约2.5倍


如果您关心
decimal
性能,那么Python 3的速度要快得多。

我想这是因为Python类型
float
在某种程度上是用C实现的,而
decimal
看起来像是Python解释器中没有内置的模块/包。是的,我知道我会以精度换取时间,但你认为这是一个典型的巨大差异吗?