Perché = -x ^ 2 + x per x = 3 in Excel risulta 12 invece di -6?


96

Supponiamo che la mia cella A1 in un foglio di calcolo Excel contenga il numero 3 . Se inserisco la formula

= - A1^2 + A1

in A2, quindi A2 mostra il numero 12, quando dovrebbe mostrare -6 (o -9 + 3)

Perché? Come posso prevenire questo comportamento fuorviante?


19
Un numero negativo al quadrato è un numero positivo. Il che renderebbe la formula 9 + 3. - (A1) ^ 2 ti darebbe -6.
Ramhound,

68
I poteri @Ramhound hanno una priorità maggiore rispetto ai segni meno in qualsiasi ambiente sano.
Nessuno il

17
Dovrebbe essere - (A1 ^ 2) per ottenere -6 ... hai bisogno di parentesi attorno all'operazione, non solo al numero. Excel va bene per la matematica, ma è necessario rispettare l'ordine delle operazioni e, in caso di dubbio, utilizzare la parentesi!
SnakeDoc,

13
Tutto riguarda l'ordine delle operazioni e nulla a che fare con Excel.
YetAnotherRandomUser il

11
A tutti quei commentatori che criticano le abilità matematiche dei PO: nella matematica pura standard, questo dovrebbe inequivocabilmente valutare a -6. In particolare, per negativo si intende sempre 0-x (come indicato nella risposta). L'introduzione di un unario - è un argomento nuovo nell'informatica applicata e quasi sempre solo un dettaglio di implementazione. Criticare l'OP per non aver capito questo è come rispondere a una domanda sulla confusione riguardo agli errori in virgola mobile con "il programma va bene. Devi solo controllare la tua matematica. Vedi, se scrivi questi numeri in binario, allora ..."
DreamConspiracy il

Risposte:


136

Risposta breve

Per risolvere questo problema, basta aggiungere uno 0 prima del segno di uguale

= 0 - A1^2 + A1

o aggiungere un paio di parentesi per forzare l'ordine standard delle operazioni

= - (A1^2) + A1

o sostituisci il segno meno con la sua comune interpretazione della moltiplicazione con -1

= -1 * A1^2 + A1

In questo caso particolare, dove hai il termine extra + A1, la soluzione migliore è quella proposta da @ lioness99a:

= A1 - A1^2

Spiegazione dettagliata

In base alle convenzioni di Excel,

= - 3^2

è uguale a (-3) ^ 2 = 9, mentre

= 0-3^2

è uguale a 0-9 = -9.

Perché l'aggiunta di solo uno 0 modifica il risultato?

Non preceduto da un minuendo, il segno meno in -3 ^ 2 è considerato un operatore di negazione , che è un operatore unario (con un solo argomento) che cambia il segno del numero (o espressione) che segue. Tuttavia, il segno meno in 0-3 ^ 2 è un operatore di sottrazione , che è un operatore binario che sottrae ciò che segue -da ciò che precede -. Secondo le convenzioni di Excel, l' operatore di esponenziazione ^ viene calcolato dopo l'operatore di negazione e prima dell'operatore di sottrazione . Vedere "Operatori di calcolo e precedenza in Excel" , sezione "L'ordine in cui Excel esegue le operazioni nelle formule".

La convenzione matematica standard prevede che l' esponenziazione sia calcolata prima sia della negazione che della sottrazione o, più semplicemente, ^sia calcolata prima -. Vergognosamente, Excel ha scelto convenzioni diverse da quelle delle regole dell'algebra, dei libri di testo scolastici, della scrittura accademica, dei calcolatori scientifici, Lotus 1-2-3, Mathematica, Maple, linguaggi orientati ai calcoli come Fortran o Matlab, MS Works e ... VBA (il linguaggio usato per scrivere le macro di Excel). Sfortunatamente, Calc di LibreOffice e Fogli Google seguono la stessa convenzione per la compatibilità con Excel. Tuttavia, inserendo un'espressione nella casella di ricerca o nella barra di Google si ottengono risultati eccellenti. Se si preme invio, l'ordine dei calcoli verrà dato utilizzando le parentesi. Una discussione in cui un matematico uccide le argomentazioni di un "informatico" che difende la precedenza della negazione sull'esponenciation: http://mathforum.org/library/drmath/view/69058.html

