You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2011/10/01 14:16:58 UTC

svn commit: r1177970 - in /mahout/trunk: core/src/main/java/org/apache/mahout/classifier/ core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/ core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/ core/src/main/java...

Author: srowen
Date: Sat Oct  1 12:16:57 2011
New Revision: 1177970

URL: http://svn.apache.org/viewvc?rev=1177970&view=rev
Log:
Fun small thing I learned: Java has a special faster/more accurate method for ln(1+x)

Modified:
    mahout/trunk/core/src/main/java/org/apache/mahout/classifier/AbstractVectorClassifier.java
    mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/CBayesThetaNormalizerMapper.java
    mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/BayesFeatureMapper.java
    mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java
    mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmAlgorithms.java
    mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmTrainer.java
    mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L2.java
    mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TPrior.java
    mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java
    mahout/trunk/core/src/main/java/org/apache/mahout/clustering/lda/LDAUtil.java
    mahout/trunk/core/src/main/java/org/apache/mahout/ep/State.java
    mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/entropy/SpecificConditionalEntropyReducer.java
    mahout/trunk/core/src/main/java/org/apache/mahout/vectorizer/encoders/TextValueEncoder.java
    mahout/trunk/core/src/test/java/org/apache/mahout/ep/ThreadedEvolutionaryProcessTest.java
    mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/SimpleCsvExamples.java
    mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/TrainNewsGroups.java
    mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Exponential.java
    mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Gamma.java
    mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/stat/GammaTest.java
    mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/LogLikelihoodTest.java
    mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineSummarizerTest.java

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/AbstractVectorClassifier.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/AbstractVectorClassifier.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/AbstractVectorClassifier.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/AbstractVectorClassifier.java Sat Oct  1 12:16:57 2011
@@ -170,14 +170,14 @@ public abstract class AbstractVectorClas
       if (actual > 0) {
         return Math.max(-100.0, Math.log(p));
       } else {
-        return Math.max(-100.0, Math.log(1.0 - p));
+        return Math.max(-100.0, Math.log1p(-p));
       }
     } else {
       Vector p = classify(data);
       if (actual > 0) {
         return Math.max(-100.0, Math.log(p.get(actual - 1)));
       } else {
-        return Math.max(-100.0, Math.log(1.0 - p.zSum()));
+        return Math.max(-100.0, Math.log1p(-p.zSum()));
       }
     }
   }

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/CBayesThetaNormalizerMapper.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/CBayesThetaNormalizerMapper.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/CBayesThetaNormalizerMapper.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/CBayesThetaNormalizerMapper.java Sat Oct  1 12:16:57 2011
@@ -89,7 +89,7 @@ public class CBayesThetaNormalizerMapper
       
       double dIJ = value.get();
       double denominator = 0.5 * (sigmaJSigmaK / vocabCount + dIJ * this.labelWeightSum.size());
-      double weight = Math.log(1.0 - dIJ / denominator);
+      double weight = Math.log1p(-dIJ / denominator);
       
       reporter.setStatus("Complementary Bayes Theta Normalizer Mapper: " + label + " => " + weight);
       

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/BayesFeatureMapper.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/BayesFeatureMapper.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/BayesFeatureMapper.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/BayesFeatureMapper.java Sat Oct  1 12:16:57 2011
@@ -119,7 +119,7 @@ public class BayesFeatureMapper extends 
           tuple.add(BayesConstants.WEIGHT);
           tuple.add(label);
           tuple.add(token);
