以精度为条件的While循环

While loop with precision as condition

本文关键字:While 循环 条件 精度      更新时间:2023-10-16

是否可以在C++中执行while循环,直到小数达到一定精度?我想对arctan做一个长的计算,然后是pi,我希望循环运行,直到使用公式pi=4(arctan(1.0))将pi计算到小数点后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<<"Startn";
   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;
}

据我所知,您可以通过检查与以前迭代相比的改进来计算精度。如果小数点后第10位稳定,则中断循环。

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

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

编辑:删除作业的代码片段

是的,至少有点。通常在这种情况下,你并不真正寻求绝对精度(毕竟,如果你在计算圆周率,使用已知的圆周率值来决定何时完成,这有点违背目的)。

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

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

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

例如:而(myValue<=截断(myValue,precision))将在myValue大于myValue时中断,该值被截断为精度的一个低阶。请记住,添加一个精度顺序会使的数字更大(1.1>1)

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