5

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

基本上,据我了解,Flash 中的整数数学是通过将ints 转换为Numbers,进行数学运算,然后再转换回int. 它显然更快,但这意味着在不同的计算机体系结构之间没有确定性数学的机会。

在我把所有的鸡蛋都扔进 JavaScript 篮子之前,我想问几个问题。

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

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

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

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

4

1 回答 1

6

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

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

尽管 IEEE754 要求 (AFAIK) 为任何给定输入的每个操作提供特定答案,但您应该知道 JS 解释器可能可以自由优化表达式、循环等,这样浮点操作实际上不会按照您的顺序执行预计。

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

于 2012-07-15T15:51:18.457 回答