; three powering algorithms

(define (pow-linear b e)
  (if (zero? e) 1
    (* b (pow-linear b (- e 1)))))

(display (pow-linear 2 16)) (newline)

(define (pow-logarithmic b e)
  (cond ((zero? e) 1)
        ((even? e) (pow-logarithmic (* b b) (/ e 2)))
        (else (* b (pow-logarithmic (* b b) (/ (- e 1) 2))))))

(display (pow-logarithmic 2 16)) (newline)

(define (pow-constant b e)
  (exp (* (log b) e)))

(display (pow-constant 2 16)) (newline)