注册 登录
编程论坛 C++教室

c++级数逼近问题

梦里花开 发布于 2008-09-30 09:08, 891 次点击
本女C++初学
无任何编程基础
入手比较开头难
望各位看官,大侠赐教


数学公式是: π/4≈1-1/3+1/5-1/7+...
求π近似值,精确到小数点后6位


#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
void main()
{
double sum=0,item=1;
for(int n=1;abs(item)>1e-6;n++)// 要说明通过判断后一项的绝对值 小于10的6次方而得到循环退出条件, 为什么要是这样判断呢?跟10的6次方有什么关系?看不懂。。

{item *=(-1.0)*(2*n-3)/(2*n-1);
sum +=item;
}
cout<<"pi="<<setiosflags(ios::fixed)<<setprecision(6)<<sum*4<<endl; //流状态?参数是什么意思?
}
4 回复
#2
blueboy820062008-09-30 09:27
abs(item)>1e-6
取item的绝对值,其实应该用fabs的(你没发现你的结果不对吗?问题就是这个... )
1e-6即10的-6次方...
setiosflags(ios::fixed)<<setprecision(6)
控制小数点后6位而已...
#3
梦里花开2008-09-30 11:15
谢谢斑竹大人
可是为什么偏偏是10的-6次方呢?怎么要想到是这个循环条件呢?
#4
blueboy820062008-09-30 11:30
[bo][un]梦里花开[/un] 在 2008-9-30 11:15 的发言:[/bo]

谢谢斑竹大人
可是为什么偏偏是10的-6次方呢?怎么要想到是这个循环条件呢?

这个要看题目对精度的要求啊...
#5
PcrazyC2008-09-30 20:30
函数用错了,应该用fabs,而不是abs,abs(-0.3333)=0,这是取绝对值的整数位.
1