Solved

Double.NaN != Double.NaN

Posted on 2007-11-28
5
1,509 Views
Last Modified: 2008-09-16
The code below does not enter the 'then'...why?

double d = Double.NaN;
if (d == Double.NaN) {
  System.out.println ("Does not get here");
}
0
Comment
Question by:allelopath
  • 2
  • 2
5 Comments
 
LVL 92

Accepted Solution

by:
objects earned 500 total points
ID: 20369844
should use:

if (Double.isNaN(d)) {
0
 
LVL 92

Expert Comment

by:objects
ID: 20369872
Equality comparison between two NaN numbers is always false.
0
 
LVL 7

Expert Comment

by:UrosVidojevic
ID: 20369900
When comparing two Double.NaN values, == operator always gives false.

You can use equals function which Double class inherited from Object class:

public boolean equals(Object obj)

    Compares this object against the specified object. The result is true if and only if the argument is not null and is a Double object that represents a double that has the identical bit pattern to the bit pattern of the double represented by this object. For this purpose, two double values are considered to be the same if and only if the method doubleToLongBits(double) returns the same long value when applied to each.

    Note that in most cases, for two instances of class Double, d1 and d2, the value of d1.equals(d2) is true if and only if

           d1.doubleValue() == d2.doubleValue()
         

    also has the value true. However, there are two exceptions:

        * If d1 and d2 both represent Double.NaN, then the equals method returns true, even though Double.NaN==Double.NaN has the value false.
        * If d1 represents +0.0 while d2 represents -0.0, or vice versa, the equal test has the value false, even though +0.0==-0.0 has the value true. This allows hashtables to operate properly.

    Overrides:
        equals in class Object

    Parameters:
        obj - the object to compare with.
    Returns:
        true if the objects are the same; false otherwis
0
 
LVL 1

Author Comment

by:allelopath
ID: 20369918
UrosVidojevic:
Thanks for all the info. I guess I accepted objects answer while you were typing. Sorry.
0
 
LVL 7

Expert Comment

by:UrosVidojevic
ID: 20369976
It's OK. You are given the right answer, that is important. :-)
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

For customizing the look of your lightweight component and making it look opaque like it was made of plastic.  This tip assumes your component to be of rectangular shape and completely opaque.   (CODE)
Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:
This video teaches viewers about errors in exception handling.

932 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now