我正在寻找一种简单的方法来近似计算Java中的机器精度:
float machEps = 1.0f;
do
machEps /= 2.0f;
while ((float) (1.0 + (machEps / 2.0)) != 1.0);
System.out.println( machEps);
这将返回:
1.1920929E-7
然而,当我在 while
循环中删除对 float
的转换时:
float machEps = 1.0f;
do
machEps /= 2.0f;
while ( (1.0 + (machEps / 2.0)) != 1.0);
System.out.println( machEps);
I get:
2.220446E-16
我不太确定为什么会出现这种情况……我的猜测是在第二种情况下,Java试图将machEps
从float
扩展到double
。但是,我不确定这是否是一个准确的说法,或者是否有其他原因导致我得到两个不同的答案。