在java中怎么对一个很小的正浮点数计算以10为底的log值。
例如
对形如 1.23456789e-999999999999999999999999999999....这样的数怎么求?
望给出运用的java类或自己写的类及具体的运算过程。自己的分数少啊!!!!!!!!!
例如
对形如 1.23456789e-999999999999999999999999999999....这样的数怎么求?
望给出运用的java类或自己写的类及具体的运算过程。自己的分数少啊!!!!!!!!!
= -999999999999999999999999999999 + log 1.23456789
= -999999999999999999999999999999 + Math.log10(1.23456789)当然了 Math.log10 计算出来的是个 double 值,精度是有限的。
现在公司里面也有类似的问题
建议使用BigDecimal这个类可以精确的计算,没有误差的,不信你试试
在java.math包下……
结贴去了
public double log(BigInteger a, double base) {
int b = a.bitLength() - 1;
double c = 0;
double d = 1;
for (int i = b; i >= 0; --i) {
if (a.testBit(i))
c += d;
d *= 0.5;
}
return (Math.log(c) + Math.log(2) * b) / Math.log(base);
}public static double log10(BigDecimal a) {
int scal = a.scale();
BigInteger bi = a.unscaledValue();
double log10bi = log(bi, 10);
double log10a = log10bi + (-1.0) * scal;
return log10a;
}