:- :~ navhome/'/docs/' sort/'10' title/'2g: Unsigned Powers' == ;> # 2g: unsigned powers ### `++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 ``` ---