Scritto: Lunedì, 24 Agosto 2020 09:27 Ultima modifica: Domenica, 17 Gennaio 2021 14:30

Un formato per misurare il tempo


Sul modo giusto di contare il tempo utilizzando parole di 64 bit...

Rate this item
(0 votes)
Alcune immagini reperibili in rete sul baco del 2038 Alcune immagini reperibili in rete sul baco del 2038 Credits: XKCD-Randall Munroe

 A volte, mi verrebbe da dire spesso, ci complichiamo inutilmente la vita.

 Nei primi anni '70 furono inventati il linguaggio C e il sistema operativo Unix, sul quale si basa il moderno Linux. All'epoca i processori più avanzati usavano al massimo parole di 32 bit e quindi si decise di implementare una misura del tempo basata sul formato "Integer-32". Tuttavia, chi fece quella scelta non fu molto lungimirante oppure riteneva che, nell'arco di 50-60 anni, questi standards sarebbero stati ampiamente superati e dimenticati e non avrebbero avuto più alcun impatto sulla società. Purtroppo, le cose sono andate un po' diversamente e adesso il mondo dell'informatica e dell'automazione si trova a dover combattere con un "baco" o una "sindrome", quella dell'anno 2038, che ha preso il posto del famigerato "millenium bug" del 2000.

 Se utilizziamo una parola di 32 bit, essa può generare 232 diverse combinazioni, cioè quasi 4,3 miliardi (4294967296 precisamente). All'epoca, si decise di esprimere il tempo con una risoluzione di 1 secondo a partire dalla data "primordiale" del 1 gennaio 1970; una scelta semplice e apparentemente ragionevole poiché, essendoci mediamente in un anno 31,56 milioni di secondi, si otterrebbe un intervallo temporale di 4,295·109 /  3,156·106 = 136,1 anni e si sarebbe potuti arrivare ad esprimere data e ora fino all'inizio del 2106. Purtroppo le cose non sono andate esattamente così perchè, per rispetto alla regola di programmazione secondo cui "non bisogna inventare daccapo la ruota", si è deciso di dimezzare questo intervallo utilizzando il suddetto standard universale "Integer-32", in cui uno dei 32 bit esprime in realtà il segno del numero. Dato però che per esprimere una data/ora con il segno non ha molto senso (a meno di non voler esprimere in tal modo date antecedenti al 1/1/1970), ecco che dopo la fatidica data del 19/1/2038 il sistema va in crisi e non riesce a fornire risultati affidabili; curiosamente, peraltro, l'ora fatidica cadrà alle 3:14, ovvero π... una vera cabala numerica! Questa data doveva apparire sufficientemente remota all'epoca ma non lo è certo per noi; essa è già più vicina rispetto al fatidico anno 2000 e, probabilmente, la maggior parte delle persone che leggono questo articolo saranno ancora vive in quella data!

 Qualcuno potrebbe dire che si tratta di un problema inesistente, dato che ormai i computers e i sistemi operativi si sono evoluti e l'utilizzo di parole di 64 bit è divenuto universale; questa è probabilmente la stessa considerazione che fecero gli ingegneri programmatori che realizzarono Unix. Purtroppo non è così in tutti i settori! Alcune vecchie routines software, i cosiddetti "sistemi integrati" in macchinari più o meno obsoleti come pure i nomi di molti files, utilizzano ancora il vecchio standard ed è per questo che, nel settore, il "baco del 2038" fa più paura di quello del 2000. Gli effetti si cominciano già a far sentire, infatti negli ultimi anni i database di diverse aziende sono andati in crisi calcolando date di scadenza o interessi bancari a lungo termine!  E tutto questo si sarebbe potuto evitare (o meglio, rimandare al 22° secolo) semplicemente sfruttando quel fatidico bit del segno!

 Naturalmente, i recenti sistemi operativi si sono adeguati e, facendo tesoro della lezione, hanno enormemente ampliato l'intervallo temporale abbracciato. Anzi, in realtà si è sovra-reagito, anche perchè un intero di 64 bit è davvero sovrabbondante a questo scopo: con 264 = 1,845·1019 combinazioni e una risoluzione di 1 secondo, si arriverebbe a codificare qualsiasi data in un intervallo abnorme, 282 o 584 miliardi di anni a seconda se si usa o no il segno; questo corrisponde a 21 o 42 volte l'età dell'Universo! Anche volendo aumentare la risoluzione a 1 millisecondo, come fanno alcuni, si tratterebbe di un intervallo di ampissimo, pari a oltre 2-4 volte il tempo trascorso dalla scomparsa dei dinosauri. In realtà, se volessimo adottare questa risoluzione di 1 ms, basterebbe un intero "signed" di 48 bit per spaziare dal 4459 aC al 4459 dC; questa è già, per molti versi, una soluzione ottimale in termini di precisione e di intervallo, a conferma che, anche in questo campo, le parole di 48 bit sono già sufficienti a risolvere brillantemente le limitazioni dei 32 bit senza gli eccessi dei 64 bit.

 Con 64 bit ci si potrebbe spingere a risoluzioni temporali ancora maggiori, fino a 1 μs o addirittura 1 ns. Nel primo caso, l'intervallo abbracciato sarebbe di 584000 anni, nel secondo 548 anni. Quest'ultima mi pare l'opzione più ragionevole perchè, anche anticipando la data iniziale al 1900, ci si spingerebbe fino a metà del 25° secolo con una precisione a prova di sistema GPS!*

 In alternativa, ci sarebbe una soluzione "ibrida" che unisce i pregi di una risoluzione elevata e di un intervallo pressoché "infinito", sulla falsariga dei formati modificati da me proposti in più occasioni per il "calcolo floating". In pratica, si utilizzerebbe un intero "signed", dove il primo bit ha un significato diverso dal segno. Se esso vale zero, allora abbiamo un tempo espresso con risoluzione di 1 ns (ad esempio, dal 1/1/1970 a inizio aprile 2262, in piena epoca di Star Trek!). Quando invece il primo bit vale 1, allora si potrebbe adottare una risoluzione più bassa (1 secondo o 1 millisecondo), dividendo equamente l'intervallo risultante nel passato e nel futuro (di fatto significa dedicare un altro bit allo scopo). Al limite, anche se per certi aspetti appare assurdo, invece di un "integer-64" si potrebbe utilizzare direttamente il formato "floating-64" per esprimere le date con una precisione elevata intorno alle date odierne e più bassa su date remote, in un intervallo ampissimo, qualcosa come 10300 anni, adottando il secondo come unità!

 Effettivamente, nel linguaggio Java di Oracle esiste un formato detto "nanoTime" che utilizza la risoluzione di 1 ns per descrivere lassi temporali di durata massima pari a 292 anni (64bit  integer signed) ma non per indicare una data vera e propria, dato che il momento di inizio è indefinito e dipende dalla particolare applicazione.

 Un'ultima considerazione: volendo adottare una misura del tempo decimale più razionale, basata sui "Cronos" che sono la centomillesima parte del giorno (descritta in un altro mio articolo di 5 anni fa), il sistema ibrido arriverebbe a metà 2222 con una risoluzione di 1 nCronos (8,46·10-10 s)* e ±126 miliardi di anni con una risoluzione di 1 Cronos.

 

