I computer potrebbero sforzarsi di esibire un comportamento intelligente, ma i calcoli aritmetici eseguiti ciecamente sono sicuramente il loro punto di forza. O è?

Il fallimento del calcolatore online di Google e l'apparente incapacità di Excel di dare risposte corrette a semplici calcoli sono entrambi noti problemi tra i programmatori, ma questi non sono proprio bug nel vero senso della parola. Invece sono solo una conseguenza del fatto che i computer fanno schifo in matematica.

I computer eseguono calcoli in modo molto diverso dai metodi che gli umani usano per fare l'aritmetica - e ciò significa che abitualmente ottengono la risposta sbagliata. Qui esaminiamo alcune delle sconvolgenti conseguenze di questa rivelazione prima di addentrarci nel motivo per cui i computer fanno schifo in matematica.

  • 10 teorie di cospirazione di calcolo esaminate

La chiusura non è abbastanza vicina

Per chiunque sia ancora convinto che i computer non possano ottenere una semplice aritmetica, iniziamo con alcuni esempi che puoi provare da solo.

Per prima cosa, la calcolatrice di Google. Se non l'hai mai provato prima, per avere un'idea di come funziona, naviga su www.google.co.uk, digita 5 * 9 + (sqrt 9) ^ 3 nella casella di ricerca e fai clic su "Cerca" . Scoprirai che ritorna con la risposta corretta: '5 * 9 + (sqrt 9) ^ 3 = 72'.

Ora proviamo con un altro calcolo. Digitare 599,999,999,999,999 - 599,999,999,999,998. Abbastanza chiaramente, questo dovrebbe dare una risposta di 1. Incredibile, tuttavia, Google risponde con questo: '599,999,999,999,999 - 599,999,999,999,998 = 0'. Solo un esempio raro e sfortunato, forse?

OK, proviamo con un altro semplice calcolo. Digitare = 850 * 77.1 nella cella A1 di una cartella di lavoro di Excel 2007 (non funziona, o dovrebbe funzionare, nelle versioni precedenti di Excel). Un po 'di aritmetica mentale suggerisce che la risposta dovrebbe essere nella regione di 60.000; infatti la risposta corretta è 65.535.

Excel ha altre idee. Vi dirà che il risultato di questa moltiplicazione è di 100.000, che è di 34.465. E per dimostrare che questo non è un flash in padella, che ne dici di utilizzare una selezione di calcolatori online per calcolare 1.0 - 0.9 - 0.1?

Probabilmente scoprirai che almeno la metà di loro avrà una risposta di -2.77555756 E-17 - notazione scientifica per -0.0000000000000000277555756. (Se tutti quelli che provi danno la risposta giusta, dai un'occhiata a www.calculator.net.)

CATTIVE MATERIE: Poiché 1.0 - 0.9 - 0.1 è uguale a 0, perché così tanti calcolatori online convinti che questo valore sia la risposta?

OK, questa risposta potrebbe non essere molto lontana dalla risposta corretta di 0, ma perché la calcolatrice non riesce a trovare la risposta giusta - una risposta che è palesemente ovvia a chiunque abbia dimestichezza con la semplice aritmetica?

Come i computer fanno matematica

Sebbene i computer possano gestire interi (numeri interi), per l'aritmetica generica memorizzano i numeri in formato in virgola mobile perché è molto più efficiente nell'uso della memoria.

Prendiamo la rappresentazione in virgola mobile a doppia precisione come esempio. Utilizza 64 bit per memorizzare ciascun numero e consente di memorizzare valori da circa -10308 a 10308 (meno e più 1 seguiti da 308 zeri, rispettivamente). Inoltre, i valori frazionari piccoli come più o meno 10-308 (che è un punto decimale seguito da 307 zeri e quindi 1) possono essere memorizzati.

A titolo di contrasto, se gli stessi 64 bit fossero usati per memorizzare interi, l'intervallo sarebbe −9,223,372,036,854,775,808 a +9,223,372,036,854,775,807, e i valori frazionari non potevano essere rappresentati.

Il segreto di questa efficienza apparentemente sorprendente è l'approssimazione. Di questi 64 bit, uno rappresenta il segno (quindi se il valore è positivo o negativo), 52 bit rappresentano la mantissa (ovvero i numeri effettivi) e i restanti 11 bit rappresentano l'esponente (quanti zeri ci sono o dove è il punto decimale è).

Quindi, anche se è possibile memorizzare una gamma molto maggiore di numeri usando la notazione in virgola mobile, la precisione è in realtà inferiore a quella che può essere ottenuta in formato intero, poiché sono disponibili solo 52 bit. Infatti, 52 bit di informazioni binarie rappresentano un numero decimale a 16 bit, quindi qualsiasi valore che differisca solo nel loro 17 ° punto decimale sarà effettivamente visto come identico.

La situazione con Google che pensa che 599,999,999,999,999 - 599,999,999,999,998 è uguale a 0 è simile, anche se è evidente che il calcolatore di Google utilizza effettivamente meno dei normali 52 bit per la mantissa. Che alcuni calcolatori diano un risultato diverso da zero al calcolo 1.0 - 0.9 - 0.1 potrebbe sembrare diverso poiché sembra che non ci si trovi da nessuna parte vicino al limite dell'aritmetica in virgola mobile a 64 bit.

Ma questo sta dimenticando un fatto importante: i computer funzionano in binario. E sebbene 0,1 possa avere solo una cifra significativa in decimale, nella notazione binaria la mantissa è una sequenza ripetitiva. Ciò significa che 0.1 non può mai essere rappresentato con precisione in binario, non importa quanti bit si usano.