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