Clojure way to generate random long number

With Clojure, how do I create a random long number? I know that Clojure has a function rand-int, but only works for the whole. If the given number is long, I got this error:

IllegalArgumentException Value out of range for int: 528029243649 clojure.lang.RT.intCast (RT.java:1205)

+4
source share
2 answers

If you look at the source of rand-int

(defn rand-int
  "Returns a random integer between 0 (inclusive) and n (exclusive)."
  [n] (int (rand n)))

You can do a similar thing

(long (rand n)))

+8
source

Clojure rand rand-int java.util.Random . , , Java, MersenneTwisterFast. nextLong(), Clojure. Java SecureRandom, , ; , Mersenne Twister. Java. , . java.util.Random . , .

MersenneTwisterFast. , , , .

Leiningen - project.clj:

  :java-source-paths ["src/java"]

Java MersenneTwisterFast.java src/java/ec/util. :

(ns my.namespace
  (:import [ec.util MersenneTwisterFast]))

(def rng (MersenneTwisterFast. 42)) ; Specify a different seed, e.g. from system time.
(defn next-long [] (.nextLong rng))
+7

Source: https://habr.com/ru/post/1627625/


All Articles