tricu

A lazy functional language based on Tree Calculus
Log | Files | Refs | README | LICENSE

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