Get the log( exp( logX ) - exp( logY ) ). - Java java.lang

Java examples for java.lang:Math Algorithm

Description

Get the log( exp( logX ) - exp( logY ) ).

Demo Code

/**   Basic numeric operations not included in standard Java run-time library.
 *
 *   <p>// ww  w .  j a  va2 s  . co  m
 *   The binomial methods are modified from those in the Colt library.
 *   </p>
 *
 *   <p>
 *   The following methods for trigonometric functions come from the
 *   Sfun class written by Visual Numerics.
 *   </p>
 *
 *   <ul>
 *   <li>acosh</li>
 *   <li>asinh</li>
 *   <li>atanh</li>
 *   <li>cot</li>
 *   <li>cosh</li>
 *   <li>sinh</li>
 *   <li>tanh</li>
 *   </ul>
 *
 *   <p>
 *   These methods are covered by the following license.
 *   </p>
 *
 * -------------------------------------------------------------------------
 *   $Id: Sfun.java,v 1.1.1.1 1999/03/05 21:43:39 brophy Exp $
 * -------------------------------------------------------------------------
 * Copyright (c) 1997 - 1998 by Visual Numerics, Inc. All rights reserved.
 *
 * Permission to use, copy, modify, and distribute this software is freely
 * granted by Visual Numerics, Inc., provided that the copyright notice
 * above and the following warranty disclaimer are preserved in human
 * readable form.
 *
 * Because this software is licensed free of charge, it is provided
 * "AS IS", with NO WARRANTY.  TO THE EXTENT PERMITTED BY LAW, VNI
 * DISCLAIMS ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
 * TO ITS PERFORMANCE, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 * VNI WILL NOT BE LIABLE FOR ANY DAMAGES WHATSOEVER ARISING OUT OF THE USE
 * OF OR INABILITY TO USE THIS SOFTWARE, INCLUDING BUT NOT LIMITED TO DIRECT,
 * INDIRECT, SPECIAL, CONSEQUENTIAL, PUNITIVE, AND EXEMPLARY DAMAGES, EVEN
 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
 *
 * -------------------------------------------------------------------------
 */
//package com.java2s;

public class Main {
    public static void main(String[] argv) throws Exception {
        double logX = 2.45678;
        double logY = 2.45678;
        System.out.println(logDiffLogs(logX, logY));
    }

    /**   Get the log( exp( logX ) - exp( logY ) ).
     *
     *   @param   logX   Log( x )
     *   @param   logY   Log( y )
     *
     *   @return         log( x - y ) .
     */

    public static double logDiffLogs(double logX, double logY) {
        return logX + log1p(-Math.exp(logY - logX));
    }

    /**   Get log of a double + 1.
     *
     *   @param   x   The number for which we want log( x + 1 ).
     *
     *   @return      The log of ( x + 1 ).
     *
     *   <p>
     *   Example:   log1p( 0.001D ) is 9.995003330835334E-4
     *   </p>
     *
     *   <p>
     *   Implements a method suggested by William Kahan.
     *   </p>
     */

    public static double log1p(double x) {
        double result;
        double u;
        //   Use log(), corrected to first order
        //   for truncation loss.
        u = 1.0D + x;

        if (u == 1.0D) {
            result = x;
        } else {
            result = (Math.log(u) * (x / (u - 1.0D)));
        }

        return result;
    }
}

Related Tutorials