2g: Unsigned Powers
+pow
+powComputes .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
+sqtComputes 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)
! exitLast updated