2013-01-21 80 views
5

有沒有這種情況,在給定相同輸入的情況下,這兩種方法會返回不同的值?float vs double(用Java語言編寫)

int compare1(float a, float b) 
{ 
    return Double.compare(a, b); 
} 

int compare2(float a, float b) 
{ 
    return Float.compare(a, b); 
} 

同樣的道理,這是真的(或假的),任何數量的在Java的浮動可儲存可以存儲在一個java的Double不會丟失任何精度?

謝謝

回答

8

是的;將雙打投注到浮標可以產生不同的結果。

如果 ab之間的差異過小的浮動展現出來, compare2()將返回 0compare1()不會。


您剛編輯問題以反轉您所問的問題。新的答案是:

我幾乎可以肯定,他們將永遠是一樣的。

+0

我關於Float是Double子集的問題呢? – user1508893

+0

@ user1508893:我確信它確實是這樣,但我不確定。 – SLaks

+0

其實,我在這個問題上犯了一些錯誤。只是更新了它。抱歉! – user1508893

1

A double只爲您提供比float小得多的位數。如果所有那些額外的位都是零,那麼你的浮點值就是相同的。所以是的,所有float s都可以轉換成double s而不會失去精度。

+1

它也給你1023的最大指數爲127. – EJP

+0

@EJP:非常真實! – Eduardo