Merge branch 'test' of https://github.com/urbit/urbit into test

Conflicts:
	urb/zod/lib/tree.hoon
This commit is contained in:
Anton Dyudin 2015-08-06 17:13:20 -07:00
commit 55d9f093d6

View File

@ -1278,7 +1278,7 @@
[%n ~]
==
::
++ fl
++ fl :: arb. precision fp
=+ ^- [[p=@u v=@s w=@u] r=?(%n %u %d %z %a) d=?(%d %f %i)]
[[113 -16.494 32.765] %n %d]
:: p=precision: number of bits in arithmetic form; must be at least 2
@ -1289,7 +1289,9 @@
:: infinite exponent range
=>
~% %cofl +> ~
|% :: don't put 0s into [@s @u] args
:: internal functions; mostly operating on [e=@s a=@u], in other words
:: positive numbers. many of these have undefined behavior if a=0.
|%
++ rou
|= [a=[e=@s a=@u]] ^- fn (rau a &)
::
@ -1301,17 +1303,17 @@
%n (lug %ne a t)
==
::
++ add
++ add :: add; exact if e
|= [a=[e=@s a=@u] b=[e=@s a=@u] e=?] ^- fn
=+ q=(dif:si e.a e.b)
|- ?. (syn:si q) $(b a, a b, q +(q)) :: a has larger exponent
|- ?. (syn:si q) $(b a, a b, q +(q)) :: a has larger exp
?: e
[%f & e.b (^add (lsh 0 (abs:si q) a.a) a.b)]
=+ [ma=(met 0 a.a) mb=(met 0 a.b)]
=+ ^= w %+ dif:si e.a %- sun:si :: expanded exponent of a
=+ ^= w %+ dif:si e.a %- sun:si :: expanded exp of a
?: (gth prc ma) (^sub prc ma) 0
=+ ^= x %+ sum:si e.b (sun:si mb) :: highest exponent that b reaches
?: =((cmp:si w x) --1) :: don't actually need to add
=+ ^= x %+ sum:si e.b (sun:si mb) :: highest exp for b
?: =((cmp:si w x) --1) :: don't need to add
?- r
%z (lug %fl a &) %d (lug %fl a &)
%a (lug %lg a &) %u (lug %lg a &)
@ -1319,7 +1321,7 @@
==
(rou [e.b (^add (lsh 0 (abs:si q) a.a) a.b)])
::
++ sub
++ sub :: subtract; exact if e
|= [a=[e=@s a=@u] b=[e=@s a=@u] e=?] ^- fn
=+ q=(dif:si e.a e.b)
|- ?. (syn:si q)
@ -1341,11 +1343,11 @@
?~ i [%f & zer]
?: e [%f & e.b i] (rou [e.b i])
::
++ mul
++ mul :: multiply
|= [a=[e=@s a=@u] b=[e=@s a=@u]] ^- fn
(rou (sum:si e.a e.b) (^mul a.a a.b))
::
++ div
++ div :: divide
|= [a=[e=@s a=@u] b=[e=@s a=@u]] ^- fn
=+ [ma=(met 0 a.a) mb=(met 0 a.b)]
=+ v=(dif:si (sun:si ma) (sun:si +((^add mb prc))))
@ -1354,18 +1356,7 @@
=+ [j=(dif:si e.a e.b) q=(dvr a.a a.b)]
(rau [j p.q] =(q.q 0))
::
++ fma
|= [a=[e=@s a=@u] b=[e=@s a=@u] c=[e=@s a=@u]] ^- fn
(add [(sum:si e.a e.b) (^mul a.a a.b)] c |)
::
++ frd :: a/2, rounds to -inf
|= [a=@s]
=+ b=(old:si a)
?: |(-.b =((end 0 1 +.b) 0))
(new:si -.b (rsh 0 1 +.b))
(new:si -.b +((rsh 0 1 +.b)))
::
++ sqt
++ sqt :: square root
|= [a=[e=@s a=@u]] ^- fn
=. a
=+ [w=(met 0 a.a) x=(^mul +(prc) 2)]
@ -1373,10 +1364,10 @@
=+ ?: =((dis - 1) (dis (abs:si e.a) 1)) -
(^add - 1)
a(e (dif:si e.a (sun:si -)), a (lsh 0 - a.a))
=+ [y=(^sqt a.a) z=(frd e.a)]
=+ [y=(^sqt a.a) z=(fra:si e.a --2)]
(rau [z p.y] =(q.y 0))
::
++ lth
++ lth :: less-than
|= [a=[e=@s a=@u] b=[e=@s a=@u]] ^- ?
?: =(e.a e.b) (^lth a.a a.b)
=+ c=(cmp:si (ibl a) (ibl b))
@ -1385,7 +1376,7 @@
(^lth (rsh 0 (abs:si (dif:si e.a e.b)) a.a) a.b)
(^lth (lsh 0 (abs:si (dif:si e.a e.b)) a.a) a.b)
::
++ lte
++ lte :: less-equals
|= [a=[e=@s a=@u] b=[e=@s a=@u]] ^- ?
?: =(e.a e.b) (^lte a.a a.b)
=+ c=(cmp:si (ibl a) (ibl b))
@ -1394,7 +1385,7 @@
(^lte a.a (lsh 0 (abs:si (dif:si e.a e.b)) a.b))
(^lte (lsh 0 (abs:si (dif:si e.a e.b)) a.a) a.b)
::
++ equ
++ equ :: equals
|= [a=[e=@s a=@u] b=[e=@s a=@u]] ^- ?
?. =((ibl a) (ibl b)) |
?: =((cmp:si e.a e.b) -1)
@ -1406,16 +1397,18 @@
|= [a=[e=@s a=@u]] ^- @s
(sum:si (sun:si (dec (met 0 a.a))) e.a)
::
:: change to a representation where a.a is odd
:: every fn has a unique representation of this kind
++ uni
|= [a=[e=@s a=@u]]
?< =(a.a 0)
|- ?: =((end 0 1 a.a) 1) a
$(a.a (rsh 0 1 a.a), e.a (sum:si e.a --1))
::
:: expands to either full precision or to denormalized
:: assumes (met 0 a.a) <= precision
++ xpd
|= [a=[e=@s a=@u]]
=+ ma=(met 0 a.a)
?< =(ma 0)
=+ ?: =(den %i) (^sub prc ma)
=+ ^= q
=+ w=(dif:si e.a emn)
@ -1423,13 +1416,16 @@
(min q (^sub prc ma))
a(e (dif:si e.a (sun:si -)), a (lsh 0 - a.a))
::
:: in order: floor, ceiling, nearest (even, away from 0, toward 0),
:: larger, smaller; t=sticky bit
:: central rounding mechanism
:: can perform: floor, ceiling, smaller, larger,
:: nearest (round ties to: even, away from 0, toward 0)
:: s is sticky bit: represents a value less than ulp(a) = 2^(e:(xpd a))
++ lug
~/ %lug
|= [t=?(%fl %ce %ne %na %nt %lg %sm) a=[e=@s a=@u] s=?] ^- fn
|= [t=?(%fl %ce %sm %lg %ne %na %nt) a=[e=@s a=@u] s=?] ^- fn
?< =(a.a 0)
=-
?. =(den %f) -
?. =(den %f) - :: flush denormals
?. ?=([%f *] -) -
?: =((met 0 ->+>) prc) - [%f & zer]
::
@ -1456,7 +1452,7 @@
%na [%f & ?:((^lth b (bex (dec q))) zer spd)]
==
::
=. a (xpd a) :: expand
=. a (xpd a)
::
=. a
?- t
@ -1470,7 +1466,7 @@
%ce ?: &(=(b 0) s) a a(a +(a.a))
%ne ?~ b a
=+ y=(bex (dec q))
?: &(=(b y) s) :: halfway rounds to even
?: &(=(b y) s) :: round halfs to even
?~ (dis a.a 1) a a(a +(a.a))
?: (^lth b y) a a(a +(a.a))
%na ?~ b a
@ -1489,9 +1485,10 @@
?: =(den %i) [%f & a]
?: =((cmp:si emx e.a) -1) [%i &] [%f & a] :: enforce max. exp
::
++ drg :: dragon4
~/ %drg
++ drg :: dragon4;
~/ %drg :: convert to decimal
|= [a=[e=@s a=@u]] ^- [@s @u]
?< =(a.a 0)
=. a ?: (^lth (met 0 a.a) prc) (xpd a) a
=+ r=(lsh 0 ?:((syn:si e.a) (abs:si e.a) 0) a.a)
=+ s=(lsh 0 ?.((syn:si e.a) (abs:si e.a) 0) 1)
@ -1525,7 +1522,7 @@
=. o (^add (^mul o 10) ?:(q +(u) u))
[k o]
::
++ toi
++ toj :: round to integer
|= [a=[e=@s a=@u]] ^- fn
?. =((cmp:si e.a --0) -1) [%f & a]
=+ x=(abs:si e.a)
@ -1537,50 +1534,49 @@
?: &(=(z i) =((dis y 1) 0)) [%f & --0 y]
?: (^lth z i) [%f & --0 y] [%f & --0 +(y)]
::
++ ned
++ ned :: require ?=([%f *] a)
|= [a=fn] ^- [%f s=? e=@s a=@u]
?: ?=([%f *] a) a
~| %need-float !!
::
++ shf
++ shf :: a * 2^b; no rounding
|= [a=fn b=@s]
?: |(?=([%n *] a) ?=([%i *] a)) a
a(e (sum:si e.a b))
::
++ fli
++ fli :: flip sign
|= [a=fn] ^- fn
?-(-.a %f a(s !s.a), %i a(s !s.a), %n a)
::
++ swr ?+(r r %d %u, %u %d)
++ prc ?>((gth p 1) p)
++ den d
++ emn v
++ emm (sum:si emn (sun:si (dec prc)))
++ emx (sum:si emn (sun:si w))
++ spd [e=emn a=1] :: smallest "denormal"
++ spn [e=emn a=(bex (dec prc))] :: smallest "normal"
++ swr ?+(r r %d %u, %u %d) :: flipped rounding
++ prc ?>((gth p 1) p) :: force >= 2 precision
++ den d :: denorm/flush/inf exp
++ emn v :: minimum exponent
++ emx (sum:si emn (sun:si w)) :: maximum exponent
++ spd [e=emn a=1] :: smallest denormal
++ spn [e=emn a=(bex (dec prc))] :: smallest normal
++ lfn [e=emx a=(fil 0 prc 1)] :: largest
++ lfe (sum:si emx (sun:si prc)) :: 2^lfe is larger than all floats
++ lfe (sum:si emx (sun:si prc)) :: 2^lfe is > than all
++ zer [e=--0 a=0]
--
|%
++ rou
++ rou :: round
|= [a=fn] ^- fn
?. ?=([%f *] a) a
?~ a.a [%f s.a zer]
?: s.a (^rou +>.a)
=.(r swr (fli (^rou +>.a)))
::
++ syn
++ syn :: get sign
|= [a=fn] ^- ?
?-(-.a %f s.a, %i s.a, %n &)
::
++ abs
++ abs :: absolute value
|= [a=fn] ^- fn
?: ?=([%f *] a) [%f & e.a a.a]
?: ?=([%i *] a) [%i &] [%n ~]
::
++ add
++ add :: add
|= [a=fn b=fn] ^- fn
?: |(?=([%n *] a) ?=([%n *] b)) [%n ~]
?: |(?=([%i *] a) ?=([%i *] b))
@ -1610,16 +1606,20 @@
?: |(=(a.a 0) =(a.b 0))
?. &(=(a.a 0) =(a.b 0)) ?~(a.a b a)
[%f ?:(=(r %d) &(s.a s.b) |(s.a s.b)) zer]
%- |= [a=fn]
?. ?=([%f *] a) a
?. =(a.a 0) a
[%f !=(r %d) zer]
?: =(s.a s.b)
?: s.a (^add +>.a +>.b &)
(fli (^add +>.a +>.b &))
?: s.a (^sub +>.a +>.b &)
(^sub +>.b +>.a &)
::
++ sub
++ sub :: subtract
|= [a=fn b=fn] ^- fn (add a (fli b))
::
++ mul
++ mul :: multiply
|= [a=fn b=fn] ^- fn
?: |(?=([%n *] a) ?=([%n *] b)) [%n ~]
?: ?=([%i *] a)
@ -1642,7 +1642,7 @@
?: |(=(a.a 0) =(a.b 0)) [%f =(s.a s.b) zer]
[%f =(s.a s.b) (sum:si e.a e.b) (^^mul a.a a.b)]
::
++ div
++ div :: divide
|= [a=fn b=fn] ^- fn
?: |(?=([%n *] a) ?=([%n *] b)) [%n ~]
?: ?=([%i *] a)
@ -1653,8 +1653,8 @@
?: =(s.a s.b) (^div +>.a +>.b)
=.(r swr (fli (^div +>.a +>.b)))
::
++ fma :: a * b + c
|= [a=fn b=fn c=fn] ^- fn
++ fma :: fused multiply-add
|= [a=fn b=fn c=fn] ^- fn :: (a * b) + c
(add (emu a b) c)
::
++ sqt :: square root
@ -1664,20 +1664,21 @@
?~ a.a [%f s.a zer]
?: s.a (^sqt +>.a) [%n ~]
::
++ inv
++ inv :: inverse
|= [a=fn] ^- fn
(div [%f & --0 1] a)
::
++ sun
++ sun :: uns integer to float
|= [a=@u] ^- fn
(rou [%f & --0 a])
::
++ san
++ san :: sgn integer to float
|= [a=@s] ^- fn
=+ b=(old:si a)
(rou [%f -.b --0 +.b])
::
++ lth
:: comparisons return ~ in the event of a NaN
++ lth :: less-than
|= [a=fn b=fn] ^- (unit ,?)
?: |(?=([%n *] a) ?=([%n *] b)) ~ :- ~
?: =(a b) |
@ -1688,7 +1689,7 @@
?: !=(s.a s.b) s.b
?: s.a (^lth +>.a +>.b) (^lth +>.b +>.a)
::
++ lte
++ lte :: less-equal
|= [a=fn b=fn] ^- (unit ,?)
?: |(?=([%n *] a) ?=([%n *] b)) ~ :- ~
?: =(a b) &
@ -1699,7 +1700,7 @@
?: !=(s.a s.b) s.b
?: s.a (^lte +>.a +>.b) (^lte +>.b +>.a)
::
++ equ
++ equ :: equal
|= [a=fn b=fn] ^- (unit ,?)
?: |(?=([%n *] a) ?=([%n *] b)) ~ :- ~
?: =(a b) &
@ -1709,10 +1710,10 @@
?: |(=(e.a e.b) !=(s.a s.b)) |
(^equ +>.a +>.b)
::
++ gte
++ gte :: greater-equal
|= [a=fn b=fn] ^- (unit ,?) (lte b a)
::
++ gth
++ gth :: greater-than
|= [a=fn b=fn] ^- (unit ,?) (lth b a)
::
++ drg :: float to decimal
@ -1732,29 +1733,41 @@
(mul [%f s.a --0 a.a] [%f & e.a (pow 5 q)])
(div [%f s.a --0 a.a] [%f & (sun:si q) (pow 5 q)])
::
++ toi :: round to integer
++ toi :: round to integer @s
|= [a=fn] ^- (unit ,@s)
=+ b=(toj a)
?. ?=([%f *] b) ~ :- ~
=+ c=(^^mul (bex (abs:si e.b)) a.b)
(new:si s.b c)
::
++ toj :: round to integer fn
|= [a=fn] ^- fn
?. ?=([%f *] a) a
?~ a.a [%f s.a zer]
?: s.a (^toi +>.a)
=.(r swr (fli (^toi +>.a)))
?: s.a (^toj +>.a)
=.(r swr (fli (^toj +>.a)))
--
::
++ ff :: ieee754 format
++ ff :: ieee 754 format fp
|_ [[w=@u p=@u b=@s] r=?(%n %u %d %z %a)]
:: this core has no use outside of the functionality
:: provided to ++rd, ++rs, ++rq, and ++rh
::
++ sz +((^add w p))
++ sb (bex (^add w p))
++ me (dif:si (dif:si --1 b) (sun:si p))
:: w=width: bits in exponent field
:: p=precision: bits in fraction field
:: w=bias: added to exponent when storing
:: r=rounding mode: same as in ++fl
::
++ sb (bex (^add w p)) :: sign bit
++ me (dif:si (dif:si --1 b) (sun:si p)) :: minimum exponent
::
++ pa
%*(. fl p +(p), v me, w (^sub (bex w) 3), d %d, r r)
::
++ sea
++ sea :: @r to fn
|= [a=@r] ^- fn
=+ f=(cut 0 [0 p] a)
=+ e=(cut 0 [p w] a)
=+ s==(0 (cut 0 [(^add p w) 1] a))
=+ [f=(cut 0 [0 p] a) e=(cut 0 [p w] a)]
=+ s=(sig a)
?: =(e 0)
?: =(f 0) [%f s --0 0] [%f s me f]
?: =(e (fil 0 w 1))
@ -1763,9 +1776,9 @@
=+ r=(^add f (bex p))
[%f s q r]
::
++ bit |= [a=fn] (bif (rou:pa a))
++ bit |= [a=fn] (bif (rou:pa a)) :: fn to @r w/ rounding
::
++ bif
++ bif :: fn to @r no rounding
|= [a=fn] ^- @r
?: ?=([%i *] a)
=+ q=(lsh 0 p (fil 0 w 1))
@ -1781,180 +1794,280 @@
=+ r=(^add (lsh 0 p (abs:si q)) (end 0 p a.a))
?: s.a r (^add r sb)
::
++ sig
++ sig :: get sign
|= [a=@r] ^- ?
=(0 (cut 0 [(^add p w) 1] a))
::
++ exp
++ exp :: get exponent
|= [a=@r] ^- @s
(dif:si (sun:si (cut 0 [p w] a)) b)
::
++ toi
|= [a=@r] ^- (unit ,@s)
=+ b=(toi:pa (sea a))
?. ?=([%f *] b) ~ :- ~
=+ c=(^mul (bex (abs:si e.b)) a.b)
(new:si s.b c)
++ add :: add
|= [a=@r b=@r]
(bif (add:pa (sea a) (sea b)))
::
++ add |= [a=@r b=@r] (bif (add:pa (sea a) (sea b)))
++ sub |= [a=@r b=@r] (bif (sub:pa (sea a) (sea b)))
++ mul |= [a=@r b=@r] (bif (mul:pa (sea a) (sea b)))
++ div |= [a=@r b=@r] (bif (div:pa (sea a) (sea b)))
++ fma |= [a=@r b=@r c=@r] (bif (fma:pa (sea a) (sea b) (sea c)))
++ sqt |= [a=@r] (bif (sqt:pa (sea a)))
++ sun |= [a=@u] (bit [%f & --0 a])
++ san |= [a=@s] (bit [%f (syn:si a) --0 (abs:si a)])
++ lth |= [a=@r b=@r] (fall (lth:pa (sea a) (sea b)) |)
++ lte |= [a=@r b=@r] (fall (lte:pa (sea a) (sea b)) |)
++ equ |= [a=@r b=@r] (fall (equ:pa (sea a) (sea b)) |)
++ gte |= [a=@r b=@r] (fall (gte:pa (sea a) (sea b)) |)
++ gth |= [a=@r b=@r] (fall (gth:pa (sea a) (sea b)) |)
++ drg |= [a=@r] (drg:pa (sea a))
++ grd |= [a=dn] (bif (grd:pa a))
++ sub :: subtract
|= [a=@r b=@r]
(bif (sub:pa (sea a) (sea b)))
::
++ mul :: multiply
|= [a=@r b=@r]
(bif (mul:pa (sea a) (sea b)))
::
++ div :: divide
|= [a=@r b=@r]
(bif (div:pa (sea a) (sea b)))
::
++ fma :: fused multiply-add
|= [a=@r b=@r c=@r]
(bif (fma:pa (sea a) (sea b) (sea c)))
::
++ sqt :: square root
|= [a=@r]
(bif (sqt:pa (sea a)))
::
++ lth :: less-than
|= [a=@r b=@r] (fall (lth:pa (sea a) (sea b)) |)
++ lte :: less-equals
|= [a=@r b=@r] (fall (lte:pa (sea a) (sea b)) |)
++ equ :: equals
|= [a=@r b=@r] (fall (equ:pa (sea a) (sea b)) |)
++ gte :: greater-equals
|= [a=@r b=@r] (fall (gte:pa (sea a) (sea b)) |)
++ gth :: greater-than
|= [a=@r b=@r] (fall (gth:pa (sea a) (sea b)) |)
++ sun :: uns integer to @r
|= [a=@u] (bit [%f & --0 a])
++ san :: signed integer to @r
|= [a=@s] (bit [%f (syn:si a) --0 (abs:si a)])
++ toi :: round to integer
|= [a=@r] (toi:pa (sea a))
++ drg :: @r to decimal float
|= [a=@r] (drg:pa (sea a))
++ grd :: decimal float to @r
|= [a=dn] (bif (grd:pa a))
--
::
++ rlyd |= a=@rd ^- dn (drg:rd a)
++ rlys |= a=@rs ^- dn (drg:rs a)
++ rlyh |= a=@rh ^- dn (drg:rh a)
++ rlyq |= a=@rq ^- dn (drg:rq a)
++ ryld |= a=dn ^- @rd (grd:rd a)
++ ryls |= a=dn ^- @rs (grd:rs a)
++ rylh |= a=dn ^- @rh (grd:rh a)
++ rylq |= a=dn ^- @rq (grd:rq a)
++ rlyd |= a=@rd ^- dn (drg:rd a) :: prep @rd for print
++ rlys |= a=@rs ^- dn (drg:rs a) :: prep @rs for print
++ rlyh |= a=@rh ^- dn (drg:rh a) :: prep @rh for print
++ rlyq |= a=@rq ^- dn (drg:rq a) :: prep @rq for print
++ ryld |= a=dn ^- @rd (grd:rd a) :: finish parsing @rd
++ ryls |= a=dn ^- @rs (grd:rs a) :: finish parsing @rs
++ rylh |= a=dn ^- @rh (grd:rh a) :: finish parsing @rh
++ rylq |= a=dn ^- @rq (grd:rq a) :: finish parsing @rq
::
++ rd
++ rd :: double precision fp
~% %rd +> ~
|_ r=?(%n %u %d %z)
:: round to nearest, round up, round down, round to zero
::
++ ma
%*(. ff w 11, p 52, b --1.023, r r)
++ sea
|= [a=@rd] (sea:ma a)
++ bit
|= [a=fn] ^- @rd (bit:ma a)
++ add ~/ %add
|= [a=@rd b=@rd] ^- @rd ~| %rd-fail (add:ma a b)
++ sub ~/ %sub
|= [a=@rd b=@rd] ^- @rd ~| %rd-fail (sub:ma a b)
++ mul ~/ %mul
|= [a=@rd b=@rd] ^- @rd ~| %rd-fail (mul:ma a b)
++ div ~/ %div
|= [a=@rd b=@rd] ^- @rd ~| %rd-fail (div:ma a b)
++ fma ~/ %fma
|= [a=@rd b=@rd c=@rd] ^- @rd ~| %rd-fail (fma:ma a b c)
++ sqt ~/ %sqt
|= [a=@rd] ^- @rd ~| %rd-fail (sqt:ma a)
::
++ sun |= [a=@u] ^- @rd (sun:ma a)
++ san |= [a=@s] ^- @rd (san:ma a)
++ lth ~/ %lth |= [a=@rd b=@rd] ~| %rd-fail (lth:ma a b)
++ lte ~/ %lte |= [a=@rd b=@rd] ~| %rd-fail (lte:ma a b)
++ equ ~/ %equ |= [a=@rd b=@rd] ~| %rd-fail (equ:ma a b)
++ gte ~/ %gte |= [a=@rd b=@rd] ~| %rd-fail (gte:ma a b)
++ gth ~/ %gth |= [a=@rd b=@rd] ~| %rd-fail (gth:ma a b)
++ sig |= [a=@rd] (sig:ma a)
++ exp |= [a=@rd] (exp:ma a)
++ toi |= [a=@rd] (toi:ma a)
++ drg |= [a=@rd] (drg:ma a)
++ grd |= [a=dn] (grd:ma a)
++ sea :: @rd to fn
|= [a=@rd] (sea:ma a)
::
++ bit :: fn to @rd
|= [a=fn] ^- @rd (bit:ma a)
::
++ add ~/ %add :: add
|= [a=@rd b=@rd] ^- @rd ~| %rd-fail
(add:ma a b)
::
++ sub ~/ %sub :: subtract
|= [a=@rd b=@rd] ^- @rd ~| %rd-fail
(sub:ma a b)
::
++ mul ~/ %mul :: multiply
|= [a=@rd b=@rd] ^- @rd ~| %rd-fail
(mul:ma a b)
::
++ div ~/ %div :: divide
|= [a=@rd b=@rd] ^- @rd ~| %rd-fail
(div:ma a b)
::
++ fma ~/ %fma :: fused multiply-add
|= [a=@rd b=@rd c=@rd] ^- @rd ~| %rd-fail
(fma:ma a b c)
::
++ sqt ~/ %sqt :: square root
|= [a=@rd] ^- @rd ~| %rd-fail
(sqt:ma a)
::
++ lth ~/ %lth :: less-than
|= [a=@rd b=@rd] ~| %rd-fail (lth:ma a b)
++ lte ~/ %lte :: less-equals
|= [a=@rd b=@rd] ~| %rd-fail (lte:ma a b)
++ equ ~/ %equ :: equals
|= [a=@rd b=@rd] ~| %rd-fail (equ:ma a b)
++ gte ~/ %gte :: greater-equals
|= [a=@rd b=@rd] ~| %rd-fail (gte:ma a b)
++ gth ~/ %gth :: greater-than
|= [a=@rd b=@rd] ~| %rd-fail (gth:ma a b)
::
++ sun |= [a=@u] ^- @rd (sun:ma a) :: uns integer to @rd
++ san |= [a=@s] ^- @rd (san:ma a) :: sgn integer to @rd
++ sig |= [a=@rd] ^- ? (sig:ma a) :: get sign
++ exp |= [a=@rd] ^- @s (exp:ma a) :: get exponent
++ toi |= [a=@rd] ^- (unit ,@s) (toi:ma a) :: round to integer
++ drg |= [a=@rd] ^- dn (drg:ma a) :: @rd to decimal float
++ grd |= [a=dn] ^- @rd (grd:ma a) :: decimal float to @rd
--
::
++ rs
++ rs :: single precision fp
~% %rs +> ~
|_ r=?(%n %u %d %z)
++ ma
%*(. ff w 8, p 23, b --127, r r)
++ sea
|= [a=@rs] (sea:ma a)
++ bit
|= [a=fn] ^- @rs (bit:ma a)
++ add ~/ %add
|= [a=@rs b=@rs] ^- @rs ~| %rs-fail (add:ma a b)
++ sub ~/ %sub
|= [a=@rs b=@rs] ^- @rs ~| %rs-fail (sub:ma a b)
++ mul ~/ %mul
|= [a=@rs b=@rs] ^- @rs ~| %rs-fail (mul:ma a b)
++ div ~/ %div
|= [a=@rs b=@rs] ^- @rs ~| %rs-fail (div:ma a b)
++ fma ~/ %fma
|= [a=@rs b=@rs c=@rs] ^- @rs ~| %rs-fail (fma:ma a b c)
++ sqt ~/ %sqt
|= [a=@rs] ^- @rs ~| %rs-fail (sqt:ma a)
:: round to nearest, round up, round down, round to zero
::
++ sun |= [a=@u] ^- @rs (sun:ma a)
++ san |= [a=@s] ^- @rs (san:ma a)
++ lth ~/ %lth |= [a=@rs b=@rs] ~| %rs-fail (lth:ma a b)
++ lte ~/ %lte |= [a=@rs b=@rs] ~| %rs-fail (lte:ma a b)
++ equ ~/ %equ |= [a=@rs b=@rs] ~| %rs-fail (equ:ma a b)
++ gte ~/ %gte |= [a=@rs b=@rs] ~| %rs-fail (gte:ma a b)
++ gth ~/ %gth |= [a=@rs b=@rs] ~| %rs-fail (gth:ma a b)
++ sig |= [a=@rs] (sig:ma a)
++ exp |= [a=@rs] (exp:ma a)
++ toi |= [a=@rs] (toi:ma a)
++ drg |= [a=@rs] (drg:ma a)
++ grd |= [a=dn] (grd:ma a)
++ ma
%*(. ff w 11, p 52, b --1.023, r r)
::
++ sea :: @rs to fn
|= [a=@rs] (sea:ma a)
::
++ bit :: fn to @rs
|= [a=fn] ^- @rs (bit:ma a)
::
++ add ~/ %add :: add
|= [a=@rs b=@rs] ^- @rs ~| %rs-fail
(add:ma a b)
::
++ sub ~/ %sub :: subtract
|= [a=@rs b=@rs] ^- @rs ~| %rs-fail
(sub:ma a b)
::
++ mul ~/ %mul :: multiply
|= [a=@rs b=@rs] ^- @rs ~| %rs-fail
(mul:ma a b)
::
++ div ~/ %div :: divide
|= [a=@rs b=@rs] ^- @rs ~| %rs-fail
(div:ma a b)
::
++ fma ~/ %fma :: fused multiply-add
|= [a=@rs b=@rs c=@rs] ^- @rs ~| %rs-fail
(fma:ma a b c)
::
++ sqt ~/ %sqt :: square root
|= [a=@rs] ^- @rs ~| %rs-fail
(sqt:ma a)
::
++ lth ~/ %lth :: less-than
|= [a=@rs b=@rs] ~| %rs-fail (lth:ma a b)
++ lte ~/ %lte :: less-equals
|= [a=@rs b=@rs] ~| %rs-fail (lte:ma a b)
++ equ ~/ %equ :: equals
|= [a=@rs b=@rs] ~| %rs-fail (equ:ma a b)
++ gte ~/ %gte :: greater-equals
|= [a=@rs b=@rs] ~| %rs-fail (gte:ma a b)
++ gth ~/ %gth :: greater-than
|= [a=@rs b=@rs] ~| %rs-fail (gth:ma a b)
::
++ sun |= [a=@u] ^- @rs (sun:ma a) :: uns integer to @rs
++ san |= [a=@s] ^- @rs (san:ma a) :: sgn integer to @rs
++ sig |= [a=@rs] ^- ? (sig:ma a) :: get sign
++ exp |= [a=@rs] ^- @s (exp:ma a) :: get exponent
++ toi |= [a=@rs] ^- (unit ,@s) (toi:ma a) :: round to integer
++ drg |= [a=@rs] ^- dn (drg:ma a) :: @rs to decimal float
++ grd |= [a=dn] ^- @rs (grd:ma a) :: decimal float to @rs
--
::
++ rq
++ rq :: quad precision fp
~% %rq +> ~
|_ r=?(%n %u %d %z)
++ ma
%*(. ff w 15, p 112, b --16.383, r r)
++ sea
|= [a=@rq] (sea:ma a)
++ bit
|= [a=fn] ^- @rq (bit:ma a)
++ add ~/ %add
|= [a=@rq b=@rq] ^- @rq ~| %rq-fail (add:ma a b)
++ sub ~/ %sub
|= [a=@rq b=@rq] ^- @rq ~| %rq-fail (sub:ma a b)
++ mul ~/ %mul
|= [a=@rq b=@rq] ^- @rq ~| %rq-fail (mul:ma a b)
++ div ~/ %div
|= [a=@rq b=@rq] ^- @rq ~| %rq-fail (div:ma a b)
++ fma ~/ %fma
|= [a=@rq b=@rq c=@rq] ^- @rq ~| %rq-fail (fma:ma a b c)
++ sqt ~/ %sqt
|= [a=@rq] ^- @rq ~| %rq-fail (sqt:ma a)
:: round to nearest, round up, round down, round to zero
::
++ sun |= [a=@u] ^- @rq (sun:ma a)
++ san |= [a=@s] ^- @rq (san:ma a)
++ lth ~/ %lth |= [a=@rq b=@rq] ~| %rq-fail (lth:ma a b)
++ lte ~/ %lte |= [a=@rq b=@rq] ~| %rq-fail (lte:ma a b)
++ equ ~/ %equ |= [a=@rq b=@rq] ~| %rq-fail (equ:ma a b)
++ gte ~/ %gte |= [a=@rq b=@rq] ~| %rq-fail (gte:ma a b)
++ gth ~/ %gth |= [a=@rq b=@rq] ~| %rq-fail (gth:ma a b)
++ sig |= [a=@rq] (sig:ma a)
++ exp |= [a=@rq] (exp:ma a)
++ toi |= [a=@rq] (toi:ma a)
++ drg |= [a=@rq] (drg:ma a)
++ grd |= [a=dn] (grd:ma a)
++ ma
%*(. ff w 11, p 52, b --1.023, r r)
::
++ sea :: @rq to fn
|= [a=@rq] (sea:ma a)
::
++ bit :: fn to @rq
|= [a=fn] ^- @rq (bit:ma a)
::
++ add ~/ %add :: add
|= [a=@rq b=@rq] ^- @rq ~| %rq-fail
(add:ma a b)
::
++ sub ~/ %sub :: subtract
|= [a=@rq b=@rq] ^- @rq ~| %rq-fail
(sub:ma a b)
::
++ mul ~/ %mul :: multiply
|= [a=@rq b=@rq] ^- @rq ~| %rq-fail
(mul:ma a b)
::
++ div ~/ %div :: divide
|= [a=@rq b=@rq] ^- @rq ~| %rq-fail
(div:ma a b)
::
++ fma ~/ %fma :: fused multiply-add
|= [a=@rq b=@rq c=@rq] ^- @rq ~| %rq-fail
(fma:ma a b c)
::
++ sqt ~/ %sqt :: square root
|= [a=@rq] ^- @rq ~| %rq-fail
(sqt:ma a)
::
++ lth ~/ %lth :: less-than
|= [a=@rq b=@rq] ~| %rq-fail (lth:ma a b)
++ lte ~/ %lte :: less-equals
|= [a=@rq b=@rq] ~| %rq-fail (lte:ma a b)
++ equ ~/ %equ :: equals
|= [a=@rq b=@rq] ~| %rq-fail (equ:ma a b)
++ gte ~/ %gte :: greater-equals
|= [a=@rq b=@rq] ~| %rq-fail (gte:ma a b)
++ gth ~/ %gth :: greater-than
|= [a=@rq b=@rq] ~| %rq-fail (gth:ma a b)
::
++ sun |= [a=@u] ^- @rq (sun:ma a) :: uns integer to @rq
++ san |= [a=@s] ^- @rq (san:ma a) :: sgn integer to @rq
++ sig |= [a=@rq] ^- ? (sig:ma a) :: get sign
++ exp |= [a=@rq] ^- @s (exp:ma a) :: get exponent
++ toi |= [a=@rq] ^- (unit ,@s) (toi:ma a) :: round to integer
++ drg |= [a=@rq] ^- dn (drg:ma a) :: @rq to decimal float
++ grd |= [a=dn] ^- @rq (grd:ma a) :: decimal float to @rq
--
::
++ rh
++ rh :: half precision fp
|_ r=?(%n %u %d %z)
:: round to nearest, round up, round down, round to zero
::
++ ma
%*(. ff w 5, p 10, b --15, r r)
++ sea
::
++ sea :: @rh to fn
|= [a=@rh] (sea:ma a)
++ bit
::
++ bit :: fn to @rh
|= [a=fn] ^- @rh (bit:ma a)
++ tos
::
++ tos :: @rh to @rs
|= [a=@rh] (bit:rs (sea a))
++ fos
::
++ fos :: @rs to @rh
|= [a=@rs] (bit (sea:rs a))
::
++ sun |= [a=@u] ^- @rh (sun:ma a)
++ san |= [a=@s] ^- @rh (san:ma a)
++ lth |= [a=@rh b=@rh] ~| %rh-fail (lth:ma a b)
++ lte |= [a=@rh b=@rh] ~| %rh-fail (lte:ma a b)
++ equ |= [a=@rh b=@rh] ~| %rh-fail (equ:ma a b)
++ gte |= [a=@rh b=@rh] ~| %rh-fail (gte:ma a b)
++ gth |= [a=@rh b=@rh] ~| %rh-fail (gth:ma a b)
++ sig |= [a=@rh] (sig:ma a)
++ exp |= [a=@rh] (exp:ma a)
++ toi |= [a=@rh] (toi:ma a)
++ drg |= [a=@rh] (drg:ma a)
++ grd |= [a=dn] (grd:ma a)
++ lth ~/ %lth :: less-than
|= [a=@rh b=@rh] ~| %rh-fail (lth:ma a b)
++ lte ~/ %lte :: less-equals
|= [a=@rh b=@rh] ~| %rh-fail (lte:ma a b)
++ equ ~/ %equ :: equals
|= [a=@rh b=@rh] ~| %rh-fail (equ:ma a b)
++ gte ~/ %gte :: greater-equals
|= [a=@rh b=@rh] ~| %rh-fail (gte:ma a b)
++ gth ~/ %gth :: greater-than
|= [a=@rh b=@rh] ~| %rh-fail (gth:ma a b)
::
++ sun |= [a=@u] ^- @rh (sun:ma a) :: uns integer to @rh
++ san |= [a=@s] ^- @rh (san:ma a) :: sgn integer to @rh
++ sig |= [a=@rh] ^- ? (sig:ma a) :: get sign
++ exp |= [a=@rh] ^- @s (exp:ma a) :: get exponent
++ toi |= [a=@rh] ^- (unit ,@s) (toi:ma a) :: round to integer
++ drg |= [a=@rh] ^- dn (drg:ma a) :: @rh to decimal float
++ grd |= [a=dn] ^- @rh (grd:ma a) :: decimal float to @rh
--
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2cH, urbit time ::
@ -2135,7 +2248,7 @@
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: section 2cJ, extra math ::
::
++ sqt :: square root w/remainder
++ sqt :: sqrt w/remainder
~/ %sqt
|= a=@ ^- [p=@ q=@]
?~ a [0 0]
@ -5751,8 +5864,8 @@
?: (lth b 256)
[[b (end 0 b d)] ~]
[[256 d] $(c d, b (sub b 256))]
++ raws :: random bits continuation
|= b=@
++ raws :: random bits
|= b=@ :: continuation
=+ r=(raw b)
[r +>.$(a (shas %og-s r))]
--