Soluzioni alternative generali

Se vuoi calcolare

- Anything ^ 2,

aggiungi uno 0 prima del segno di uguale

0 - Anything ^ 2

o aggiungere un paio di parentesi per forzare l'ordine standard delle operazioni

- ( Anything ^ 2 )

o sostituisci il segno meno con la sua comune interpretazione della moltiplicazione con -1

-1 * Anything ^ 2

Delle alternative sopra, preferisco aggiungere uno 0 prima del segno meno perché è il più pratico. Se l'espressione è già racchiusa tra parentesi, evito di aggiungere parentesi. L'uso intenso delle parentesi rende le espressioni più difficili da leggere, eseguire il debug e scrivere.

Se viene aggiunto un termine aggiuntivo (o sottratto senza il problema della potenza pari),

- Anything ^ 2 + ExtraTerm,

la soluzione migliore è posizionare prima ExtraTerm,

ExtraTerm - Anything ^ 2.

Un commento a un'altra risposta afferma che l'unico caso in cui devi essere consapevole della regola di precedenza non standard è quando un segno meno segue un segno uguale (= -). Tuttavia, ci sono altri esempi, come = exp (-x ^ 2) o = (- 2 ^ 2 = 2 ^ 2), dove non c'è un minuend prima del segno meno.

Grazie a @BruceWayne per aver proposto una risposta breve, che ho scritto all'inizio.

Potresti essere interessato a Secondo Excel, 4 ^ 3 ^ 2 = (4 ^ 3) ^ 2. È davvero questa convenzione matematica standard?


1
I commenti non sono per una discussione estesa; questa conversazione è stata spostata in chat .
DavidPostill

Si prega di vedere sopra. Tutti i commenti verranno eliminati se non fanno parte della discussione in chat.
DavidPostill

20

Un po 'più succinta della risposta di Rodolfo, puoi usare:

=-(A1^2)+(A1)

(Modifica: totalmente non ho visto che era una domanda / risposta di sé.)


1
Esattamente! A seconda della lingua o delle regole di precedenza dell'applicazione, essere ciò che pensi che dovrebbero essere è una ricetta per i problemi.
jamesqf,

2
@jamesqf, ma ci deve essere un certo senso e limiti a questo. Nessuno scrive 2+ (3 * 4). Se una lingua ha operazioni aritmetiche e regole di precedenza, deve assolutamente supportare tutte le convenzioni matematiche standard. Non ci sono scuse per tale errore in Excel.
Zeus,

4
@Zeus: nessuno? Probabilmente lo farei, specialmente se fosse in un'espressione più complicata o in una condizione if. Ovviamente scriverei 3 * 4 + 2 anche se stavo lasciando fuori le parentesi.
jamesqf,

3
Per molto tempo ho avuto il sospetto che una simile abitudine di abuso da parte dei genitori derivi dall'eccessiva (o così diffusa) sovraesposizione a C (e ai suoi discendenti sintattici). Ma C non è affatto un buon esempio di seguito corretto delle regole matematiche, inclusa la precedenza (inoltre ha problemi con le macro). Al contrario, le persone che hanno una prima esposizione a più sistemi / lingue accademici si aspettano fortemente una progettazione corretta e non tendono a fare concessioni "per ogni evenienza". Quindi sorprese autentiche come nel PO.
Zeus,

14

Un leader -è considerato parte del primo mandato.

=-3^2 viene elaborato come (-3)^2 = 9

Con uno zero all'inizio viene invece trattato come normale sottrazione.

=0-3^2 viene elaborato come 0 - 3^2 = -9

E se hai due operatori, accadrà la stessa cosa.

