Qual è la giustificazione per l'operatore di potenza di Python che associa a destra?

9

Sto scrivendo il codice per analizzare le stringhe di espressioni matematiche e ho notato che l'ordine in cui gli operatori di potenza concatenati vengono valutati in Python differisce dall'ordine in Excel.

Dal link :

"Quindi, in una sequenza non ripartita di operatori di potenza e unari, gli operatori vengono valutati da destra a sinistra (ciò non vincola l'ordine di valutazione per gli operandi): -1 * 2 risultati in -1 ". *

Questo significa che, in Python: 2**2**3 è valutato come 2**(2**3) = 2**8 = 256

In Excel, funziona in modo inverso: 2^2^3 è valutato come (2^2)^3 = 4^3 = 64

Ora devo scegliere un'implementazione per il mio parser. L'ordine Excel è più facile da implementare, in quanto rispecchia l'ordine di valutazione della moltiplicazione.

Ho chiesto ad alcune persone in ufficio quale fosse il loro istinto per la valutazione di 2^2^3 e ho ottenuto risposte miste.

Qualcuno sa di buone ragioni o considerazioni a favore dell'implementazione di Python? E se non hai una risposta, per favore commenta con il risultato che tu ottieni dall'intuito - 64 o 256 ?

    
posta Pieter Müller 12.10.2012 - 11:52
fonte

2 risposte

10

Il motivo per cui gli esponenti matematici impilati sono applicati dall'alto verso il basso è che nell'altro modo si ottiene la moltiplicazione degli esponenti:

(((2^3)^4)^5) = 2^(3 * 4 * 5)
    
risposta data 12.10.2012 - 14:35
fonte
14

Wikipedia (e il mio insegnante di matematica) mi dice: Gli esponenti impilati sono applicati dall'alto verso il basso.

Ciò si riflette nel modo in cui Python lo valuta. Microsoft ha torto (ancora una volta)

E Ruby lo valuta come Python, quindi è corretto senza dubbio, dal momento che Matz non può essere sbagliato.

    
risposta data 12.10.2012 - 11:59
fonte

Leggi altre domande sui tag