在java中怎么对一个很小的正浮点数计算以10为底的log值。
例如
    对形如 1.23456789e-999999999999999999999999999999....这样的数怎么求?
望给出运用的java类或自己写的类及具体的运算过程。自己的分数少啊!!!!!!!!!

解决方案 »

  1.   

    log a×10^n = log a + log 10^n = n + log a因此  log 1.23456789e-999999999999999999999999999999
    = -999999999999999999999999999999 + log 1.23456789
    = -999999999999999999999999999999 + Math.log10(1.23456789)当然了 Math.log10 计算出来的是个 double 值,精度是有限的。
      

  2.   

    我以前也遇到类似的问题
    现在公司里面也有类似的问题 
    建议使用BigDecimal这个类可以精确的计算,没有误差的,不信你试试  
      

  3.   

    从3楼学习了,平时还没注意有这个类呢。刚查了下,
    在java.math包下……
      

  4.   

    注意BigDecimal构造的时候传String类型的参数,不然还是有bug
      

  5.   

    嗯,用BigDecimal比较好,我现在的项目遇到这个问题,我就是这样做的
      

  6.   

    BigDecimal 好像不能计算 log 值吧,得先自己实现一个 log 算法才能用。
      

  7.   

    终于找到方法了,谢谢各位同仁,以下是我找到的方法,请各位评价下。
    结贴去了
    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;
    }