Quiero calcular !1000
en clojure, ¿cómo puedo hacer esto sin obtener una excepción de desbordamiento de números enteros?Clojure - Calcular con números grandes
Mi código factorial es ahora: (reduce * (range 1 1001))
.
Quiero calcular !1000
en clojure, ¿cómo puedo hacer esto sin obtener una excepción de desbordamiento de números enteros?Clojure - Calcular con números grandes
Mi código factorial es ahora: (reduce * (range 1 1001))
.
Se puede utilizar el operador *'
que soporta precisión arbitraria, promoviendo de forma automática el resultado de Bigint en caso de que se hubiera sobrepasado:
(reduce *' (range 1 1001))
Put N al final de la serie que le hace un bigint,
(reduce * (range 1N 1001N))
coaccionar a los parámetros clojure.lang.BigInt
(reduce * (range (bigint 1) (bigint 1001)))
Es decir si está trabajando con una biblioteca de terceros que no utiliza *'
(defn factorial' [n]
(factorial (bigint n)))
¡Gracias! Eso fue un poco más fácil y más limpio. – Sawny
¿Cuáles son los pros/contras de hacerlo de esta manera en lugar del camino de @ Hamza? – Sawny
Puede aceptar entrada arbitraria. @Hamza debería usar 'bigint' – noahlz