【发布时间】:2021-06-07 14:15:41
【问题描述】:
如果将以下值分配给Float32Array,则它会被更改。我不明白为什么。它在 32 位浮点数的范围内 (
let arr = new Float32Array(1);
arr[0] = 1623070800.1873195;
console.log(arr[0]); // --> 1623070848
Float64Array 也是如此:
let arr = new Float64Array(1);
arr[0] = 1623070800.1873195;
console.log(arr[0]); // --> 1623070800.1873195
有什么想法吗?
【问题讨论】:
-
您正在尝试存储需要超过 32 位精度才能准确表示的值。
-
在处理较大的数字时,分数精度的损失是完全正常的。请阅读this 以更好地了解您面临的基本限制。
-
“它在 32 位浮点的范围内” — 限制是 精度,而不是幅度。您不能将任意精确的数字存储为 float32。
-
@SebastianSimon:谢谢!只需在 C++ (godbolt.org/z/h63sor1c1) 中仔细检查结果。一样的。我假设精度损失较小......
标签: javascript node.js ecmascript-6