0

我不确定我是否遗漏了一些简单的东西,但以下代码失败(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

有谁知道为什么?

4

1 回答 1

3

我不太了解 Matlab,但这里发生的事情似乎相当清楚。您正在转换a为浮点数,然后将该转换的结果存储为 32 位有符号整数。但最接近整数的单精度 IEEE 754 浮点数21474835842147483648.0, 或2**31. 一个 32 位整数只能表示 range 中的值[-2**31, 2**31-1],因此看起来当您将此值写为整数时,它会2**32以模数形式给出-2**31而不是2**31.

相比之下,最接近的单精度浮点数21474835832147483520.0,它确实适合 32 位整数。

于 2012-07-01T08:09:04.767 回答