Lua数字和64位整数并行实现的策略

Lua 默认使用双精度浮点型 (double) 作为其唯一的数字类型,这很好用也很有用。然而,我正在开发一个需要使用 64 位整数的软件,这就需要我用实际的 64 位整数来解决这个问题。

整数类型变得相关的地方是在文件大小方面。虽然我并不真正期望看到的文件大小超出了 Lua 可以使用 double 全 "整" 数精度所能表示的范围,但我想对此有所准备。

在使用 Lua 的默认数字类型的同时使用 64 位整数类型时,你能推荐哪些策略?我真的不想放弃默认实现(我也不担心相对于整数运算的性能),但我需要一些方式来表示 64 位整数的完整精度,而不会有太大的性能损失。

我的问题是我不确定应该在哪里修改行为。我应该修改语法并扩展解析器(如 LL 或 ULL 后缀的数字,据我所知,这在默认 Lua 中不存在),还是应该编写自己的 C 模块并定义一个用户数据类型,以表示 64 位整数和能够操作值的库函数?…

_注:_是的,我嵌入了 Lua,所以我可以自由地扩展它。

原文链接 https://stackoverflow.com/questions/6482218

点赞
stackoverflow用户734069
stackoverflow用户734069

作为 LuaJIT 移植到 ARM CPU 的一部分(这些 CPU 通常具有较差的浮点运算能力),LuaJIT 实现了“双重数值虚拟机”,使其能够根据需要动态地在整数和浮点数之间切换。你可以自己使用这个,只需要在 32 位整数和浮点数之间切换,改为在 64 位整数和双精度浮点数之间即可。

它目前正在构建中使用,因此你可能希望将 LuaJIT 作为你的 Lua “解释器”。或者你可以将其作为学习此类事情的方式。

然而,我同意 Marcelo 的观点;53 位尾数应该足够了。你应该在未来的 10 年左右并不真正“需要”它。

2011-06-26 06:57:20
stackoverflow用户596285
stackoverflow用户596285

我建议将你的数据存放在 Lua 之外,并使用某种类型的引用在调用其他库时检索它。然后可以将各种结果推送到 Lua 栈上供用户查看,甚至可以将值作为字符串进行精确检索,但我建议避免在 Lua 中修改它们并在调用外部库时依赖 Lua 值。

2011-06-26 15:15:44
stackoverflow用户34799
stackoverflow用户34799

如果在程序中没有用到浮点精度,你可以在luaconf.h中重新定义LUA_NUMBER__int64(或者在你的环境中为64位int)。否则,你可以使用另一个库来处理整数,对于_无限_精度,你可以使用bignum库如lhf的lbn

2011-07-02 04:28:14