python做除法有不精确的尾数_为什么Python中floatingpoint除法用更小的数字更快?...

在回答this question的过程中,我遇到了一些我无法解释的事情。在

给出以下python3.5代码:import time

def di(n):

for i in range(10000000): n / 101

i = 10

while i < 1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:

start = time.clock()

di(i)

end = time.clock()

print("On " + str(i) + " " + str(end-start))

i *= 10000

输出为:

^{pr2}$

如您所见,大约有两次:一次是针对较小的数字,另一次是针对较大的数字。在

Python2.7也会出现同样的结果,使用以下函数来保留语义:def di(n):

for i in xrange(10000000): n / 101.0

在同一台机器上,我得到:On 10 0.617427

On 100000 0.61805

On 1000000000 0.6366

On 10000000000000 0.620919

On 100000000000000000 0.616695

On 1000000000000000000000 0.927353

On 10000000000000000000000000 1.007156

On 100000000000000000000000000000 0.98597

On 1000000000000000000000000000000000 0.99258

On 10000000000000000000000000000000000000 0.966753

On 100000000000000000000000000000000000000000 0.992684

On 1000000000000000000000000000000000000000000000 0.991711

On 10000000000000000000000000000000000000000000000000 0.994703

On 100000000000000000000000000000000000000000000000000000 0.978877

On 1000000000000000000000000000000000000000000000000000000000 0.982035

On 10000000000000000000000000000000000000000000000000000000000000 0.973266

On 100000000000000000000000000000000000000000000000000000000000000000 0.977911

On 1000000000000000000000000000000000000000000000000000000000000000000000 0.996857

On 10000000000000000000000000000000000000000000000000000000000000000000000000 0.972555

On 100000000000000000000000000000000000000000000000000000000000000000000000000000 0.985676

On 1000000000000000000000000000000000000000000000000000000000000000000000000000000000 0.987412

On 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0.997207

On 100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 0.970129

为什么较小的数字和较大的数字的浮点除法之间会有这种一致的差异?这是否与Python内部对较小的数字使用float而对较大的数字使用double有关?在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值