Fork me on GitHub
#clojure-italy
<
2019-12-08
>
helios16:12:35

ragazzi domanda un po' weird

helios16:12:53

(defn armstrong [num]
  (let [splitted (map (fn [^Character c] (Character/digit c 10)) (str num))
        res (reduce + (map #(Math/pow % (count splitted)) splitted))]       
    res))

helios16:12:02

un mio amico che sta imparando clojure sta facendo gli esercizi di exercism

helios16:12:08

questo e' per i numeri di armstrong

helios16:12:41

(armstrong 21897142587612075) nella mia macchina da 1897142587612076E16

helios16:12:47

nella sua macchina 1897142587612072E16

helios16:12:59

unica cosa diversa e' che ha java 11 e io sono ancora nella vecchietta java 8

helios16:12:06

c'e' qualcosa che mi sono perso?

gabriele17:12:42

si, 3 release di java :face_with_hand_over_mouth:

helios17:12:49

ahaha 😄 certo

helios17:12:53

ma e' una storia di precisione

helios17:12:05

(Math/pow 9 17)
=> 1.667718169966657E16

helios17:12:19

a lui:

user=> (Math/pow 9 17)
1.6677181699666568E16

gabriele17:12:20

si volevo fare il simpatico 😅

helios17:12:09

Ho trovato il punto minimo di divergenza:

a me (java 8):

(Math/pow 9 17)
=> 1.667718169966657E16

a lui (java 11):
(Math/pow 9 17)
1.6677181699666568E16

helios20:12:26

risolto arcano, Math/pow e' un double 😞 e il numero e' cosi' grande che perde di precisione (entrambe le versioni sono sbagliate!), il numero vero e' 16677181699666569

helios20:12:51

java8: (long (Math/pow 9 17) => 16677181699666570
java11: => 16677181699666568

helios20:12:57

:man-facepalming: