平方根函数是如何实现的? [英] How is the square root function implemented?

查看:174
本文介绍了平方根函数是如何实现的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何实现平方根功能?

解决方案

这里



问题陈述:给定x> 0,找到y使得y ^ 2 = x => y = x / y(这是关键步骤)。

1)猜测y的某个值并测试它。

2)计算x / g。

3)如果x / g足够接近g,则返回g。

  double test(double x,double g){
if closeEnough(x / g,g)
返回g;
else
return test(x,betterGuess(x,g));
}

布尔值closeEnough(double a,double b){
return(Math.abs(a - b)< .001);


double betterGuess(double x,double g){
return((g + x / g)/ 2);






  sqrt(2)|猜g x / g |新的猜测,(g + x / g)/ 2 
---------------- | ----------------- ------------- | -------------------------------
测试(2,1)| 1 2/1 = 2 | (2 + 1)/ 2 = 1.5
test(2,1.5)| 1.5 2 / 1.5 = 1.3333 | (1.3333 + 1.5)/ 2 = 1.4167
test(2,1.4167)| 1.4167 2 / 1.4167 = 1.4118 | (1.4167 + 1.4118)/ 2 = 1.4142
test(2,1.4142)| 1.4142 ... | ...


How is the square root function implemented?

解决方案

Source here.

Problem statement: Given x>0, find y such that y^2=x => y=x/y (this is the key step).

1) Guess some value g for y and test it.
2) Compute x / g.
3) If x / g is close enough to g, return g. Otherwise, try a better guess.

double test(double x, double g) {
   if closeEnough(x/g, g)
      return g;
   else
      return test(x, betterGuess(x, g));
}

boolean closeEnough(double a, double b) {
   return (Math.abs(a - b) < .001);
}

double betterGuess(double x, double g) {
   return ((g + x/g) / 2);
}


sqrt(2)         | Guess g  x / g               | New guess, (g + x / g) / 2
----------------|------------------------------|-------------------------------
test(2, 1)      | 1        2 / 1      = 2      | (2      +      1) / 2 = 1.5
test(2, 1.5)    | 1.5      2 / 1.5    = 1.3333 | (1.3333 +    1.5) / 2 = 1.4167
test(2, 1.4167) | 1.4167   2 / 1.4167 = 1.4118 | (1.4167 + 1.4118) / 2 = 1.4142
test(2, 1.4142) | 1.4142   ...                 | ...

这篇关于平方根函数是如何实现的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