2013-01-21 21 views
5

C'è mai un caso in cui questi due metodi restituirebbero valori diversi in base agli stessi input?float vs double (in Java)

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

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

Per lo stesso motivo, è vero (o falso) che qualsiasi numero memorizzabili in Float di un Java può essere memorizzata in doppio del Java senza perdere la precisione?

Grazie

risposta

8

Sì; la fusione dei doppi e dei galleggianti può dare risultati diversi.

Se la differenza tra a e b è troppo piccola per mostrare in un galleggiante, compare2() sarà tornare 0 che compare1() no.


appena modificato la domanda di invertire quello che stavi chiedendo. La nuova risposta è:

Sono quasi certo che saranno sempre gli stessi.

+0

E la mia domanda riguardo al fatto che Float sia un sottoinsieme di Double? – user1508893

+0

@ user1508893: Sono ragionevolmente certo che lo sia, ma non lo so per certo. – SLaks

+0

In realtà, ho fatto qualche errore nella domanda. L'ho appena aggiornato. Scusate! – user1508893

1

A double fornisce solo più bit di precisione oltre la posizione decimale rispetto a float. Se tutti quei bit aggiuntivi sono zero, si ha lo stesso valore del float. Quindi sì, tutti i float s possono essere convertiti in double s senza perdere precisione.

+1

Ti dà anche un esponente massimo di 1023 rispetto a 127. – EJP

+0

@EJP: molto vero! – Eduardo