簡體   English   中英

python 中沒有預定義的平方根 function

[英]square root without pre-defined function in python

如何在不使用 python 中的任何預定義函數的情況下找到數字的平方根?

我需要一個程序的平方根如何工作的主要邏輯。 在一般數學中,我們將使用 HCF 來完成,但在編程中,我無法找到邏輯。

有一種著名的數學方法,稱為Newton-Raphson 方法,用於依次找到根的更好近似值。

基本上,此方法采用初始值,然后在成功的迭代中收斂到解決方案。您可以在此處閱讀有關它的更多信息。

此處附上示例代碼供您參考。

def squareRoot(n):
    x=n
    y=1.000000 #iteration initialisation.
    e=0.000001 #accuracy after decimal place.
    while x-y > e:
        x=(x+y)/2
        y=n/x
    print x

n = input('enter the number : ') 
squareRoot(n)

在這里,您可以通過在小數點后的 e 和 y 中添加“0”數字來提高平方根結果的准確性。

還有一些其他的方法,比如像所示找到平方根二進制搜索這里

這對我有用:

def sqrt(n):
    for i in range(1, n+1):
        if (n % i == 0) and (i * i == n):
            return i
            break

基本上程序運行從 1 到 n 的循環,然后檢查 n % i = 0 和 i 平方 = n,如果為真 - 返回 i 並中斷。

這是無需使用 python 的任何內置 function 即可獲得平方根的方法。

def findSqrt(n):
    sqrtNum = n / 2
    temp = 0

    while sqrtNum != temp:
        temp = sqrtNum
        sqrtNum = (n / temp + temp) / 2

    return sqrtNum

我會通過構建一個給出精確猜測的算法來解決這個問題,因為這些步驟很容易理解,並且可以重復直到非常准確。 例如:

  • 構建已知的完美平方(2^2 是 4,4^2 是 16,等等)
  • 找出給定數字之間的完全平方數(如果給定 10,則它位於 3^2 (9) 和 4^2 (16) 之間)。 因此,10 的平方根介於 3 和 4 之間。

查看此鏈接以輕松解釋此算法以及如何重復以確保准確性。

這是您可以做到的一種方法。 請注意,這不是數學上最有效的方法,它只是一種簡單的方法,不會弄亂奇怪的數學:

a=int(input('number! '))
accuracy=10 #number of decimals
s=0
step=1
for i in range(accuracy+1):
    while (s+step)**2<=a:
        s+=step
    step=step/10
s=format(s,'.'+str(accuracy)+'f')
print(s)

python 中沒有預定義的平方根 function

a=eval(input("Enter a number to see the squareroot:"))
b=0
x=(1+a/1)/2
while b!=10:
    b+=1
    x=(x+a/x)/2
print(x)

以下 python 實現基於C++ 實現 代碼不直接使用 sqrt 而是使用math.frexpmath.ldexp來計算 sqrt。 這種算法就像任何其他算法一樣適合訓練。 在專業設置中最好使用math.sqrt ,因為該函數使用直接的Intel 指令ARM64 指令

import math
def sqrt(n):
    if n < 0:
        raise ArithmeticError()
    n, exp = math.frexp(n)
    if (exp & 1):
        exp -= 1
        n *= 2
    y = (1 + n) / 2
    z = 0
    while (y != z):
        z = y
        y = ( y + n/y) / 2
    return math.ldexp(y, int(exp/2))


import unittest

class TestSqrt(unittest.TestCase):

    def test_simple(self):
        self.assertEqual(sqrt(4), math.sqrt(4))

    def test_various(self):
        l = [4, 9, 64, 49, 39499, 48484]
        for i in l:
            self.assertEqual(sqrt(i), math.sqrt(i))


if __name__ == '__main__':
    unittest.main()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM