Dlaczego python daje "błędną" odpowiedź?Jak skalować pierwiastek kwadratowy w pythonie?
x= 16
sqrt= x**(.5)
returns 4
sqrt= x**(1/2)
returns 1
Tak, wiem import math
i używać sqrt
. Ale szukam odpowiedzi na powyższe.
Dlaczego python daje "błędną" odpowiedź?Jak skalować pierwiastek kwadratowy w pythonie?
x= 16
sqrt= x**(.5)
returns 4
sqrt= x**(1/2)
returns 1
Tak, wiem import math
i używać sqrt
. Ale szukam odpowiedzi na powyższe.
sqrt=x**(1/2)
robi podział całkowity. 1/2 == 0
.
Więc obliczasz x (1/2) w pierwszym przypadku, x (0) w drugim.
To nie jest źle, to odpowiednia odpowiedź na inne pytanie.
"Więc nie jest źle, to właściwa odpowiedź na inne pytanie" - uwielbiam to! - myślę, że mogę rzucić sobie wyzwanie, by częściej używać tego wyrażenia! –
w Pythonie 3.6 masz właściwą odpowiedź na pytanie, które zadałeś. – vwvan
/
dokonuje podziału całkowitej w Pythonie 2:
>>> 1/2
0
Jeśli jedna z liczb jest pływak, to działa zgodnie z oczekiwaniami:
>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
Trzeba napisać: sqrt = x**(1/2.0)
, inaczej wykonywany jest podział całkowity, a wyrażenie 1/2
zwraca .
To zachowanie jest "normalne" w Pythonie 2.x, natomiast w języku Python 3.x 1/2
oznacza 0.5
. Jeśli chcesz, aby twój kod Python 2.x zachowywał się jak 3.x w.r.t. Podział napisz from __future__ import division
- wtedy 1/2
oceni na 0.5
i dla kompatybilności wstecznej, 1//2
eill oceni na 0
.
A dla przypomnienia, najlepszym sposobem, aby obliczyć pierwiastek kwadratowy to:
import math
math.sqrt(x)
+1 za udzielenie odpowiedzi na pytanie z tytułu. –
minus 1 za nieczytanie pytania ... – Merlin
Co widzisz jest podział całkowitą. Aby domyślnie uzyskać podział zmiennoprzecinkowy, można przekształcić 1 lub 2 z 1/2 w wartość zmiennoprzecinkową. Można również przekonwertować 1 lub 2 z 1/2.
sqrt = x**(1.0/2)
Można użyć numpy obliczyć pierwiastki kwadratowe z tablicami
import numpy as np
np.sqrt([1,4,9])
Mam nadzieję, że wymienione poniżej kod będzie odpowiedzieć na to pytanie.
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)
Pozdrawiam, Ali
to może być trochę za późno, aby odpowiedzieć, ale najbardziej prosty i dokładny sposób obliczyć pierwiastek kwadratowy jest metoda Newtona.
Masz numer, na którym chcesz obliczyć pierwiastek kwadratowy (num)
i masz przypuszczenie o pierwiastku kwadratowym (estimate)
. Wartość szacunkowa może być dowolną liczbą większą od 0, ale liczba, która ma sens, znacznie skraca rekurencyjną głębokość wywołania.
new_estimate = (estimate + num/estimate)/2
Ta linia oblicza dokładniejszy szacunek dla tych 2 parametrów. Możesz przekazać wartość new_estimate do funkcji i obliczyć inny new_estimate, który jest bardziej dokładny niż poprzedni lub możesz dokonać definicji funkcji rekurencyjnej w ten sposób.
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)
Na przykład musimy znaleźć pierwiastek kwadratowy 30's. Wiemy, że wynik jest pomiędzy 5 a 6.
newtons_method(30,5)
numer 30 i oszacowanie to 5. Wynik z każdej rekurencyjnych wywołań są:
5.5
5.477272727272727
5.4772255752546215
5.477225575051661
Ostatni wynik jest najbardziej dokładne obliczenie pierwiastek kwadratowy liczby. Jest to ta sama wartość co wbudowana funkcja math.sqrt().
Wypróbuj w Pythonie 3, naprawiono;) –
Oblicz kwadratowy rdzeń w pythonie za pomocą 'import matmy', a następnie' x = math.sqrt (25) ', który przypisze wartość' 5,0' do x. –
Mylący tytuł tam ... – Julian