![]() |
1
6
假设浮点数使用N位存储。
浮点数应该能够表示小数。然而,由于所有的位都用来表示整数,所以剩下的零位表示任何小数。这是一个矛盾,我们必须得出结论,认为float可以精确地将所有整数表示为大小相等的整数类型的假设肯定是错误的。 由于在N位整数的范围内必须存在不可表示的整数,因此如果转换的值恰好是其中一个不可表示的值,则将该整数转换为N位的浮点值可能会丢失精度。 现在,由于浮点可以表示有理数的子集,所以其中一些可表示的值可能确实是整数。特别是,IEEE-754规范保证了二进制双精度浮点可以表示最大为2的所有整数 . 此属性与 尾数 因此,在符合IEEE-754的系统上转换为double时,不可能丢失32位整数的精度。
更严格地说,x86体系结构的浮点单元实际上使用80位扩展浮点格式,这种格式被设计成能够精确地表示所有64位整数,并且可以使用
|
![]() |
2
6
如果
|