【发布时间】:2021-01-25 01:58:55
【问题描述】:
所以显然没有 32 位浮点数,但如果我们要有效地存储大数据并且我们的许多值是不大于 100,000 且恰好有 2 个小数位的浮点数,那么将 64 位值存储在 32通过删除表示我们不需要的精度的位来位。
我尝试通过像这样简单地写入 64 位 BE 浮动缓冲区并切片前 4 个字节来做到这一点:
// float32 = Number between 0.00 and 100000.00
const setFloat32 = (float32) => {
b64.writeDoubleBE(float32, 0) // b64 = 64 bit buffer
b32 = b64.slice(0, 4)
return b32;
}
并通过添加 4 个空字节来读取它:
// b32 = the 32 bit buffer from the previous func
const readFloat32 = (b32) => {
// b32Empty = empty 32 bit buffer
return Buffer.concat([b32, b32Empty]).readDoubleBE(0);
}
但这修改了平小数,如:
1.85 => 1.8499994277954102
2.05 => 2.049999237060547
我怎样才能修正我的方法来正确地做到这一点,并以最有效的方式来提高阅读速度?
【问题讨论】:
标签: node.js floating-point binary precision