Я написал этот код для функции, которая реализует функцию sqrt, используя технику, известную как вавилонская функция. Он аппроксимирует квадратный корень числа n, многократно выполняя вычисления по следующей формуле:
nextGuess = (lastGuess + (n / lastGuess)) / 2
Когда значения nextGuess и lastGuess очень близки, nextGuess представляет собой приблизительный квадратный корень. Начальное предположение может быть любым положительным значением (например, 1). Это значение будет начальным значением для lastGuess. Если разница между nextGuess и lastGuess меньше очень небольшого числа, например 0,0001, то nextGuess — это приблизительный квадратный корень из n. В противном случае nextGuess становится lastGuess, и процесс аппроксимации продолжается.
def babyl(n):
lastGuess=1.0
while True:
nextGuess=float(lastGuess+float(n/lastGuess))/2.0
if abs(lastGuess-nextGuess)<0.0001:
return nextGuess
else:
lastGuess=nextGuess
nextGuess=float(lastGuess+float(n/lastGuess))/2.0
if abs(lastGuess-nextGuess)<0.0001:
return nextGuess
Вывод функции:
>>> babyl(9)
3.000000001396984
>>> babyl(16)
4.000000000000051
>>> babyl(81)
9.000000000007091
>>>
Очень долго после точки, как вы видите.
Я хочу написать тестовую программу, в которой пользователь вводит положительное целое число, а функции возвращают его прибл. значение кв.
Итак, я закодировал:
n=input("Please sir, enter a positive integer number and you'll get the approximated sqrt:")
print babyl(n)
И ответ на это очень короткий:
>>>
Please sir, enter a positive integer number and you'll get the approximated sqrt:16
4.0
>>> ================================ RESTART ================================
>>>
Please sir, enter a positive integer number and you'll get the approximated sqrt:4
2.0
>>> ================================ RESTART ================================
>>>
Please sir, enter a positive integer number and you'll get the approximated sqrt:9
3.0000000014
>>>
Может кто-нибудь сказать мне, в чем разница между функцией и тестом?