2013-11-09 33 views
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怎麼樣?

對不起,如果這之前回答,我無法找到答案。

+1

C絕對不能保證這一點。一個可能在一個寄存器中,另一個可能在內存中,可以使用不同的精度。 –

+0

@DavidSchwartz:C要求將值分配給目標的名義類型。只有中間值可以用額外的精度來計算。 –

回答

2

Java和C都要求賦值將指定值轉換爲目標類型,而不需要額外的精度或範圍。進一步簡單的賦值就不能改變這個值。

Java中,這在5.1.13(值集轉換)和5.2(分配轉換)中指定。

C 2011 (N1570),這在5.2.4.2.2中提到9.

+0

謝謝你的參考 –

相關問題