On 8/20/15 5:15 PM, anonymous2 wrote:
On Thursday, 20 August 2015 at 21:11:07 UTC, anonymous wrote:
I severely limited the range of integer. I don't know off the top of
my head how large you can make it without hitting overflow.

with integer == 66 the factorial overflows and becomes 0 (on my machine)
=> integer division by 0...
The overflow happens at lower values, too.


I did this in my test of his code:

long factorial(long i){
    if (i == 0){
        return 1;
    }else{
        auto r = factorial(i-1);
        assert(r * i / r == i, i.to!string);
        return r * i;
    }
}

And it printed 21 for the exception. 20! fits in a long, 21! doesn't.

-Steve

Reply via email to