commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From s...@apache.org
Subject svn commit: r1165903 - /commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java
Date Tue, 06 Sep 2011 22:17:21 GMT
Author: sebb
Date: Tue Sep  6 22:17:21 2011
New Revision: 1165903

URL: http://svn.apache.org/viewvc?rev=1165903&view=rev
Log:
Document some magic numbers; trailing spaces; other doc tweaks

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

Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java?rev=1165903&r1=1165902&r2=1165903&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/util/FastMath.java Tue
Sep  6 22:17:21 2011
@@ -3091,10 +3091,12 @@ public class FastMath {
         Double.NaN,
     };
 
-    private static final int EXP_FRAC_TABLE_LEN = 1025;
+    private static final int TWO_POWER_10 = 1024;
+    private static final int EXP_FRAC_TABLE_LEN = TWO_POWER_10 + 1; // 0, 1/1024, ... 1024/1024
 
     /** Exponential over the range of 0 - 1 in increments of 2^-10
      * exp(x/1024) =  expFracTableA[x] + expFracTableB[x].
+     * 1024 = 2^10
      */
     private static final double EXP_FRAC_TABLE_A[] = 
         {
@@ -5181,11 +5183,11 @@ public class FastMath {
         +2.0922789888E13d,            
         +3.55687428096E14d,           
         +6.402373705728E15d,          
-        +1.21645100408832E17d,        
+        +1.21645100408832E17d,
     };
             
 
-    private static final int LN_MANT_LEN = 1024;
+    private static final int LN_MANT_LEN = 1024; // MAGIC NUMBER
 
     /** Extended precision logarithm table over the range 1 - 2 in increments of 2^-10. */
     private static final double LN_MANT[][] =     { 
@@ -6265,7 +6267,7 @@ public class FastMath {
         {-0.16624879837036133, -2.6033824355191673E-8}
     };
 
-    private static final int SINE_TABLE_LEN = 14;
+    private static final int SINE_TABLE_LEN = 14; // MAGIC NUMBER
     
     /** Sine table (high bits). */
     private static final double SINE_TABLE_A[] =
@@ -6472,7 +6474,7 @@ public class FastMath {
 
         // Populate expFracTable
         for (i = 0; i < EXP_FRAC_TABLE_A.length; i++) {
-            slowexp(i/1024.0, tmp);
+            slowexp(i/1024.0, tmp); // TWO_POWER_10
             EXP_FRAC_TABLE_A[i] = tmp[0];
             EXP_FRAC_TABLE_B[i] = tmp[1];
         }
@@ -6500,7 +6502,7 @@ public class FastMath {
         printarray("COSINE_TABLE_A", SINE_TABLE_LEN, COSINE_TABLE_A);
         printarray("COSINE_TABLE_B", SINE_TABLE_LEN, COSINE_TABLE_B);
         printarray("TANGENT_TABLE_A", SINE_TABLE_LEN, TANGENT_TABLE_A);
-        printarray("TANGENT_TABLE_B", SINE_TABLE_LEN, TANGENT_TABLE_B);        
+        printarray("TANGENT_TABLE_B", SINE_TABLE_LEN, TANGENT_TABLE_B);
     }
 
     private static void printarray(String string, int expectedLen, double[][] array2d) {
@@ -6578,6 +6580,11 @@ public class FastMath {
           return x;
       }
 
+      // cosh[z] = (exp(z) + exp(-z))/2
+
+      // for numbers with magnitude 20 or so, 
+      // exp(-z) can be ignored in comparison with exp(z)
+
       if (x > 20.0) {
           return exp(x)/2.0;
       }
@@ -6633,6 +6640,11 @@ public class FastMath {
           return x;
       }
 
+      // sinh[z] = (exp(z) - exp(-z) / 2
+      
+      // for values of z larger than about 20, 
+      // exp(-z) can be ignored in comparison with exp(z)
+      
       if (x > 20.0) {
           return exp(x)/2.0;
       }
@@ -6744,6 +6756,12 @@ public class FastMath {
           return x;
       }
 
+      // tanh[z] = sinh[z] / cosh[z] 
+      // = (exp(z) - exp(-z)) / (exp(z) + exp(-z))
+      // = (exp(2x) - 1) / (exp(2x) + 1)
+      
+      // for magnitude > 20, sinh[z] == cosh[z] in double precision
+
       if (x > 20.0) {
           return 1.0;
       }
@@ -7283,7 +7301,7 @@ public class FastMath {
         split(x, xs);
         ys[0] = ys[1] = 0.0;
 
-        for (int i = 19; i >= 0; i--) {
+        for (int i = FACT_LEN-1; i >= 0; i--) {
             splitMult(xs, ys, as);
             ys[0] = as[0];
             ys[1] = as[1];
@@ -7329,7 +7347,7 @@ public class FastMath {
         final double c = a[0] + a[1];
         final double d = -(c - a[0] - a[1]);
 
-        if (c < 8e298 && c > -8e298) {
+        if (c < 8e298 && c > -8e298) { // MAGIC NUMBER
             double z = c * HEX_40000000;
             a[0] = (c + z) - z;
             a[1] = c - a[0] + d;



Mime
View raw message