source: docs/Working/re/longadd.py @ 3475

Last change on this file since 3475 was 3475, checked in by cameron, 6 years ago

Long stream addition figure

File size: 1.7 KB
Line 
1field_template = r"""& {\tt %X}"""
2line_template = r"""{\tt %s} %s \\ \cline{2-%i}"""
3def array_to_latex_table_line(label, A):
4    N = len(A)
5    data = " ".join([field_template % A[N-i-1] for i in range(N)])
6    return line_template % (label, data, N + 1)
7
8def int_to_latex_table_line(label, v, N):
9    data = " ".join([field_template % ((v >> (N - i - 1)) & 1) for i in range(N)])
10    return line_template % (label, data, N + 1)
11
12
13def demo_long_stream_add(valx, valy, fw=8):
14    N = 0
15    fw_mask = (1 << fw) - 1
16    X = []
17    Y = []
18    while valx >0 and valy > 0:
19       X.append(valx & fw_mask)
20       Y.append(valy & fw_mask)
21       N += 1
22       valx >>= fw
23       valy >>= fw
24    R = [(X[i] + Y[i]) & fw_mask for i in range(N)]
25    x = sum([(X[i] >> (fw - 1)) << i for i in range(N)])
26    y = sum([(Y[i] >> (fw - 1)) << i for i in range(N)])
27    r = sum([(R[i] >> (fw - 1)) << i for i in range(N)])
28    c = (x & y) | ((x | y) &~ r)
29    b = sum([((R[i] + 1) >> fw) << i for i in range(N)])
30    c2 = c*2
31    incr = (((c2 & b) + b) ^ b) | c2
32    Z = [(R[i] + ((incr >> i) & 1)) & fw_mask for i in range(N)]
33    print array_to_latex_table_line("X", X)
34    print array_to_latex_table_line("Y", Y)
35    print array_to_latex_table_line("R", R)
36    print int_to_latex_table_line("x", x, N)
37    print int_to_latex_table_line("y", y, N)
38    print int_to_latex_table_line("r", r, N)
39    print int_to_latex_table_line("c", c, N)
40    print int_to_latex_table_line("c*2", c*2, N)
41    print int_to_latex_table_line("b", b, N)
42    print int_to_latex_table_line("i", incr, N)
43    print array_to_latex_table_line("Z", Z)
44
45demo_long_stream_add(0x1931ba4c3d4521F1, 0x221245b3e2161736)
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
Note: See TracBrowser for help on using the repository browser.