平台之间的浮点数是否一致?
Are floating points consistent between platforms?
我正在构建一个多客户端 javascript 游戏,其中包含位于笛卡尔平面上的非常大的 flocks/swarms 单位 - 位置、矢量和加速度都经过非常精细的调整,并且持续不断受到彼此和其他演员的影响 - 因此与 javascript 浮点数一起存储。
出于各种原因(游戏功能的速度和带宽限制),大部分逻辑是在客户端计算机上并行完成的 运行 基于通用 inputs/instructions 的相同游戏。
我担心 [browser/OS/hardware] 的某些排列会在内存中以不同方式存储浮点数,这将导致游戏版本之间的边际漂移。
浮点数的传统问题已得到充分记录,我不关心使用它们 - 它们显然是我的目的的最佳精确度。 (例如
let x = .1;
let y = .2;
if (x+y == .3){
console.log("the same");
} else {
console.log("not the same: x+y = " + (x+y));
}
//output >>> "not the same: x+y = 0.30000000000000004"
我环顾四周,甚至得到了很好的答案,例如:How to deal with floating point number precision in JavaScript? 没有完全涵盖我的问题。这个和类似的问题往往涉及如何“抑制舍入误差”或“确保精度”等。
我不是在寻找 'accuracy' 这样的 - 但一致性 - 欢迎想法。
是的,IEE 754 规范明确,并在 ECMA262 规范中引用。
我正在构建一个多客户端 javascript 游戏,其中包含位于笛卡尔平面上的非常大的 flocks/swarms 单位 - 位置、矢量和加速度都经过非常精细的调整,并且持续不断受到彼此和其他演员的影响 - 因此与 javascript 浮点数一起存储。
出于各种原因(游戏功能的速度和带宽限制),大部分逻辑是在客户端计算机上并行完成的 运行 基于通用 inputs/instructions 的相同游戏。
我担心 [browser/OS/hardware] 的某些排列会在内存中以不同方式存储浮点数,这将导致游戏版本之间的边际漂移。
浮点数的传统问题已得到充分记录,我不关心使用它们 - 它们显然是我的目的的最佳精确度。 (例如
let x = .1;
let y = .2;
if (x+y == .3){
console.log("the same");
} else {
console.log("not the same: x+y = " + (x+y));
}
//output >>> "not the same: x+y = 0.30000000000000004"
我环顾四周,甚至得到了很好的答案,例如:How to deal with floating point number precision in JavaScript? 没有完全涵盖我的问题。这个和类似的问题往往涉及如何“抑制舍入误差”或“确保精度”等。
我不是在寻找 'accuracy' 这样的 - 但一致性 - 欢迎想法。
是的,IEE 754 规范明确,并在 ECMA262 规范中引用。