所以我尝试编写一个简单的平方根函数。我做到了,我想把它和Python的原始版本进行比较。这是我的代码:
from math import sqrt
import timeit
def sqrt2(number):
i=1
while i**2<number:
i+=1
left=float(i-1)
right=float(i)
temp = left+(right-left)/2
while str(temp**2)!=str(number):
if temp**2>number:
right=temp
temp = left+(right-left)/2
elif temp**2<number:
left=temp
temp = left+(right-left)/2
else:
return temp
return temp
print timeit.timeit("sqrt2(12)", number=10000, setup='from __main__ import sqrt2')
print timeit.timeit("sqrt(12)", number=10000, setup='from math import sqrt')
它只需要取一个数字,注意整数^2何时较低,(integer+1)^2何时高于我们的数字,然后将这两个数字之间的差距除以2,并尝试中间的数字,等等。这对我来说没问题,但当我尝试计时时。它只是停止了,控制台中的光标显示,它仍然工作,但什么都没发生
正如评论中所提到的,问题是你在这里陷入了一个无限循环:while str(temp**2)!=str(number):
您的问题是temp**2
在float
中,而number
是int
。由于您比较了它们的字符串表示,因此第一个表示将为12.0
,第二个表示为12
。
您可以修复while
循环中的条件(使用str()
看起来确实很奇怪),也可以将float
传递给您的函数。
顺便说一句,您的实现非常缓慢。浮动快速运行返回:
您的:0.461127996445
python的:0.000571012496948