gpt4 book ai didi

c++ - 编写手动平方根函数?

转载 作者:行者123 更新时间:2023-11-27 23:51:09 24 4
gpt4 key购买 nike

在我的类(class)中,我正在使用包含对平方根函数进行编程。不,我可能不会使用任何其他方法...

到目前为止,这是我的代码,程序几乎可以运行。它适用于完全平方根和一些其他值(如 11 或 5),但它会进入其他值(8、2)的无限循环。

发生这种情况的原因是上限和下限(b 和 a)没有改变。理想情况下,边界是当前 x 和之前的 x,从而创建新的 x。发生的情况是新的 x 当前由当前 x 和 a 或 b 组成,是一个常数。

我已经尝试了很长时间,但我还没有找到一种方法来“记住”或找到“前一个 x”,因为每次 while 循环重复时,只有当前的 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 ;
}

最佳答案

I have not yet found a way to 'remember' or find the 'previous 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 ;
}

关于c++ - 编写手动平方根函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46342002/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com