how to solve cos 90 problem in java?

This question already has an answer here:

  • Is floating point math broken? 23 answers

  • 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.


    Just run your source and it returns:

    cos 90 : 1.8369701987210297E-16
    sin 90 : 4.0
    

    That's absolutely correct. The first value is nearly 0. The second is 4 as expected.

    3 * cos(90°) = 3 * 0 = 0

    Here you have to read the Math.toRadians() documentation which says:

    Converts an angle measured in degrees to an approximately equivalent angle measured in radians. The conversion from degrees to radians is generally inexact.

    Update: You can use for example the MathUtils.round() method from the Apache Commons repository and round the output to say 8 decimals, like this:

    System.out.println("cos 90 : " + MathUtils.round(x, 8));
    

    That will give you:

    cos 90 : 0.0
    sin 90 : 4.0
    

    尝试这个:

    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)
        {
            if( ((Math.toDegrees(theta) / 90) % 2) == 1)
            {
                x = x*0;
                y = y*Math.sin(theta);
            }
            else if( ((Math.toDegrees(theta) / 90) % 2) == 0)
            {
                x = x*Math.cos(theta);
                y = y*0; 
            }
            else
            {
               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));
        }
    }
    
    链接地址: http://www.djcxy.com/p/27460.html

    上一篇: 原始浮点数和双精度浮点数有多少个小数位?

    下一篇: 如何解决在Java中的COS 90问题?