=0--3^2viene elaborato come 0 - (-3)^2 = -9e =0+-3^2viene elaborato come0 + (-3)^2 = 9


4

Perché Excel sta interpretando la tua equazione come:

(-x) ^ 2 + x

Quando volevi:

- (x ^ 2) + x

Per prevenire questo tipo di comportamento indesiderato, trovo che la migliore pratica sia quella di fare un uso pesante della parentesi per definire il proprio sistema di priorità, poiché la negazione non è la stessa sottrazione e quindi non coperta da PEMDAS. Un esempio potrebbe essere:

(- (x ^ 2)) + x

Potrebbe essere eccessivo, ma è così che garantisco che Excel si comporti come voglio.


4
"Poiché PEMDAS non è garantito in Excel" - No, è assolutamente garantito in Excel. Qualsiasi altra cosa sarebbe una follia. Il fatto che la negazione unaria (che è distinta dalla sottrazione!) Abbia la precedenza sull'esponenziazione non è coperto da PEMDAS.
Konrad Rudolph,

1
@routhken L'uso intenso delle parentesi rende la scrittura, la modifica e il debug ingombranti. Per facilitare tali compiti, controllo la precedenza degli operatori nel software con cui sto lavorando e utilizzo solo le parentesi necessarie. Inoltre, aggiungo spazi per migliorare la leggibilità.
Rodolfo Oviedo,

@KonradRudolph Ho modificato la mia risposta, grazie per il chiarimento.
routhken,

1
Preferirei usare x - x^2. Ciò garantisce che - sia interpretato come l'operatore di sottrazione binaria.
Xalorous,

@KonradRudolph Penso che il modo di vedere questo sia che i fogli di calcolo e i linguaggi di programmazione informatica utilizzino PUEMDAS dove le operazioni unarie vengono valutate dopo operazioni tra parentesi ma prima di operazioni matematiche binarie.
Xalorous,

3

L'espressione = - A1^2 + A1è specifica di Excel, quindi deve seguire le regole di Excels. Contrariamente ad altre risposte qui, non esiste un ordine di precedenza corretto . Esistono semplicemente convenzioni diverse adottate da applicazioni diverse. Per tuo riferimento, l'ordine di precedenza utilizzato da Excel è:

:       Range
<space> intersection
,       union
-       Negation
%       Percentage
^       Exponential
* and / Multiplication and Division
+ and - Addition and Subtraction
&       Concatenation
= < > <= >= <>  Comparison

Che puoi sovrascrivere usando le parentesi.


9
Ovviamente, Excel avrebbe potuto scegliere + per indicare la moltiplicazione e * per indicare la sottrazione ecc. E chiunque avesse bisogno di usare Excel avrebbe dovuto saperlo. Ma sarebbe stato sbagliato. Il caso in questione non è lo stesso livello di errore (o sciocco), ma puoi sicuramente sostenere che Excel definito ha sbagliato le priorità.
Mormegil,

4
@Mormegil Ben detto! Quando provi = 1 + 2 * 2 e vedi che la risposta è 5 e non 6. sei portato ad assumere che Excel segua le regole dell'algebra. Qual è il punto di ingannare le persone?
Rodolfo Oviedo,

Esiste un ordine di precedenza corretto, ma i computer hanno operazioni aggiuntive. Il problema qui è che i computer usano '-' per negazione E per sottrazione dove la persona che fa algebra scritta vede discriminazioni tra negazione e sottrazione. Perché il computer possa dire la differenza ha bisogno di un insieme di regole. In '-x', '-' è un operatore unario (agisce su un operando). In '1-x', '-' è un operatore binario. Quindi, Excel (e altri software per computer) converte -x ^ 2 in (-x) ^ 2. Il resto dell'ordine di precedenza si applica ancora come l'abbiamo imparato tutti alle elementari.
Xalorous,

