注册 登录
编程论坛 C++教室

求解:请问我错在那里了?算不出结果。

by_stro 发布于 2013-10-16 20:06, 675 次点击
题目:

3、编一个程序计算sinx和cosx的近似值。使用如下的台劳级数:
sin x=x/1! -x*x*x/3! + x*x*x*x*x/5! -x*x*x*x*x*x*x/7! + ....
cos 省略

舍去的绝对值应小于预定值o。o由自己选择。
要求:定义一个函数计算n!。




程序代码:
#include <iostream.h>
#include <math.h>
int ff(int x)                //自定义的阶层函数
{
    int i,s=1;
    for(i=1;i<=x;i++)
    s=s*i;
    return s;
}
int main()
{
    int x,a,b,j=1,k=1;
    long double y,z,o=1e-100;      //o代替无穷小量,并且赋值为1e-100
    cin>>x;
    while(pow(x,2*j-1)/ff(2*j-1)>o)
    j=j+1;                                         //对于sin x,计算出当通项小于o时,循环的次数j
    while(pow(x,2*k-1)/ff(2*k-2)>o)
    k=k+1;                                        //对于cos x,计算出当通项小于o时,循环的次数k
    y=z=0;
    for(a=1;a<=j;a++)
    y=y+(pow(-1,a+1)*pow(x,2*z-1))/ff(2*a-1);   // 对于sin x来说,计算出循环了j次的式子之和
    for(b=1;b<=k;b++)
    z=z+(pow(-1,b+1)*pow(x,2*b-2))/ff(2*b-2);   //对于cos x来说,计算出循环了k次的式子之和
    cout<<"sin"<<x<<"="<<y<<endl;
    cout<<"cos"<<x<<"="<<z<<endl;
}
4 回复
#2
veketdelphi2013-10-16 20:19
C、c++自带数据类型  表达不了这么 小的数字的o=1e-100  

阶乘请用 浮点类型  自己用windows计算器算一下 十几的阶乘 int 就放不下了 溢出了
#3
longtang2013-10-16 20:35
借鉴下 C、c++自带数据类型  表达不了这么 小的数字的o=1e-100  

阶乘请用 浮点类型  自己用windows计算器算一下 十几的阶乘 int 就放不下了 溢出了
#4
by_stro2013-10-16 20:58
回复 2楼 veketdelphi
你好,还是不可以!
程序代码:
#include <iostream.h>
#include <math.h>
long double ff(long double x)                //自定义的阶层函数
{
    int i,s=1;
    for(i=1;i<=x;i++)
    s=s*i;
    return s;
}
int main()
{
    int x,a,b,j=1,k=1;
    long double y,z,o=1e-100;      //o代替无穷小量,并且赋值为1e-100
    cin>>x;
    while(pow(x,2*j-1)/ff(2*j-1)>o)
    j=j+1;                                         //对于sin x,计算出当通项小于o时,循环的次数j
    while(pow(x,2*k-1)/ff(2*k-2)>o)
    k=k+1;                                        //对于cos x,计算出当通项小于o时,循环的次数k
    y=z=0;
    for(a=1;a<=j;a++)
    y=y+(pow(-1,a+1)*pow(x,2*z-1))/ff(2*a-1);   // 对于sin x来说,计算出循环了j次的式子之和
    for(b=1;b<=k;b++)
    z=z+(pow(-1,b+1)*pow(x,2*b-2))/ff(2*b-2);   //对于cos x来说,计算出循环了k次的式子之和
    cout<<"sin"<<x<<"="<<y<<endl;
    cout<<"cos"<<x<<"="<<z<<endl;
    return 0;
}
#5
求学菜鸟12013-10-16 22:35
pow函数使用的参数是long double类型的吧!
1