Learning_Happy 2022-07-18 22:30 采纳率: 100%
浏览 34
已结题

关于#C++#的问题,如何解决?

C++语言实现sin(x),计算结果会出现大于1的情况。希望有各位帮忙解答
#include

#include
using namespace std;

int main()
{
double f(double x);
double s, k;
cout<<"Please enter an mumber: s = ";
cin>>s;
cout<<endl;
k = f(s);
cout<<"The result is "<<k<<endl;
return 0;
}

//求解幂函数
double power(double m, int n)
{
double p = 1.0;
for(int i = 1; i <= n; i ++)
p *= m;
return p;
}

//求解阶乘
int factorial(int g)
{
int a = 1, i;
if (g == 0)
a = 1;
if (g > 0)
for(i = 1; i <= g; i++)
a *= i;
return a;
}

double f(double x)
{
int factorial(int g);
double power(double m, int n);
double y = 0.0;
int i = 1;
do
{
y = (i % 4 == 1) ? y + (power(x, i)/factorial(i)) : y - (power(x, i)/factorial(i));
i += 2;
}while((power(x, i) / factorial(i)) >= 1e-10);
return y;
}

Please enter an mumber: s = 4

The result is -1.26779
Press any key to continue

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-07-19 09:20
    关注

    修改处见注释,供参考:

    #include <iostream>
    using namespace std;
    int main()
    {
        double f(double x);
        double s, k;
        cout << "Please enter an mumber: s = ";
        cin >> s;
        cout << endl;
        k = f(s);
        cout << "The result is " << k << endl;
        return 0;
    }
    //求解幂函数
    double power(double m, int n)
    {
        double p = 1.0;
        for (int i = 1; i <= n; i++)
            p *= m;
        return p;
    }
    //求解阶乘
    double  factorial(int g)  // 修改
    {
        int i;
        double a = 1;      // 修改
        if (g == 0)
            a = 1;
        if (g > 0)
            for (i = 1; i <= g; i++)
                a *= i;
        return a;      // 修改
    }
    double f(double x)
    {
        double factorial(int g);  // 修改
        double power(double m, int n);
        double y = 0.0;
        int i = 1, sign = 1;    // 修改
        while ((power(x, i) / factorial(i)) >= 1e-10) {   // 修改
            y = (sign > 0) ? y + (power(x, i) / factorial(i)) : y - (power(x, i) / factorial(i));
            i += 2;
            sign = -sign; // 修改
        }
        return y;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月5日
  • 已采纳回答 7月28日
  • 创建了问题 7月18日

悬赏问题

  • ¥15 怎样才能让鼠标沿着线条的中心线轨迹移动
  • ¥60 用visual studio编写程序,利用间接平差求解水准网
  • ¥15 Llama如何调用shell或者Python
  • ¥20 谁能帮我挨个解读这个php语言编的代码什么意思?
  • ¥15 win10权限管理,限制普通用户使用删除功能
  • ¥15 minnio内存占用过大,内存没被回收(Windows环境)
  • ¥65 抖音咸鱼付款链接转码支付宝
  • ¥15 ubuntu22.04上安装ursim-3.15.8.106339遇到的问题
  • ¥15 blast算法(相关搜索:数据库)
  • ¥15 请问有人会紧聚焦相关的matlab知识嘛?