español - ¿Cómo calculo la raíz cuadrada en Python?
sqrt python español (9)
¿Por qué Python da la respuesta "incorrecta"?
x = 16
sqrt = x**(.5)
returns 4
sqrt = x**(1/2)
returns 1
Sí, sé import math
y uso sqrt
. Pero estoy buscando una respuesta a lo anterior.
Debe escribir: sqrt = x**(1/2.0)
; de lo contrario, se realiza una división entera y la expresión 1/2
devuelve 0
.
Este comportamiento es "normal" en Python 2.x, mientras que en Python 3.x 1/2
evalúa a 0.5
. Si desea que su código de Python 2.x se comporte como la división de 3.x wrt, escriba from __future__ import division
- entonces 1/2
evaluará a 0.5
y para la compatibilidad con versiones anteriores, 1//2
lo evaluará a 0
.
Y para el registro, la forma preferida de calcular una raíz cuadrada es esta:
import math
math.sqrt(x)
Espero que el código mencionado a continuación responda tu pregunta.
from __future__ import print_function
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)
Lo que estás viendo es división entera. Para obtener la división de coma flotante por defecto,
from __future__ import division
O bien, puede convertir 1 o 2 de 1/2 en un valor de coma flotante.
sqrt = x**(1.0/2)
Puede ser un poco tarde para responder, pero la forma más simple y precisa de calcular la raíz cuadrada es el método de Newton.
Usted tiene un número que desea calcular su raíz cuadrada (num)
y tiene una estimación de su raíz cuadrada (estimate)
. La estimación puede ser cualquier número mayor que 0, pero un número que tenga sentido acorta significativamente la profundidad de llamada recursiva.
new_estimate = (estimate + num / estimate) / 2
Esta línea calcula una estimación más precisa con esos 2 parámetros. Puede pasar un nuevo valor estimado a la función y calcular otro nuevo_estimación que sea más preciso que el anterior o puede hacer una definición de función recursiva como esta.
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)
Por ejemplo, necesitamos encontrar la raíz cuadrada de 30. Sabemos que el resultado está entre 5 y 6.
newtons_method(30,5)
el número es 30 y el estimado es 5. El resultado de cada llamada recursiva es:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
El último resultado es el cálculo más preciso de la raíz cuadrada del número. Tiene el mismo valor que la función incorporada math.sqrt ().
Puede usar NumPy para calcular las raíces cuadradas de las matrices:
import numpy as np
np.sqrt([1, 4, 9])
Quizás una forma simple de recordar: agregue un punto después del numerador (o denominador) 16 ** (1./2) # 4 289 ** (1./2) # 17 27 ** (1./3) # 3
/
realiza una división de enteros en Python 2:
>>> 1/2
0
Si uno de los números es flotante, funciona como se espera:
>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
sqrt=x**(1/2)
está haciendo una división de enteros. 1/2 == 0
.
Entonces estás calculando x (1/2) en el primer caso, x (0) en el segundo.
Entonces no está mal, es la respuesta correcta a una pregunta diferente.
import math
math.sqrt( x )
Es una adición trivial a la cadena de respuestas. Sin embargo, dado que el Sujeto es un hit de Google muy común, esto merece ser agregado, creo.