以下我把自己在编程过程中碰到的一个问题拿出来,想跟大家探讨一下:"对于浮点数十六进制字面表示形式中,用p和ep引入指数后,同样的数值输出结果总是存在0.0546875*2^n的差值,这是什么原因导致的?“,还请各位帮忙进行解答,谢谢!
代码:
float f = 0.0f ;f = 0x1.1p0f ;
System.out.println("0x1.1p0f = " + f);
f = 0x1.1ep0f ;
System.out.println("0x1.1ep0f = " + f);
System.out.println("0x1.1ep0f - 0x1.1p0f = " + (0x1.1ep0f-0x1.1p0f) + "= 0.0546875 * 1");
f = 0x1.1p1f ;
System.out.println("0x1.1p1f = " + f);
f = 0x1.1ep1f ;
System.out.println("0x1.1ep1f = " + f);
System.out.println("0x1.1ep1f - 0x1.1p1f = " + (0x1.1ep1f-0x1.1p1f) + "= 0.0546875 * 2");
f = 0x1.1p2f ;
System.out.println("0x1.1p2f = " + f);
f = 0x1.1ep2f ;
System.out.println("0x1.1ep2f = " + f);
System.out.println("0x1.1ep2f - 0x1.1p2f = " + (0x1.1ep2f-0x1.1p2f) + "= 0.0546875 * 4");
运行结果:
0x1.1p0f = 1.06250x1.1ep0f = 1.1171875
0x1.1ep0f - 0x1.1p0f = 0.0546875= 0.0546875 * 1
0x1.1p1f = 2.125
0x1.1ep1f = 2.234375
0x1.1ep1f - 0x1.1p1f = 0.109375= 0.0546875 * 2
0x1.1p2f = 4.25
0x1.1ep2f = 4.46875
0x1.1ep2f - 0x1.1p2f = 0.21875= 0.0546875 * 4