* Nota a piè pagina: proprio come avviene nella determinazione della posizione tramite GPS, una simile precisione richiederebbe il dover specificare il sistema di riferimento e il luogo esatto in cui è valida, per non incorrere nei problemi relativistici legati alle differenze nello scorrere del tempo a causa del moto relativo e a causa dei campi gravitazionali! Naturalmente, questo complicherebbe parecchio le cose... Del resto, lo stesso concetto di "misura del tempo" si fonda sull'idea classica di "simultaneità" che è stata messa in crisi da Einstein.

 

https://it.wikipedia.org/wiki/Bug_dell%27anno_2038
https://docs.oracle.com/javase/7/docs/api/java/lang/System.html#currentTimeMillis()
https://leganerd.com/2010/10/31/il-bug-del-2038/

Altre informazioni su questo articolo

Letto: 191 volta/e Ultima modifica Domenica, 17 Gennaio 2021 14:30
Marco Di Lorenzo (DILO)

Sono laureato in Fisica e insegno questa materia nelle scuole superiori; in passato ho lavorato nel campo dei semiconduttori e dei sensori d'immagine. Appassionato di astronautica e astronomia fin da ragazzo, ho continuato a coltivare queste passioni sul web, elaborando e pubblicando numerose immagini insieme al collega Ken Kremer. E naturalmente amo la fantascienza e la fotografia!

https://www.facebook.com/marco.lorenzo.58 | Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
Altri articoli in questa categoria: « Il formato floating COVP

Lascia un commento

I campi con l'asterisco (*) sono obbligatori. Il codice HTML non è abilitato.

Seguici!

Newsletter

Abilita il javascript per inviare questo modulo

Immagine del giorno

NEO news

NEO News

Ultimo aggiornamento: 18 gennaio 2021. Notizie e aggiornamenti sugli asteroidi che passano vicini a noi...

StatisticaMENTE

COVID-19 update

COVID-19 update

Periodico aggiornamento sulla curva di contagio in...

Insight statistics

Insight statistics

[aggiornato al 17/1/21 - Sol 760] - Mete...

Mars Attacks!

Mars Attacks!

 Dove si trovano le tre sonde lanciate a Lugl...

ISS height

ISS height

Aggiornamento del 16 Gennaio [Last ...

HST orbit

HST orbit

Aggiornamento del 16 gennaio [Last updat...

Curiosity odometry

Curiosity odometry

Aggiornato il 10 gennaio [updated on Jan,10]...

[LIBRO] Con la Cassini-Huygens nel sistema di Saturno

Con la Cassini-Huygens nel sistema di Saturno di Elisabetta BonoraLa pubblicazione ripercorre le gesta della missione interplanetaria NASA / ESA / ASI Cassini–Huygens, che esplorò Saturno e le sue lune dal 2004 al 2017. Le principali fasi del progetto, del lungo viaggio durato sette anni e della missione ultradecennale sono raccontate con semplicità e passione allo scopo di divulgare e ricordare una delle imprese spaziali robotiche più affascinanti ideate dall’uomo. Le meravigliose foto scattate dalla sonda nel sistema di Saturno, elaborate e processate dall’autrice, sono parte centrale della narrazione. Immagini uniche che hanno reso popolare e familiare un angolo remoto del nostro Sistema Solare. 244 pagine.

Acquista