以精度为条件的While循环
While loop with precision as condition
是否可以在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)
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- while循环中while循环的时间复杂度是多少
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 擦除while循环中迭代的元素
- 为什么我不能在 while 循环中创建线程?
- 退出简单while循环时出现问题
- 如果条件为TRUE(最佳方式?),则在do while循环中后置增量
- 即使没有满足他们的条件,我也无法通过一些 do-while 循环
- 嵌套While循环不起作用(C++问题)
- 如何通过替换顺序代码的while循环来添加OpenMP for循环
- 使用 GMP 的 while 循环出现问题
- 程序以使用 C++ 中的 while 循环查找一组数字的最小值
- 为什么在 while 循环中返回表达式不起作用
- 如何使用 do while 循环确定最高值和最低值
- 如何读取单个字符并在输入两个字符序列时输出? 使用 while 循环和C++
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- OpenCV QT,显示视频的帧(不使用while循环)
- 在 while 循环中使用 pow() 函数 C++
- C++ 制作/命名不初始化的向量(在 while 循环中)
- std::getline没有在while循环中重新请求用户输入