可以赋值改变浮点数的值吗?

时间:2013-11-09 19:06:34

标签: floating-point jvm

我知道将浮点数与平等进行比较是一个坏主意。我的问题是,比较来自同一计算的数字是否安全。例如。 (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怎么样?

很抱歉,如果之前得到了解答,我就无法找到答案。

1 个答案:

答案 0 :(得分:2)

Java和C都要求分配将指定的值转换为目标类型,而不需要额外的精度或范围。进一步简单的分配就无法改变价值。

Java中,这在5.1.13(值集转换)和5.2(转让转换)中指定。

C 2011 (N1570)中,这在5.2.4.2.2 9中提到。