我總結比率一長串Clojure中,是這樣的:求和Clojure的比率是慢
(defn sum-ratios
[n]
(reduce
(fn [total ind]
(+
total
(/
(inc (rand-int 100))
(inc (rand-int 100)))))
(range 0 n)))
各種n中的運行時間是:
- N = 10^4 .. .... 41毫秒
- N = 10^6 3.4 ......小號
- N = 10^7 ...... 36號
的(不太精確)的選擇是作爲加倍來概括這些值:
(defn sum-doubles
[n]
(reduce
(fn [total ind]
(+
total
(double
(/
(inc (rand-int 100))
(inc (rand-int 100))))))
(range 0 n)))
此版本的運行時間:
- N = 10^4 ...... 8.8毫秒
- N = 10^6 ...... 350毫秒
- N = 10^7 ...... 3.4小號
爲什麼總和比率顯着較慢?我猜測它與查找比率的最小公倍數有關,但是有人明確知道Clojure使用哪種算法來總和比率?
另外,如果您想使用雙打,請在劃分之前進行。用一個int和一個double來重劃一個比一個必須計算一個比率的分區更加便宜的分區,然後把它轉換成double。 – NielsK