将值存储在内存中的浮点有多棘手

时间:2013-11-18 14:36:36

标签: floating-point ieee-754

说,我必须在32位系统中将2147483648存储为浮点数(而不是像整数那样的定点数)。为此,尾数(有效数字)和指数是什么?这个数字如何在记忆中表现出来?

2 个答案:

答案 0 :(得分:2)

浮点数通常由“有效数”的压缩组合表示,该组合为0或在[1,2]范围内的二进制分数;指数;和一个标志位。 (参见上面关于“IEEE 754”的评论;这是解释最常见的浮点表示的标准。它非常适合谷歌。)

2147483648将符合典型的(单精度)float,因为最常见的形式使用二进制指数,这意味着数字表示为(有效数字)* 2 指数。由于你的数字是2的幂,它可以用单精度精确表示为1.0 * 2 31

然而,由于有效数(尾数)实际上不是32位(它是24位,IIRC),因此它不能存储大的任意整数的所有有效位。这意味着2147483647和2147483649都不适合。它们的低位将四舍五入,并且将具有与2147483648相同的表示(因此,相同的值)。

如果您关心非二次幂的大值,请使用double。有效位数足够大,可以安全地表示最大为53位的整数。

答案 1 :(得分:1)

用IEEE-754表示这个数字(单精度);首先,您需要将其转换为二进制等效。然后进入表格

( (-1)^sign ) * (1 + fraction)*2^(exponent-bias)   

单精度偏差= 127.

 +----+-------------+------------------------------------+
 | 1  |      8      |                 23                 |
 |bit |     bit     |                bit                 |
 +-+--+------+------+-----------------+------------------+
   |         |                        |
   |         |                        |
   |         |                        |
   |         |                        |
   v         v                        v
 sign     Exponent                 Fraction
 bit