extremely simple version natural logarithm, using no algorithm tricks, but just via doubles and recreating BigDecimal Might give less accurate results, but this is to be tested. - Java java.math

Java examples for java.math:BigDecimal Trigonometric Function

Description

extremely simple version natural logarithm, using no algorithm tricks, but just via doubles and recreating BigDecimal Might give less accurate results, but this is to be tested.

Demo Code

/*/* w  w w . j ava  2  s.  c  o  m*/
 Anders H?fft, note: This class was downloaded as a quick, and temprory, way of getting a BigDecimal ln() method. 
 The code belongs to Cyclos. See comment below:

 This file is part of Cyclos (www.cyclos.org).
 A project of the Social Trade Organisation (www.socialtrade.org).
 Cyclos is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or
 (at your option) any later version.
 Cyclos is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 GNU General Public License for more details.
 You should have received a copy of the GNU General Public License
 along with Cyclos; if not, write to the Free Software
 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 */
//package com.java2s;
import java.math.BigDecimal;

import java.math.MathContext;

public class Main {
    public static void main(String[] argv) throws Exception {
        BigDecimal x = new BigDecimal("1234");
        int scale = 2;
        System.out.println(simpleLn(x, scale));
    }

    /**
     * extremely simple version natural logarithm, using no algorithm tricks, but just via doubles and recreating BigDecimal Might give less accurate
     * results, but this is to be tested. As long as this hasn't happened it is deprecated.
     */
    @Deprecated
    public static BigDecimal simpleLn(final BigDecimal x, final int scale) {
        final long unscaledValue = x.unscaledValue().longValue();
        final int scalevalue = x.scale();
        final double result = Math.log(unscaledValue)
                - (scalevalue * Math.log(10.0));
        return new BigDecimal(result, new MathContext(scale));
    }
}

Related Tutorials