gpt4 book ai didi

java - 测量 double 与 BigDecimal

转载 作者:行者123 更新时间:2023-12-03 21:26:57 24 4
gpt4 key购买 nike

我编写了简单的基准测试来测试 multyplying double 与 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)));
}
}

最佳答案

您不仅要为乘法运算计时,还要为其他事情计时。

你需要做类似的事情:

    long time = 0; 
for(int i=0; i<1000000; i++) {
double d1 = rnd.nextDouble();
double d2 = rnd.nextDouble();
long start = System.nanoTime();
t = d1 * d2;
long end = System.nanoTime();
time += (end-start)
}
long meantime = time / 1000000;

然后也可能计算标准误差。此外,您可能需要在开始之前先通过一些计算来预热 jvm,否则您会在开始时获得一些高值。

关于java - 测量 double 与 BigDecimal,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708452/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com