不停止While循环运行而未获得预期结果
Non-stop While Loop run without getting expected results
我得到了一项任务,要求我使用区间平分来计算10e-12内的值的平方根。我在这里有我的代码,它在编译时不会返回任何错误,但它已经运行了大约5分钟,还没有返回结果。我做错了什么?这是我的密码。
#include "fcpp.hh"
double biit(double min, double max, double x)
{
double mid = (max + min) / 2;
while(fabs((mid * mid) - x) > 10E-12)
{
if(mid * mid > x)
{
min = min;
max = mid;
mid = (min + max) / 2;
}
else if(min * min < x)
{
min = mid;
max = max;
mid = (min + max) / 2;
}
}
return mid;
}
int main()
{
print(biit(enter_doub("interval min:"), enter_doub("interval max:"), enter_doub("take square root of:")));
return 0;
}
您正在打开位于x
两侧的min*min
,而不是mid*mid
。考虑当你试图找到由1
和10
限定的4
的平方根时会发生什么:
biit(1, 10, 4);
在第一次调用中,元组(min, mid, max)
是:(1, 5.5, 10)
。由于5.5是一个错误的猜测,您可以继续迭代。。。但不是迭代更低,而是迭代更高。。。您使用第二个if分支,因此您的元组变为(5.5, 7.75, 10)
。在这一点上,你没有成功的希望,因为你的min
已经比你的答案大了。
更改为:
if (mid * mid > x) {
max = mid;
}
else {
min = mid;
}
mid = (min + max) / 2;
顺便说一句,如果你试着调试它,打印出min
、mid
和max
在每次迭代中的样子,问题就会很清楚了。
您想要while(fabs((mid * mid) - x) > 10E-12)
吗?括号不平衡?你总会得到一些东西。。。。
另外,你想做if(...){}else if(...){}
吗?您的if
流中有>
和<
条件,但当它是==
时会发生什么。在C/C++中,3不大于3并且3也不<3.3是唯一的==3你有没有想过:)?
做if(>=){} else if(<)
怎么样?此外,调试器是您的好朋友-别忘了:)
相关文章:
- 为什么"do while"循环不断退出,即使条件计算结果为 false?
- valgrind-hellgrind与泄漏检查的结果不同
- 用C++20 fmt限制结果的总大小
- 如何返回一个类的两个对象相加的结果
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- while循环中while循环的时间复杂度是多少
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 在while循环中输入带有std::cin的字符串后,控制台会输出大量胡言乱语
- 使用QProcess执行命令,并将结果存储在QStringList中
- 如果我std::dynamic_pointer_cast并且底层dynamic_cast的结果为null,那么返回的sh
- 擦除while循环中迭代的元素
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 序列化,没有库的整数,得到奇怪的结果
- 使用取消引用的指针的多态性会产生意外的结果.为什么?
- 为什么我不能在 while 循环中创建线程?
- 在更改for循环的第三部分后,未使用for循环结果
- 不停止While循环运行而未获得预期结果
- 为什么mt19937生成器每次在while循环中使用时都会生成相同的结果
- 为什么while循环使用cin.get()函数输出两次结果?
- Std::cin while循环给出一个奇怪的结果