Come si calcola la radice quadrata in Python?

Perché Python dà la risposta "sbagliata"?

x = 16

sqrt = x**(.5)
returns 4

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

Sì, so importare la matematica e usare sqrt. Ma sto cercando una risposta a quanto sopra.

Soluzione

sqrt=x**(1/2) sta facendo una divisione intera. 1/2 == 0.

Quindi stai calcolando x(1/2) nel primo caso, x(0) nel secondo.

Quindi non è sbagliato, è la risposta giusta ad una domanda diversa.

Commentari (3)

Devi scrivere: sqrt = x**(1/2.0), altrimenti 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 si valuta a 0.5. Se volete che il vostro codice Python 2.x si comporti come il 3.x per quanto riguarda la divisione scrivete from __future__ import division - allora 1/2 valuterà a 0.5 e, per compatibilità all'indietro, 1//2 valuterà a 0.

E per la cronaca, il modo preferito per calcolare una radice quadrata è questo:

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

/ esegue una divisione intera in Python 2:

>>> 1/2
0

Se uno dei numeri è un float, funziona come previsto:

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