adders.tri (722B)
1 -- Pure binary64 implementation; trusted internal helpers. 2 !import native_math as N 3 !import binary64_kernels as K 4 !export orderedMultiply 5 6 triage = K.triage 7 lazy = K.lazy 8 choose = K.choose 9 ordered a b carry = triage 10 (lazy (_ : N.successor b) (_ : b) carry) 11 (_ : t) 12 (abit ar : triage (lazy (_ : N.successor a) (_ : a) carry) (_ : t) 13 (bbit br : let neg = K.not carry in 14 t (choose (choose carry neg bbit) (choose neg carry bbit) abit) 15 (ordered ar br (choose (K.either bbit carry) (K.both carry bbit) abit))) b) a 16 orderedMultiply a b = let rec 17 walk remaining = triage t (_ : t) 18 (bit rest : lazy (_ : ordered a (K.node t (walk rest)) t) 19 (_ : K.node t (walk rest)) bit) remaining 20 in walk b