ja zsumowanie długą listę proporcjach Clojure, podobnie jak:sumowanie clojure wskaźniki powoli
(defn sum-ratios
[n]
(reduce
(fn [total ind]
(+
total
(/
(inc (rand-int 100))
(inc (rand-int 100)))))
(range 0 n)))
Czas pracy dla różnych n wynosi:
- n = 10^4 .. .... 41 ms
- n = 10^6 ...... 3,4 s
- n = 10^7 ...... 36S
The (mniej dokładna) alternatywnie jest podsumowanie tych wartości jako podwójna:
(defn sum-doubles
[n]
(reduce
(fn [total ind]
(+
total
(double
(/
(inc (rand-int 100))
(inc (rand-int 100))))))
(range 0 n)))
czas przebiegu tej wersji jest:
- n = 10^4 ...... 8,8 ms
- n = 10^6 ...... 350 ms
- n = 10^7 ...... 3,4 s
Dlaczego jest znacznie wolniej niż suma współczynników? Zgaduję, że ma to związek ze znalezieniem najmniejszej wspólnej liczby mnogiej mianowników, ale czy ktoś wie dokładnie, jaki algorytm Clojure używa do sumowania współczynników?
Również, jeśli chcesz użyć podwójnych, zrób to przed podziałem. Znacznie taniej jest zrobić podział z int i podwójnym uzbrojeniem dubletu niż dywizją, która musi obliczyć współczynnik, a następnie rzuca to na podwójne. – NielsK