使用Math.cos(Math.toRadians(90))得到结果为6.123233995736766E-17。
但使用Math.toDegrees(Math.acos(0))却得到结果为90,证明COS 90度的结果应该为0.
使用Math.cos(Math.acos(0)))得到的结果仍然是6.123233995736766E-17。同样的,计算 COS 270度,450度的结果也不为0。
使用SIN函数并没有出现这样的问题。
在这里求助各位大侠了!

解决方案 »

  1.   

    toRadians(double angdeg) 
              将用度数测量的角转换为近似相等的用弧度测量的角。所以得不到90度的精确弧度值。暂时只能这样回答了。
      

  2.   

    double和float并不是完全精确的,会有很小的误差
      

  3.   

    double 的精度有限,导致 PI 的精度有限,所以在 Java 中不能进行高精度的数学计算。要获得科学和工程计算的精度值,需要采用专业的数学软件。
      

  4.   

    Java中PI的定义,精度只有20位,
    public static final double PI = 3.14159265358979323846;
    每经过一次计算精度都会下降
    假设每次计算精度之减少1位
    那么Math.cos(Math.toRadians(90))至少有两次计算,所以精度至少会减少两位,变为18位
    再看计算结果6.123233995736766E-17
    精度可以到小数点后面17位,所以计算结果应该是可以接受的。“Math.toDegrees(Math.acos(0))却得到结果为90”
    其实结果也不是正好90,但小数点后面17位的精度,浮点数在90浮点数附近无法表示
    见下面代码,输出结果是90
    double n = 90;
    n += 0.00000000000000006123233995736766;
    System.out.println(n);这个现象也充分说明了,浮点数比较不能使用等号,只能使用大于小于号比较
    浮点数的运算很难得到一个准确的结果