JavaScript和处理浮点确定性

n a*_*n a 5 javascript floating-point html5 point multiplayer

我正在寻找使用回滚网络代码构建一个浏览器多人游戏,该网络代码在客户端上运行确定性模拟.在遇到浮点路障之前,我已经在Flash中对网络代码进行了原型设计.

基本上,根据我的理解,Flash中的整数数学是通过将ints转换为Numbers,进行数学运算,然后转换回来完成的int.它显然更快,但这意味着不可能在不同的计算机体系结构中进行确定性数学运算.

在我将所有鸡蛋放入JavaScript篮子之前,我想问几个问题.

  1. JavaScript中所有主流浏览器都有真正的整数运算吗?或者做一些浏览器做Flash事件并转换为浮点数/双精度数来进行数学运算然后再转换回int?

  2. 在不同的计算机体系结构中,是否有类似于BigDecimalBigNum确定数学运算的东西?只要在合理范围内,我不介意一些性能损失.如果没有,是否有一些JavaScript定点库可以解决我的问题?

  3. 这是一个很长的镜头,但是有没有HTML5 2D游戏引擎,它具有像x/y位置和碰撞之类的东西的确定性数学?游戏引擎列表至少可以说是压倒性的.我对从头开始构建一个确定性的跨浏览器兼容引擎感到不安,但这可能就是我必须要做的.

注意:根据响应从HTML5编辑到JS.为我缺乏知识而道歉.

Aln*_*tak 6

这是一个Javascript问题 - 而不是HTML5问题.

所有Javascript数学都是使用IEEE754浮点double值完成的 - 没有"整数".

尽管IEEE754要求(AFAIK)针对任何给定输入的每个操作的特定答案,但您应该知道JS解释器可以自由地优化表达式,循环等,这样浮点运算实际上不会按照您的顺序执行期望.

在程序的过程中,这可能导致在不同的浏览器上产生不同的答案.

  • 那么对于浏览器来说,跨不同计算机架构的确定性模拟是不可能做到的? (4认同)