Floating point 赋值是否可以更改浮点数的值?
我知道比较浮点数和等式是个坏主意。我的问题是,比较来自同一计算的数字是否安全。例如(java代码) 看起来它们应该相等,但我不确定这是否真的是真的,因为FPU寄存器。JVM是否保证它们是平等的?还有一个额外的问题:C怎么样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和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?
}