Wie kann ich die Quadratwurzel in Python berechnen?

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 bin auf der Suche nach einer Antwort auf die obige Frage.

Lösung

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

Du berechnest also x(1/2) im ersten Fall, x(0) im zweiten Fall.

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

Kommentare (3)

Sie müssen schreiben: sqrt = x**(1/2.0), sonst wird eine ganzzahlige Division durchgeführt und der Ausdruck 1/2 ergibt 0.

Dieses Verhalten ist "normal" in Python 2.x, während in Python 3.x 1/2 zu 0.5 ausgewertet wird. Wenn Sie wollen, dass sich Ihr Python 2.x Code wie 3.x in Bezug auf Division verhält, schreiben Sie from __future__ import division - dann wird 1/2 zu 0.5 ausgewertet und aus Gründen der Abwärtskompatibilität wird 1//2 zu 0 ausgewertet.

Und für das Protokoll, der bevorzugte Weg, um eine Quadratwurzel zu berechnen ist dies:

import math
math.sqrt(x)
Kommentare (0)

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

>>> 1/2
0

Wenn eine der Zahlen eine Fließkommazahl ist, funktioniert es wie erwartet:

>>> 1.0/2
0.5
>>> 16**(1.0/2)
4.0
Kommentare (0)