how to solve cos 90 problem in java?

David King picture David King · Mar 10, 2011 · Viewed 11.5k times · Source

I have some problems with calculating cosinus 90 in Java using Math.cos function :

public class calc{
      private double x;
      private double y;

      public calc(double x,double y){
                   this.x=x;
                   this.y=y;
      }

      public void print(double theta){
           x = x*Math.cos(theta);
           y = y*Math.sin(theta);
           System.out.println("cos 90 : "+x);
           System.out.println("sin 90 : "+y);
      }

      public static void main(String[]args){
           calc p = new calc(3,4);
           p.print(Math.toRadians(90));

      }

}

When I calculate cos90 or cos270, it gives me absurb values. It should be 0. I tested with 91 or 271, gives a near 0 which is correct.

what should I do to make the output of cos 90 = 0? so, it makes the output x = 0 and y = 4.

Thankful for advice

Answer

Ignacio Vazquez-Abrams picture Ignacio Vazquez-Abrams · Mar 10, 2011

What you're getting is most likely very, very small numbers, which are being displayed in exponential notation. The reason you're getting them is because pi/2 is not exactly representable in IEEE 754 notation, so there's no way to get the exact cosine of 90/270 degrees.