-          DoubleWritable f = new DoubleWritable(Math.log(1.0 + dKJ) / lengthNormalisation);
+          DoubleWritable f = new DoubleWritable(Math.log1p(dKJ) / lengthNormalisation);
           output.collect(tuple, f);
         } catch (IOException e) {
           throw new IllegalStateException(e);

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java Sat Oct  1 12:16:57 2011
@@ -81,7 +81,7 @@ public class Auc {
     if (isProbabilityScore()) {
       double limited = Math.max(1.0e-20, Math.min(score, 1 - 1.0e-20));
       double v0 = entropy.get(trueValue, 0);
-      entropy.set(trueValue, 0, (Math.log(1 - limited) - v0) / samples + v0);
+      entropy.set(trueValue, 0, (Math.log1p(-limited) - v0) / samples + v0);
 
       double v1 = entropy.get(trueValue, 1);
       entropy.set(trueValue, 1, (Math.log(limited) - v1) / samples + v1);
@@ -211,9 +211,9 @@ public class Auc {
       // find a constant score that would optimize log-likelihood, but use a dash of Bayesian
       // conservatism to avoid dividing by zero or taking log(0)
       double p = (0.5 + confusion.get(1, 1)) / (1 + confusion.get(0, 0) + confusion.get(1, 1));
-      entropy.set(0, 0, confusion.get(0, 0) * Math.log(1 - p));
+      entropy.set(0, 0, confusion.get(0, 0) * Math.log1p(-p));
       entropy.set(0, 1, confusion.get(0, 1) * Math.log(p));
-      entropy.set(1, 0, confusion.get(1, 0) * Math.log(1 - p));
+      entropy.set(1, 0, confusion.get(1, 0) * Math.log1p(-p));
       entropy.set(1, 1, confusion.get(1, 1) * Math.log(p));
     }
     return entropy;

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmAlgorithms.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmAlgorithms.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmAlgorithms.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmAlgorithms.java Sat Oct  1 12:16:57 2011
@@ -79,7 +79,7 @@ public final class HmmAlgorithms {
             double tmp = alpha.getQuick(t - 1, j) + Math.log(a.getQuick(j, i));
             if (tmp > Double.NEGATIVE_INFINITY) {
               // make sure we handle log(0) correctly
-              sum = tmp + Math.log(1 + Math.exp(sum - tmp));
+              sum = tmp + Math.log1p(Math.exp(sum - tmp));
             }
           }
           alpha.setQuick(t, i, sum + Math.log(b.getQuick(i, observations[t])));
@@ -150,7 +150,7 @@ public final class HmmAlgorithms {
                 + Math.log(b.getQuick(j, observations[t + 1]));
             if (tmp > Double.NEGATIVE_INFINITY) {
               // handle log(0)
-              sum = tmp + Math.log(1 + Math.exp(sum - tmp));
+              sum = tmp + Math.log1p(Math.exp(sum - tmp));
             }
           }
           beta.setQuick(t, i, sum);

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmTrainer.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmTrainer.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmTrainer.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmTrainer.java Sat Oct  1 12:16:57 2011
@@ -419,7 +419,7 @@ public final class HmmTrainer {
               + beta.getQuick(t + 1, j);
           if (temp > Double.NEGATIVE_INFINITY) {
             // handle 0-probabilities
-            sum = temp + Math.log(1 + Math.exp(sum - temp));
+            sum = temp + Math.log1p(Math.exp(sum - temp));
           }
         }
         transitionMatrix.setQuick(i, j, transitionMatrix.getQuick(i, j)
@@ -436,7 +436,7 @@ public final class HmmTrainer {
             double temp = alpha.getQuick(t, i) + beta.getQuick(t, i);
             if (temp > Double.NEGATIVE_INFINITY) {
               // handle 0-probabilities
-              sum = temp + Math.log(1 + Math.exp(sum - temp));
+              sum = temp + Math.log1p(Math.exp(sum - temp));
             }
           }
         }

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L2.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L2.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L2.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L2.java Sat Oct  1 12:16:57 2011
@@ -26,6 +26,9 @@ import java.io.IOException;
  * doesn't tend to set them to exactly zero.
  */
 public class L2 implements PriorFunction {
+
+  private static final double HALF_LOG_2PI = Math.log(2.0 * Math.PI) / 2.0;
+
   private double s2;
   private double s;
 
@@ -44,7 +47,7 @@ public class L2 implements PriorFunction
 
   @Override
   public double logP(double betaIJ) {
-    return -betaIJ * betaIJ / s2 / 2.0 - Math.log(s) - Math.log(2.0 * Math.PI) / 2.0;
+    return -betaIJ * betaIJ / s2 / 2.0 - Math.log(s) - HALF_LOG_2PI;
   }
 
   @Override

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TPrior.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TPrior.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TPrior.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TPrior.java Sat Oct  1 12:16:57 2011
@@ -46,7 +46,7 @@ public class TPrior implements PriorFunc
     return Gamma.logGamma((df + 1.0) / 2.0)
         - Math.log(df * Math.PI)
         - Gamma.logGamma(df / 2.0)
-        - (df + 1.0) / 2.0 * Math.log(1.0 + betaIJ * betaIJ);
+        - (df + 1.0) / 2.0 * Math.log1p(betaIJ * betaIJ);
   }
 
   @Override

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java Sat Oct  1 12:16:57 2011
@@ -224,7 +224,7 @@ public final class UncommonDistributions
     if (p >= 1.0) {
       return n; // needed to avoid infinite loops and negative results
     }
-    double q = -Math.log(1.0 - p);
+    double q = -Math.log1p(-p);
     double sum = 0.0;
     int x = 0;
     while (sum <= q) {

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/clustering/lda/LDAUtil.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/lda/LDAUtil.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/clustering/lda/LDAUtil.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/clustering/lda/LDAUtil.java Sat Oct  1 12:16:57 2011
@@ -27,7 +27,7 @@ final class LDAUtil {
    */
   static double logSum(double a, double b) {
     return a == Double.NEGATIVE_INFINITY ? b : b == Double.NEGATIVE_INFINITY ? a
-        : a < b ? b + Math.log(1 + Math.exp(a - b)) : a + Math.log(1 + Math.exp(b - a));
+        : a < b ? b + Math.log1p(Math.exp(a - b)) : a + Math.log1p(Math.exp(b - a));
   }
   
 }

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/ep/State.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/ep/State.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/ep/State.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/ep/State.java Sat Oct  1 12:16:57 2011
@@ -113,7 +113,7 @@ public class State<T extends Payload<U>,
 
     State<T, U> r = this.copy();
     double magnitude = 0.9 * omni + sum / 10;
-    r.omni = magnitude * -Math.log(1 - gen.nextDouble());
+    r.omni = magnitude * -Math.log1p(-gen.nextDouble());
     for (int i = 0; i < step.length; i++) {
       r.step[i] = lambda * step[i] + r.omni * gen.nextGaussian();
       r.params[i] += r.step[i];

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/entropy/SpecificConditionalEntropyReducer.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/entropy/SpecificConditionalEntropyReducer.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/entropy/SpecificConditionalEntropyReducer.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/entropy/SpecificConditionalEntropyReducer.java Sat Oct  1 12:16:57 2011
@@ -33,6 +33,8 @@ import java.io.IOException;
  * = (sum * log(sum) - sum_i(values_i * log(values_i)) / (n * log(2))
  */
 public final class SpecificConditionalEntropyReducer extends Reducer<Text, VarIntWritable, Text, DoubleWritable> {
+  
+  private static final double LOG2 = Math.log(2.0);
 
   private final DoubleWritable result = new DoubleWritable();
   private double numberItemsLog2;
@@ -40,8 +42,7 @@ public final class SpecificConditionalEn
   @Override
   protected void setup(Context context) throws IOException, InterruptedException {
     super.setup(context);
-    numberItemsLog2 =
-        Math.log(2) * Integer.parseInt(context.getConfiguration().get(ConditionalEntropy.NUMBER_ITEMS_PARAM));
+    numberItemsLog2 = LOG2 * Integer.parseInt(context.getConfiguration().get(ConditionalEntropy.NUMBER_ITEMS_PARAM));
   }
 
   @Override

Modified: mahout/trunk/core/src/main/java/org/apache/mahout/vectorizer/encoders/TextValueEncoder.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/vectorizer/encoders/TextValueEncoder.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/vectorizer/encoders/TextValueEncoder.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/vectorizer/encoders/TextValueEncoder.java Sat Oct  1 12:16:57 2011
@@ -86,7 +86,7 @@ public class TextValueEncoder extends Fe
   public void flush(double weight, Vector data) {
     for (String word : counts.elementSet()) {
       // weight words by log_2(tf) times whatever other weight we are given
-      wordEncoder.addToVector(word, weight * Math.log(1 + counts.count(word)) / LOG_2, data);
+      wordEncoder.addToVector(word, weight * Math.log1p(counts.count(word)) / LOG_2, data);
     }
     counts.clear();
   }

Modified: mahout/trunk/core/src/test/java/org/apache/mahout/ep/ThreadedEvolutionaryProcessTest.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/ep/ThreadedEvolutionaryProcessTest.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/test/java/org/apache/mahout/ep/ThreadedEvolutionaryProcessTest.java (original)
+++ mahout/trunk/core/src/test/java/org/apache/mahout/ep/ThreadedEvolutionaryProcessTest.java Sat Oct  1 12:16:57 2011
@@ -43,7 +43,7 @@ public final class ThreadedEvolutionaryP
         }
         try {
           // variable delays to emulate a tricky function
-          Thread.sleep((long) Math.floor(-2 * Math.log(1 - random.nextDouble())));
+          Thread.sleep((long) Math.floor(-2 * Math.log1p(-random.nextDouble())));
         } catch (InterruptedException e) {
           // ignore interruptions
         }

Modified: mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/SimpleCsvExamples.java
URL: http://svn.apache.org/viewvc/mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/SimpleCsvExamples.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/SimpleCsvExamples.java (original)
+++ mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/SimpleCsvExamples.java Sat Oct  1 12:16:57 2011
@@ -177,7 +177,7 @@ public final class SimpleCsvExamples {
      * @return
      */
     private static int randomValue(double mean) {
-      return (int) (-mean * Math.log(1 - rand.nextDouble()));
+      return (int) (-mean * Math.log1p(-rand.nextDouble()));
     }
 
     @Override

Modified: mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/TrainNewsGroups.java
URL: http://svn.apache.org/viewvc/mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/TrainNewsGroups.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/TrainNewsGroups.java (original)
+++ mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/TrainNewsGroups.java Sat Oct  1 12:16:57 2011
@@ -313,7 +313,7 @@ public final class TrainNewsGroups {
     Vector v = new RandomAccessSparseVector(FEATURES);
     bias.addToVector("", 1, v);
     for (String word : words.elementSet()) {
-      encoder.addToVector(word, Math.log(1 + words.count(word)), v);
+      encoder.addToVector(word, Math.log1p(words.count(word)), v);
     }
 
     return v;

Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Exponential.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Exponential.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Exponential.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Exponential.java Sat Oct  1 12:16:57 2011
@@ -46,7 +46,7 @@ public class Exponential extends Abstrac
    */
   @Override
   public double nextDouble() {
-    return -Math.log(1 - randomGenerator.nextDouble()) / lambda;
+    return -Math.log1p(-randomGenerator.nextDouble()) / lambda;
   }
 
   /**

Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Gamma.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Gamma.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Gamma.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Gamma.java Sat Oct  1 12:16:57 2011
@@ -190,12 +190,12 @@ public class Gamma extends AbstractConti
       if (x > 0.0) {                        // Step 5. Calculation of q
         v = t / (s + s);                  // Step 6.
         if (Math.abs(v) > 0.25) {
-          q = q0 - s * t + 0.25 * t * t + (ss + ss) * Math.log(1.0 + v);
+          q = q0 - s * t + 0.25 * t * t + (ss + ss) * Math.log1p(v);
         } else {
           q = q0 + 0.5 * t * t * ((((((((a9 * v + a8) * v + a7) * v + a6)
               * v + a5) * v + a4) * v + a3) * v + a2) * v + a1) * v;
         }                  // Step 7. Quotient acceptance
-        if (Math.log(1.0 - u) <= q) {
+        if (Math.log1p(-u) <= q) {
           return gds / rate;
         }
       }
@@ -219,7 +219,7 @@ public class Gamma extends AbstractConti
         } while (t <= -0.71874483771719); // Step 9. Rejection of t
         v = t / (s + s);                  // Step 10. New q(t)
         if (Math.abs(v) > 0.25) {
-          q = q0 - s * t + 0.25 * t * t + (ss + ss) * Math.log(1.0 + v);
+          q = q0 - s * t + 0.25 * t * t + (ss + ss) * Math.log1p(v);
         } else {
           q = q0 + 0.5 * t * t * ((((((((a9 * v + a8) * v + a7) * v + a6)
               * v + a5) * v + a4) * v + a3) * v + a2) * v + a1) * v;

Modified: mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/stat/GammaTest.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/stat/GammaTest.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/stat/GammaTest.java (original)
+++ mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/stat/GammaTest.java Sat Oct  1 12:16:57 2011
@@ -102,8 +102,8 @@ public final class GammaTest extends Mah
   public void beta() {
     Random r = RandomUtils.getRandom();
     for (int i = 0; i < 200; i++) {
-      double alpha = -50 * Math.log(1 - r.nextDouble());
-      double beta = -50 * Math.log(1 - r.nextDouble());
+      double alpha = -50 * Math.log1p(-r.nextDouble());
+      double beta = -50 * Math.log1p(-r.nextDouble());
       double ref = Math.exp(Gamma.logGamma(alpha) + Gamma.logGamma(beta) - Gamma.logGamma(alpha + beta));
       double actual = Gamma.beta(alpha, beta);
       double err = (ref - actual) / ref;

Modified: mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/LogLikelihoodTest.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/LogLikelihoodTest.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/LogLikelihoodTest.java (original)
+++ mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/LogLikelihoodTest.java Sat Oct  1 12:16:57 2011
@@ -81,7 +81,7 @@ public final class LogLikelihoodTest ext
       .assign(new DoubleFunction() {
         @Override
         public double apply(double arg1) {
-          return -Math.log(1 - rand.nextDouble());
+          return -Math.log1p(-rand.nextDouble());
         }
       });
 

Modified: mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineSummarizerTest.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineSummarizerTest.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineSummarizerTest.java (original)
+++ mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineSummarizerTest.java Sat Oct  1 12:16:57 2011
@@ -108,7 +108,7 @@ public final class OnlineSummarizerTest 
     // TODO use RandomUtils.getRandom() and rejigger constants to make test pass
     Random gen = new Random(1L);
     for (int i = 0; i < n; i++) {
-      x.add(-Math.log(1 - gen.nextDouble()));
+      x.add(-Math.log1p(-gen.nextDouble()));
     }
     return x;
   }