«Так что это не неправильно, это правильный ответ на другой вопрос» - в восторге! - думаю, я мог бы заставить себя использовать эту фразу чаще!
Томас Кимбер,
7
в Python 3.6 вы получите правильный ответ на свой первый вопрос.
vwvan
2
Второй метод может быть вычислен как:sqrt = x**(float(1)/2)
VM_AI
119
Вы должны написать:, 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.
И для записи, предпочтительный способ вычисления квадратного корня таков:
Это тривиальное дополнение к цепочке ответов. Однако, поскольку тема является очень распространенным хитом Google, я считаю, что это заслуживает добавления.
Возможно, ответить на этот вопрос немного поздно, но самый простой и точный способ вычисления квадратного корня - это метод Ньютона.
У вас есть число, квадратный корень которого вы хотите вычислить, (num)и вы можете угадать его квадратный корень (estimate). Оценка может быть любым числом больше 0, но разумное число значительно сокращает глубину рекурсивного вызова.
new_estimate = (estimate + num / estimate) / 2
Эта линия вычисляет более точную оценку с этими двумя параметрами. Вы можете передать значение new_estimate функции и вычислить другую new_estimate, которая будет более точной, чем предыдущая, или вы можете создать рекурсивное определение функции, подобное этому.
defnewtons_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 valueif new_estimate == math.sqrt(num):
returnTrueelse:
return newtons_method(num, new_estimate)
Например, нам нужно найти квадратный корень 30. Мы знаем, что результат находится между 5 и 6.
newtons_method(30,5)
число 30 и оценка 5. Результат каждого рекурсивного вызова:
Это более естественный способ получения квадратного корня, но как он отвечает на вопрос (по общему признанию, он отвечает на вопрос в заголовке, но не на фактический вопрос в теле (да, это плохой заголовок))?
Питер Мортенсен
0
Если вы хотите сделать это так, как это делает калькулятор, воспользуйтесь вавилонской техникой. Это объясняется здесь и здесь .
Предположим, вы хотите вычислить квадратный корень из 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)
Надеюсь, приведенный ниже код ответит на ваш вопрос.
defroot(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)
import math
а затемx = math.sqrt(25)
присвоите значение5.0
x.Ответы:
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)
источник
import math math.sqrt( x )
Это тривиальное дополнение к цепочке ответов. Однако, поскольку тема является очень распространенным хитом Google, я считаю, что это заслуживает добавления.
источник
/
выполняет целочисленное деление в Python 2:>>> 1/2 0
Если одно из чисел является плавающим, оно работает должным образом:
>>> 1.0/2 0.5 >>> 16**(1.0/2) 4.0
источник
Вы видите целочисленное деление. Чтобы получить деление с плавающей запятой по умолчанию,
from __future__ import division
Или вы можете преобразовать 1 или 2 из 1/2 в значение с плавающей запятой.
sqrt = x**(1.0/2)
источник
Возможно, ответить на этот вопрос немного поздно, но самый простой и точный способ вычисления квадратного корня - это метод Ньютона.
У вас есть число, квадратный корень которого вы хотите вычислить,
(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 ().
источник
Возможно, простой способ запомнить: добавить точку после числителя (или знаменателя)
16 ** (1. / 2) # 4 289 ** (1. / 2) # 17 27 ** (1. / 3) # 3
источник
Вы можете использовать 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)
источник