3
@Xalorous: Sì, -può essere unario o binario. Ma ciò non implica un ordine di operazioni. Altre lingue hanno ragione: in Python, Ruby, Octave, Awk e Haskell (le prime cinque lingue con un operatore esponenziale che mi sono venute in mente), -3 ** 2valuta sempre -9. Perché? Perché questa è la risposta corretta.
wchargin,

1
@Xalorous la persona che fa l'algebra scritta usa le convenzioni del proprio pubblico combinate con parentesi per ridurre l'ambiguità. Non esiste un ordine di precedenza corretto e le regole dell'algebra sono in realtà solo convenzioni.
Paul Smith,

3

Puoi averlo in entrambi i modi:

=-A1^2+A1

restituirà un 12 , ma:

=0-A1^2+A1

restituirà un -6

Se ritieni che la restituzione di 12 violi il buon senso; tieni presente che Google Sheets fa la stessa cosa.


1
Sembra che il segno meno unario abbia una precedenza "troppo alta".
Andreas Rejbrand,

@AndreasRejbrand Sembra essere unitario solo se segue direttamente il segno = ............... =A1-A1^2restituisce anche -6
Gary's Student

2
Ma nell'esempio A1 - A1 ^ 2, il segno meno è ovviamente binario. (Un operatore unario è uno che accetta un singolo operando (come il segno meno unario in -5, o il fattoriale, il segno non ecc.); Un operatore binario è uno che accetta due operandi (come binario più, meno, moltiplicazione, unione, ecc.).) Nota che il segno meno può essere unario anche se non segue immediatamente il segno uguale: 5 + (-4 + 3).
Andreas Rejbrand,

@AndreasRejbrand Sono completamente d'accordo con te!
Gary's Student,

Solo per difendere la reputazione di Google, prova la casella di ricerca o la barra per inserire espressioni matematiche. Otterrai risultati molto coerenti con una buona matematica, ancora meglio che da Matlab o Octave, ad esempio, prova 2 ^ 1 ^ 2.
Rodolfo Oviedo,

3

In alternativa, potresti semplicemente fare

= A1 - A1^2

perché -y + x = x-y


Questo non spiega perché dovrebbe funzionare e duplica numerose risposte precedenti.
fixer1234,

@ fixer1234 Letteralmente nessun altro ha detto questo, e io ho dato la ragione matematica per questo?
lioness99a,

1. Molte risposte descrivono trasformandolo in una sottrazione esplicita. 2. Questa non è la ragione matematica. La domanda è perché Excel non si comporta in questo modo. La risposta è che il negativo non è trattato come sottrazione da Excel.
fixer1234,

Hanno chiesto come prevenire il comportamento. Ho mostrato loro il modo più semplice. E non una sola risposta afferma ciò che ho ...
lioness99a,

La migliore soluzione. Ho aggiunto la mia risposta con il dovuto credito. Se ti è piaciuta la DOMANDA, per favore votala.
Rodolfo Oviedo,

2

Altre persone hanno risposto al "come posso evitarlo?" parte della domanda. Ti dirò perché succede.

Succede perché i personal computer nel 1979 avevano capacità di elaborazione e memoria molto limitate.

VisiCalc è stato introdotto per Apple II nel 1979, due anni prima della versione iniziale del PC IBM (a cui la maggior parte dei computer desktop e laptop moderni traccia i loro antenati diretti). L'Apple II poteva avere fino a 64 KiB (65.536 byte) di RAM e VisiCalc richiedeva almeno 32 KiB per funzionare. A parte questo, VisiCalc è piuttosto ampiamente considerato come la "killer application" per l'Apple II, e forse per i microcomputer personali in generale.

Meno casi speciali e meno è necessario un prospetto delle formule, più semplice (e di conseguenza più piccolo) può essere creato il codice per analizzare una formula del foglio di calcolo. Sarebbe quindi logico richiedere all'utente di essere un po 'più esplicito in casi angolari, in cambio della capacità di gestire fogli di calcolo più grandi. Ricorda, anche con una Apple II di fascia alta, hai avuto solo poche decine di kilobyte con cui giocare dopo che la memoria richiesta dall'applicazione era stata presa in considerazione. Con un sistema a memoria insufficiente (48 KiB RAM non era una configurazione insolita per una macchina "seria"), il limite era ancora più basso.

