JavaScript和处理浮点确定性

时间:2012-07-15 15:46:23

标签: javascript html5 floating-point point multiplayer

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

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

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

  1. JavaScript中所有主流浏览器都有真正的整数运算吗?或者某些浏览器是否会执行Flash操作并转换为浮点数/双精度数以便在转换回int之前进行数学运算?

  2. BigDecimalBigNum之类的内容适用于不同计算机架构的确定性数学运算吗?只要在合理范围内,我不介意一些性能损失。如果没有,是否有一些解决我的问题的JavaScript定点库?

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

  4. 注意:根据回复从HTML5编辑到JS。为我缺乏知识而道歉。

1 个答案:

答案 0 :(得分:6)

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

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

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

在程序过程中,可能会导致在不同的浏览器上生成不同的答案。