1

例如
,如果需要在条件语句中sqrt(x) = 10
首选避免Real domain(double/float)
并建议使用时采取行动Integer domain

编码

int x = 100;

// Real (double/float) domain
if (Math.sqrt(x) == 10) { // Not recommended    
    // .... Action
}

// Integer domain
if (x == 10 * 10) { // recommended      
    // .... Action
}  

为什么我

4

1 回答 1

4

因为内存中的浮点表示使用IEEE754,这并不准确。这意味着您可能会遇到以下情况:

5.0 + 5.0 == 10.00000034634

而不是 10。在 IEEE754 中,

10 != 10.00000035246

而是使用公差,使用差的绝对值:

if (Math.abs(Math.sqrt(100) - 10) < 0.00001)
{

}
于 2013-10-30T16:48:47.250 回答