有一个错误,用do循环计算z阶乘时,忘了重新赋值为1。改正后我的测试结果是0479426,之所以这样,是因为double的精度仍然不够。你可以尝试输出中间结果,几次运算之后结果就趋于0。解决的方法是使用大数运算类或参考大学计算方法教材来加以解决
你的factorial是一个函数,好象不可以直接乘以一个整数的吧,还有double
factorial(int
n)是不是需要一个返回值呢。if(n==0)
return
1;只是在n=0的时候有返回值,n!=0就没有了
//用sinx=x-x^3/3!+x^5/5!……+(-1)^(n-1)(x^(2n-1)/(2n-1)!
#include<iostream>
#include<mathh>
using namespace std;
double power(double x,int n)
{
if(n==0)
return 1;
return xpower(x,n-1);
}
long f(int n)
{
if(n==0)
return 1;
else
return nf(n-1);
}
int main()
{
float x,t,sum=0;int i=2;
cin>>x;
t=x;
while(fabs(t)>1e-6)
{
sum+=t;t=-t;
t=(t/fabs(t))power(x,2i-1)/f(2i-1);
i++;
}
cout<<sum<<endl;
return 0;
}
for(j=1;j<=2n-1;j=j+2)
{for(i=1;i<=j;i++)
t=ti;
sinx=pow(x,j)/t;
sinx=sinx+0;}
printf("sinx=%f",sinx);
修改为
for(j=1;j<=2n-1;j=j+2)
{
t=1;//t需要赋值为1,否则每次都是上个循环的值
for(i=1;i<=j;i++)
t=ti;
sinx + =pow(x,j)/t; //这个才是累加
}
#include<stdioh>
void main(){
int i,b;
double a,x,s;
scanf("%lf",&x);
a=x;b=1;s=00;
for(i=0;fabs(a/b)>1e-6;){
s= s+a/b;
a=-axx;
i++;
b=b(2i+1)(2i);
}
printf("sinx=%lf",s);
}
#include <stdioh>
#include <mathh>
double PI = 314159265358979;
int main() {
double n = 1,x,sinx = 0,fn,alpha;
printf("x(度) = ");
scanf("%lf",&x);
alpha = x;
x = x PI/ 180;
fn = x;
while(fabs(fn) >= 1E-6) {
sinx += fn;
fn = -fnxx/(2n(2 n + 1));
++n;
}
printf("sin(%0lf) = %lf\n",alpha,sinx);
return 0;
}
#include<stdioh>
#include<mathh>
main()
{
float a,b=1;
float i,sinx,x;
scanf("%f",&x);
a=x;
sinx=0;
for(i=1;fabs(a/b)>=1e-6;i++)
{
sinx+=a/b;
a=-axx;
b=b2i(2i+1); }
printf("%f",sinx);
}
我刚回答了一个类似的问题;
>
以上就是关于c语言编程计算sin0.5全部的内容,包括:c语言编程计算sin0.5、用C语言求sinx的值,望高人指点、在C++中如何用循环语句编写求sin函数的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)