[英]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
我會通過構建一個給出精確猜測的算法來解決這個問題,因為這些步驟很容易理解,並且可以重復直到非常准確。 例如:
查看此鏈接以輕松解釋此算法以及如何重復以確保准確性。
這是您可以做到的一種方法。 請注意,這不是數學上最有效的方法,它只是一種簡單的方法,不會弄亂奇怪的數學:
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.frexp
和math.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.