Javascript Float32Array wierdness

Javascript Float32Array wierdness

本文关键字:wierdness Float32Array Javascript      更新时间:2023-09-26

如果我运行这段代码:

var a = new Float32Array(3);
a[0] = 1;
a[1] = 1.1;
a[2] = 1.00001;

我得到a的结果:

[1, 1.100000023841858, 1.0000100135803223]

为什么Float32Array要那样篡改我的数字?此外,我如何知道哪些数字可以准确地表示为32位浮点数?

32位浮点数只有7位有效数字。正常情况下,将浮点数存储为与指定数最接近的近似值。

一个32位浮点数不能完全存储值1.1,它能存储的最接近的值是1.100000023841858

对于7位有效数字,数字仍然是准确的,即1.100000

通常,当显示浮点数时,会根据它能准确存储的有效位数进行四舍五入。您用来显示数字的东西显然不会进行这种舍入,这就是为什么您会看到数字精度的限制。

假设这些32位浮点数使用IIIE 754标准,它们可以表示从1.18 * 10-38到3.4 * 1038的值。