Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

float vs double (in Java)

Is there ever a case where these two methods would return different values given the same inputs?

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

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

By the same token, is it true (or false) that any number storable in a java's Float can be stored in a java's Double without losing any precision?

Thanks

like image 708
user1508893 Avatar asked Jan 21 '13 17:01

user1508893


3 Answers

Yes; casting doubles to floats can yield different results.

If the difference between a and b is too small to show up in a float, compare2() will return 0 whereas compare1() would not.


You just edited the question to reverse what you were asking. The new answer is:

I'm almost certain that they will always be the same.

like image 76
SLaks Avatar answered Oct 05 '22 13:10

SLaks


Every float can be represented exactly as a double. From this it follows that the two functions always return the same result.

like image 30
NPE Avatar answered Oct 05 '22 12:10

NPE


A double just gives you more bits of precision beyond the decimal place than the float. If all those those extra bits are zero then you have the same value as the float. So yes, all floats can be converted to doubles without losing precision.

like image 20
Eduardo Avatar answered Oct 05 '22 11:10

Eduardo