Как сделать возведение в степень в ближайшем будущем? - PullRequest
93 голосов
/ 20 февраля 2011

Как я могу делать возведения в степень в ближайшем будущем? Пока мне нужно только целочисленное возведение в степень, но вопрос касается и дробей.

Ответы [ 13 ]

2 голосов
/ 30 июля 2015

Использование clojure.math.numeric-tower, ранее clojure.contrib.math.


Документация API


(ns user
  (:require [clojure.math.numeric-tower :as m]))

(defn- sqr
  "Uses the numeric tower expt to square a number"
  [x]
  (m/expt x 2))
1 голос
/ 01 марта 2012

Попробуйте

(defn pow [x n]
  (loop [x x n n r 1]
    (cond
      (= n 0) r
      (even? n) (recur (* x x) (/ n 2) r)
      :else (recur x (dec n) (* r x)))))

для хвостового рекурсивного решения O (log n), если вы хотите реализовать его самостоятельно (поддерживает только натуральные числа). Очевидно, что лучшим решением будет использование библиотечных функций, на которые указывали другие.

0 голосов
/ 20 февраля 2011

Как насчет clojure.contrib.genric.math-functions

В библиотеке clojure.contrib.generic.math-functions есть функция pow. Это всего лишь макрос для Math.pow и более «замкнутый» способ вызова математической функции Java.

http://clojure.github.com/clojure-contrib/generic.math-functions-api.html#clojure.contrib.generic.math-functions/pow

...