在Matlab中写入文件时浮点错误?

时间:2012-07-01 03:03:31

标签: matlab file-io floating-point binary

我不确定我是否遗漏了一些简单但下面的代码失败(a和b的含义相同):

a=single(2147483584)
f=fopen('test','wb');
fwrite(f,a,'int32')
fclose(f); 
f=fopen('test','rb');
b=fread(f,inf,'int32');
fclose(f)
a
b

带输出:

a = 
   2.1475e+009
b =
   -2.1475e+009

并且以下代码成功:

a=single(2147483583)
f=fopen('test','wb');
fwrite(f,a,'int32')
fclose(f); 
f=fopen('test','rb');
b=fread(f,inf,'int32');
fclose(f)
a
b

带输出:

a = 
   2.1475e+009
b =
   2.1475e+009

有谁知道为什么?

1 个答案:

答案 0 :(得分:3)

我不太了解Matlab,但似乎很清楚这里发生了什么。您正在将a转换为float,然后将该转换的结果存储为32位有符号整数。但最接近整数2147483584的单精度IEEE 754浮点数为2147483648.02**31。 32位整数只能表示范围[-2**31, 2**31-1]中的值,因此看起来好像将此值写为整数时,它会被模2**32换行以提供-2**31而不是2**31

相比之下,最接近2147483583的单精度浮点数为2147483520.0,其中 符合32位整数。