double angle=90.0;
Console.WriteLine("角度:"+angle);
double radian=angle*Math.PI/180;
Console.WriteLine("弧度:"+radian);
double sinAngle=Math.Sin(radian);
Console.WriteLine("Sin:"+sinAngle);
Console.WriteLine("弧度:"+radian);
double cosAngle=Math.Cos(radian);
Console.WriteLine("Cos:"+cosAngle);
Console.ReadLine();
请教,为什么double cosAngle=Math.Cos(radian);
结果:角度:90
弧度:1.5707963267949
Sin:1
弧度:1.5707963267949
Cos:6.12303176911189E-17

解决方案 »

  1.   

    Ⅰ.角度变弧度,有舍入误差; Ⅱ.求cos,有截断误差。
    实际上,应避免cos x  (x->pi/2) 这样的数参与乘除、求逆等运算,以避免其吃掉有效数据。
      

  2.   

    Cos:6.12303176911189E-17
    这已经很精确了啊!Cos:6.12303176911189*(10的负17次方)已经趋向0了!
    不过应该是你的PI精度问题哦!不然应该等于0!为什么要转化成弧度呢?
      

  3.   

    Cos:6.12303176911189E-17
    这已经很精确了啊!Cos:6.12303176911189*(10的负17次方)已经趋向0了!
      

  4.   

    aiqinbird(爱琴鸟)  好,谢谢您的答复
    但Math.Cos(double n)的参数N只能是弧度啊
      

  5.   

    对于double型的,可以确定一下它的精度,如果很小就给它赋0,
    double a = 0;
    其a的结果可能是0.000000000003894乱七八糟的都有,反正不是0
    double cosAngle=Math.Cos(radian);
    if(cosAngle < 0.00000001) {
        cosAngle = 0;
    }