试图找到0到1之间没有根号函数的数的根号

Trying to find sqrt of numbers between 0 and 1 without sqrt function

本文关键字:函数 之间      更新时间:2023-10-16

我无法解决的问题是如何找到0到1之间的数字的根号。在那之后,我想一切都好了。导致程序崩溃的唯一输入数字是介于0(未包含)和1(未包含)之间的数字

帮忙吗?

#include <iostream>
#include <cmath>
#include <cassert>
#include <stdlib.h>
#include <cmath>
using namespace std;
double squareroot(double x)  /* computes the square root of x */
{
 assert( x >= 0 ); /* make sure x is not negative*/
 if (x==0) return 0;
/* the sqrt must be between xhi and xlo */
 double xhi = x;
 double xlo = 0;
 double guess = x/2;
/* We stop when guess*guess-x is very small */
 while (abs(guess*guess-x) > 0.00001 )
   {
     if (guess*guess > x)  xhi = guess;
     else xlo = guess;
     guess = (xhi + xlo)/2;
   }
 return guess;
 }
/* Test Stub */

int main()
 {
  double testvalue;
  cout << "n Enter a TestValue= " ;
  cin >> testvalue;
  cout << endl;
  double testresult = squareroot(testvalue);
  cout << "n Square Root= " << testresult << "n" ;
  }

程序崩溃,因为这一行:

while (abs(guess*guess-x) > 0.00001 )

当你有0到1之间的数字时,你的算法总是会得到一个大于0.00001的数字,从而导致无限循环。解决方法是将算法更改为另一种平方根近似技术(参见牛顿方法,不动点定理,多项式近似技术等)。

提示:尝试跟踪你的代码,看看发生了什么,即使你需要把它写在纸上