I think that actually m should be an unsigned type, then no special case is required. Line 2898.
- G m = n; + Unsigned!(G) m = n; Too late to test right now, but see if that works. On 21 June 2010 21:28, Lars Tandle Kyllingstad <[email protected]> wrote: > 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 > > _______________________________________________ > phobos mailing list > [email protected] > http://lists.puremagic.com/mailman/listinfo/phobos > _______________________________________________ phobos mailing list [email protected] http://lists.puremagic.com/mailman/listinfo/phobos
