You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by er...@apache.org on 2012/08/12 23:22:59 UTC

svn commit: r1372199 - /commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/FastMath.java

Author: erans
Date: Sun Aug 12 21:22:58 2012
New Revision: 1372199

URL: http://svn.apache.org/viewvc?rev=1372199&view=rev
Log:
Code cleanup.

Modified:
    commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/FastMath.java

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/FastMath.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/FastMath.java?rev=1372199&r1=1372198&r2=1372199&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/FastMath.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math3/util/FastMath.java Sun Aug 12 21:22:58 2012
@@ -1328,47 +1328,42 @@ public class FastMath {
         return a + b;
     }
 
-    /** Compute log(1 + x).
-     * @param x a number
-     * @return log(1 + x)
+    /**
+     * Computes log(1 + x).
+     *
+     * @param x Number.
+     * @return {@code log(1 + x)}.
      */
     public static double log1p(final double x) {
-
         if (x == -1) {
-            return x/0.0;   // -Infinity
+            return Double.NEGATIVE_INFINITY;
         }
 
-        if (x > 0 && 1/x == 0) { // x = Infinity
-            return x;
+        if (x == Double.POSITIVE_INFINITY) {
+            return Double.POSITIVE_INFINITY;
         }
 
-        if (x>1e-6 || x<-1e-6) {
-            double xpa = 1.0 + x;
-            double xpb = -(xpa - 1.0 - x);
-
-            double hiPrec[] = new double[2];
+        if (x > 1e-6 ||
+            x < -1e-6) {
+            final double xpa = 1 + x;
+            final double xpb = -(xpa - 1 - x);
 
+            final double[] hiPrec = new double[2];
             final double lores = log(xpa, hiPrec);
-            if (Double.isInfinite(lores)){ // don't allow this to be converted to NaN
+            if (Double.isInfinite(lores)) { // Don't allow this to be converted to NaN
                 return lores;
             }
 
-            /* Do a taylor series expansion around xpa */
-            /* f(x+y) = f(x) + f'(x)*y + f''(x)/2 y^2 */
-            double fx1 = xpb/xpa;
-
-            double epsilon = 0.5 * fx1 + 1.0;
-            epsilon = epsilon * fx1;
-
-            return epsilon + hiPrec[1] + hiPrec[0];
+            // Do a taylor series expansion around xpa:
+            //   f(x+y) = f(x) + f'(x) y + f''(x)/2 y^2
+            final double fx1 = xpb / xpa;
+            final double epsilon = 0.5 * fx1 + 1;
+            return epsilon * fx1 + hiPrec[1] + hiPrec[0];
+        } else {
+            // Value is small |x| < 1e6, do a Taylor series centered on 1.
+            final double y = (x * F_1_3 - F_1_2) * x + 1;
+            return y * x;
         }
-
-        /* Value is small |x| < 1e6, do a Taylor series centered on 1.0 */
-        double y = x * F_1_3 - F_1_2;
-        y = y * x + 1.0;
-        y = y * x;
-
-        return y;
     }
 
     /** Compute the base 10 logarithm.