2014-05-20 19 views
12

Cosa restituire print (-2 ** 2)? Secondo i miei calcoli dovrebbe essere 4, ma l'interprete restituisce -4.
Questa cosa di Python o la mia matematica è così terribile?Errore di calcolo con l'operatore Pow

+0

Si dovrebbe fare (-2) ** 2 invece – sshashank124

+2

Il '-' ha priorità inferiore di' ** '. Questo è interpretato come - (2 ** 2), non (-2) ** 2 ... – l4mpi

+1

La ragione principale che confonde la maggior parte delle persone è che si aspettano che '-2' sia un significato letterale" negativo 2 ", non un'espressione che significa "applica l'operatore di negazione al letterale 2 in fase di esecuzione". Una volta compreso che si tratta di un operatore, il fatto che si tratti di un problema di precedenza è ovvio; finché non lo fai, è sconcertante. (Ecco perché tutte le persone che vi si imbattono sono confuse da -2 ** 2', non '-x ** 2'.) – abarnert

risposta

22

Secondo docs, ** ha precedenza superiore a -, pertanto il codice è equivalente a -(2 ** 2). Per ottenere il risultato desiderato si potrebbe mettere -2 in parentesi

>>> (-2) ** 2 
4 

o utilizzare built-in pow function

>>> pow(-2, 2) 
4 

o math.pow funzione (ritorno float valore)

>>> import math 
>>> math.pow(-2, 2) 
4.0 
5

L'operazione ** è fatto prima del meno. Per ottenere i risultati attesi, si dovrebbe fare

print ((-2) ** 2) 

From the documentation:

Così, in una sequenza di unparenthesized di potenza e operatori unari, gli operatori vengono valutati da destra a sinistra (questo non forza la ordine di valutazione per gli operandi): -1**2 risultati in -1.

Un completo detail of operators precedence è disponibile anche nella documentazione. Si può vedere l'ultima riga è (expr) che costringono l'espr da valutare prima di essere utilizzato, quindi il risultato di (-2) ** 2 = 4

1

è anche possibile utilizzare libreria matematica ...

math.pow(-2,2) --> 4 
-math.pow(2,2) --> -4 
math.pow(4,0.5) --> 2 
-1

Python ha un problema e lo fa non vedere il -2 come un numero. Questo sembra essere di progettazione come è menzionato nei documenti.

-2 viene interpretato come - (2) {meno unario al numero positivo 2}

Che di solito non dà un problema, ma in -a ** 2 ** l'ha la priorità maggiore, come - e così con - interpretato come unario operatoe invece di una parte del numero -2 ** 2 valuta a -2 anziché 2.