题目:
设计一个函数,使用以下无穷级数计算sinx的值。sinx=。舍去的绝对值应小于ε,ε的值由用户指定。如果用户不指定ε的值,则假设为10-6。
代码:
//注意:本题中的变量定义最好用long long int和long double,因为极有可能溢出
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
double function(double x, double e);
int main()
{
int n = 0;
long double x, e, result;
cout << "用无穷级数计算sinx的值" << endl << endl;
cout << "请输入x的值(弧度制):";
cin >> x;
cout << "是否指定舍去的绝对值e,若是请输入舍去的绝对值e,若否请输入0,且将默认为0.000001:";
cin >> e;
if (e == 0) e = 0.000001;
result = function(x, e);
while(e != 1) //控制输出精度,这段必须放在执行function函数后面,因为会改变e的值
{
e = e * 10;
n = n + 1;
}
cout << setiosflags(ios::fixed) << setprecision(n);
cout << endl << "sinx=" << result << endl << endl;
system("pause");
return 0;
}
double function(double x, double e)
{
long long int y = 1, i = 3;
long double sum = x, square = x * x, sinx=sin (x);
while (abs(sinx - sum) >= e)
{
//分子部分:规律是乘x的平方,且x的值在后面的运算中不会变化,所以指定square = x * x
x = x * square;
//分母部分:规律是乘比上一个i大1和大2的数,所以利用了本次的i
y = y * i * (i - 1);
//找规律控制正负号
if (((i - 1) / 2) % 2 == 0) sum = sum + x / y;
else sum = sum - x / y;
i = i + 2;
}
return sum;
}