La calcolatrice di iOS sbaglia i conti: perché su Android è migliore

Le calcolatrici software non sempre restituiscono risultati esatti a causa delle limitazioni della rappresentazione numerica in virgola mobile. Un esempio eclatante è l’errore della calcolatrice iOS nel calcolo di alcune espressioni. Perché quella di Android è più precisa.

Ogni sistema operativo ha la sua app calcolatrice preinstallata. La calcolatrice dovrebbe fare una cosa semplice: restituire il risultato corretto di un’espressione matematica. Ma dietro questa  apparente ovvietà si nasconde un problema incredibilmente complesso. Un ricercatore indipendente mette in evidenza un dettaglio che a molti potrebbe essere sfuggito: la maggior parte delle app che fungono da calcolatrice, sbagliano i conti. A mettersi in evidenza, in positivo, è invece la calcolatrice di Android che non perde un colpo e sa restituire il risultato esatto anche nei calcoli più complessi.

Provate a inserire la seguente espressione nella calcolatrice di iOS:

(10^100) + 1 − (10^100)

Otterrete come risposta 0 quando in realtà la risposta corretta è, evidentemente, 1.

Calcolatrice iOS calcolo errato

In figura, la calcolatrice di iOS che commette un evidente errore di calcolo. Nel seguito spieghiamo a cos’è dovuto.

Perché le calcolatrici software sbagliano i conti

Il cuore del problema sta nel modo con cui i computer rappresentano i numeri. La maggior parte delle app calcolatrici utilizza i numeri in virgola mobile, una rappresentazione binaria che introduce inevitabilmente errori di approssimazione.

Spiega il ricercatore che costruire una calcolatrice basata su numeri floating point è come costruire una casa sulla sabbia: ogni operazione introduce errori di arrotondamento.

Il problema della precisione nei calcoli floating point

Le operazioni aritmetiche su computer si basano sulla rappresentazione numerica definita dallo standard IEEE 754. Un numero decimale è espresso come un valore binario suddiviso in segno (1 bit), esponente e mantissa (questi ultimi con un numero di bit variabile).  Ciò significa che non tutti i numeri possono essere rappresentati esattamente: alcuni sono approssimati al valore più vicino disponibile.

Un esempio classico di errore di rappresentazione si osserva nel calcolo di 0,1 + 0,2 in Python:

print(0,1 + 0,2) # Output: 0,30000000000000004

Il risultato non è esattamente 0,3, ma un valore leggermente diverso dovuto alle limitazioni della precisione floating point. Questo tipo di errore può propagarsi in calcoli più complessi, portando a risultati inaspettati. L’esempio (10^100) + 1 − (10^100) citato in apertura è uno dei casi esemplificativi più interessanti.

Perché la calcolatrice di Android è ben progettata

La storia dello sviluppo della calcolatrice Android è probabilmente una delle più affascinanti nel mondo del software. È la storia di un problema apparentemente irrisolvibile e della genialità di Hans-J. Boehm, esperto di programmazione concorrente e garbage collection, ingegnere software presso Google dal 2014, che ha affrontato la sfida con un approccio innovativo.

Per migliorare la precisione dei calcoli, Hans Boehm non si è affidato esclusivamente ai numeri in virgola mobile, che sapeva avrebbero potuto creare problemi. Ha invece introdotto tecniche avanzate come:

  • Aritmetica razionale con Bignum. L’uso di numeri a precisione arbitraria (Bignum) permette di rappresentare interi di dimensioni illimitate, evitando errori di arrotondamento. Ad esempio, frazioni come 1/3 possono essere rappresentate esattamente anziché essere approssimate a 0,3333…. Questo consente di eseguire calcoli con numeri enormi senza perdita di precisione.
  • Aritmetica algebrica per numeri irrazionali. Mentre i numeri razionali possono essere gestiti con precisione, numeri come √2 (radice di due) richiedono un altro approccio. Boehm ha adottato l’aritmetica algebrica, che rappresenta numeri irrazionali come soluzioni di equazioni polinomiali. Ad esempio, √2 può essere espresso come soluzione dell’equazione x² – 2 = 0.
  • Aritmetica ricorsiva per numeri trascendentali. Numeri come π o e (numero di Nepero o base dei logaritmi naturali) non possono essere espressi con equazioni polinomiali e richiedono un’ulteriore approssimazione. L’aritmetica ricorsiva sui numeri reali consente di rappresentare questi numeri con un livello di precisione definito dall’utente. Se si richiede π con un’accuratezza di 0,01, il calcolatore fornirà 3,14, mentre con una precisione di 0,001 restituirà 3,141. A questo proposito, suggeriamo la lettura dell’articolo sul calcolo del pi greco.
  • Espressioni simboliche. Per migliorare ulteriormente l’accuratezza e l’efficienza, Boehm ha introdotto espressioni simboliche per trattare numeri come π ed e in modo simbolico anziché come semplici approssimazioni. Ad esempio, il calcolo di 1 × π + 3 × π è trattato come 4π, invece di approssimare ogni termine separatamente.

Il risultato dell’adozione di queste accortezze è appunto la calcolatrice di Android che, per precisione, supera tante altre inserite nei sistemi operativi “concorrenti”.

Le calcolatrici non sono tutte uguali

Grazie alla combinazione delle tecniche individuate da Boehm, la calcolatrice Android garantisce maggiore precisione rispetto ad altre implementazioni. L’adozione del modello ha inoltre permesso di ottenere risultati più affidabili senza compromettere la velocità di calcolo.

L’app Calculator di Android non è quindi semplicemente uno strumento per svolgere operazioni matematiche basilari, ma rappresenta un esempio di ingegneria del software avanzata. Il lavoro di Boehm dimostra come la combinazione di tecniche matematiche sofisticate possa migliorare l’affidabilità e la precisione nei calcoli.

La prossima volta che userete la calcolatrice Android, saprete che dietro un’interfaccia apparentemente semplice si nasconde una straordinaria complessità algoritmica.

Tenete comunque presente che la calcolatrice Android alla quale ci riferiamo è quella di Google, pubblicata sul Play Store e preinstallata ad esempio sui Pixel. Le aziende che hanno sviluppato versioni derivate e personalizzate di Android tendono a inserire nei loro dispositivi mobili le proprie calcolatrici. Alcune di esse potrebbero non funzionare allo stesso modo.

Ti consigliamo anche

Link copiato negli appunti