Как определить количество цифр после десятичной точки.счетчик точности clojure
[ 1.6712 2.053 3.52 ]
;;1.6712 => 4
;;2.053 => 3
;;3.52 => 2
Как определить количество цифр после десятичной точки.счетчик точности clojure
[ 1.6712 2.053 3.52 ]
;;1.6712 => 4
;;2.053 => 3
;;3.52 => 2
Имейте в виду: What Every Computer Scientist Should Know About Floating-Point Arithmetic
Так тривиальное/математическая попытка может быть.
Но это не сработает для каждого двойника!
(defn more-than-5 [number]
(let [n (* number 10E4)]
(pos? (- n (int n)))))
Этот подход должен работать:
(defn primefactors
([n]
(primefactors n 2 '()))
([n candidate acc]
(cond (<= n 1) (reverse acc)
(zero? (rem n candidate)) (recur (/ n candidate) candidate (cons candidate acc))
:else (recur n (inc candidate) acc))))
функцию primefactors от https://stackoverflow.com/a/9556744
(defn length-of-period [n]
(if (integer? n)
[0 0]
(let [groups (->> n
rationalize
denominator
primefactors
(group-by #(zero? (mod 10 %))))
b1 (apply * (get groups true))
b2 (apply * (get groups false))]
[(count (take-while
#(pos? (mod % b1))
(take 20 (iterate #(bigint (* 10 %)) 1))))
(count (take-while
#(pos? (mod % b2))
(take 20 (iterate #(bigint (- (* 10 %) 1)) 1))))])))
Результат представляет собой вектор [length-of-preperiod length-of-period]
Пример:
(length-of-period 0.123456) => [6 0]
(length-of-period 1/3) => [0 1]
;; 1/3 = 0.3333...
(length-of-period 7/12) => [2 1]
;; 7/12 = 0.583333....
Так что в случае парного вы можете фильтровать ваши номера с #(> 6 (first (length-of-period %)))
От: Number of decimal digits in a double
Двойной не всегда является точным представлением. Вы можете только сказать, сколько десятичных знаков у вас было бы, если бы вы преобразовали его в String.
Нет такой вещи, как «количество цифр после десятичного числа». Вы имеете в виду десятичные знаки в строчном представлении числа? В этом случае 2,050 составляет 2,05, поэтому он имеет два десятичных знака. Что вы пытаетесь сделать точно и почему важно число десятичных знаков? –
Чтобы определить число, имеющее более 5-ти десятичных знаков – Ezekiel
В чем заключается основная проблема? Имейте в виду, что число цифр не соответствует точности значения (например, 1.2500 = 1.25 = 5/4 точнее, чем 1.3333 (4/3), хотя 1.25 требуется всего 2 десятичных знака. –