编程手动平方根函数



对于我的班级,我正在使用包含编程平方根函数。不,我可能不会使用任何其他方法...

这是我到目前为止的代码,该程序几乎可以正常工作。它适用于完美的平方根和其他一些值(例如11或5),但它适合其他值(8、2)。

发生这种情况的原因是上限和下限(b和a)不会改变。理想情况下,界限将是当前X和以前的X,创建新的X。发生的事情是,新X当前是由当前X和A或B形成的,是常数。

我已经尝试了很长时间,但是我还没有找到一种"记住"或找到"以前的X"的方法,因为每次重复循环重复,只有当前X可供使用。有人知道如何解决这样的问题?

void inclusion ()
{
    double v ;
    cout << "*** Now solving using Inclusion ***" << endl << "To calculate the square root, enter a positive number: " ;
    cin >> v ;
    while (v<0)
    {
        cout << "Square roots of negative numbers cannot be calculated, please enter a positive number: " ;
        cin >> v ;
    }
    cout << endl ;
    int n = 0;
    while (v >= n*n)
        n++ ;
    double b = n ;
    double a = n-1 ;
    int t = 0 ;
    double x = (a+b)/2 ;
        while ((x * x - v >= 0.1) || (x * x - v <= -0.1))
        {
            t++ ;
            if (x * x < v)
                {
                cout << "Lower Bound: " << x << 't' << 't' ;
                cout << "Upper Bound: " << b << 't' << 't' ;
                x = (b + x)/2 ;
                cout << "Approximation " << t << ": " << x  << endl ;
                }
            else
                {
                cout << "Lower Bound: " << a << 't' << 't' ;
                cout << "Upper Bound: " << x << 't' << 't' ;
                x = (a + x)/2 ;
                cout << "Approximation " << t << ": " << x  << endl ;
                }
        }
    cout << endl << "The answer is " << x << ". Iterated " << t << " times." << endl << endl ;
}

我尚未找到一种"记住"或找到"以前的x"

的方法

有一个可变的 previous_x,您在循环末尾的 previous_x = x

但这不是您的问题。您正在更改x,但不更改ab,因此您可以无限地重复重复模式。相反,您应该调整任何界限,使您更紧密。

void inclusion ()
{
    double v ;
    cout << "*** Now solving using Inclusion ***" << endl << "To calculate the square root, enter a positive number: " ;
    cin >> v ;
    while (v<0)
    {
        cout << "Square roots of negative numbers cannot be calculated, please enter a positive number: " ;
        cin >> v ;
    }
    cout << endl ;
    int n = 0;
    while (v >= n*n)
        n++ ;
    double b = n ;
    double a = n-1 ;
    int t = 0 ;
    double x;
    for (x = (a+b)/2; abs(x * x - v) >= 0.1; x = (a+b)/2, ++t)
    {
        if (x * x < v)
        {
            cout << "Lower Bound: " << x << 't' << 't' ;
            cout << "Upper Bound: " << b << 't' << 't' ;
            a = (b + x)/2 ;
            cout << "Approximation " << t << ": " << x  << endl ;
        }   
        else
        {
            cout << "Lower Bound: " << a << 't' << 't' ;
            cout << "Upper Bound: " << x << 't' << 't' ;
            b = (a + x)/2 ;
            cout << "Approximation " << t << ": " << x  << endl ;
        }
    }
    cout << endl << "The answer is " << x << ". Iterated " << t << " times." << endl << endl ;
}

您也需要更新边界:

a = x;
x = (b + x)/2;

b = x;
x = (a + x)/2;

相关内容

  • 没有找到相关文章

最新更新