输入一个精度,计算1/(1*1+1)-1/(2*2-1)+1/(3*3+1)+.....

注意观察规律 分子上的数总是与分母中加的数一致,所以我们可以直接设一个数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()设置保留到小数点后几位

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值