Lua的浮点处理与其他语言有何不同?

use*_*805 4 floating-point lua floating-accuracy

当我0.1 + 0.2在Lua 执行时,我0.3完全得到了.如果我在Ruby或Python中做同样的事情,我得到了0.30000000000000004.我理解浮点舍入错误,但为什么Lua中不会出现这个问题呢?Lua做的不同之处是什么?

lhf*_*lhf 8

0.1+0.20.3完全是.试试这段代码:

print((0.1+0.2)==0.3)
print(string.format("%.17g",0.1+0.2))
Run Code Online (Sandbox Code Playgroud)

我假设您正在使用printio.write打印这些值.在这种情况下,Lua只是不打印所有数字.在内部,Lua使用全长的本机浮点表示.该技术的解释是,printio.write使用的格式格式的数字LUA_NUMBER_FMT定义的luaconf.h,默认为"%.14g".

  • @EgorSkriptunoff,选择"%.14g"完全是为了避免诸如"0.30000000000000004"之类的噪声用于简单应用. (4认同)