尝试用Python来计时我的sqrt函数

2024-09-24 22:24:46 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我试着编写一个简单的平方根函数。我做了,我想把它与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,并尝试中间的数字,等等。对我来说没问题,但当我尝试时间!时间它只是停止,控制台中的光标显示,它仍在工作,但什么也没发生


Tags: fromimportrightnumberreturn数字mathsqrt
1条回答
网友
1楼 · 发布于 2024-09-24 22:24:46

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

你的问题是temp**2float中,而{}是int。因为您比较了它们的字符串表示,第一个将是,例如,12.0,第二个是12。在

您可以修复while循环中的条件(使用str()确实很奇怪),或者向函数传递一个float。在

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

您的:0.461127996445

python的:0.000571012496948

相关问题 更多 >