以精度为条件的While循环 是否可以在C++中做一个while循环,直到小数达到一定的精度?我想对arctan做一个长的计算,然后是pi,我想循环运行,直到pi被计算到小数点后10位,使用公式pi=4arctan 1.0。我用泰勒级数公式手动计算arctan。我知道这些计算有内置函数,但这是一个家庭作业,所以我必须这样做。我不是在寻找问题的解决方案,只是想知道是否可以使用精度进行循环。谢谢

以精度为条件的While循环 是否可以在C++中做一个while循环,直到小数达到一定的精度?我想对arctan做一个长的计算,然后是pi,我想循环运行,直到pi被计算到小数点后10位,使用公式pi=4arctan 1.0。我用泰勒级数公式手动计算arctan。我知道这些计算有内置函数,但这是一个家庭作业,所以我必须这样做。我不是在寻找问题的解决方案,只是想知道是否可以使用精度进行循环。谢谢,c++,math,floating-point,while-loop,C++,Math,Floating Point,While Loop,编辑: 我还是被这件事缠住了!我无法为while循环找到一个合适的参数,即使在仔细阅读了每个人的提示之后。我真的需要帮助。以下是我提出的代码: #include <iomanip> #include <cstdlib> #include <iostream> #include <cmath> using namespace std; int main(void) { int i; long double result; long doub

编辑:

我还是被这件事缠住了!我无法为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;
}

就我所记得的,您可以通过检查前几次迭代的改进来计算精度。如果小数点后第10位变得稳定,则中断循环


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

据我记忆所及,您可以通过检查前几次迭代的改进来计算精度。如果小数点后第10位变得稳定,则中断循环


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

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


编辑:删除作业的代码段

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


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

是的,至少在某种程度上是这样。通常在这样的情况下,如果你在计算π,用一个已知的π值来决定什么时候完成,你根本不需要寻找绝对精度


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

<是的,至少是这样的。通常在这样的情况下,如果你在计算π,用一个已知的π值来决定什么时候完成,你根本不需要寻找绝对精度


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

< P>特别是要打破循环,答案当然是,是的。有很多方法可以做到这一点

我将继续将截断的值与实际值进行比较

例如: 而我的价值是1


特殊的酱汁在Truncate函数中,它将返回被截断的值,精度由您决定。例如,Truncate1.23456,3应该返回1.234提示:1.23*10==12.3

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

我将继续将截断的值与实际值进行比较

例如: 而我的价值是1


特殊的酱汁在Truncate函数中,它将返回被截断的值,精度由您决定。例如Truncate1.23456,3应该返回1.234提示:1.23*10==12.3

适合Pi日的作业。8vNice阅读这里:很好的链接黑耳朵非常有用的材料,我认为应该是缺少的链接:基本上,确保结果的重要部分不再改变。请注意,我并不关心效率,这段代码可以工作,但它不会循环超过70906次。这个想法是正确的,但代码有点缺陷。为Pi日准备家庭作业。8vNice阅读这里:很好的链接黑耳朵非常有用的材料,我认为应该是缺少的链接:基本上,确保结果的重要部分不再改变。请注意,我并不关心效率,这段代码可以工作,但它不会循环超过70906次。这个想法是对的,但代码有点瑕疵。我不知道你的意思?我如何知道小数点后第10位是否“稳定”?我对这一点完全陌生,我正在和浮点作斗争,所以我需要一些牵手:我不知道你们的意思?我如何知道小数点后第10位是否“稳定”?我对这一点完全陌生,我正在和浮点作斗争,所以我需要一些手牵手:这是n吗
你不要求我知道圆周率小数点后10位吗?这个练习的重点是计算机应该为你做计算。查找pi值会破坏目的不,绝对不会。请记住,通过增加精度顺序,数字会变大。1<1.1,1.1<1.11等等。我会稍微整理一下我的答案,但我会尽量不泄露太多。是的,现在我明白你的意思了。这是一个很好的方法,我要尝试一下,谢谢。这不需要我知道圆周率的小数点后10位吗?这个练习的重点是计算机应该为你做计算。查找pi值会破坏目的不,绝对不会。请记住,通过增加精度顺序,数字会变大。1<1.1,1.1<1.11等等。我会稍微整理一下我的答案,但我会尽量不泄露太多。是的,现在我明白你的意思了。这是一个很好的方法,我要尝试一下,谢谢。