不停止While循环运行而未获得预期结果

Non-stop While Loop run without getting expected results

本文关键字:结果 While 循环 运行 不停止      更新时间:2023-10-16

我得到了一项任务,要求我使用区间平分来计算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。考虑当你试图找到由110限定的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;

顺便说一句,如果你试着调试它,打印出minmidmax在每次迭代中的样子,问题就会很清楚了。

您想要while(fabs((mid * mid) - x) > 10E-12)吗?括号不平衡?你总会得到一些东西。。。。

另外,你想做if(...){}else if(...){}吗?您的if流中有><条件,但当它是==时会发生什么。在C/C++中,3不大于3并且3也不<3.3是唯一的==3你有没有想过:)?

if(>=){} else if(<)怎么样?此外,调试器是您的好朋友-别忘了:)