Java Math.sqrt()方法
描述
java.lang.Math.sqrt(double a) 返回正确舍入的一个double值的正平方根。特殊情况:
-
如果参数是NaN或小于为零,那么结果是NaN.
-
如果参数是正无穷大,那么结果为正无穷大.
-
如果参数是正零或负零,那么结果是一样的参数.
否则,其结果是最接近真正的数学平方根的参数值的double值。
声明
以下是java.lang.Math.sqrt()方法的声明
public static double sqrt(double a)
如果我工作中遇到一个无穷大的数开平方的时候怎么办
方法一(二分法):
public static double sqrt(double t, Double precise) {
double low = 0, high = t, middle, squre,
prec = precise != null ? precise : 1e-7;
if ( t < 0 ) {
throw new RuntimeException("Negetive number cannot have a sqrt root.");
}
while ( high - low > prec ) {
middle = ( low + high ) / 2;
squre = middle * middle;
if ( squre > t ) {
high = middle;
} else {
low = middle;
}
}
return ( low + high ) / 2;
}
解法二(牛顿迭代法):
public static double sqrt_ ( double t, Double precise) {
double x0 = t, x1, differ,
prec = precise != null ? precise : 1e-7;
while ( true ) {
x1 = ( x0 * x0 + t ) / ( 2 * x0 );
differ = x1 * x1 - t;
if ( differ <= prec && differ >= -prec ) {
return x1;
}
x0 = x1;
}
}
解法三(也是最准确的,针对朋友解法的优化):
public static float sqrtRoot(float m) {
if ( m == 0 ) {
return 0;
}
float i = 0;
float x1, x2 = 0;
while ( ( i * i ) <= m ) {
i += 0.1;
}
x1 = i;
for ( int j = 0; j < 10; j++) {
x2 = m;
x2 /= x1;
x2 += x1;
x2 /= 2;
x1 = x2;
}
return x2;
}
博主强烈推荐:https://blog.youkuaiyun.com/persistencegoing/article/details/84376427
希望大家关注我一波,防止以后迷路,有需要的可以加群讨论互相学习java ,学习路线探讨,经验分享与java求职
群号:721 515 304
331

被折叠的 条评论
为什么被折叠?



