MODULE PowersOf2; CONST M = 11; N = 32; (* M ~ N*log(2) *) VAR i, j, k, exp : CARDINAL; c, r, t : CARDINAL; d : ARRAY[0..M] OF CARDINAL; f : ARRAY[0..N] OF CARDINAL; BEGIN d[0] := 1; k := 1; FOR exp := 1 TO N DO (* compute d = 2^exp by d := 2*d *) c := 0; (* carry *) FOR i := 0 TO k-1 DO t := 2 * d[i] + c; IF t >= 10 THEN d[i] := t - 10; c := 1; ELSE d[i] := t; c := 0; END (* IF *) END; (* FOR *) IF c > 0 THEN d[k] := 1; k := k + 1; END; (* IF *) (* output d[k-1] ... d[0] *) i := M; REPEAT i := i - 1; WRITE(" "); UNTIL i = k; REPEAT i := i - 1; WRITE(CHR(d[i] + ORD("0"))); UNTIL i = 0; WRITE(exp); (* compute and output f = 2^(-exp) by f := f DIV 2 *) WRITE(" 0."); r := 0; (* remainder *) FOR j := 1 TO exp-1 DO r := 10 * r + f[j]; f[j] := r DIV 2; r := r MOD 2; WRITE(CHR(f[j] + ORD("0"))); END; (* FOR *) f[exp] := 5; WRITE("5"); WRITELN; END; (* FOR *) END PowersOf2.