gpt4 book ai didi

c++ - 在 C++ 中将 sin(x) 计算为级数形式

转载 作者:行者123 更新时间:2023-11-27 23:28:45 26 4
gpt4 key购买 nike

我们知道 sin(x)=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!等等。我写了这段代码:

#include <iostream>
#include <math.h>
using namespace std;

const int m=19;

int factorial(int n) {

if (n==0){ return 1;}
return n*factorial(n-1);
}

int main() {
float x;
cin >> x;

float sum=0;
int k=1;
for (int i=1;i<=m;i+=2) {
sum+=(k*(powf(x,i)/factorial(i)));
k=k*(-1);
}

cout<<"series sum is equal :"<<sum<<endl;
return 0;
}

一个问题是,当我输入 x=3 时,它会给出 -10.9136,但我知道 sin(x) 的取值范围是 [-1, 1] 有什么问题?请帮助我。

最佳答案

问题是由于破坏性取消,您的精度用完了。

您有一个交替序列,其中一些项变得非常大。但是这些条款相互抵消了一个小结果。由于 float 的精度有限,因此您的舍入误差大于最终值。

您可以使用 double “减少”问题。但它不会消失。 sin/cos 的标准实现涉及对参数取模 2 pi 以使其变小。

编辑:

我发现了另一个问题。i = 19 时,您的阶乘函数中存在整数溢出。

关于c++ - 在 C++ 中将 sin(x) 计算为级数形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7452868/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com