bigint

added
1.3

ns
clojure.core

type
function

(bigint x)

Coerce to BigInt

                user=> (bigint 30)
30


;; Actually do something BigInteger-ish... (http://download.oracle.com/javase/6/docs/api/)

user=> (def x (bigint 97))
#'user/x

user=> (.isProbablePrime (.toBigInteger x) 100)
true

            
                user> (= (bigint 42) (clojure.lang.BigInt/fromBigInteger (BigInteger. "42"))
true
user> (= 42N (bigint 42))
true
user> (= 42 (bigint 42))
true
user> (= 42 (clojure.lang.BigInt/fromBigInteger (BigInteger. "42"))
true

            
                user> (reduce * (repeat 20 1000))
ArithmeticException integer overflow  clojure.lang.Numbers.throwIntOverflow (Numbers.java:1388)

user> (reduce * (repeat 20 (bigint 1000)))
1000000000000000000000000000000000000000000000000000000000000N

            
                ;; There is a difference between `BigInt` and `BigInteger`. The first is from
;; Clojure and should be better for performace, because less unboxing is
;; necessary. The second is from Java and has more functionality.
;; https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html

(type 123N)
;; => clojure.lang.BigInt

(type (bigint 123))
;; => clojure.lang.BigInt

(type (biginteger 123))
;; => java.math.BigInteger

(.modInverse (bigint 123) (bigint 4))
;; IllegalArgumentException No matching method found: modInverse for class
;; clojure.lang.BigInt

(.modInverse (biginteger 123) (biginteger 4))
;; => 3