2012-03-14 87 views
0

是否有可能在C++中执行while循环,直到小数达到某个精度?我想为arctan做一个长计算,然后pi,我希望循环运行,直到pi使用公式pi = 4(arctan(1.0))计算到小数点后第10位。我正在使用泰勒级数公式手动计算arctan。我知道有这些计算功能,但这是一项家庭作业,所以我必须这样做。我不是在寻找解决问题的方法,只是使用精度的循环是否可能。谢谢!while循环精度为条件

编辑:

我仍然坚持这一点!即使经过每个人的暗示,我都无法为while循环提供适当的参数。真的需要帮助。这里是我提出的代码:

#include <iomanip> 
#include <cstdlib> 
#include <iostream> 
#include <cmath> 

using namespace std; 

int main(void) 
{ 
int i; 
long double result; 
long double pi; 
int y=3; 
int loopcount=0; 
long double precision; 

    cout<<"Start\n"; 

    result=1-(pow(1,y)/y); 

    do 
    { 
    y=y+2; 
    result=result+(pow(1,y)/y); 
    y=y+2; 
    result=result-(pow(1,y)/y); 

     pi=4*(result); 
     precision=(pi*(pow(10,11))/10); 

     loopcount++; 
    } 
    while(//This is the problem!); 

    cout<<"Final Arctan is:"<<endl; 
    cout<<setprecision(20)<<result<<endl; 
    cout<<"Final Pi is:"<<endl; 
     cout<<setprecision(9)<<pi1<<endl; 
    cout<<"Times looped:"<<endl; 
     cout<<loopcount<<endl; 

return 0; 
} 
+0

适合Pi Day的作业。 8V) – 2012-03-14 20:59:20

+1

尼斯阅读这里:http://floating-point-gui.de – BlackBear 2012-03-14 21:03:23

+0

尼斯链接BlackBear非常翔实的材料有 – adohertyd 2012-03-14 21:26:16

回答

4

据我记得,你可以通过检查前面迭代的改进来找出精度。如果小数点后10位变得稳定,则打破循环。

得到n的第k个十进制数字,乘以10得到k的幂,得到最小有效数字。例如,要获得3.47中的第二个十进制数字7,乘以100得到347,并通过347 % 10得到7。

+0

我不知道你是什么意思?我怎么知道小数点后第10位是否“稳定”?我完全陌生,我正在努力与浮点数,所以我需要一些手中拿着:) – adohertyd 2012-03-14 21:19:32

+0

@adohertyd,看我的更新 – perreal 2012-03-14 21:25:15

+0

好吧我想我得到你在那里说...谢谢你 – adohertyd 2012-03-14 21:27:54

3

您可以用最后一个循环的结果维护一个变量,然后循环,直到它们之间的差值处于可接受的范围内。

编辑:除去作业

1

是代码片段,至少那种。通常在这种情况下,你并不真正寻求绝对的精确度(毕竟,如果你在计算Pi,使用预先知道的Pi值来决定你什么时候完成了这个目的)。

相反,像这样的大多数计算逐渐接近目标,并且对于每次迭代,值的变化逐渐变小。你看看价值的变化,当它变得足够小时,你认为这个值足够接近,并退出循环。

1

关于专门打破循环,答案当然是肯定的。有很多方法可以做到这一点。

我会追求将截断值与实际值进行比较。

例如: while(myValue < = Truncate(myValue,precision))将在myValue大于myValue时截断为精度较低的一个。请记住,增加的精度的顺序使得数量较大(1.1> 1)

特殊的酱是在截断功能,这应该返回截断为你决定什么精度顺序值。例如截断(1.23456,3)应该返回1.234(提示:1.23 * 10 == 12.3)

+0

这不需要我知道pi的第10个小数位吗?这个练习的要点是计算机应该为你做计算。查找pi值失败的目的 – adohertyd 2012-03-14 21:21:35

+0

绝对不是。请记住,通过添加精度顺序,数字会变大。 1 <1.1,1.1 <1.11等。我会清理一下我的答案,但我会尽量不要放弃太多。 – 2012-03-15 13:56:49

+0

是的,现在我明白你在说什么了。这是一个很好的做法,我会试图对此表示感谢。 – adohertyd 2012-03-15 14:14:01