Почему Python дает «неправильный» ответ?
x = 16
sqrt = x**(.5) #returns 4
sqrt = x**(1/2) #returns 1
Да знаю import mathи пользуюсь sqrt. Но я ищу ответ на вышесказанное.
Почему Python дает «неправильный» ответ?
x = 16
sqrt = x**(.5) #returns 4
sqrt = x**(1/2) #returns 1
Да знаю import mathи пользуюсь sqrt. Но я ищу ответ на вышесказанное.
import mathа затем x = math.sqrt(25)присвоите значение 5.0x.
Ответы:
sqrt=x**(1/2)делает целочисленное деление. 1/2 == 0.
Итак, вы вычисляете x (1/2) в первом случае, x (0) во втором.
Так что это не неправильно, это правильный ответ на другой вопрос.
sqrt = x**(float(1)/2)
Вы должны написать:, sqrt = x**(1/2.0)иначе будет выполнено целочисленное деление и выражение 1/2вернется 0.
Такое поведение «нормально» в Python 2.x, тогда как в Python 3.x 1/2оценивается как 0.5. Если вы хотите, чтобы ваш код Python 2.x вел себя как 3.x по отношению к записи с разделением from __future__ import division- тогда 1/2будет оцениваться 0.5и для обратной совместимости, 1//2будет оцениваться 0.
И для записи, предпочтительный способ вычисления квадратного корня таков:
import math
math.sqrt(x)
Возможно, ответить на этот вопрос немного поздно, но самый простой и точный способ вычисления квадратного корня - это метод Ньютона.
У вас есть число, квадратный корень которого вы хотите вычислить, (num)и вы можете угадать его квадратный корень (estimate). Оценка может быть любым числом больше 0, но разумное число значительно сокращает глубину рекурсивного вызова.
new_estimate = (estimate + num / estimate) / 2
Эта линия вычисляет более точную оценку с этими двумя параметрами. Вы можете передать значение new_estimate функции и вычислить другую new_estimate, которая будет более точной, чем предыдущая, или вы можете создать рекурсивное определение функции, подобное этому.
def newtons_method(num, estimate):
# Computing a new_estimate
new_estimate = (estimate + num / estimate) / 2
print(new_estimate)
# Base Case: Comparing our estimate with built-in functions value
if new_estimate == math.sqrt(num):
return True
else:
return newtons_method(num, new_estimate)
Например, нам нужно найти квадратный корень 30. Мы знаем, что результат находится между 5 и 6.
newtons_method(30,5)
число 30 и оценка 5. Результат каждого рекурсивного вызова:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
Последний результат - наиболее точное вычисление квадратного корня из числа. Это то же значение, что и встроенная функция math.sqrt ().
Вы можете использовать NumPy для вычисления квадратных корней массивов:
import numpy as np
np.sqrt([1, 4, 9])
Если вы хотите сделать это так, как это делает калькулятор, воспользуйтесь вавилонской техникой. Это объясняется здесь и здесь .
Предположим, вы хотите вычислить квадратный корень из 2:
a=2
a1 = (a/2)+1
b1 = a/a1
aminus1 = a1
bminus1 = b1
while (aminus1-bminus1 > 0):
an = 0.5 * (aminus1 + bminus1)
bn = a / an
aminus1 = an
bminus1 = bn
print(an,bn,an-bn)
Надеюсь, приведенный ниже код ответит на ваш вопрос.
def root(x,a):
y = 1 / a
y = float(y)
print y
z = x ** y
print z
base = input("Please input the base value:")
power = float(input("Please input the root value:"))
root(base,power)