On Thu, Jun 23, 2016 at 01:22:55PM -0400, Andrei Alexandrescu via Digitalmars-d 
wrote:
> So I was looking for an efficient exponentiation implementation, and
> http://www.stepanovpapers.com/PAM.pdf has a nice discussion starting
> at page 54. Stepanov's solution, however, duplicates code, so I
> eliminated it:
> 
> https://dpaste.dzfl.pl/e53acb41885a
> 
> The cost is the use of one goto. Can the code be restructured to not
> need it?
[...]

I don't understand why that goto is necessary. Or, indeed, why a nested
loop is needed at all. Why can't it be written like this?:

        outer: for (;;)
        {
                if (e % 2 != 0)
                {
                        r = mul(r, b, overflow);
                        if (e == 1) return r;
                }

                b = mul(b, b, overflow);
                e /= 2;
        }

AFAICT, the two possible code paths through the loops are the same.  Am
I missing something??


T

-- 
Winners never quit, quitters never win. But those who never quit AND never win 
are idiots.

Reply via email to