所以我试着编写一个简单的平方根函数。我做了,我想把它与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较低,何时(整数+1)^2高于我们的数字,然后将2之间的差距除以2,并尝试中间的数字,等等。对我来说没问题,但当我尝试时间!时间它只是停止,控制台中的光标显示,它仍在工作,但什么也没发生
正如评论中提到的,问题是你在这里陷入了一个无限循环:
while str(temp**2)!=str(number):
你的问题是}是
temp**2
在float
中,而{int
。因为您比较了它们的字符串表示,第一个将是,例如,12.0
,第二个是12
。在您可以修复
while
循环中的条件(使用str()
确实很奇怪),或者向函数传递一个float
。在顺便说一句,你的实现非常缓慢。带浮动的快速运行返回:
您的:
0.461127996445
python的:
0.000571012496948
相关问题 更多 >
编程相关推荐