4 #include "base/cl_sysdep.h"
7 #include "base/digit/cl_2D.h"
14 uintD expt_pos (uintD a, uintL b)
17 // a:=x, b:=y, c:=1. [a^b*c bleibt invariant, = x^y.]
19 // falls b ungerade, setze c:=a*c,
20 // setze b:=floor(b/2),
22 // Wenn b=1, setze c:=a*c.
26 // Solange b gerade, setze a:=a*a, b:=b/2. [a^b bleibt invariant, = x^y.]
28 // Solange b:=floor(b/2) >0 ist,
29 // setze a:=a*a, und falls b ungerade, setze c:=a*c.
31 while ((b & bit(0)) == 0) { a = mul2adic(a,a); b = b>>1; }
33 until ((b = b>>1) == 0)
35 if (b & bit(0)) { c = mul2adic(a,c); }