Lua - 数字是浮点数还是双精度浮点数?

5
Lua文档中提到,Lua使用double类型来表示number类型的值,这使得所有的长整型值都可以使用浮点数正确地表示。
但是,我在代码中看到lua_Number实际上是一个float类型。这给了我以下警告提示:
warning C4244: 'argument' : conversion from 'double' to 'lua_Number', possible loss of data

对于:

double fVarVal = 0.0;
lua_pushnumber( L, fVarVal );

那么,在Lua中,数字类型的值是如何表示的呢?是浮点数还是双精度数?如果它们使用浮点数,那么当使用整数值(如数组索引)时,这是否会创建问题?
我正在使用Windows CE的Lua 5.3.2版本。

谢谢。使用双精度浮点数是否值得,而不是使用单精度浮点数?我正在创建非常基本的东西,大多数将使用整数,偶尔使用浮点数,而不需要像物理引擎那样需要很高的精度。 - Virus721
我认为这取决于您的要求。但我认为大多数情况下使用“double”而不是“float”不会导致任何性能降低。 - Eugene Sh.
@EugeneSh。我更关心浮点数的意外行为,而不是性能,尽管它将在使用Windows CE和Android的相对较弱的嵌入式设备上运行。但我猜,如果将Lua移植到Windows CE的人将float作为默认值,最好还是按原样使用。 - Virus721
使用 doublefloat 相比,可能会出现哪些意料之外的行为? - Eugene Sh.
一个 double 不能表示一个带有 64 位(POSIX64)的 long int 的所有位。 - too honest for this site
显示剩余6条评论
1个回答

2
我正在使用Lua 5.3.2 for Windows。
这样一来,情况就有所不同了。Lua 5.3添加了直接使用实际整数的功能。Lua一直有lua_pushinteger函数,但在5.3中,它不会将其转换为double。相反,它是一个64位整数。
当然,在Lua中,整数和浮点数看起来很相似。大多数Lua C API也没有太多区别。但如果你想要的话,它可以区分。
无论如何,lua_Number默认为double,因此即使在Lua 5.1/2上,整数作为浮点数也不是什么大问题。当然,lua_Integer和lua_Number可以根据需要进行调整。只需注意,你使用的外部DLL也必须使用这些设置重新编译。

它实际上是一个64位整数,但可以配置成32位整数。 - Egor Skriptunoff
抱歉,我拼错了,我正在使用Windows CE,我的错。无论如何,感谢您的帮助。 - Virus721
正如我所说,它们“可以根据您的需要进行调整”。 - Nicol Bolas
@Virus721:我不确定在这里使用Windows CE和任何事情有什么关系。 - Nicol Bolas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接