菜菜问题:java,关于求sinx,谢谢啦~

来源:百度知道 编辑:UC知道 时间:2024/06/08 16:57:38
不用java.lang.Math里的sinx方法.
两个类分别为
public class ExSix {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

double n = Double.valueOf(args[0]).doubleValue();

CalculateSin sin=new CalculateSin();

sin.calculateSin(n);

}

}

public class CalculateSin
{

final double eps=0.0000001;

void calculateSin(double x)
{
double sin=x,n=2.0,temp=x;

while(sin>eps||sin<-eps)
{
temp*=x*x*(-1)/(n*(n+1));
sin+=temp;
n+=2;
}
System.out.println("sin"+x+"="+sin);

}
}

我输入3.1415926,输出的为sin3.1415926=-2.026119915594945

请问哪出了问题啊!!!多谢高手啦!

我得到的值是2.2419510632012503E-8,近似于0,代码没什么问题。估计是输入错误。我综合楼主的代码如下:
public class CalculateSin {
final double eps=0.0000001;

void calculateSin(double x)
{
double sin=x,n=2.0,temp=x;

while(sin>eps||sin<-eps)
{
temp*=x*x*(-1)/(n*(n+1));
sin+=temp;
n+=2;
}
System.out.println("sin"+x+"="+sin);

}
public static void main(String[] args) {
// TODO Auto-generated method stub

double n = Math.PI;//Double.valueOf(args[0]).doubleValue();

CalculateSin sin=new CalculateSin();

sin.calculateSin(n);

}
}

你那个应该是(-2.026119915594945e-×××)这个数已经很接近0了
好像方法是对的,看看降低精度减少几次循环吧

有可能是数值越界造成的,或者是超过了double的精度,把double换成BigDecimel试试