Как вычислить квадратный корень в Python?

Почему Python дает неправильный ответ?

x = 16

sqrt = x**(.5)  #returns 4
sqrt = x**(1/2) #returns 1

Да, я знаю import math и использую sqrt. Но я ищу ответ на вышеизложенное.


person Merlin    schedule 07.03.2012    source источник
comment
Попробуйте это в Python 3, это исправлено;)   -  person Mark Ransom    schedule 07.03.2012
comment
Вычислите квадратный корень в python с помощью import math, а затем x = math.sqrt(25), который присвоит значение 5.0 x.   -  person Eric Leschinski    schedule 06.02.2016
comment
@Merlin - пожалуйста, не откатывайте изменения в заголовке. Это облегчает поиск вопроса.   -  person ChrisF    schedule 06.07.2019
comment
@ChrisF - это мой вопрос, касающийся множества проблем. Прекратите менять заголовок и содержание.   -  person Merlin    schedule 07.07.2019


Ответы (10)


sqrt=x**(1/2) выполняет целочисленное деление. 1/2 == 0.

Итак, вы вычисляете x(1/2) в первом экземпляре, x(0) во втором.

Так что это не неправильно, это правильный ответ на другой вопрос.

person smessing    schedule 07.03.2012
comment
Так что это не неправильно, это правильный ответ на другой вопрос - нравится! - думаю, я мог бы заставить себя использовать эту фразу чаще! - person Thomas Kimber; 27.04.2016
comment
в Python 3.6 вы получаете правильный ответ на вопрос, который задали в первый раз. - person vwvan; 11.04.2017
comment
Второй метод можно вычислить как: sqrt = x**(float(1)/2) - person VM_AI; 28.09.2018

Вы должны написать: sqrt = x**(1/2.0), иначе выполняется целочисленное деление и выражение 1/2 возвращает 0.

Такое поведение является «нормальным» в Python 2.x, тогда как в Python 3.x 1/2 оценивается как 0.5. Если вы хотите, чтобы ваш код Python 2.x вел себя как код 3.x w.r.t. деление пишет from __future__ import division - тогда 1/2 будет оцениваться как 0.5, а для обратной совместимости 1//2 будет оцениваться как 0.

И для протокола, предпочтительный способ вычисления квадратного корня таков:

import math
math.sqrt(x)
person Óscar López    schedule 07.03.2012

import math
math.sqrt( x )

Это тривиальное дополнение к цепочке ответов. Однако, поскольку тема очень популярна в Google, я считаю, что это заслуживает того, чтобы быть добавленным.

person whisperer    schedule 03.04.2018

/ выполняет целочисленное деление в Python 2:

>>> 1/2
0

Если одно из чисел является числом с плавающей запятой, оно работает так, как ожидалось:

>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
person Niklas B.    schedule 07.03.2012

То, что вы видите, это целочисленное деление. Чтобы получить деление с плавающей запятой по умолчанию,

from __future__ import division

Или вы можете преобразовать 1 или 2 из 1/2 в значение с плавающей запятой.

sqrt = x**(1.0/2)
person gfortune    schedule 07.03.2012

Это может быть немного поздно, чтобы ответить, но самый простой и точный способ вычислить квадратный корень - это метод Ньютона.

У вас есть число, для которого вы хотите вычислить квадратный корень (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().

person gunesevitan    schedule 25.01.2018

Возможно, простой способ запомнить: добавить точку после числителя (или знаменателя)

16 ** (1. / 2)   # 4
289 ** (1. / 2)  # 17
27 ** (1. / 3)   # 3
person Vikrant    schedule 06.04.2018

Если вы хотите сделать это так, как это делает калькулятор, используйте вавилонскую технику. Это объясняется здесь и здесь.

Предположим, вы хотите вычислить квадратный корень из 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)
person Walker Rowe    schedule 16.08.2020

Вы можете использовать NumPy для вычисления квадратных корней массивов:

 import numpy as np
 np.sqrt([1, 4, 9])
person sushmit    schedule 10.02.2017
comment
Это более естественный способ извлечения квадратных корней, но как он отвечает на вопрос (по общему признанию, он отвечает на вопрос в заголовке, но не на фактический вопрос в теле (да, это плохое название))? - person Peter Mortensen; 14.06.2018

Я надеюсь, что приведенный ниже код ответит на ваш вопрос.

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) 
person Mohammad Ali Shaikh    schedule 25.07.2017
comment
Пожалуйста, отредактируйте и добавьте краткое объяснение того, почему это работает. Просто код не очень помогает. - person wjandrea; 04.07.2019