0

我知道将浮点数与相等性进行比较是一个坏主意。我的问题是比较来自同一计算的数字是否安全。例如(java代码)

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 怎么样?

抱歉,如果之前回答过这个问题,我无法找到答案。

4

1 回答 1

2

Java 和 C 都要求赋值将分配的值转换为没有额外精度或范围的目标类型。进一步的简单赋值不能改变值。

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

C 2011 (N1570)中,这在 5.2.4.2.2 9 中有所提及。

于 2013-11-09T21:53:31.503 回答