Flask接口签名sign原理与实例代码浅析
451
2022-10-05
java 对数和指数计算方式
目录java计算对数和指数Java普通对数(log)计算如下代码:
java计算对数和指数
public static void main(String[] args) throws InterruptedException{
int a = 10;
int b = 1000000;
System.out.println(getlog(b,a));
}
static double getlog(int b,int a){
return Math.log(b)/Math.log(a);
}
Math提供了一个自然底数的方法,Math.log(),自定义方法,但是运行结果精度会丢失。
运行结果为5.99999
public static void main(String[] args) throws InterruptedException{
BigDecimal a = new BigDecimal(10);
BigDecimal b = new BigDecimal(1000000);
System.out.println(getlog(b,a));
//
}
static double getlog(BigDecimal b, BigDecimal a){
return Math.log(b.doubleValue())/Math.log(a.doubleValue());
}
结果为6.0
精度出问题就找BigDecimal 就可以了。
指数的话,直接使用Math.pow(a,b)就可以了。
Java普通对数(log)计算
Java给我提供的数学计算的工具类Math计算对数的函数有两个:
/**
* Returns the natural logarithm (base e) of a {@code double}
* value. Special cases:
*
* is NaN.
*
* positive infinity.
*
* result is negative infinity.
*
*
The computed result must be within 1 ulp of the exact result.
* Results must be semi-monotonic.
*
* @param a a value
* @return the value ln {@code a}, the natural logarithm of
* {@code a}.
*/
public static double log(double a) {
return StrictMath.log(a); // default impl. delegates to StrictMath
}
/**
* Returns the base 10 logarithm ohttp://f a {@code double} value.
* Special cases:
*
*
* is NaN.
*
* positive infinity.
*
* result is negative infinity.
*
* integer n, then the result is n.
*
*
*
The computed result must be within 1 ulp of the exact result.
*XtytoSy Results must be semi-monotonic.
*
* @param a a value
* @return the base 10 logarithm of {@code a}.
* @since 1.5
*/
public static double log10(double a) {
return StrictMath.log10(a); // default impl. delegates to StrictMath
}
log(double a),log10(double a)从源码doc注释我们可以看到分别是计算自然对数和以10为底的对数。
如下代码:
double x = Math.log(10);
等价于:x = ln10 或 x = loge(10),即以e为底的自然对数。
问题来了,如果我们要计算非常规底数的对数怎么办呢?比如我们要计算以33为底27的对数(也就是33的多少次方运算结果为27)?
这个就需要使用数学的换底公式:logx(y)=ln(y)/ln(x);
代码实现以x为底y的对数计算工具类:
public class Logarithm {
public static double log(double value, double base) {
return Math.log(value) / Math.log(base);
}
}
这样我们计算以33为底27的对数:
public static void main(String[] args) {
double log = log(27, 33);
System.out.println(log);
}
private static double log(double value, double base) {
return Logarithm.log(value) / Math.log(base);
}
计算结果:0.9426082478202944
本demo使用log以及换底公式,也可以使用log10和换底公式计算,结果是一样的。
如:
public static double log(double value, double base) {
return Math.log10(value) / Math.log10(base);
}
普通底对数计算的关键点在于使用换底公式转换为工具类提供的特殊对数进行计算即可。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~