Sin / Cos无法在java / android中运行

时间:2012-08-03 13:23:10

标签: java android

说我有

Log.e("deg: "+dd,  "X:"+ Math.sin( Math.toRadians(dd) ) +"| Y:"+Math.cos( Math.toRadians(dd) ) );

如果dd = 180,则sin应为0且cos为-1,对吗?但它超过了

度:180 X:1.2246467991473532E-16 | Y:-1.0

任何想法?谢谢!

2 个答案:

答案 0 :(得分:9)

1.2246467991473532E-16 有效为零,小数点后16位;它是0.00000000000000012246

如果这是问题,您只需要格式化显示数字。

答案 1 :(得分:0)

如上所述,它不是错误,只是计算机浮点运算的近似。

得到预期的答案,如sin()& cos()介于-1,0,+ 1之间,尝试将其加1轮到需要的精度并减去1。

x = round15(Math.sin(toRad(angle))+1)-1;

其中定义了round15

public double round15(double x){
    DecimalFormat twoDForm = new DecimalFormat("0.##############E0");
    String str = twoDForm.format(x);
    return Double.valueOf(str);
}

它对我有用,希望未来的读者喜欢它。