JavaScript与浮点决定论的处理
我希望使用回滚网络代码构建一个浏览器多人游戏,在客户端上运行确定性模拟。在遇到浮点障碍之前,我已经在Flash中原型化了网络代码 基本上,据我所知,Flash中的整数数学是通过将JavaScript与浮点决定论的处理,javascript,html,floating-point,point,multiplayer,Javascript,Html,Floating Point,Point,Multiplayer,我希望使用回滚网络代码构建一个浏览器多人游戏,在客户端上运行确定性模拟。在遇到浮点障碍之前,我已经在Flash中原型化了网络代码 基本上,据我所知,Flash中的整数数学是通过将ints转换为Numbers,进行数学运算,然后再转换回int。它显然更快,但这意味着不可能在不同的计算机体系结构中使用确定性数学 在我把所有鸡蛋都扔进JavaScript篮子之前,我想问几个问题 JavaScript中所有主要浏览器上都有真正的整数算法吗?或者一些浏览器在返回int之前做Flash操作并转换为float
int
s转换为Number
s,进行数学运算,然后再转换回int
。它显然更快,但这意味着不可能在不同的计算机体系结构中使用确定性数学
在我把所有鸡蛋都扔进JavaScript篮子之前,我想问几个问题
注:根据回复从HTML5编辑为JS。为我缺乏知识而道歉。这是一个Javascript问题,而不是HTML5问题 所有Javascript计算都是使用IEEE754浮点
double
值完成的-没有“int”
尽管IEEE754要求(AFAIK)对任何给定输入的每个操作都有一个特定的答案,但您应该知道JS解释器可能可以自由地优化表达式、循环等,这样浮点操作实际上不会按照您期望的顺序执行
在一个程序的运行过程中,这可能会导致在不同的浏览器上产生不同的答案。问题其实不是HTML5,而是JavaScript。你的意思当然是准确性,(对我来说)决定论有着非常不同的含义。你找到了解决方案吗?@Cristy我最终解决了这个问题。本质上,我在服务器上运行模拟作为主副本,当我检测到客户端与主副本不同步时,我会将游戏状态转储到解除同步的客户端。@na感谢您的回复!我试图通过将所有计算转换为整数并使用三角函数的查找表来确定它,但我不知道这是否真的解决了问题并使其具有确定性。对于浏览器,跨不同的计算机架构进行确定性模拟是不可能的吗?@na说实话,我认为你只需要试试看。