使用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函数并没有出现这样的问题。
在这里求助各位大侠了!
但使用Math.toDegrees(Math.acos(0))却得到结果为90,证明COS 90度的结果应该为0.
使用Math.cos(Math.acos(0)))得到的结果仍然是6.123233995736766E-17。同样的,计算 COS 270度,450度的结果也不为0。
使用SIN函数并没有出现这样的问题。
在这里求助各位大侠了!
将用度数测量的角转换为近似相等的用弧度测量的角。所以得不到90度的精确弧度值。暂时只能这样回答了。
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);这个现象也充分说明了,浮点数比较不能使用等号,只能使用大于小于号比较
浮点数的运算很难得到一个准确的结果