gpus.js(webgl?)float32问题

lli*_*ihp 2 javascript webgl gpu.js

我可能错过了一些明显的东西,但我正在尝试使用gpu.js并得到一些奇怪的结果.我只是想确保我没有做一些明显愚蠢的事情(很可能).

不确定这是我正在做的问题,还是使用WebGL通过gpu.js完成计算的方式.

我创建了一个新的GPU和新内核:

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();
Run Code Online (Sandbox Code Playgroud)

这给了我4294967296的结果(包含在float32array中).

如果我从控制台运行相同的计算,我得到4294967295的结果.

Rab*_*d76 5

一个IEEE 754单精度(32位)浮点值由24显著位和8位指数.

4294967295是0xffffffff(整数),它不能以完全精度存储在32位浮点数中,因为它只有24个有效位.
4294967296是0x100000000(整数),它可以存储在32位浮点数中,因为它是0x4f800000(浮点数).

在比较中,IEEE 754双精度(64位)浮点值由53个有效位和11个指数位组成.
因此,一个64位浮点值,可以精确存储值4294967295(0x41efffffffe00000).