是否可以在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;
}
答案 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)