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