commons-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From s...@apache.org
Subject svn commit: r1061608 - /commons/proper/math/branches/MATH_2_X/src/main/java/org/apache/commons/math/util/FastMath.java
Date Fri, 21 Jan 2011 03:23:13 GMT
Author: sebb
Date: Fri Jan 21 03:23:13 2011
New Revision: 1061608

URL: http://svn.apache.org/viewvc?rev=1061608&view=rev
Log:
Fix overflows in acos calculation

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

Modified: commons/proper/math/branches/MATH_2_X/src/main/java/org/apache/commons/math/util/FastMath.java
URL: http://svn.apache.org/viewvc/commons/proper/math/branches/MATH_2_X/src/main/java/org/apache/commons/math/util/FastMath.java?rev=1061608&r1=1061607&r2=1061608&view=diff
==============================================================================
--- commons/proper/math/branches/MATH_2_X/src/main/java/org/apache/commons/math/util/FastMath.java
(original)
+++ commons/proper/math/branches/MATH_2_X/src/main/java/org/apache/commons/math/util/FastMath.java
Fri Jan 21 03:23:13 2011
@@ -3135,7 +3135,18 @@ public class FastMath {
 
       // Compute ratio r = y/x
       double r = y/x;
-      temp = r * 1073741824.0;
+
+      // Did r overflow?
+      if (Double.isInfinite(r)) { // x is effectively zero
+          return Math.PI/2; // so return the appropriate value
+      }
+
+      if (abs(r) < Double.MAX_VALUE/1073741824.0){ // is it safe to split r ?
+          temp = r * 1073741824.0;          
+      } else {
+          temp = 0.0;
+      }
+
       double ra = r + temp - temp;
       double rb = r - ra;
 



Mime
View raw message