从键盘输入一个角度,将其转换为弧度数x, 求sin(x)的值,要求误差小于0.0001. 计算公式如下: 其中: 即若取前m项的累加和作为sin(x)的近似值,则第m+1项的绝对值就是误差限。用C++写出程序
时间: 2024-11-27 07:09:13 浏览: 4
着色语言的内置函数-pt100换算表
在C++中,你可以使用泰勒级数来逼近正弦函数,并通过循环计算累加和直到满足误差限制。以下是一个简单的示例程序,它实现了这个过程:
```cpp
#include <iostream>
#include <cmath>
const double EPSILON = 0.0001; // 误差限
double sin_degrees_to_radians(double degrees) {
return degrees * M_PI / 180.0;
}
// 使用泰勒级数计算sin(x)
double sin_series(double x, int m) {
double sum = 0.0;
for (int i = 0; i <= m; ++i) {
double term = pow(-1, i) * pow(x, 2 * i + 1) / factorial(2 * i + 1);
sum += term;
}
return sum;
}
// 计算阶乘
unsigned long long factorial(int n) {
if (n == 0 || n == 1) {
return 1;
} else {
unsigned long long result = n;
for (int i = 2; i < n; ++i) {
result *= i;
}
return result;
}
}
int main() {
double angle_degrees;
std::cout << "请输入角度(单位:度):";
std::cin >> angle_degrees;
double radians = sin_degrees_to_radians(angle_degrees);
int m = 0;
while (std::abs(sin_series(radians, m + 1) - std::sin(radians)) > EPSILON) {
++m;
}
double approx_sin = sin_series(radians, m);
std::cout << "角度 " << angle_degrees << " 度对应的 sin(x) (近似值): " << approx_sin << std::endl;
--related question--
1. 为什么需要计算那么多项才能达到精度要求?
2. 这个程序如何处理输入非数值的情况?
3. 如果希望提高计算效率,有哪些优化建议?
阅读全文