【问题标题】:Lua Sqrt function inaccurate resultLua Sqrt 函数结果不准确
【发布时间】:2014-07-25 20:13:19
【问题描述】:

我对数字 500000 使用 sqrt 函数。但是我得到的结果是 707.10681152344 这有点不准确,因为正确的数字应该是 707.106781187 (正如谷歌和任何其他计算器给出的那样)。为什么呢?我可能会错过一些东西,因为我对 LUA 很陌生。非常感谢

【问题讨论】:

  • 确实很奇怪。我尝试了 Lua 5.1.4/5.2.3/5.3.0-work2 并得到了707.10678118655。您使用的是哪个 Lua 版本?
  • 可能Lua使用的浮动指针格式不能表示这个特定的分数。也许您正在使用 32 位或其他东西。
  • 通过一个小型 C 程序,我使用 32 位 float 得到完全正确的 707.1068115234375(与您的结果一致)。对于 64 位 double,我得到的正是 707.106781186547550532850436866283416748046875。显然您的 Lua 实现使用的是 32 位浮点。据我了解,它应该使用双精度(64 位);我有权访问的实现似乎可以正常工作。你在什么系统上?
  • 我在Lua live demo 中使用print(math.sqrt(500000)) 得到707.10678118655。
  • @darkchampionz:您可以通过查询预定义的_VERSION 变量来了解您正在使用的 Lua 版本。

标签: lua sqrt


【解决方案1】:

您看到的结果与 32 位浮点运算一致。

Lua一般使用64位双精度浮点(对应C类型double),但是根据this link

很容易编译 Lua 以便它使用另一种类型的数字, 例如 long 或单精度浮点数。这个特别有用 对于没有硬件支持浮点的平台。见 分发以获取详细说明。

显然,这正是您使用的 Lua 实现的配置方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2020-12-16
    • 2021-04-15
    相关资源
    最近更新 更多