gpus.js (webgl?) float32 问题

gpus.js (webgl?) float32 issue

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

不确定这是否是我正在做的事情的问题,或者是通过 gpu.js 使用 WebGL 完成计算时执行计算的方式。

我创建了一个新的 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();

结果为 4294967296(包含在 float32 数组中)。

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

IEEE 754 单精度(32 位)浮点值由 24 个有效位和 8 个指数位组成。

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

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