注意观察规律 分子上的数总是与分母中加的数一致,所以我们可以直接设一个数sgn,用其表示分子和分母中加的数
还有就是要注意,函数中所有数据类型都是float ,设置初始值时最好都写成浮点形式,就是加上.f, 这样更严谨,否则有的编译器可能会报错
#include<iostream>
#include<iomanip>
using namespace std;
float fun(float p);
int main(void) {
float p;
cout << "请输入精度:"<<endl;
cin >> p;
cout << "结果为:" <<fixed<<setprecision(10) << fun(p);
}
float fun(float p)
{
float ai = 0.5f;//每一项的值
float i = 1.0f;
float sum = 0.f;
float sgn = 1.0f;
do
{
ai = sgn / (i * i + sgn);//观察每一项的规律得出
sum += ai;
i++;
sgn = -1.0f*sgn;//前一项为正那么后一项就变成负
} while (ai<-p || ai>p);
return sum;
}
这里也可以写成while循环
while (ai<-p || ai>p)
{
ai = sgn / (i * i + sgn);
sum += ai;
i++;
sgn = -1.0f*sgn;
}
因为到最后一次,ai的精度都达到了1e-6,不管是while循环还是 do while 循环都会停止
你可以根据 自己的需要,自行通过setprecision()设置保留到小数点后几位