如何提高Java的Big Integer的性能?
例如,这个阶乘程序:
import java.math.*;
class Fac {
public static void main(String[] args) {
BigInteger i = BigInteger.ONE;
for(BigInteger z=BigInteger.valueOf(2);z.compareTo(BigInteger.valueOf(99999)) != 0;) {
i = i.multiply(z);
z = z.add(BigInteger.ONE);
}
System.out.println( i );
}
}
Run Code Online (Sandbox Code Playgroud)
该计划在31.5s 完成
C++中的位置:
#include <iostream>
#include <gmpxx.h>
using namespace std;
int main() {
mpz_class r;
r = 1;
for(int z=2;z<99999;++z) {
r *= mpz_class(z);
}
cout << r << endl;
}
Run Code Online (Sandbox Code Playgroud)
在1.0s 完成
和Ruby(用于比较):
puts (2...99999).inject(:*)
Run Code Online (Sandbox Code Playgroud)
在4.4s(Ruby)和32.2JRuby中完成 …
java.math.MutableBigInteger只能从包装内部获得.它继承自java.lang.Object并且只有一个子类(SignedMutableBigInteger)只能从包内部获得.