Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/442.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript gpus.js(webgl?)浮动32问题_Javascript_Webgl_Gpu.js - Fatal编程技术网

Javascript gpus.js(webgl?)浮动32问题

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 *

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

我不确定这是否与我正在做的事情有关,也不确定使用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();
这给了我一个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中,目前还不可能实现。