试图在Python中计时我的sqrt函数



所以我尝试编写一个简单的平方根函数。我做到了,我想把它和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**2float中,而numberint。由于您比较了它们的字符串表示,因此第一个表示将为12.0,第二个表示为12

您可以修复while循环中的条件(使用str()看起来确实很奇怪),也可以将float传递给您的函数。

顺便说一句,您的实现非常缓慢。浮动快速运行返回:

您的:0.461127996445

python的:0.000571012496948

相关内容

  • 没有找到相关文章

最新更新