Java examples for java.lang:Math Operation
Return the hyperbolic tangent of a double.
/** Basic numeric operations not included in standard Java run-time library. * * <p>/*from ww w. j av a 2s . c om*/ * 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. * * ------------------------------------------------------------------------- */ public class Main{ public static void main(String[] argv) throws Exception{ double x = 2.45678; System.out.println(tanh(x)); } private static final double TANH_COEF[] = { -.25828756643634710, -.11836106330053497, .009869442648006398, -.000835798662344582, .000070904321198943, -.000006016424318120, .000000510524190800, -.000000043320729077, .000000003675999055, -.000000000311928496, .000000000026468828, -.000000000002246023, .000000000000190587, -.000000000000016172, .000000000000001372, -.000000000000000116, .000000000000000009 }; /** Return the hyperbolic tangent of a double. * * @param x The value whose hyperbolic tangent is desired. * * @return The hyperbolic tangent of x. * * <p> * This method is a modified version of the one in the * Visual Numerics Sfun class. * </p> */ public static double tanh(double x) { double ans, y; y = Math.abs(x); if (Double.isNaN(x)) { ans = Double.NaN; } // 1.82501e-08 = Math.sqrt(3.0*EPSILON_SMALL) else if (y < 1.82501e-08) { ans = x; } else if (y <= 1.0D) { ans = x * (1.0D + Polynomial.evaluateChebyschev(TANH_COEF, 2.0D * x * x - 1.0D)); } // 7.977294885 = -0.5*Math.log(EPSILON_SMALL) else if (y < 7.977294885) { y = Math.exp(y); ans = sign((y - 1.0D / y) / (y + 1.0D / y), x); } else { ans = sign(1.0D, x); } return ans; } /** Return sign of an integer. * * @param n Number whose sign is desired. * * @return -1 if n < 0, 0 if n isn 0, 1 if n > 0. */ public static int sign(int n) { if (n > 0) { return 1; } else if (n < 0) { return -1; } return 0; } /** Return sign of a double. * * @param d double whose sign is desired. * * @return -1 if d < 0, 0 if d is 0, 1 if d > 0. */ public static int sign(double d) { if (d > 0.0D) { return 1; } else if (d < 0.0D) { return -1; } return 0; } /** Return the value of a double with the sign of another double. * * @param x First double. * @param y Second double. * * @return x with the sign of y. */ public static double sign(double x, double y) { double abs_x = ((x < 0) ? -x : x); return (y < 0.0) ? -abs_x : abs_x; } }