aspose file tools*
The moose likes Programmer Certification (SCJP/OCPJP) and the fly likes Please explain the concept of Float.Nan Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login
JavaRanch » Java Forums » Certification » Programmer Certification (SCJP/OCPJP)
Bookmark "Please explain the concept of Float.Nan" Watch "Please explain the concept of Float.Nan" New topic
Author

Please explain the concept of Float.Nan

Rajesh k Jha
Ranch Hand

Joined: May 10, 2009
Posts: 72
when i run this programme it outputs "false and F3=Nan" While answer says it should be f=4.2.
I am a bit confused which one is right and how, I just went through all the detail of Float.Nan and found that f=4.2 is right but why output is coming like F=Nan,
Please explain

Jason Irwin
Ranch Hand

Joined: Jun 09, 2009
Posts: 327
How are you running the code? Assertions on or off?

f2 is NaN (line 5, f2=f1).

With assertions off, the "assert" statement won't do anything.
f3 become 1.5
Then f3+f2 is i.1 + NaN which is always NaN.

If you run with assertions on, you'll get a different answer as the assert will cause an axception (NaN==NaN is false).

Is this from K&B? You should quote your sources.


SCJP6
Nitish Bangera
Ranch Hand

Joined: Jul 15, 2009
Posts: 537

If assertions are on then f = 4.2 is the answer. If its not then f = NaN. use java -ea AssertTest for f = 4.2


[ SCJP 6.0 - 90% ] , JSP, Servlets and Learning EJB.
Try out the programs using a TextEditor. Textpad - Java 6 api
Lucas Smith
Ranch Hand

Joined: Apr 20, 2009
Posts: 804
    
    1

You must notice that:
float f1=Float.NaN;
float f2=f1;
f1==f2 => FALSE


SCJP6, SCWCD5, OCE:EJBD6.
BLOG: http://leakfromjavaheap.blogspot.com
Jesper de Jong
Java Cowboy
Saloon Keeper

Joined: Aug 16, 2005
Posts: 14146
    
  18

Section 15.21.1 of the Java Language Specification:
Floating-point equality testing is performed in accordance with the rules of the IEEE 754 standard:

  • If either operand is NaN, then the result of == is false but the result of != is true. Indeed, the test x!=x is true if and only if the value of x is NaN. (The methods Float.isNaN and Double.isNaN may also be used to test whether a value is NaN.)
  • Positive zero and negative zero are considered equal. Therefore, -0.0==0.0 is true, for example.
  • Otherwise, two distinct floating-point values are considered unequal by the equality operators. In particular, there is one value representing positive infinity and one value representing negative infinity; each compares equal only to itself, and each compares unequal to all other values.

  • Subject to these considerations for floating-point numbers, the following rules then hold for integer operands or for floating-point operands other than NaN:
  • The value produced by the == operator is true if the value of the left-hand operand is equal to the value of the right-hand operand; otherwise, the result is false.
  • The value produced by the != operator is true if the value of the left-hand operand is not equal to the value of the right-hand operand; otherwise, the result is false.


  • Java Beginners FAQ - JavaRanch SCJP FAQ - The Java Tutorial - Java SE 7 API documentation
    Scala Notes - My blog about Scala
     
    I agree. Here's the link: http://aspose.com/file-tools
     
    subject: Please explain the concept of Float.Nan