Ransika deSilva

Ranch Hand

Posts: 524

posted 13 years ago

Hi!,

System.out.println(Math.min(-0,0));

Why does this print 0, instead of -0.0. I am asking becuase in the Math class -0 < 0 and in the same time the min() returns a double value.So there should be a fractional part as well. Don't you think so.

Thank you very much..

System.out.println(Math.min(-0,0));

Why does this print 0, instead of -0.0. I am asking becuase in the Math class -0 < 0 and in the same time the min() returns a double value.So there should be a fractional part as well. Don't you think so.

Thank you very much..

SCJP 1.4, SCMAD 1.0<br />SCWCD, SCBCD (in progress)

Vicken Karaoghlanian

Ranch Hand

Posts: 522

posted 13 years ago

ransika, first of all the signatures for the Math.min() methods are:

min(double,double) returns double

min(float,float) returns float

min(long,long) returns long

min(int,int) returns int

And secondly, negative zero is not less that positive zero, as a matter of fact they are both equal.

System.out.println(-0 == 0);

Now when you call Math.min(-0,0) the 4th overloaded method is invoked (the one which return integer), thus outputting positive zero because integer and long values doesn't have an implementation for negative zero (float and double values do implement negative zero however).

Hope this helps.

min(double,double) returns double

min(float,float) returns float

min(long,long) returns long

min(int,int) returns int

And secondly, negative zero is not less that positive zero, as a matter of fact they are both equal.

System.out.println(-0 == 0);

Now when you call Math.min(-0,0) the 4th overloaded method is invoked (the one which return integer), thus outputting positive zero because integer and long values doesn't have an implementation for negative zero (float and double values do implement negative zero however).

Hope this helps.

- Do not try and bend the spoon. That's impossible. Instead, only try to realize the truth. - What truth? - That there is no spoon!!!

Yan Lee

Ranch Hand

Posts: 94

posted 13 years ago

From the JLS:

--------------

"Positive zero and negative zero compare equal; thus the result of the expression 0.0==-0.0 is true and the result of 0.0>-0.0 is false. But other operations can distinguish positive and negative zero; for example, 1.0/0.0 has the value positive infinity, while the value of 1.0/-0.0 is negative infinity."

--------------

"Positive zero and negative zero compare equal; thus the result of the expression 0.0==-0.0 is true and the result of 0.0>-0.0 is false. But other operations can distinguish positive and negative zero; for example, 1.0/0.0 has the value positive infinity, while the value of 1.0/-0.0 is negative infinity."

It is sorta covered in the JavaRanch Style Guide. |