not a number double

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • oll3i
    Contributor
    • Mar 2007
    • 679

    not a number double

    why
    distance+=Math. sqrt(Math.pow(( double)wiersz_a nalizowany[i],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[i],(double)2));

    returns NaN

    thank YOU
  • JosAH
    Recognized Expert MVP
    • Mar 2007
    • 11453

    #2
    Originally posted by oll3i
    why
    distance+=Math. sqrt(Math.pow(( double)wiersz_a nalizowany[i],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[i],(double)2));

    returns NaN

    thank YOU
    Remember the poor men's debugger System.out.prin tln()? Apply it.
    (hint: negative values don't go well for the Math.sqrt() method).

    kind regards,

    Jos

    Comment

    • odefta
      New Member
      • Jul 2007
      • 18

      #3
      Correct.
      make a loop and ...
      System,out.prin tln(czyNajblizs zySasiad[i])

      Originally posted by JosAH
      Remember the poor men's debugger System.out.prin tln()? Apply it.
      (hint: negative values don't go well for the Math.sqrt() method).

      kind regards,

      Jos

      Comment

      • oll3i
        Contributor
        • Mar 2007
        • 679

        #4
        i did system.out.prin tlns and the values are correct they are 0 ,1 ,2 or 3
        because test data are rows consisted of 0 1 2 or 3 values

        Comment

        • JosAH
          Recognized Expert MVP
          • Mar 2007
          • 11453

          #5
          Originally posted by oll3i
          i did system.out.prin tlns and the values are correct they are 0 ,1 ,2 or 3
          because test data are rows consisted of 0 1 2 or 3 values
          For all the operands of your expression print out all the operands and the
          values of the evaluated (sub) expressions. a NaN (Not a Number) doesn't come
          from nowhere.

          kind regards,

          Jos

          Comment

          • oll3i
            Contributor
            • Mar 2007
            • 679

            #6
            [code=java]
            public double liczDystans(Int eger[] czyNajblizszySa siad){
            for(int i=0;i<liczbaCol umn;i++){
            dystans+=Math.s qrt(Math.pow((d ouble)wiersz_an alizowany[i],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[i],(double)2));

            System.out.prin tln("wiersz_ana lizowany[i]="+wiersz_anali zowany[i]);
            System.out.prin tln("Math.pow(( double)wiersz_a nalizowany[i],(double)2)"+Ma th.pow((double) wiersz_analizow any[i],(double)2));

            System.out.prin tln("czyNajbliz szySasiad[i]="+czyNajblizsz ySasiad[i]);
            System.out.prin tln("Math.pow(( double)czyNajbl izszySasiad[i],(double)2)"+Ma th.pow((double) czyNajblizszySa siad[i],(double)2));

            System.out.prin tln("dystans="+ dystans);
            }
            return dystans;
            }
            [/code]


            System.out.prin tln("Math.pow(( double)wiersz_a nalizowany[i],(double)2)"+Ma th.pow((double) wiersz_analizow any[i],(double)2));

            and
            System.out.prin tln("Math.pow(( double)czyNajbl izszySasiad[i],(double)2)"+Ma th.pow((double) czyNajblizszySa siad[i],(double)2));

            return a double sqrt

            Math.sqrt(Math. pow((double)wie rsz_analizowany[i],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[i],(double)2));

            returns nan ?

            Comment

            • oll3i
              Contributor
              • Mar 2007
              • 679

              #7
              it may happen that in my for loop dystans is equal to NaN but what happens if i add a double to NaN does it still return NaN ?

              Comment

              • r035198x
                MVP
                • Sep 2006
                • 13225

                #8
                Originally posted by oll3i
                [code=java]
                public double liczDystans(Int eger[] czyNajblizszySa siad){
                for(int i=0;i<liczbaCol umn;i++){
                dystans+=Math.s qrt(Math.pow((d ouble)wiersz_an alizowany[i],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[i],(double)2));

                System.out.prin tln("wiersz_ana lizowany[i]="+wiersz_anali zowany[i]);
                System.out.prin tln("Math.pow(( double)wiersz_a nalizowany[i],(double)2)"+Ma th.pow((double) wiersz_analizow any[i],(double)2));

                System.out.prin tln("czyNajbliz szySasiad[i]="+czyNajblizsz ySasiad[i]);
                System.out.prin tln("Math.pow(( double)czyNajbl izszySasiad[i],(double)2)"+Ma th.pow((double) czyNajblizszySa siad[i],(double)2));

                System.out.prin tln("dystans="+ dystans);
                }
                return dystans;
                }
                [/code]


                System.out.prin tln("Math.pow(( double)wiersz_a nalizowany[i],(double)2)"+Ma th.pow((double) wiersz_analizow any[i],(double)2));

                and
                System.out.prin tln("Math.pow(( double)czyNajbl izszySasiad[i],(double)2)"+Ma th.pow((double) czyNajblizszySa siad[i],(double)2));

                return a double sqrt

                Math.sqrt(Math. pow((double)wie rsz_analizowany[i],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[i],(double)2));

                returns nan ?
                Print the arguments you're passing to Math.pow as well.
                I'm sure you have this open while doing this.

                Comment

                • JosAH
                  Recognized Expert MVP
                  • Mar 2007
                  • 11453

                  #9
                  Originally posted by oll3i
                  it may happen that in my for loop dystans is equal to NaN but what happens if i add a double to NaN does it still return NaN ?
                  Yes, any operator yields NaN or false when at least one of the operands equals
                  Nan. Even NaN == NaN is false as well as NaN != NaN. It's Not a Number ;-)

                  kind regards,

                  Jos

                  Comment

                  • oll3i
                    Contributor
                    • Mar 2007
                    • 679

                    #10
                    i changed it to


                    dystans=Math.sq rt(Math.pow((do uble)wiersz_ana lizowany[0],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[0],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[1],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[1],(double)2) +
                    Math.pow((doubl e)wiersz_analiz owany[2],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[2],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[3],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[3],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[4],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[4],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[5],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[5],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[6],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[6],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[7],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[7],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[8],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[8],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[9],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[9],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[10],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[10],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[11],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[11],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[12],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[12],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[13],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[13],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[14],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[14],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[15],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[15],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[16],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[16],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[17],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[17],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[18],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[18],(double)2)+
                    Math.pow((doubl e)wiersz_analiz owany[19],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[19],(double)2)
                    );


                    but still distance is 0.0 or NaN Math.pow returns correct numbers i checked that it's sqrt that returns NaN or 0.0 where the result should be
                    eg 6.2 (first row of my test data)i counted

                    Comment

                    • JosAH
                      Recognized Expert MVP
                      • Mar 2007
                      • 11453

                      #11
                      Originally posted by oll3i
                      i changed it to


                      dystans=Math.sq rt(Math.pow((do uble)wiersz_ana lizowany[0],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[0],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[1],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[1],(double)2) +
                      Math.pow((doubl e)wiersz_analiz owany[2],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[2],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[3],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[3],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[4],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[4],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[5],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[5],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[6],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[6],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[7],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[7],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[8],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[8],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[9],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[9],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[10],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[10],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[11],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[11],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[12],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[12],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[13],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[13],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[14],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[14],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[15],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[15],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[16],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[16],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[17],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[17],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[18],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[18],(double)2)+
                      Math.pow((doubl e)wiersz_analiz owany[19],(double)2)-Math.pow((doubl e)czyNajblizszy Sasiad[19],(double)2)
                      );


                      but still distance is 0.0 or NaN Math.pow returns correct numbers i checked that it's sqrt that returns NaN or 0.0 where the result should be
                      eg 6.2 (first row of my test data)i counted
                      Basically you're doing:

                      [code=java]
                      Math.sqrt(Math. pow(x, 2)-Math.pow(y, 2))
                      [/code]

                      (shouldn't that - be a +?)

                      Note that when |x| < |y| the square root doesn't exist.
                      Also note that the IEEE/459 floating point format knows about *two* zeros: +0
                      and -0; the square root of -0 is also a NaN if I'm not mistaken.

                      kind regards,

                      Jos

                      ps. no insult intended, but when you want your software to be maintained,
                      worked on etc. in an international environment, English variable names are to
                      be preferred. Really, I've been there, done that.

                      Comment

                      • r035198x
                        MVP
                        • Sep 2006
                        • 13225

                        #12
                        Originally posted by JosAH
                        Basically you're doing:

                        [code=java]
                        Math.sqrt(Math. pow(x, 2)-Math.pow(y, 2))
                        [/code]

                        (shouldn't that - be a +?)

                        Note that when |x| < |y| the square root doesn't exist.
                        Also note that the IEEE/459 floating point format knows about *two* zeros: +0
                        and -0; the square root of -0 is also a NaN if I'm not mistaken.

                        kind regards,

                        Jos

                        ps. no insult intended, but when you want your software to be maintained,
                        worked on etc. in an international environment, English variable names are to
                        be preferred. Really, I've been there, done that.
                        You've written software in (what's the Dutch language called) before?

                        Comment

                        • oll3i
                          Contributor
                          • Mar 2007
                          • 679

                          #13
                          usually i use english names for variables but it's only college project so ...

                          Comment

                          • oll3i
                            Contributor
                            • Mar 2007
                            • 679

                            #14
                            it's Euclidean Distance i'm counting should be -

                            Comment

                            • JosAH
                              Recognized Expert MVP
                              • Mar 2007
                              • 11453

                              #15
                              Originally posted by r035198x
                              You've written software in (what's the Dutch language called) before?
                              Yep, and my instructor and professor kicked that habit out of me when I was a
                              youngster ;-)

                              The Dutch speak Dutch (who'd have thought it!) Afrikaans and Flemish and
                              Surinaams are all related. (the Flemish even claim that their language *is*
                              Dutch and the Dutch speak a dialect, which I think is true).

                              kind regards,

                              Jos

                              Comment

                              Working...