Java:为什么我的浮点算法比我的双算术更准确?

时间:2016-07-21 18:42:07

标签: java

如果你在这里尝试代码:

public class AddDecimalsMain {
public static strictfp void main(String[] args) {

    System.out.print("Default: "); 
    System.out.println(0.1 + 0.2);
    System.out.print("Float: "); 
    System.out.println(0.1F + 0.2F);
    System.out.print("Double: "); 
    System.out.println(0.1D + 0.2D);
}

}

你会得到

Default: 0.30000000000000004
Float: 0.3
Double: 0.30000000000000004

请不要给我解决方案,我已经知道解决方案是使用float,这给了我正确的补充,或者更好的BigDecimal,我只想了解为什么 java的浮点运算在这种非常特殊的情况下,它比默认或双算术更“准确”。

此外,如果我将0.2更改为0.1,甚至0.3,我似乎在所有情况下都得到了正确答案。

所以如果我加0.1 + 0.1,我会在所有情况下都正确地得到0.2,我注意到这个奇怪的事情发生在我添加0.1 + 0.2

我甚至在方法中尝试了strictfp,认为这可能会让事情变得准确,但事实并非如此,我再次试图了解这里发生的事情,而不是如何解决它。

我和男生一样困惑。

0 个答案:

没有答案