司徒阿宝 2022-11-16 16:09 采纳率: 100%
浏览 21
已结题

关于#泰勒级数计算sinx的值#的问题,如何解决?

求看一下哪里错了

img


#include <stdio.h>
#include <math.h>
double Fact(double n);
double pow_n(double x,double n);
void sinx(double x);

int main()
{
    double x;
    printf("Input x:\n");
    scanf("%lf",&x);
    sinx(x);
    return 0;
}

//计算sin
void sinx(double x) {
    int sign = -1;//正负号标识符
    int count=0;//用于计数
    double fraction,sinx=x;
    do{
        int i=1;
        i = i+2;
        sign = -sign;//正负号切换
        fraction = pow_n(x, i) / Fact(i);//计算每个分母
        fraction = fraction * sign;
        count++;  //计数
        sinx=sinx + fraction;
    }while(fabs(fraction) < 1e-5);
    printf("sin(x)=%.3f,count=%d\n", sinx, count);
}

//阶乘
double Fact(double n)
{
    int result = 1;
    for (int i = 1; i <= n; i++)
    {
        result = result * i;
    }
    return result;
}

////自定义pow函数x的n次幂
double pow_n(double x,double n)
{
    double m=1;
    if(n==0)
        return 1;
    else {
        for (int i = 1; i <= n; i++) {
            m = m * x;
        }
        return m;
    }
}
  • 写回答

1条回答 默认 最新

  • 快乐鹦鹉 2022-11-16 16:20
    关注

    int i=1;放到循环前面

    #include <stdio.h>
    #include <math.h>
    double Fact(double n);
    double pow_n(double x,double n);
    void sinx(double x);
    int main()
    {
        double x;
        printf("Input x:\n");
        scanf("%lf",&x);
        sinx(x);
        return 0;
    }
    //计算sin
    void sinx(double x) {
           int sign = 1;//正负号标识符
        int count=1;//用于计数
        double fraction,sinx=x;
                int i=1;
        do{
            count++;//计数
            i = i+2;
            sign = -sign;//正负号切换
            fraction = pow_n(x, i) / Fact(i);//计算每个分母
            fraction = fraction * sign;
            sinx=sinx + fraction;
        }while(fabs(fraction) >= 1e-5);
        printf("sin(x)=%.3f,count=%d\n", sinx, count);
    }
    //阶乘
    double Fact(double n)
    {
        double result = 1;
        for (int i = 1; i <= n; i++)
        {
            result = result * i;
        }
        return result;
    }
    ////自定义pow函数x的n次幂
    double pow_n(double x,double n)
    {
        double m=1;
        if(n==0)
            return 1;
        else {
            for (int i = 1; i <= n; i++) {
                m = m * x;
            }
            return m;
        }
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 11月24日
  • 已采纳回答 11月16日
  • 修改了问题 11月16日
  • 创建了问题 11月16日

悬赏问题

  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP