Javascript gpus.js(webgl?)浮动32问题
我可能遗漏了一些明显的东西,但我正在尝试,并得到一些奇怪的结果。我只是想确保我没有做一些明显愚蠢的事情(这很可能) 我不确定这是否与我正在做的事情有关,也不确定使用WebGL通过gpu.js执行计算的方式 我创建了一个新的GPU和新内核:Javascript gpus.js(webgl?)浮动32问题,javascript,webgl,gpu.js,Javascript,Webgl,Gpu.js,我可能遗漏了一些明显的东西,但我正在尝试,并得到一些奇怪的结果。我只是想确保我没有做一些明显愚蠢的事情(这很可能) 我不确定这是否与我正在做的事情有关,也不确定使用WebGL通过gpu.js执行计算的方式 我创建了一个新的GPU和新内核: const gpu = new GPU(); const test = gpu.createKernel(function () { return 255 + (255 * 256) + (255 * 256 *
const gpu = new GPU();
const test = gpu.createKernel(function () {
return 255 +
(255 * 256) +
(255 * 256 * 256) +
(255 * 256 * 256 * 256);
}).setOutput([1]);
const res = test();
这给了我一个4294967296的结果(包含在float32array中)
如果从控制台运行相同的计算,则得到的结果为4294967295。单精度(32位)浮点值由24个有效位和8个指数位组成
4294967295是0xffffffff(整数),不能以完全精度存储在32位浮点中,因为它只有24个有效位。4294967296是0x100000000(整数),可以存储在32位浮点中,因为它是0x4f800000(浮点) 相比之下,双精度(64位)浮点值由53个有效位和11个指数位组成。
因此,64位浮点值可以准确地存储值4294967295(0x41effffffe00000)。有没有办法在gpu.js中使用双精度浮点?试图做一些宇宙模拟。@Y.Yoshii在GLSL中可以使用
double
,因为版本4.00或使用扩展。另见。在GLSL ES和WebGL中,目前还不可能实现。