Lua 浮点运算
Posted
技术标签:
【中文标题】Lua 浮点运算【英文标题】:Lua floating point operations 【发布时间】:2014-01-24 08:53:04 【问题描述】:我在没有专用浮点硬件的 CPU 上运行 Lua,具体取决于 SW 仿真。
从 luaopt.h 我可以看到一些宏设置为double
,但它没有明确说明何时使用浮点数,并且有点难以跟踪。
如果我的脚本执行以下简单操作:
a=0
a=a+1
for...
这会涉及任何级别的浮点运算吗?
如果没有,那很好,但是将宏更改为 long
有什么好处?
(我当然试过,但没用……)
【问题讨论】:
你是在说LUA_NUMBER
in luaconf.h
吗?
【参考方案1】:
Lua 中的所有数值运算(根据默认配置)都以浮点数执行。浮点数和整数没有区别,所有的值都是简单的数字。
用于存储 Lua 编号的实际 C
类型在 luaconf.h 中设置,将其更改为合适的整数类型是允许的,甚至是实用的。首先将LUA_NUMBER
从double
更改为int
、long
,或者可能是ptrdiff_t
。然后你会发现你需要调整控制字符串和数字之间转换的相关宏。当然,您可能需要删除大部分或全部基本 math
库,因为 math.sin()
及其朋友和邻居对整数并不是特别有用。
结果将是一个 Lua 解释器,其中所有数字都是整数。该语言仍允许您键入3.14
,但它将存储为3
。您的代码可能无法完全移植到使用标准配置构建的 Lua 解释器,因为大量 Lua 代码随意假设允许浮点运算,请记住,您编译的字节码肯定不兼容,因为字节码将存储编号为LUA_NUMBER
。
【讨论】:
Lua 5.3 引入了整数。【参考方案2】:有一个LNUM 补丁(例如,由OpenWrt 项目使用,该项目严重依赖 Lua 在没有 FPU 的硬件上提供 Web UI),它允许 Lua 中数字的双整数/浮点表示,并在后面发生转换需要时的场景。有了它,大多数整数计算都将在不借助 FPU 的情况下执行。不幸的是,它只适用于 Lua 5.1;不支持 5.2。
【讨论】:
以上是关于Lua 浮点运算的主要内容,如果未能解决你的问题,请参考以下文章