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

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

x = 16

sqrt = x**(.5)
returns 4

sqrt = x**(1/2)
returns 1

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

Ответ 1

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

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

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

Ответ 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)

Ответ 3

import math
math.sqrt( x )

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

Ответ 4

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

>>> 1/2
0

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

>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0

Ответ 5

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

from __future__ import division

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

sqrt = x**(1.0/2)

Ответ 6

Это может быть немного поздно ответить, но самым простым и точным способом вычисления квадратного корня является метод newton.

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

Ответ 7

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

16 ** (1. / 2)   # 4
289 ** (1. / 2)  # 17
27 ** (1. / 3)   # 3

Ответ 8

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

 import numpy as np
 np.sqrt([1, 4, 9])

Ответ 9

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

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)