Clojure发现将Java BigInteger
包装在自己的BigInt
类中是值得的,该类使用普通的long
,因为它足够大:因此加快了{BigInt
的小型算法{1}},代价是减慢大型实例的算术运算速度。
BigInteger
类用于Ratio
类型,而不是将它们包装在BigInt
中?答案 0 :(得分:2)
Ratio
早于BigInt
。
如果我没记错的话,BigInt
被引入,以便"要求一个盒子" (通过将N
附加到(整数)数字文字来获得任意精度算术)不会导致太多的性能损失。调整Ratio
可能不是一个高优先级。事实上,我根本没有回忆起这个话题 - 我并不感到惊讶,Ratio
并不是真的关于顶级算术表现。
不过,也许有些冒险的程序员有一天会重写它以使用BigInt
。
答案 1 :(得分:1)
也许Clojure拥有它自己的BigInt的主要原因是Java的Long和BigInteger的hashCode不一致。因此,表示与Long和BigInteger相同值的两个数字被视为不同的数字;例如,在哈希映射比较中。