¿Por qué Python da la respuesta "incorrecta"?Cómo calcular la raíz cuadrada en python?
x= 16
sqrt= x**(.5)
returns 4
sqrt= x**(1/2)
returns 1
Sí, sé import math
y utilizar sqrt
. Pero estoy buscando una respuesta a lo anterior.
¿Por qué Python da la respuesta "incorrecta"?Cómo calcular la raíz cuadrada en python?
x= 16
sqrt= x**(.5)
returns 4
sqrt= x**(1/2)
returns 1
Sí, sé import math
y utilizar sqrt
. Pero estoy buscando una respuesta a lo anterior.
sqrt=x**(1/2)
está haciendo división de enteros. 1/2 == 0
.
Así que estás x (1/2) en primera instancia de computación, X (0) en el segundo.
Así que no está mal, es la respuesta correcta a una pregunta diferente.
"Así que no está mal, es la respuesta correcta a una pregunta diferente" - me encanta! - ¡Pienso que podría desafiarme a mí mismo a usar esta frase más a menudo! –
en Python 3.6 obtienes la respuesta correcta a la pregunta que primero hiciste. – vwvan
/
realiza una división entera en Python 2:
>>> 1/2
0
Si uno de los números es un flotador, funciona como se esperaba:
>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
Tienes que 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
se evalúa como 0.5
. Si desea que su código de Python 2.x se comporte como 3.x w.r.t. división escriba from __future__ import division
- entonces 1/2
evaluará a 0.5
y para compatibilidad con versiones anteriores, 1//2
e evaluará a 0
.
Y para que conste, la forma preferida para calcular una raíz cuadrada es la siguiente:
import math
math.sqrt(x)
+1 también para responder la pregunta del título. –
negativo 1 por no leer la pregunta ... – Merlin
Lo que están viendo es una división entera. Para llegar división de coma flotante por defecto,
from __future__ import division
O bien, puede convertir a 1 o 2 de media en un valor de punto flotante.
sqrt = x**(1.0/2)
Puede utilizar numpy para calcular raíces cuadradas de matrices
import numpy as np
np.sqrt([1,4,9])
espero que el código de abajo se menciona a responder a su 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)
Saludos, Ali
Esto podría ser un poco tarde para responder, pero más simple y precisa forma de calcular la raíz cuadrada es el método de Newton.
Usted tiene un número que quiere calcular su raíz cuadrada (num)
y tiene una conjetura 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)
número es 30 y estimación es 5. El resultado de cada llamada recursiva son:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
El último resultado es el cálculo más exacto de la raíz cuadrada del número. Tiene el mismo valor que la función incorporada math.sqrt().
Pruébalo en Python 3, se soluciona;) –
Calcula una raíz cuadrada en python con 'import math' y luego' x = math.sqrt (25) 'que asignará el valor' 5.0' a x. –
título engañoso allí ... – Julian