|
|
1.1 root 1: procedure large(s)
2: local a
3: a := []
4: s ? {
5: &pos := 0 # start at right end
6: while put(a,integer(move(-segsize)))
7: # add remaining digits
8: if &pos ~= 1 then put(a,integer(tab(1)))
9: }
10: return a
11: end
12:
13: procedure add(a1,a2,carry)
14: local sum
15: /carry := [0] # default carry
16: if *a1 = *a2 = 0 then
17: return if carry[1] ~= 0 then carry else []
18: if *a1 > *a2 then a1 :=: a2
19: if *a1 = 0 then return add(carry,a2)
20: sum := a1[1] + a2[1] + carry[1]
21: carry := [sum / base]
22: return push(add(a1[2:0],a2[2:0],carry),sum % base)
23: end
24:
25: procedure lstring(a)
26: local s
27: s := ""
28: every s := right(!a,segsize,"0") || s
29: s ?:= (tab(upto(~'0') | -1) & tab(0))
30: return s
31: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.