python sqrt函数用法_sqrt函数在Python中的怪异行为

在Python中,我编写了一个自定义代码sqrt(x,delta),以delta-close近似值计算给定数字的平方根.它使用while循环和类似于二进制搜索的算法.

编码:

from __future__ import division

def sqrt(x, delta):

start = 0

end = x

while (end-start) > delta:

middle = (start + end) / 2

middle_2 = middle * middle

if middle_2 < x:

start = middle

print "too low"

elif middle_2 > x:

end = middle

print "too high"

else:

return middle

result = (start + end) / 2

return result

它基本上可以运行并且非常快,但是在某些情况下会陷入无限的while循环中.

sqrt(1e27, 1/1024) => works fine (returns 'too low's and 'too high's, then returns correct result)

sqrt(1e28, 1/1024) => works fine

sqrt(1e29, 1/1024) => never-ending loop, it keeps printing 'too low' forever

sqrt(1e30, 1/1024) => works fine

sqrt(1e31, 1/1024) => 'too low' forever

sqrt(1e32, 1/1024) => works fine

sqrt(1e33, 1/1024) => works fine (also surprising after the problem with 1e29 and 1e31)

sqrt(1e34, 1/1024) => works fine

sqrt(1e35, 1/1024) => 'too low' forever

sqrt(1e36, 1/1024) => works fine

sqrt(1e37, 1/1024) => 'too high' forever (too high this time!)

sqrt(1e38, 1/1024) => works fine

sqrt(1e39, 1/1024) => works fine (surprising again..)

... 1e40-1e45 ... they all work fine

sqrt(1e46, 1/1024) => 'too low' forever (surprisingly it occurs now with 1e'even number')

...

sqrt(1e200, 1/1024) => works fine

sqrt(1e201, 1/1024) => works fine

...

sqrt(1e299, 1/1024) => 'too low' forever

sqrt(1e300, 1/1024) => 'too high' forever

...

sqrt(1e304, 1/1024) => 'too high' forever

sqrt(1e305, 1/1024) => works fine

... 305-308 ... they allwork fine

sqrt(1e309, 1/1024) => inf (reached some 'infinite' limit?)

我最初以为数字超出限制,例如1e20.但是后来它也可以使用它们.另外,我曾认为这是大约1e’odd’或1e’even’的数字,但是正如我们在示例中看到的那样,事实并非如此.我还尝试使用不同的增量代替1/1024,但它们表现出相似的行为.

我将不胜感激,因为任何解释都可以说明引起这种现象的幕后原因.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值