A double a modern procikon, ahol van hardveres double aritmetika, ott szkriptnyelvre jó választás. A "mantissa" vagyis tört érték double esetén 52 bitnyi törtet tartalmaz. Ergó veszteség nélkül 52 bites számot oda-vissza használhatod.
Ha bárkinek demózni akarsz, az alábbit mutasd be float-ra (23 bit tört):
#include <stdio.h>
int main() {
for (int i=0; i<10; i++) {
int ni = (1<<24) - 5 + i;
float nf = ni;
printf("%d <--> %f\n", ni, nf);
}
}
és double-ra (52 bit tört):
#include <stdio.h>
int main() {
for (int i=0; i<10; i++) {
long long ni = (1LL<<53) - 5 + i;
double nf = ni;
printf("%Lu <--> %f\n", ni, nf);
}
}
Látszik, hogy mindkét példánál az első 5 lépés okés, a határ utáni 5 lépés gázos.
Egyébként tévedtem előbb, a bit operátorok 32 bites értékig működtek LUA-ra, nem engedték az 52 bitet: http://lua-users.org/wiki/BitwiseOperators
Valamikor implementáltam C-ben egy saját virtuális CPU-t saját utasításkészlettel. Én is ezt követtem, csak double tipusa volt és minden egyszerűbb lett az implementációban. A LUA is minimalista, ezért szeretik hozzáfordítani NGINX, nmap és sok programhoz beágyazott szkriptingre. A LuaJit környezet ráadásul gyors is (C-vel elérhető tempó harmada-negyede) az általa ismert architektúrákra.