如何解决在Java中的COS 90问题?

这个问题在这里已经有了答案:

  • 浮点数学是否被破坏? 23个答案

  • 你得到的很可能是非常非常小的数字,它们以指数表示法显示。 你得到它们的原因是因为pi / 2在IEEE 754中不能完全表示,所以没有办法获得90/270度的精确余弦。


    只需运行你的源代码并返回:

    cos 90 : 1.8369701987210297E-16
    sin 90 : 4.0
    

    这是绝对正确的。 第一个值接近0.第二个值如预期的那样。

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

    在这里,您必须阅读Math.toRadians()文档,其中说:

    将以度数度量的角度转换为以弧度测量的近似等效角度。 从度数到弧度的转换通常是不精确的。

    更新:您可以使用例如Apache Commons存储库中的MathUtils.round()方法,并将输出舍入为8位小数,如下所示:

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

    这会给你:

    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/27459.html

    上一篇: how to solve cos 90 problem in java?

    下一篇: Javascript Math Rounding