Lua浮点运算操作

我在没有专用浮点 HW 的 CPU 上运行 Lua,取决于 SW 模拟。

从 luaopt.h 中可以看到一些宏被设置为 double,但它并没有明确说明何时使用浮点数,追踪起来有点困难。

如果我的脚本只做简单的事情,比如:

a=0
a=a+1
for...

这会涉及到浮点运算吗?

如果没有,那很好,但是将宏更改为 long 有什么好处呢?

(当然我尝试过,但没有成功....)

点赞
用户68204
用户68204

Lua中的所有数值运算(根据默认配置)都采用浮点数进行。在浮点数和整数之间没有区别,所有值都只是数字。

用于存储Lua数字的C类型设置在luaconf.h中,可以改为适当的整数类型,这是被允许和实用的。你可以通过将LUA_NUMBERdouble更改为intlong或者ptrdiff_t来开始这个过程。接下来,你需要调整相关的宏来控制字符串和数字之间的转换。当然,你很可能需要消除大多数或全部基本的math库,因为math.sin()和它的同伴们对于整数来说并不是特别有用。

结果将是一个所有数字都是整数的Lua解释器。语言仍然允许你输入3.14,但它将被存储为3。由于大量的Lua代码随便假设浮点数运算是可以的,因此你的代码很可能无法完全移植到使用标准配置构建的Lua解释器中,需要注意编译后的字节码也肯定不兼容,因为字节码会将数字存储为LUA_NUMBER

2014-01-06 23:24:20
用户200540
用户200540

有一个LNUM补丁(例如,OpenWrt项目依赖于Lua在硬件上为Web UI提供支持,而该项目使用该补丁,并且该补丁可以用于在Lua中对数字进行双整型/浮点型表示,需要时会自动进行转换处理。它可以使大多数整数计算无需求助于浮点数计算。遗憾的是,它仅适用于Lua 5.1;不支持5.2。

2014-01-07 07:33:34