Quando IBM ha introdotto il proprio PC, è stata creata una porta di VisiCalc per la nuova architettura. Wikipedia si riferisce a questa porta come "compatibile con i bug" , quindi ti aspetteresti di vedere esattamente lo stesso comportamento di analisi della formula, anche se tecnicamente il sistema era in grado di eseguire analisi più complesse.

A partire dal 1982, Microsoft ha gareggiato con VisiCalc, e più tardi 1-2-3, con la loro Multiplan multipiattaforma foglio di calcolo. Successivamente, Lotus 1-2-3 è stato introdotto nel 1983 appositamente per il PC IBM e ha rapidamente superato VisiCalc. Per semplificare la transizione, era logico per entrambi analizzare le formule nello stesso modo di VisiCalc. Quindi il limitato comportamento lungimirante sarebbe portato avanti.

Nel 1985, Microsoft ha introdotto Excel , originariamente per Macintosh e iniziando con la versione 2 nel 1987 sul PC. Ancora una volta, per facilitare la transizione, aveva senso portare avanti la formula di analisi del comportamento a cui le persone erano già abituate da ormai quasi un decennio.

Con ogni aggiornamento di Excel, esisteva l'opportunità di modificare il comportamento, ma non solo avrebbe richiesto agli utenti di imparare un nuovo modo di digitare le formule, ma rischierebbe anche di interrompere la compatibilità con i fogli di calcolo utilizzati o creati con la versione precedente. In un mercato ancora molto competitivo con diverse società commerciali in concorrenza tra loro in ciascun campo, è stata probabilmente presa la decisione di mantenere il comportamento a cui gli utenti erano abituati.

Passiamo rapidamente al 2019 e siamo ancora bloccati dalla formula che analizza le decisioni comportamentali originariamente prese non oltre il 1978-1979.


mathforum.org/library/drmath/view/69058.html e macnauchtan.com/pub/precedence.html#_Aworks riportano che Lotus 1-2-3 segue convenzioni algebriche comuni.
Rodolfo Oviedo,

0

L'espressione - A1^2contiene due operatori, vale a dire l'operatore di negazione unaria -e l'operatore di esponenziazione binaria ^. In assenza di parentesi, potrebbero esserci due interpretazioni. O:

-(A1^2)

o:

(-A1)^2

Il primo dice prima fare l'elevamento a potenza con operandi A1e 2, e poi fare la negazione su questo.

Il secondo dice prima di fare la negazione sull'operando A1, e quindi usare l'espiazione sul risultato di questo e 2.

Come è stato detto nei commenti alla domanda, i poteri hanno una priorità maggiore rispetto ai segni meno in qualsiasi ambiente sano. Ciò significa che è meglio se un sistema assume il primo.

Tuttavia, Excel preferisce il secondo.

La lezione è, se non sei sicuro che il tuo ambiente sia sano o meno, includi la parentesi per essere al sicuro. Quindi scrivi -(A1^2).


Questo duplica la risposta accettata e altre risposte precedenti.
fixer1234,

-1

Questo non è un problema con Excel ma con esponenti e negativi. Quando prendi un numero e lo innalzi a una potenza pari, annulli il segno negativo.

-x^2 + x == (-x * -x) + x 
x = 3  => (-3 * -3) + 3
       ==  9 + 3 => 12

È necessario utilizzare parentesi e multipli per -1

-1 * (x^2) + x

10
Non è così che funzionano i segni. Dovrebbe essere: x = 3 => - (3 * 3) + 3 = 6. Excel non usa la convenzione algebrica standard.
henning,

