我编写了简单的基准测试来测试乘法双打与 BigDecimal 的性能。我的方法正确吗?我使用随机值是因为编译器多次优化了乘法常量(例如Math.PI * Math.E
)。
但是:
- 我不知道在测试中生成随机数是否会破坏结果。
- 在测试中创建新BigDecimal
对象也是如此。
我只想测试乘法的性能(不是构造函数使用的时间)。
如何做呢?
import java.math.*;
import java.util.*;
public class DoubleVsBigDecimal
{
public static void main(String[] args)
{
Random rnd = new Random();
long t1, t2, t3;
double t;
t1 = System.nanoTime();
for(int i=0; i<1000000; i++)
{
double d1 = rnd.nextDouble();
double d2 = rnd.nextDouble();
t = d1 * d2;
}
t2 = System.nanoTime();
for(int i=0; i<1000000; i++)
{
BigDecimal bd1 = BigDecimal.valueOf(rnd.nextDouble());
BigDecimal bd2 = BigDecimal.valueOf(rnd.nextDouble());
bd1.multiply(bd2);
}
t3 = System.nanoTime();
System.out.println(String.format("%f",(t2-t1)/1e9));
System.out.println(String.format("%f",(t3-t2)/1e9));
System.out.println(String.format("%f",(double)(t3-t2)/(double)(t2-t1)));
}
}