平方根函数是如何实现的? [英] How is the square root function implemented?
本文介绍了平方根函数是如何实现的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何实现平方根功能?
解决方案这里。
问题陈述:给定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屋!
查看全文