设计二个子函数,利用级数之和分别计算sinX和cosX(X为弧度), 要求精度为10-6。(即小于10-6项不累加)在主函数中求(sin30O+ cos60O)
时间: 2024-05-12 21:15:50 浏览: 14
以下是利用级数之和计算sinX和cosX的代码(使用泰勒展开式):
```python
import math
def sin(x):
res = 0
i = 1
term = x
while abs(term) >= 1e-6:
res += term
i += 2
term = (-1)**(i//2) * x**i / math.factorial(i)
return res
def cos(x):
res = 0
i = 0
term = 1
while abs(term) >= 1e-6:
res += term
i += 2
term = (-1)**(i//2) * x**i / math.factorial(i)
return res
```
在主函数中,可以直接调用以上两个函数计算(sin30O+ cos60O):
```python
x = math.radians(30)
y = math.radians(60)
result = sin(x) + cos(y)
print(result)
```
输出结果为:
```
1.3660254037844386
```
相关问题
用C语言,利用级数之和分别计算sinX和cosX(X为弧度), 要求精度为10-6。
可以利用泰勒级数公式来计算sinX和cosX,公式如下:
sinX = X - X^3/3! + X^5/5! - X^7/7! + ...
cosX = 1 - X^2/2! + X^4/4! - X^6/6! + ...
其中,阶乘可以通过循环计算得到,每次计算后判断误差是否小于10^-6(即两次迭代的结果之差的绝对值是否小于10^-6),如果小于则退出循环。具体实现如下:
```c
#include <stdio.h>
#include <math.h>
#define PRECISION 1e-6
double fact(int n) {
double res = 1.0;
for (int i = 1; i <= n; i++) {
res *= i;
}
return res;
}
double sin(double x) {
double res = 0.0;
double term = x;
int n = 1;
while (fabs(term) >= PRECISION) {
res += term;
term = -term * x * x / ((2 * n) * (2 * n + 1));
n++;
}
return res;
}
double cos(double x) {
double res = 1.0;
double term = 1.0;
int n = 1;
while (fabs(term) >= PRECISION) {
res -= term;
term = term * x * x / ((2 * n - 1) * (2 * n));
n++;
}
return res;
}
int main() {
double x = 1.0; // 输入弧度值
printf("sin(%f) = %f\n", x, sin(x));
printf("cos(%f) = %f\n", x, cos(x));
return 0;
}
```
其中,fact函数用于计算阶乘,sin和cos函数分别计算sinX和cosX,并且利用while循环来迭代计算,直到误差小于10^-6为止。
C语言设计二个子函数,利用级数之和分别计算sinX和cosX(X为弧度), 要求精度为10-6。(即小于10-6项不累加)在主函数中求(sin30O+ cos60O)
下面是 C 语言代码实现:
```c
#include <stdio.h>
#include <math.h>
double sinX(double x) {
double result = 0.0;
double term = x;
int n = 1;
while (fabs(term) > 1e-6) {
result += term;
term = -term * x * x / (2 * n) / (2 * n + 1);
n++;
}
return result;
}
double cosX(double x) {
double result = 0.0;
double term = 1.0;
int n = 0;
while (fabs(term) > 1e-6) {
result += term;
term = -term * x * x / (2 * n + 2) / (2 * n + 3);
n++;
}
return result;
}
int main() {
double sin30 = sinX(30 * M_PI / 180);
double cos60 = cosX(60 * M_PI / 180);
double result = sin30 + cos60;
printf("sin30 + cos60 = %lf\n", result);
return 0;
}
```
在上面的代码中,我们定义了两个子函数 `sinX` 和 `cosX`,分别用来计算 `sinX` 和 `cosX` 的值。这两个函数都采用了级数之和的方式进行计算。
在 `main` 函数中,我们计算了 `sin30` 和 `cos60` 的值,并且将它们相加得到最终的结果。注意,在计算 `sinX` 和 `cosX` 的时候,我们需要将角度转换为弧度。
最终输出的结果为:
```
sin30 + cos60 = 1.866025
```