2013-01-21 18 views
5

Czy istnieje przypadek, w którym te dwie metody zwrócą różne wartości przy tych samych danych wejściowych?float vs double (w Javie)

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

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

Tym samym, jest to prawdziwe (lub fałszywe), że każda liczba magazynować w Float Java mogą być przechowywane w Java Podwójne bez utraty precyzji?

Dzięki

Odpowiedz

8

Tak; odlewanie dubletów do pływaków może dawać różne wyniki.

Jeżeli różnica między a i b jest zbyt mała, aby pokazać się w obrocie, compare2() powróci 0 natomiast compare1() nie.


Właśnie zredagowałeś pytanie, aby odwrócić to, o co prosiłeś. Nowa odpowiedź brzmi:

Jestem prawie pewien, że zawsze będą takie same.

+0

Co z moim pytaniem o Float będącym podzbiorem Double? – user1508893

+0

@ user1508893: Jestem pewien, że tak, ale nie wiem na pewno. – SLaks

+0

Właściwie popełniłem błąd w pytaniu. Właśnie go zaktualizowałem. Przepraszam! – user1508893

1

A double daje tylko więcej bitów dokładności poza miejscem dziesiętnym niż float. Jeśli wszystkie te dodatkowe bity są równe zeru, masz taką samą wartość jak zmienna. Tak, wszystkie float s można przekonwertować na double s bez utraty dokładności.

+1

Daje także maksymalny wykładnik 1023 w stosunku do 127. – EJP

+0

@EJP: bardzo prawdziwe! – Eduardo