Floating point 赋值是否可以更改浮点数的值?

Floating point 赋值是否可以更改浮点数的值?,floating-point,jvm,Floating Point,Jvm,我知道比较浮点数和等式是个坏主意。我的问题是,比较来自同一计算的数字是否安全。例如(java代码) 看起来它们应该相等,但我不确定这是否真的是真的,因为FPU寄存器。JVM是否保证它们是平等的?还有一个额外的问题:C怎么样 很抱歉,如果以前回答过这个问题,我无法找到答案。Java和C都要求赋值将赋值转换为目标类型,无需额外的精度或范围。进一步的简单赋值则无法更改该值 在中,这在5.1.13(值集转换)和5.2(赋值转换)中有规定 在中,5.2.4.2.2 9中提到了这一点。C肯定不能保证这一点。

我知道比较浮点数和等式是个坏主意。我的问题是,比较来自同一计算的数字是否安全。例如(java代码)

看起来它们应该相等,但我不确定这是否真的是真的,因为FPU寄存器。JVM是否保证它们是平等的?还有一个额外的问题:C怎么样


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

Java和C都要求赋值将赋值转换为目标类型,无需额外的精度或范围。进一步的简单赋值则无法更改该值

在中,这在5.1.13(值集转换)和5.2(赋值转换)中有规定


在中,5.2.4.2.2 9中提到了这一点。

C肯定不能保证这一点。一个可能在寄存器中,另一个可能在内存中,这可以使用不同的精度。@DavidSchwartz:C要求赋值将一个值舍入到目标的标称类型。只有中间值才能计算出更高的精度。谢谢您的参考
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?
}