为什么Clojure理性使用Java`BigInteger而不是Clojure`BigInt`s?

时间:2014-04-29 17:56:36

标签: clojure

Clojure发现将Java BigInteger包装在自己的BigInt类中是值得的,该类使用普通的long,因为它足够大:因此加快了{BigInt的小型算法{1}},代价是减慢大型实例的算术运算速度。

  • 同一个参数不适用于整数比率吗?
  • 为什么Clojure会将裸BigInteger类用于Ratio类型,而不是将它们包装在BigInt中?

2 个答案:

答案 0 :(得分:2)

Ratio早于BigInt

如果我没记错的话,BigInt被引入,以便"要求一个盒子" (通过将N附加到(整数)数字文字来获得任意精度算术)不会导致太多的性能损失。调整Ratio可能不是一个高优先级。事实上,我根本没有回忆起这个话题 - 我并不感到惊讶,Ratio并不是真的关于顶级算术表现。

不过,也许有些冒险的程序员有一天会重写它以使用BigInt

答案 1 :(得分:1)

也许Clojure拥有它自己的BigInt的主要原因是Java的Long和BigInteger的hashCode不一致。因此,表示与Long和BigInteger相同值的两个数字被视为不同的数字;例如,在哈希映射比较中。

此答案的来源是use-cases for BigInt versus BigInteger in Clojure