Voglio calcolare !1000
in clojure, come posso fare questo senza ottenere un'eccezione di overflow-intero?Clojure - Calcola con numeri grandi
Il mio codice fattoriale è adesso: (reduce * (range 1 1001))
.
Voglio calcolare !1000
in clojure, come posso fare questo senza ottenere un'eccezione di overflow-intero?Clojure - Calcola con numeri grandi
Il mio codice fattoriale è adesso: (reduce * (range 1 1001))
.
Si potrebbe utilizzare l'operatore *'
che sostiene precisione arbitraria, promuovendo automaticamente il risultato al BigInt nel caso sarebbe traboccare:
(reduce *' (range 1 1001))
Put N alla fine del numero che lo rende un bigint,
(reduce * (range 1N 1001N))
costringere i parametri per clojure.lang.BigInt
(reduce * (range (bigint 1) (bigint 1001)))
I.e. se lavori con una libreria di terze parti che non utilizza *'
(defn factorial' [n]
(factorial (bigint n)))
Grazie! È stato un po 'più facile e più pulito. – Sawny
Quali sono i pro/contro di farlo in questo modo al posto di @ Hamza? – Sawny
Può accettare input arbitrari. @Hamza dovrebbe usare 'bigint' – noahlz