forked from melvinzhang/turing-machine
-
Notifications
You must be signed in to change notification settings - Fork 0
/
sqrt2.tm
96 lines (70 loc) · 2.2 KB
/
sqrt2.tm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# from The Annotated Turing, starting from page 115
# print the binary expansion of sqrt(2)
begin ~ P@,R,P1 new
new @ R mark-digits
new * L new
mark-digits 0 R,Px,R mark-digits
mark-digits 1 R,Px,R mark-digits
mark-digits ~ R,Pz,R,R,Pr find-x
find-x x E first-r
find-x @ , find-digits
find-x * L,L find-x
first-r r R,R last-r
first-r * R,R first-r
last-r r R,R last-r
last-r ~ Pr,R,R,Pr find-x
find-digits @ R,R find-1st-digit
find-digits * L,L find-digits
find-1st-digit x L found-1st-digit
find-1st-digit y L found-1st-digit
find-1st-digit z L found-2nd-digit
find-1st-digit ~ R,R find-1st-digit
found-1st-digit 0 R add-zero
found-1st-digit 1 R,R,R find-2nd-digit
find-2nd-digit x L found-2nd-digit
find-2nd-digit y L found-2nd-digit
find-2nd-digit ~ R,R find-2nd-digit
found-2nd-digit 0 R add-zero
found-2nd-digit 1 R add-one
found-2nd-digit ~ R add-one
add-zero r Ps add-finished
add-zero u Pv add-finished
add-zero * R,R add-zero
add-one r Pv add-finished
add-one u Ps,R,R carry
add-one * R,R add-one
carry r Pu add-finished
carry ~ Pu new-digit-is-zero
carry u Pr,R,R carry
add-finished @ R,R erase-old-x
add-finished * L,L add-finished
erase-old-x x E,L,L print-new-x
erase-old-x z Py,L,L print-new-x
erase-old-x * R,R erase-old-x
print-new-x @ R,R erase-old-y
print-new-x y Pz find-digits
print-new-x ~ Px find-digits
erase-old-y y E,L,L print-new-y
erase-old-y * R,R erase-old-y
print-new-y @ R new-digit-is-one
print-new-y * Py,R reset-new-x
reset-new-x ~ R,Px flag-result-digits
reset-new-x * R,R reset-new-x
flag-result-digits s Pt,R,R unflag-result-digits
flag-result-digits v Pw,R,R unflag-result-digits
flag-result-digits * R,R flag-result-digits
unflag-result-digits s Pr,R,R unflag-result-digits
unflag-result-digits v Pu,R,R unflag-result-digits
unflag-result-digits * , find-digits
new-digit-is-zero @ R print-zero-digit
new-digit-is-zero * L new-digit-is-zero
print-zero-digit 0 R,E,R print-zero-digit
print-zero-digit 1 R,E,R print-zero-digit
print-zero-digit ~ P0,R,R,R cleanup
new-digit-is-one @ R print-one-digit
new-digit-is-one * L new-digit-is-one
print-one-digit 0 R,E,R print-one-digit
print-one-digit 1 R,E,R print-one-digit
print-one-digit ~ P1,R,R,R cleanup
cleanup ~ , new
cleanup * E,R,R cleanup