01: /***
02: * Retrotranslator: a Java bytecode transformer that translates Java classes
03: * compiled with JDK 5.0 into classes that can be run on JVM 1.4.
04: *
05: * Copyright (c) 2005 - 2008 Taras Puchko
06: * All rights reserved.
07: *
08: * Redistribution and use in source and binary forms, with or without
09: * modification, are permitted provided that the following conditions
10: * are met:
11: * 1. Redistributions of source code must retain the above copyright
12: * notice, this list of conditions and the following disclaimer.
13: * 2. Redistributions in binary form must reproduce the above copyright
14: * notice, this list of conditions and the following disclaimer in the
15: * documentation and/or other materials provided with the distribution.
16: * 3. Neither the name of the copyright holders nor the names of its
17: * contributors may be used to endorse or promote products derived from
18: * this software without specific prior written permission.
19: *
20: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23: * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24: * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25: * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26: * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27: * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28: * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29: * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30: * THE POSSIBILITY OF SUCH DAMAGE.
31: */package net.sf.retrotranslator.runtime.java.lang;
32:
33: /**
34: * @author Taras Puchko
35: */
36: public class _Math {
37:
38: private static final double LOG10 = Math.log(10);
39:
40: public static double cbrt(double a) {
41: if (a > 0) {
42: return Math.pow(a, 1.0 / 3);
43: }
44: if (a < 0) {
45: return -Math.pow(Math.abs(a), 1.0 / 3);
46: }
47: return a;
48: }
49:
50: public static double cosh(double x) {
51: return (Math.exp(x) + Math.exp(-x)) / 2;
52: }
53:
54: public static double expm1(double x) {
55: return x == 0 ? x : Math.exp(x) - 1;
56: }
57:
58: public static double log10(double a) {
59: double exactResult = Math.log(a) / LOG10;
60: double fixedResult = Math.ceil(exactResult);
61: double fixedArgument = Math.pow(10, fixedResult);
62: return fixedArgument <= a ? fixedResult : exactResult;
63: }
64:
65: public static double log1p(double x) {
66: return x == 0 ? x : Math.log(1.0 + x);
67: }
68:
69: public static double signum(double d) {
70: return d > 0 ? 1 : d < 0 ? -1 : d == 0 ? d : Double.NaN;
71: }
72:
73: public static float signum(float f) {
74: return f > 0 ? 1 : f < 0 ? -1 : f == 0 ? f : Float.NaN;
75: }
76:
77: public static double sinh(double x) {
78: return x == 0 ? x : (Math.exp(x) - Math.exp(-x)) / 2;
79: }
80:
81: public static double tanh(double x) {
82: if (x == 0) {
83: return x;
84: }
85: if (x == Double.POSITIVE_INFINITY) {
86: return 1;
87: }
88: if (x == Double.NEGATIVE_INFINITY) {
89: return -1;
90: }
91: double p = Math.exp(x);
92: double q = Math.exp(-x);
93: return (p - q) / (p + q);
94: }
95:
96: }
|