Python 官方文档:入门教程 => 点击学习
目录java计算对数和指数Java普通对数(log)计算如下代码:java计算对数和指数 public static void main(String[] args) throw
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给我提供的数学计算的工具类Math计算对数的函数有两个:
public static double log(double a) {
return StrictMath.log(a); // default impl. delegates to StrictMath
}
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);
}
普通底对数计算的关键点在于使用换底公式转换为工具类提供的特殊对数进行计算即可。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: java 对数和指数计算方式
本文链接: https://lsjlt.com/news/132516.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0