( uid_6201 | 2020. 11. 08., v – 11:36 )

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.