cocos2dx-lua 在64位设备上运行结果异常

版本:3.17.2
语言:C++ + lua 5.1

安卓和ios都做了64位支持

安卓使用luajit

问题:
我们游戏的战斗逻辑计算,传入必要的参数,输出对应的结果;现在发现在安卓64位设备上会出现偶发的结果不稳定的情况。
举例:

function test(_val)
     local b = 16;
     print("test:".._val);    
     local rst = _val * b * 0.01; 
     return rst;
end

正常调用上述方法 确定的输入参数结果肯定也是固定的,不会出现另外一种结果。

可是我们现在就遇到在64位设备上偶发的不一致效果。

至于我们是如何发现这个问题的:我们的战斗逻辑计算过程会有详细的日志打印输出,上述现象是通过比对两份日志得出的。

另外通过几组日志的分析,我们发现一个现象:
异常的情况下,输入参数为 0 的时候,正常 rst应该是为零,但是最终的结果是 100;
异常的情况下,输入参数为 200 的时候,正常 rst应该是为32,但是最终的结果是 87;
和 0.01有关系?


把这个问题发到论坛上,主要是集思广益,想看看大家的想法,扩展一下解决问题的思路。

乍看一眼,感觉是浮点精度的问题
https://0.30000000000000004.com/#lua

举个具体例子呗,问题描述不清讨论个啥?

lua不熟悉,不过我们测试过C++的,不同设备float计算结果存在不一致的情况

先把浮点转成整数运算看下 浮点精度会引发很多问题

实在是不好意思,具体代码我这边不能贴。但是我帖子中写的这个test就是我们具体出问题的函数的原形,做的操作也是一样的。我把具体问题描述得再详细一点。

就像你说的,我们在方法内做了一个 *0.01的操作,而且出现的异常结果都是 100,我们也怀疑是和这个 0.01有关系

好的,从异常的返回结果来看,和我们这边使用的 *0.01似乎是有关系的。

怎么异常法?
结果差距有多少?
判断浮点数相等需要注意,写脚本的同志挺多不了解的了