File APIs for Java Developers
Manipulate DOC, XLS, PPT, PDF and many others from your application.
http://aspose.com/file-tools
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

Please explain the concept of Float.Nan

 
Rajesh k Jha
Ranch Hand
Posts: 72
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
Posts: 327
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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.
 
Nitish Bangera
Ranch Hand
Posts: 537
Eclipse IDE Java Python
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
 
Lucas Smith
Ranch Hand
Posts: 808
1
Android Eclipse IDE Java
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You must notice that:
float f1=Float.NaN;
float f2=f1;
f1==f2 => FALSE
 
Jesper de Jong
Java Cowboy
Saloon Keeper
Pie
Posts: 15150
31
Android IntelliJ IDE Java Scala Spring
  • 0
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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.
  •  
    It is sorta covered in the JavaRanch Style Guide.
    • Post Reply
    • Bookmark Topic Watch Topic
    • New Topic