|
|
1.1 root 1: record largint(coeff,link)
2:
3: procedure add(g1,g2,carry)
4: local sum
5: /carry := largint(0) # default carry
6: if /g1 & /g2 then return if carry.coeff ~= 0 then carry
7: else &null
8: if /g1 then return add(carry,g2)
9: if /g2 then return add(g1,carry)
10: sum := g1.coeff + g2.coeff + carry.coeff
11: carry := largint(sum / base)
12: return largint(sum % base,add(g1.link,g2.link,carry))
13: end
14:
15: procedure large(s)
16: if *s <= segsize then return largint(integer(s))
17: else return largint(right(s,segsize),
18: large(left(s,*s - segsize)))
19: end
20:
21: procedure lstring(g)
22: local s
23: if /g.link then s := g.coeff
24: else s := lstring(g.link) || right(g.coeff,segsize,"0")
25: s ?:= (tab(upto(~'0') | -1) & tab(0))
26: return s
27: end
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.