4 #include "base/cl_sysdep.h"
7 #include "base/digit/cl_2D.h"
14 uintD div2adic (uintD a, uintD b)
17 // Konstruiere c Bit für Bit.
19 // Für j=0,...,intDsize:
20 // [Hier b*c == a mod 2^j und d = (a-b*c)/2^j.] j=intDsize -> fertig.
21 // Falls d ungerade, setze c:=c+2^j und d:=(d-b)/2, sonst d:=d/2.
23 ASSERT(!((b % 2) ==0))
26 var uintD bit_j = 1; // 2^j
27 loop // Verwende a als Variable d
28 { if (a & bit(0)) { c = c+bit_j; a = a-b; }
31 if (bit_j == 0) break; // j=intDsize -> fertig
36 {var uintD bit_j = 1; // 2^j
37 var uintD b_j = b-1; // (b-1)*2^j
38 loop // Verwende a als Variable d*2^j+c
39 { if (a & bit_j) { a = a - b_j; }
40 b_j = b_j << 1; bit_j = bit_j << 1;
41 if (bit_j == 0) break; // j=intDsize -> fertig