3
@henning Come menzionato in un altro commento, sebbene questa non sia la convenzione “standard”, è una convenzione, sebbene non la più comune. Dire che "non è così che funzionano i segni" non è quindi corretto. Piuttosto, non è così che funzionano i segni nell'uso prevalente.
Konrad Rudolph,

2
@KonradRudolph Abbastanza giusto. Lo ammetto, sono consapevole solo dell'uso prevalente, che, credo, è ciò che ha causato la confusione di OP.
henning,

6
No, assolutamente è un problema con Excel. Excel utilizza regole errate per la precedenza dell'operatore.
Dawood ibn Kareem,

Nota la differenza tra -x^2dove x è 3 e x^2dove x è -3. -x^2+xnon raggiungerà mai il 12: wolframalpha.com/input/?i=-x%5E2%2Bx
Thomas Weller

-2

-x ^ 2 + x dove x = 3 Questo è un esempio di equazione quadratica L'equazione può essere scritta in questo modo: -3 * -3 + 3: la moltiplicazione ha la precedenza sull'aggiunta, quindi il risultato sarà scritto come segue: 9 + 3 : Perché = 9 perché un numero negativo x un numero negativo dà un risultato positivo. Ciò può essere verificato utilizzando qualsiasi calcolatrice, regola di scorrimento o qualsiasi programma di matematica per computer. Risultato finale 9 + 3 = 12


-3

È solo una matematica davvero semplice.

Regola 1. Anche le moltiplicazioni di numeri negativi genererebbero un risultato positivo:

meno * meno = più

meno * meno * meno = meno

meno * meno * meno * meno = più

Ciò è dovuto al fatto che gli svantaggi si annullano a coppie.

Regola 2. La potenza di ogni numero identifica che questo numero verrà moltiplicato per se stesso un numero di volte.

(2) ^ n, dove n = 2 => 2 * 2 = 4

(-2) ^ n, dove n = 2 => (-2) * (- 2) = 4

E se riesci a vedere la regola numero 1 ..

(-3) ^ n, dove n = 3 => (-3) * (-3) * (-3) = 9 * (-3) = -27

Regola 3. La moltiplicazione e la divisione hanno una priorità maggiore rispetto all'addizione e alla sottrazione.

3 * 5 + 2 = 15 + 2 = 17

3 * (5 + 2) = 3 * 7 = 21

E c'è la risposta alla tua domanda:

Combinando tutte e 3 le regole precedenti:

-x ^ 2 + x, dove x = 3 => -3 ^ 2 + 3 = 9 + 3 = 12

Il mio consiglio è di passare un po 'di tempo ogni anno e continuare a rinfrescare le regole fondamentali della matematica.

È in effetti un'abilità che puoi mantenere e rimanere in cima a gran parte del mondo, solo conoscendo la matematica di base.


9
Quando scrivi "Combinando tutte e 3 le regole precedenti: -x ^ 2 + x, dove x = 3 => -3 ^ 2 + 3 = 9 + 3 = 12" stai assumendo che -x ^ 2 = (-x) ^ 2. Non hai affermato questo presupposto prima. Pertanto la tua conclusione è ingiustificata. In realtà, se leggi il libro di testo di matematica o Wikipedia, noterai che il tuo presupposto implicito non viene seguito. Libri di testo di matematica, articoli scientifici, ecc. Seguono il presupposto che -x ^ 2 = - (x ^ 2)
Rodolfo Oviedo,

la regola 3 si applica agli operatori binari come +-*/, ma non agli operatori unari come -o +. La precedenza dell'operatore di potenza è superiore *e, /ma gli operatori unari hanno una precedenza ancora maggiore
phuclv,

In risposta a @RodolfoOviedo, non hai ragione. C'è un'enorme differenza tra - (x) ^ 2 e -x ^ 2. Ed è abbastanza chiaro. Non ha senso affermarlo. Non mancare di rispetto signore, ma sento che hai appena provato a tornare con un modo passivo aggressivo. Mi dispiace se ho detto qualcosa che ti insulta. Sono qui solo per aiutare.
Michael John,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.