gpt4 book ai didi

从二进制文件读取时出现java浮点错误

转载 作者:行者123 更新时间:2023-12-04 05:29:07 25 4
gpt4 key购买 nike

我有一个浮点数存储在二进制文件 0.9999833107 中。当我读取其中的数字时,它会被截断或扩展,具体取决于我是使用 float 还是 double 来存储它。我使用以下代码读取二进制文件:

public double readFloat(RandomAccessFile fp){

byte[] data = new byte[4];

try {

data[0] = fp.readByte();
data[1] = fp.readByte();
data[2] = fp.readByte();
data[3] = fp.readByte();

} catch (IOException e) {
e.printStackTrace();
return 0;
}

ByteBuffer buffer = ByteBuffer.wrap(data);

return buffer.getDouble();
}

此方法返回 0.9999833106994629。当我更改方法以输出浮点数时,返回的值为 0.9999833。有谁知道我如何获取写入文件的数字?

最佳答案

如果您只存储 4 个字节,那么您可能只能保证 9 个有效位的准确度,因为在 32 位内只能表示 4294967296 个值 - 并且假设您可以将所有位用作尾数,而没有指数或符号.

我认为这更有可能最初是一个“接近”0.9999833107 的值,表示为 double ,然后截断为 float用于存储。请注意,0.9999833107 本身不能完全存储为 double - 最接近的 double 值是 0.9999833107000000165243136507342569530010223388671875。

换句话说,当将其读作 float 时你得到“写入文件的数字”。它可能不是您在转换存储之前拥有的数字,但它是实际写入文件的数字。

关于从二进制文件读取时出现java浮点错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12848608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com