[phobos] Fixing std.math.pow(x, int.min)

Lars Tandle Kyllingstad lars at kyllingen.net
Mon Jun 21 12:28:39 PDT 2010


Bug 3202 basically says that std.math.pow(someFloat, int.min) enters an
infinite loop because int.min == -int.min.  Here's my suggestion for a
fix:

--- std/math.d	(revision 1672)
+++ std/math.d	(working copy)
@@ -2904,6 +2904,12 @@
             return 1 / x;
         case -2:
             return 1 / (x * x);
+        static if (isSigned!G)
+        {
+        case G.min:
+            enum absGmin = cast(Unsigned!G)(-(G.min+1)) + 1;
+            return 1 / pow(x, absGmin);
+        }
         default:
         }

I'm wary of doing anything to std.math, since it's so fundamental and
performance-critical.  So please, speak up if you see a problem with
this patch.

-Lars



More information about the phobos mailing list