而循环精度作为条件

时间:2012-03-14 20:57:22

标签: c++ math floating-point while-loop

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

编辑:

我仍然坚持这个!即使在查看了每个人的提示之后,我也无法为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;
}

4 个答案:

答案 0 :(得分:4)

据我记忆,您可以通过检查先前迭代的改进来确定精度。如果第10个小数位变得稳定,则打破循环。

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

答案 1 :(得分:3)

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

编辑:删除了家庭作业的代码段

答案 2 :(得分:1)

是的,至少有点像。通常在这样的情况下,你并不真正寻找绝对的精确度(毕竟,如果你正在计算Pi,使用预先知道的Pi值来决定你什么时候做的那样会失败的目的)。 / p>

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

答案 3 :(得分:1)

特别是关于打破循环,答案当然是肯定的。有很多方法可以做到。

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

例如: while(myValue&lt; = Truncate(myValue,precision))将在myValue大于myValue被截断为精度不足的情况下中断。请记住,添加精度顺序会使数字更大(1.1> 1)

特殊的酱料在Truncate函数中,这应该将截断的值返回到您决定的任何精度顺序。例如,Truncate(1.23456,3)应返回1.234(提示:1.23 * 10 == 12.3)