ragazzi domanda un po' weird
(defn armstrong [num]
(let [splitted (map (fn [^Character c] (Character/digit c 10)) (str num))
res (reduce + (map #(Math/pow % (count splitted)) splitted))]
res))
un mio amico che sta imparando clojure sta facendo gli esercizi di exercism
questo e' per i numeri di armstrong
(armstrong 21897142587612075)
nella mia macchina da 1897142587612076E16
nella sua macchina 1897142587612072E16
unica cosa diversa e' che ha java 11 e io sono ancora nella vecchietta java 8
c'e' qualcosa che mi sono perso?
si, 3 release di java :face_with_hand_over_mouth:
ahaha 😄 certo
ma e' una storia di precisione
(Math/pow 9 17)
=> 1.667718169966657E16
a lui:
user=> (Math/pow 9 17)
1.6677181699666568E16
si volevo fare il simpatico 😅
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
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
java8: (long (Math/pow 9 17) => 16677181699666570
java11: => 16677181699666568
:man-facepalming: