Cuando empezaba a tocar el Spectrum, empezó a llamarme la atención que los números ocupasen tanto espacio. A mi modo de ver, era como si los guardase internamente como una cadena de caracteres. Poco me podía imaginar yo lo que era la representación de números en coma flotante, o que el Basic manejase todos los número de la misma forma.
Con el tiempo fui profundizando, y me impresionó ver como un procesador de 8 bits como era el Z80, y que tenía instrucciones para manipular 16 bits de golpe, pudiera manejar números en coma flotante de 40 bits. Lógicamente eso era bajo el precio de añadir procesamiento y memoria extra.
Luego con GW-BASIC en arquitecturas de 16 bits, volví a ver algo parecido, los double-precission (#), usaban una representación interna de 64 bits. Así que nos encontramos que en los años 80, ya se usaba la aritmética de 64 bits, todo ello, desde un lenguaje interpretado.
Después con Turbo Basic / Powerbasic, que seguía siendo un Basic de 16 bits, aunque esta vez compilado, aparecieron los extended-precision (##) de 80 bits.
Ese mismo esquema, se replicaría en Turbo Pascal con los extended y en Turbo C con los long double.
En todo caso, hablamos siempre de números en coma flotante, que de algún modo han sido emulados durante mucho tiempo, sin embargo, poder ver que los actuales enteros de 64 bits, ya se soportaban en plataformas de 16 bits, me ha sorprendido mucho.
Digamos que en C/C++, el tipo __int64, no es estándar, y vino de la mano de Microsoft con el Visual C++ de 1994. Naturalmente, Watcom C++ lo implemetaría también en 1996. La diferencia es que mientras que Visual C++ sólo generaba aplicaciones de 32 bits para Windows, Watcom C++ aún podía crear ejecutables de 16 bits para DOS, que usasen enteros de 64 bits.
Luego el tipo long long, se usaría como pseudo-estándar de C, hasta donde yo se, implementado por primera vez también en Watcom en 1997. Finalmente vendría la normativa C99, usándose entonces el tipo int64_t y uint64_t.