Perché python fornisce la risposta "errata"?Come si calcola la radice quadrata in python?
x= 16
sqrt= x**(.5)
returns 4
sqrt= x**(1/2)
returns 1
Sì, lo so import math
e utilizzare sqrt
. Ma sto cercando una risposta a quanto sopra.
Perché python fornisce la risposta "errata"?Come si calcola la radice quadrata in python?
x= 16
sqrt= x**(.5)
returns 4
sqrt= x**(1/2)
returns 1
Sì, lo so import math
e utilizzare sqrt
. Ma sto cercando una risposta a quanto sopra.
sqrt=x**(1/2)
sta facendo divisione integer. 1/2 == 0
.
Così si sta calcolando x (1/2) in prima istanza, x (0) nel secondo.
Quindi non è sbagliato, è la risposta giusta a una domanda diversa.
"Quindi non è sbagliato, è la risposta giusta a una domanda diversa" - lo adoro! - Penso che potrei sfidarmi a usare questa frase più spesso! –
in Python 3.6 ottieni la risposta giusta alla domanda che ti sei posta prima. – vwvan
/
esegui una divisione intera in Python 2:
>>> 1/2
0
Se uno dei numeri è un galleggiante, funziona come previsto:
>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
Si deve scrivere: sqrt = x**(1/2.0)
, tuttavia viene eseguita una divisione intera e l'espressione 1/2
restituisce 0
.
Questo comportamento è "normale" in Python 2.x, mentre in Python 3.x 1/2
restituisce 0.5
. Se vuoi che il tuo codice Python 2.x si comporti come 3.x w.r.t. divisione scrivere from __future__ import division
- quindi 1/2
valuterà a 0.5
e per retrocompatibilità, 1//2
eill valutare a 0
.
E per la cronaca, il modo migliore per calcolare una radice quadrata è questo:
import math
math.sqrt(x)
+1 per rispondere anche alla domanda dal titolo. –
negativo 1 per non aver letto la domanda ... – Merlin
Quello che stai vedendo è divisione intera. Per ottenere la divisione in virgola mobile per impostazione predefinita,
from __future__ import division
Oppure, è possibile convertire 1 o 2 di 1/2 in un valore in virgola mobile.
sqrt = x**(1.0/2)
È possibile utilizzare NumPy per calcolare le radici quadrate di array
import numpy as np
np.sqrt([1,4,9])
Spero che il codice qui sotto menzionato sarà rispondere alla tua domanda.
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)
saluti, Ali
Questo potrebbe essere un po 'tardi per rispondere, ma più semplice e più preciso modo di calcolare la radice quadrata è il metodo di Newton.
Si dispone di un numero che si desidera calcolare la radice quadrata (num)
e si ha un'ipotesi della sua radice quadrata (estimate)
. La stima può essere qualsiasi numero maggiore di 0, ma un numero che ha un senso riduce significativamente la profondità della chiamata ricorsiva.
new_estimate = (estimate + num/estimate)/2
Questa riga calcola una stima più accurata con questi 2 parametri. È possibile passare un nuovo valore alla funzione e calcolare un altro nuovo valore che è più accurato del precedente o è possibile creare una definizione di funzione ricorsiva come questa.
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)
Ad esempio, dobbiamo trovare la radice quadrata di 30. Sappiamo che il risultato è compreso tra 5 e 6.
newtons_method(30,5)
numero è 30 e stima è 5. Il risultato di ogni chiamate ricorsive sono:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
L'ultimo risultato è il calcolo più accurato di la radice quadrata del numero. È lo stesso valore della funzione built-in math.sqrt().
Provalo in Python 3, è corretto;) –
Calcola una radice quadrata in python con 'import math' e quindi' x = math.sqrt (25) 'che assegna il valore' 5.0' a x. –
Titolo fuorviante lì ... – Julian