Search code examples
javamathangletrigonometry

Java Math.cos(Math.toRadians(<angle>)) returns weird values


I've got a little Problem with the Math.cos() method. I know, I have to convert the angle to Radians before using Math.cos(). But if I just do:

System.out.println(Math.cos(Math.toRadians(90));

It outputs: 6.123233995736766E-17

Math.sin() is working well.


Solution

  • From trigonometry:

    sin x ~= x, for small values of x
    sin x = cos x+pi/2
    

    Because pi/2 can't be represented exactly in IEEE-754 Floating point, it means, that it must be off by some value x, i.e it is represented by pi/2 +- x, where x < the least significant bit in the floating point system. Which in this case is 2^-53 = 1.1102e-16.

    In this particular case x ~= 6.123233995736766E-17, which is about 55% of the maximum error. So, it's a rather good result...