Win a copy of The Journey To Enterprise Agility this week in the Agile and Other Processes forum! And see the welcome thread for 20% off.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
programming forums Java Mobile Certification Databases Caching Books Engineering Micro Controllers OS Languages Paradigms IDEs Build Tools Frameworks Application Servers Open Source This Site Careers Other all forums
this forum made possible by our volunteer staff, including ...
Marshals:
  • Jeanne Boyarsky
  • Liutauras Vilda
  • Campbell Ritchie
  • Tim Cooke
  • Bear Bibeault
Sheriffs:
  • Paul Clapham
  • Junilu Lacar
  • Knute Snortum
Saloon Keepers:
  • Ron McLeod
  • Ganesh Patekar
  • Tim Moores
  • Pete Letkeman
  • Stephan van Hulst
Bartenders:
  • Carey Brown
  • Tim Holloway
  • Joe Ess

Nan and ==  RSS feed

 
Ranch Hand
Posts: 42
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Source: http://www.geocities.com/skmajji/Main.html

why the following code prints "True"? It's a comparison between
two constants!?
 
Sheriff
Posts: 11343
Java Mac Safari
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator

Originally posted by P Ventura:
...why the following code prints "True"? It's a comparison between
two constants!? ...


Actually, it prints "False."

Yes, these are "constants," but they are constants representing things that are Not a Number. And because these are not real numbers, they cannot be compared in a real ordinal manner. That is, from a real number perspective, we can't say that one is greater than, less than, or equal to another. So these operations return false (with the exception of NaN != NaN, which must return true since NaN == NaN returns false).

For example, consider that NaN might represent Math.sqrt(-1), or it might represent Math.sqrt(-987654). Neither of these are real numbers, but they're not equal either.
 
Ranch Hand
Posts: 186
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
i wonder if that will be even on the exam?
it is not mentioned in the K&B or Apress.
 
Greenhorn
Posts: 9
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
It is covered in K&B. I just finished reading it and remember them talking about it. They do not cover it in much detail, however, it is just a simple concept that you should be able to remember.
 
Ranch Hand
Posts: 159
C++ Eclipse IDE Java
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
pls tell us what page in K&B this is handled? as far as I remember this used to be on the exam for the 1.4 but isn't anymore for java 5.
I wouldn't spend to much time on it...
 
Ranch Hand
Posts: 513
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
I'm pretty sure that none of the following will be tested in the SCJP exam, but just to add to the discussion:

Other interesting (and probably non-intuitive) double behaviors:
  • Double n1 = Double.NaN;

  • Double n2 = Double.NaN;
    System.out.println(n1.equals(n2)); // prints true even though Double.NaN != Double.NaN

  • System.out.println(-0.0 == +0.0); // prints true


  • Double n1 = -0.0;

  • Double n2 = +0.0;
    System.out.println(n1.equals(n2)); // prints false even though -0.0 == +0.0
    [ November 14, 2007: Message edited by: Kelvin Lim ]
     
    P Ventura
    Ranch Hand
    Posts: 42
    • Mark post as helpful
    • send pies
    • Quote
    • Report post to moderator
    I agree Kelvin.... ther're very non-intuitive and confusing. Let's hope that aren't in the exam!
     
    • Post Reply Bookmark Topic Watch Topic
    • New Topic
    Boost this thread!