利用公式 sin(x)=x-x^3/3!+x^5/5!-x^7/7!+x^9/9!...设计函数double sin(double x)计算sin(x)的值(精度要求为最后一项的绝对值小于10^-6),并编写main()函数进行测试。
时间: 2023-11-26 18:04:45 浏览: 291
以下是利用泰勒展开公式计算sin(x)的函数double sin(double x),同时满足精度要求为最后一项的绝对值小于10^-6:
```c++
#include <iostream>
#include <cmath>
using namespace std;
double sin(double x) {
double sum = 0;
double term = x;
int sign = 1;
int n = 1;
while (abs(term) > 1e-6) {
sum += term;
sign = -sign;
n += 2;
term = sign * pow(x, n) / tgamma(n + 1);
}
return sum;
}
int main() {
double x;
cout << "请输入角度值:";
cin >> x;
x = x * M_PI / 180; // 将角度值转化为弧度值
cout << "sin(" << x << ") = " << sin(x) << endl;
return 0;
}
```
其中,利用了C++中的tgamma函数来计算阶乘。在main函数中,先将角度值转化为弧度值,然后调用sin函数计算sin(x)的值,并输出结果。
相关问题
用Java写sinx ≈ x-x3/3!+x5/5!-x7/7!+x9/9!-… 精度某一项绝对值小于1e-6即可
可以使用泰勒级数展开来计算 sin(x) 的近似值,代码如下:
```java
public static double sin(double x) {
double term = x;
double sum = x;
int n = 1;
while (Math.abs(term) > 1e-6) {
term *= -x * x / (2 * n) / (2 * n + 1);
sum += term;
n++;
}
return sum;
}
```
这里利用了泰勒级数展开公式:sin(x) = x - x^3/3! + x^5/5! - x^7/7! + ...,每次迭代都计算一项,并把它累加到总和中,直到某一项的绝对值小于 1e-6。
阅读全文