webentwicklung-frage-antwort-db.com.de

Wie berechne ich die Quadratwurzel in Python?

Warum gibt Python die "falsche" Antwort? 

x = 16

sqrt = x**(.5)
returns 4

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

Ja, ich kenne import math und verwende sqrt. Aber ich suche nach einer Antwort auf das Obige.

102
Merlin

sqrt=x**(1/2) macht eine ganzzahlige Division. 1/2 == 0.

Sie berechnen also x(1/2) in der ersten Instanz x(0) in der zweiten.

Es ist also nicht falsch, es ist die richtige Antwort auf eine andere Frage.

200
smessing

Sie müssen schreiben: sqrt = x**(1/2.0), andernfalls wird eine Ganzzahldivision ausgeführt und der Ausdruck 1/2 gibt 0 zurück.

Dieses Verhalten ist "normal" in Python 2.x, wohingegen in Python 3.x 1/2 zu 0.5 ausgewertet wird. Wenn Sie möchten, dass sich Ihr Python 2.x-Code wie 3.x w.r.t verhält. Division schreiben from __future__ import division - dann wird 1/2 zu 0.5 ausgewertet und aus Gründen der Rückwärtskompatibilität 1//2 eill zu 0.

Die bevorzugte Methode zur Berechnung einer Quadratwurzel ist folgende:

import math
math.sqrt(x)
85
Óscar López
import math
math.sqrt( x )

Es ist eine triviale Ergänzung der Antwortkette. Da das Thema jedoch ein sehr häufiger Google-Treffer ist, ist dies meiner Meinung nach verdient.

11
whisperer

/ führt eine ganzzahlige Division in Python 2 durch:

>>> 1/2
0

Wenn eine der Zahlen ein Float ist, funktioniert es wie erwartet:

>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
10
Niklas B.

Was Sie sehen, ist eine Ganzzahlteilung. Um standardmäßig eine Gleitkommadivision zu erhalten, 

from __future__ import division

Oder Sie können 1 oder 2 von 1/2 in einen Gleitkommawert konvertieren.

sqrt = x**(1.0/2)
6
gfortune

Dies kann etwas spät sein, aber die einfachste und präziseste Methode zur Quadratwurzelberechnung ist die Newton-Methode.

Sie haben eine Zahl, deren Quadratwurzel (num) Sie berechnen möchten, und Sie haben eine Schätzung der Quadratwurzel (estimate). Die Schätzung kann eine beliebige Zahl größer als 0 sein, aber eine sinnvolle Zahl verkürzt die rekursive Anruftiefe erheblich.

new_estimate = (estimate + num / estimate) / 2

Diese Zeile berechnet mit diesen beiden Parametern eine genauere Schätzung. Sie können den Wert new_estimate an die Funktion übergeben und ein anderes new_estimate berechnen, das genauer ist als der vorherige, oder Sie können eine solche rekursive Funktionsdefinition vornehmen.

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)

Zum Beispiel müssen wir die 30-Quadratwurzel finden. Wir wissen, dass das Ergebnis zwischen 5 und 6 liegt. 

newtons_method(30,5)

nummer ist 30 und Schätzung ist 5. Das Ergebnis von jedem rekursiven Aufruf ist:

5.5
5.477272727272727
5.4772255752546215
5.477225575051661

Das letzte Ergebnis ist die genaueste Berechnung der Quadratwurzel von number. Es ist derselbe Wert wie die eingebaute Funktion math.sqrt ().

1
gunes

Vielleicht eine einfache Möglichkeit, sich zu erinnern: Fügen Sie einen Punkt nach dem Zähler (oder Nenner) ein. * (1./3) # 3

0
Vikrant

Ich hoffe, dass der unten genannte Code Ihre Frage beantworten wird.

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) 
0