++pow
Computes a
raised to the power of b
, producing an atom.
Accepts
a
is an atom.
b
is an atom.
Produces
An atom.
Source
++ pow
~/ %pow
|= [a=@ b=@]
?: =(b 0) 1
|- ?: =(b 1) a
=+ c=$(b (div b 2))
=+ d=(mul c c)
?~ (dis b 1) d (mul d a)
Examples
> (pow 2 6)
64
> (pow 6 2)
36
> (pow 7 (add 2 2))
2.401
> (pow 2 0)
1
> `@ux`(pow 0x1b 2)
0x2d9
++sqt
Computes the square root of a
and its remainder.
Accepts
a
is an atom.
Produces
A cell of atoms.
Source
++ sqt
~/ %sqt
|= a=@ ^- [p=@ q=@]
?~ a [0 0]
=+ [q=(div (dec (xeb a)) 2) r=0]
=- [-.b (sub a +.b)]
^= b |-
=+ s=(add r (bex q))
=+ t=(mul s s)
?: =(q 0)
?:((lte t a) [s t] [r (mul r r)])
?: (lte t a)
$(r s, q (dec q))
$(q (dec q))
Examples
> (sqt 4)
[p=2 q=0]
> (sqt 6)
[p=2 q=2]
> (sqt 2)
[p=1 q=1]
> (sqt 0b1101)
[p=3 q=4]
> `@ux`(sqt 0b1101)
! exit