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

Last updated