• I numeri fluttuanti

    I numeri fluttuanti

    [Tempo di lettura: 8 minuti]

    Se non conosci già questa formula matematica:

    1=0,999….

    di primo acchito, puoi restare stupito o perplesso.

    Significa che “1” e “0,999…” rappresentano la stessa quantità.

    Siti web, video, libri… le diverse spiegazioni e dimostrazioni di questa uguaglianza, che è un fatto matematicamente accettato, hanno dato luogo a numerose riflessioni e discussioni. In comune, le varie dimostrazioni hanno il ricorso ad un tipo di passaggio matematico detto: “passaggio al limite”. È piuttosto intuitivo ma ha implicazioni non banali e, qualche volta, persino contro-intuitive. Se non lo conosci già, provo a spiegartelo qui di seguito.

    Ecco un esempio basato sulle fette di torta. Supponiamo di avere a disposizione una certa quantità unitaria, per esempio una torta, e di poterla dividere in tante parti uguali quante ne vogliamo. Se divido per 2, otterrò due belle fettone grandi. Se divido per 3, ciascuna fetta sarà molto più piccola, se divido per 4 sarà ancora più piccola… Se divido per 1000, ogni fetta sarà probabilmente trasparente… Dunque se n è il numero di parti uguali in cui divido la torta, la dimensione della fetta, pari a 1/n, tende a diventare sempre più piccola, sempre più piccola…

    n1/nrappr. decim.
    111,000…
    2½0,5000…
    31/30,333…
    41/40,25000…
    1001/1000,01000…
    100.0001/100.0000,000001000…
    1/∞0,000…
    Se potessi scrivere all’infinito e completare la tabella, riuscirei a scrivere anche l’ultima riga… ma non posso!

    Possiamo immaginare che, al limite, quando n tende verso l’infinitamente grande, 1/n vale quasi 0. Per riassumere questa situazione possiamo dire che: “se n tende all’infinitamente grande, il limite di 1/n è 0″.

    \lim_{n\rightarrow\infty}\frac{1}{n}=0

    Torniamo alla nostra sorprendente uguaglianza tra 1 e 0,999… Come dicevo, in un modo o nell’altro, risulta che se si potessero scrivere tutte le infinite cifre del membro destro dell’uguaglianza (“0,999…”) allora si potrebbe descrivere compiutamente una quantità identica a quella espressa del membro sinistro con il solo simbolo “1”.

    Sinceramente, faccio una gran fatica ad accettare che un ragionamento matematico si fondi su qualcosa che è impossibile. Se condividi, accompagnami in un brevissimo viaggio verso una maggiore profondità nell’oceano matematico.

    Sul fondale dell’oceano troviamo gli schemi mentali comuni alla maggior parte degli esseri umani in quanto indotti da fattori fisiologici.

    Uno di questi schemi, secondo me, è quello dell’errore controllato. La nostra mente è molto brava ad astrarre eliminando particolari inessenziali e riempiendo vuoti con contenuti plausibili. Praticamente ogni comunicazione, in qualunque forma, anche quella del linguaggio non verbale, sfrutta l’uso di percezioni sensoriali per trasmettere pensieri in modo indiretto, attraverso segni e simboli, compreso il linguaggio del corpo. Per esempio, la lettura della parola: “albero” evoca nella tua mente la tua idea di albero, che si è formata nella tua memoria per esperienza. Ciascuno degli alberi che hai visto assomiglia alla tua idea di albero. La nostra memoria fissa solo una piccola parte del dato sensoriale, sicché gli errori sono già alla fonte. Si tratta sempre e comunque di errori sotto controllo, cose che possiamo gestire. Se così non fosse, o meglio, quando occasionalmente comprendi male o apprendi in modo errato, possono accadere incidenti ed esperienze indesiderate o dolorose perché progetti comportamenti basandoti su modelli predittivi non aderenti alla realtà, non veritieri.

    Propongo di rifare il ragionamento riguardante “1=0,999…” basandoci sull’idea di errore controllato anziché su quella di passaggio al limite. L’idea sottostante è che il passaggio al limite è reso paradossalmente possibile da una nostra limitazione: la capacità di discriminare tra due quantità indicate da altrettante scritture non è infinita, ha sempre e comunque una certa precisione. Oltre una certa precisione non arriviamo, sicché due scritture possono risultare confondibili, nel senso che tendiamo ad identificare le quantità o gli schemi da essi indicati, anche se non sono in tutto e per tutto identiche.

    È vero o falso che “1” e “0,999…” rappresentano la stessa quantità? Lavorando sulla rappresentazione decimale, mi accorgo che qualunque metodo di controllo, qualunque procedura per misurare la differenza tra la quantità indicata da “1” e quella indicata da “0,999…” è destinato ad essere inconcludente o meglio ciclico, ripetitivo, rinviando ad ordini di grandezza sempre più bassi. Prima o poi però mi devo fermare, non c’è niente da fare: la mia natura è finita, qualunque tecnologia è basata su materia ed energia disponibili in quantità finita. Se non altro, mi fermerò perché non reggo la noia oltre un certo limite o perché intuisco che non potrà mai cambiare nulla, che le mie azioni mentali non potranno far altro che ripetersi.

    Rilevare che una procedura è ciclica è un’atto mentale fattibilissimo. Non sempre è facile: si pensi ad un numero decimale periodico con un periodo lungo mille cifre. La procedura che ci consente di calcolare la prossima cifra dello sviluppo decimale è ciclica ma accorgersene potrebbe risultare molto difficile. Nel nostro caso non è così: bastano pochi passaggi per accorgersene. Bastano pochi passaggi e ci accorgiamo che la produzione della prossima cifra di 0,999… comporta l’esecuzione di passi identici a quelli precedenti, salvo scendere di ordine di grandezza. Comunque, se la nostra precisione di calcolo è prefissata, non serve neppure l’abilità di rilevare ciclicità: basta calcolare una quantità di cifre decimali pari a quelle che la nostra precisione ci consente di gestire. Ad un certo punto, la differenza tra 1 e 0,999… sarà inferiore alla soglia di precisione.

    Per chi conosce il principio d’induzione: ebbene sì, abbiamo una procedura (che si può scrivere in funzione della nostra soglia di precisione) che arriva sempre a costruire uno sviluppo decimale di 0,999… quantitativamente equivalente a 1 in relazione alla nostra capacita di discriminare tra quantità, riferita a quante cifre decimali riusciamo a gestire.

    Possiamo allora concludere che “1” e “0,999…” sono confondibili, nel senso che indicano la stessa quantità, salvo un eventuale errore talmente piccolo da poter essere trascurato.

    Attenzione! Non siamo costretti ad ammettere che “1” e “0,999…” siano la stessa scrittura o che siano due scritture intercambiabili, ma solo che indichino sostanzialmente la stessa quantità, sicché sono intercambiabili nei ragionamenti in cui non conta la forma ma la “sostanza”. Possiamo mantenere distinte le due relazioni di uguaglianza tra scritture “=” e di confondibilità “≈”, evitando di dare per scontato – potrebbe essere una forzatura – che siano la stessa cosa. Ammettiamo solamente, almeno per ora, che due scritture formalmente e computazionalmente diverse come “1” e “0,999….” siano confondibili nel senso che esprimono sostanzialmente la stessa quantità. Scriviamo dunque così per indicare la confondibilità:

    1 ≈ 0,999…

    Vorrei ora proporre una situazione un po’ particolare che ci aiuti a generalizzare l’idea di confondibilità e ad apprezzare la distinzione tra essa e l’uguaglianza algebrica, quella indicata con: “=”, in modo più generale.

    Immaginiamo ora un nuovo tipo di numeri, rappresentabili in base 10 con un numero finito di cifre decimali, le cui ultime cifre decimali fluttuano nel tempo in modo casuale.

    Per prima cosa, notiamo che le scritture indicanti quantità significano davvero qualcosa se c’è qualcuno che le legge e le interpreta. Ogni lettura è un atto concreto, un evento a se stante, irripetibile perché la nostra esistenza ha natura lineare. Due letture possono essere molto simili ma comunque c’è almeno una differenza: l’istante in cui vengono fatte o la persona che legge. In generale, non è garantito che ogni lettura dia sempre lo stesso identico effetto, che la scrittura sia interpretata sempre perfettamente allo stesso modo.

    In altri termini, non è così assurdo concepire una scrittura indicante quantità che, se viene letta più volte, fornisca sempre le stesse prime cifre ma, sotto un certo ordine di grandezza, le restanti cifre possano variare potenzialmente ad ogni lettura in modo imprevedibile per chi le legge.

    Non serve assumere sostanze psicotrope. Per esempio, si possono far scrivere le ultime cifre con una lente potente da un amico, per poi leggere le stesse cifre senza l’ausilio di nessuna lente. Quando faccio l’esame dall’oculista o dall’ottico succede qualcosa del genere. Ogni volta che provo a leggere una scrittura troppo piccola, tento di indovinare, interpretando ciò che percepisco in modo fluttuante.

    Paziente: dottore, vedo una F ma forse è una R. Dottore: Sicuro? Non potrebbe essere una E o una B?

    In informatica, non è per nulla difficile immaginare una situazione del genere, anzi è un problema in cui spesso si incappa. Capita per esempio di usare programmi per dati contabili con precisione di due cifre dopo la virgola, per poi trovarsi in difficoltà quando vengono coinvolti beni che si usano in grande quantità, per cui basta una fluttuazione di cifre decimali di ordine molto basso per causare effetti apprezzabili.

    Ecco perché, per esempio, i prezzi dei combustibili alla pompa vengono indicati con 3 o 4 cifre dopo la virgola, anche se nella valuta corrente si trattano solo le prime due.

    Recepire il concetto di confondibilità, di errore sotto controllo, di precisione limitata è, da un lato, matematicamente… spaventoso! Però apre un mondo di possibilità. Per esempio, fu proprio in conseguenza alla limitatezza nella precisione dei calcoli meteorologici che Edward Lorenz diede vita alla teoria matematica del caos. La riflessione sarebbe molto ampia, limitiamoci qui ad una situazione più specifica ma comunque significativa.

    Attrattore strano di Lorenz. Il grafico rappresenta l’evoluzione di un sistema. Lo spazio geometrico della rappresentazione è chiamato “spazio delle fasi” ed ogni punto rappresenta una configurazione del sistema.

    Tornando a questi nostri strani numeri con le ultime cifre fluttuanti, oggetto di questa piccola riflessione, diamo loro dignità attribuendo loro un nome, quello di “numeri fluttuanti” e chiediamoci se e come possiamo trattarli. Abbiamo già visto alcuni modi per crearli e per leggerli. Come possiamo farci dei calcoli? Quali attenzioni avere per manipolarli “rispettosamente”, senza perdere alcuna informazione e quindi preservare il più possibile il livello di precisione? Per esempio, come fare la somma tra due numeri fluttuanti?

    Rivediamo più in dettaglio come possiamo interagire con un numero fluttuante. Ad ogni accesso in lettura al numero fluttuante otterremo come esito una sequenza di cifre che rappresenta un numero decimale in base 10 con una quantità di cifre superiore alla nostra capacità di distinguere tra quantità con simili rappresentazioni. Ciascuna delle scritture ottenute indica sostanzialmente sempre la stessa quantità. Le varie scritture, considerate nell’insieme, possono costituire una sequenza di interazioni in coinvolgenti un unico osservatore o possono essere una collezione di interazioni avvenute in parallelo coinvolgendo più di un osservatore. Questo, ai nostri fini, non importa. Ciò che conta è che possiamo sfruttare il lavoro già fatto dai matematici relativamente al calcolo numerico con approssimazione.

    Per esempio, consideriamo l’algoritmo di Kahan detto anche della sommatoria compensata. Grazie ad esso, l’errore peggiore possibile è indipendente dal numero degli addendi, dunque un gran numero di valori possono essere sommati con un errore che dipende solo dalla precisione della rappresentazione in virgola mobile.

    All’economia di questa nostra breve immersione nelle profondità matematiche, non serve approfondire la procedura di calcolo, ci basta sapere che si può fare. Idem per altre operazioni aritmetiche. Ciò che conta è sapere che i numeri fluttuanti sono trattabili.

    Due scritture di numeri fluttuanti possono essere uguali o no, confondibili o no. Se sono confondibili ma non uguali, il loro trattamento aritmetico è fattibile, come detto, ma fa emergere alcune criticità.

    • Un numero fluttuante è un individuo o un insieme?
    • Cosa succede alla precisione, cioè alla quantità di informazione, della scrittura risultante a seguito di un computo (o calcolo, elaborazione aritmetica) su numeri fluttuanti? Come distinguere tra metodi che preservano la precisione da quelli che la riducono?
    • Durante l’immersione abbiamo assistito all’entrata in scena del soggetto pensante o del processore. Come si sviluppa la relazione tra processore e numeri fluttuanti? In che modo questo è correlato alla precisione?

    Queste domande saranno argomento di altri post. La conclusione è che, toccato il fondale, possiamo iniziare a scavare!