e******n 发帖数: 89 | 1 好像记得有个地方讲的非常的详细,不记得在哪里了,当时还自己算了一遍,忘了。。。
请大侠指教! |
p**********s 发帖数: 115 | 2 double mySqrt(int num) {
if(num < 0) {
return -1;
}
double precise = 0.0001;
double low = 0;
double high = num;
double mid = (low+high)/2;
while(abs(mid*mid - num) > precise) {
if(mid*mid > num) {
high = mid;
} else {
low = mid;
}
mid = (low+high)/2;
}
return mid;
} |
e******n 发帖数: 89 | 3 多谢!不知道可否给个link详细介绍算法的,多谢!
【在 p**********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : double mySqrt(int num) { : if(num < 0) { : return -1; : } : double precise = 0.0001; : double low = 0; : double high = num; : double mid = (low+high)/2; : while(abs(mid*mid - num) > precise) { : if(mid*mid > num) {
|
p**********s 发帖数: 115 | |
s**9 发帖数: 207 | 5 This works for x>=1. For x<1, initialize low=x and high=1.
【在 p**********s 的大作中提到】![](/moin_static193/solenoid/img/up.png) : double mySqrt(int num) { : if(num < 0) { : return -1; : } : double precise = 0.0001; : double low = 0; : double high = num; : double mid = (low+high)/2; : while(abs(mid*mid - num) > precise) { : if(mid*mid > num) {
|
r********g 发帖数: 144 | 6 I thought that this method is called the bisection method.
http://en.wikipedia.org/wiki/Bisection_method |
z****e 发帖数: 2024 | 7 exactly.
【在 r********g 的大作中提到】![](/moin_static193/solenoid/img/up.png) : I thought that this method is called the bisection method. : http://en.wikipedia.org/wiki/Bisection_method
|
b******v 发帖数: 1493 | 8 用牛顿法应该很快吧?
要求解x^2 = C 等价于求f(x) = x^2-C的根
所以x_{n+1}-x_n = -f(x_n)/f'(x_n)
= -(x_n^2-C)/(2*x_n)
牛顿法有二阶收敛性,所以几步就能到非常高的精度
。。
【在 e******n 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 好像记得有个地方讲的非常的详细,不记得在哪里了,当时还自己算了一遍,忘了。。。 : 请大侠指教!
|