我知道将浮点数与平等进行比较是一个坏主意。我的问题是,比较来自同一计算的数字是否安全。例如。 (java code)
double doSomething(double d) {
return d;
}
void test() {
double result = computation();
double result2 = result;
Double result3 = new Double(result)
Double result4 = new Double(result2)
double result5 = doSomething(result2)
//etc.
//now do all of the above compare equal? i.e.
boolean b = result4.doubleValue() == result //is this true?
//and for other combinations?
}
它们似乎应该是平等的,但我不确定它是否真的是因为FPU寄存器。 JVM是否保证它们是平等的?还有一个额外的问题:C怎么样?
很抱歉,如果之前得到了解答,我就无法找到答案。
答案 0 :(得分:2)
Java和C都要求分配将指定的值转换为目标类型,而不需要额外的精度或范围。进一步简单的分配就无法改变价值。
在Java中,这在5.1.13(值集转换)和5.2(转让转换)中指定。
在C 2011 (N1570)中,这在5.2.4.2.2 9中提到。