浮点数加法-得到奇怪的结果。

【字号: 日期:2024-03-01浏览:24作者:雯心
如何解决浮点数加法-得到奇怪的结果。?

对于IEEE 754标准,0.1并不是真正的“ 0.1”。

0.1编码为:(0 01111011 10011001100110011001101带有浮点数)

0是符号(=正)01111011指数(= 123-> 123-127 = (127是IEEE 754中的 偏差 ))10011001100110011001101尾数

若要将尾数转换为十进制数,我们需要1.10011001100110011001101 * 2 ^ (base2)[IEEE754中1.xxx是隐式的]

= 0.000110011001100110011001101(base2)

= 1/2 ^ 4 + 1/2 ^ 5 + 1/2 ^ 8 + 1/2 ^ 9 + 1/2 ^ 12 + 1/2 ^ 13 + 1/2 ^ 16 + 1/2^ 17 +1 / 2 ^ 20 + 1/2 ^ 21 + 1/2 ^ 24 + 1/2 ^ 25 + 1/2 ^ 27(以10为基)

= 1/16 + 1/32 + 1/256 + 1/512 + 1/4096 + 1/8192 + 1/65536 + 1/131072…(base10)

= (base10)

解决方法

执行以下代码时:

public class FPoint { public static void main(String[] args) {float f = 0.1f;for(int i = 0; i<9; i++) { f += 0.1f;}System.out.println(f); }}

显示以下输出:

1.0000001

但是输出应该是 1.0000000 ,对吧?如我错了请纠正我..!!

相关文章: