clojure-italy

🇮🇹
helios 2019-12-08T16:54:35.197300Z

ragazzi domanda un po' weird

helios 2019-12-08T16:54:53.197900Z

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

helios 2019-12-08T16:55:02.198300Z

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

helios 2019-12-08T16:55:08.198600Z

questo e' per i numeri di armstrong

helios 2019-12-08T16:55:41.199300Z

(armstrong 21897142587612075) nella mia macchina da 1897142587612076E16

helios 2019-12-08T16:55:47.199600Z

nella sua macchina 1897142587612072E16

helios 2019-12-08T16:55:59.200Z

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

helios 2019-12-08T16:56:06.200200Z

c'e' qualcosa che mi sono perso?

gabriele 2019-12-08T17:02:42.200500Z

si, 3 release di java :face_with_hand_over_mouth:

helios 2019-12-08T17:02:49.200700Z

ahaha 😄 certo

helios 2019-12-08T17:02:53.200900Z

ma e' una storia di precisione

helios 2019-12-08T17:03:05.201100Z

(Math/pow 9 17)
=> 1.667718169966657E16

helios 2019-12-08T17:03:19.201300Z

a lui:

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

gabriele 2019-12-08T17:03:20.201500Z

si volevo fare il simpatico 😅

helios 2019-12-08T17:04:09.202300Z

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

helios 2019-12-08T20:22:26.203Z

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

helios 2019-12-08T20:22:51.203300Z

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

helios 2019-12-08T20:22:57.203600Z

:man-facepalming: