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

时间:2015-12-16 03:17:37

标签: python sqrt timeit

所以我试图编写一个简单的平方根函数。我做了,我想将它与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,并尝试中间数字等。它对我来说没问题,但是当我尝试timeit.timeit它停止时,光标在控制台显示,它仍在工作,但没有任何反应

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,问题是你在这里进入一个无限循环:while str(temp**2)!=str(number):

您的问题是temp**2中的float,而numberint。由于您比较了字符串表示形式,因此第一个字符串表示形式为12.0,第二个字符串形式为12

您可以在while循环中修复条件(使用str()确实非常奇怪),或者将float传递给您的函数。

顺便说一下,你的实施很慢。使用float的快速运行返回:

你的:0.461127996445

python&#39; s:0.000571012496948