gpt4 book ai didi

java - 整数幂的乘法、^ 运算符与 Math.pow()

转载 作者:行者123 更新时间:2023-12-01 06:33:00 25 4
gpt4 key购买 nike

我对 Java 中功率计算的方式以及可用方法的性能感到好奇。所以我写了一个简单的测试来检查 Math.pow() , *^操作。

public static void main(String[] args) {

int SIZE = 100000000;

int[] arr1 = new int[SIZE];
long st1, end1, st2, end2, st3, end3;

st1 = System.currentTimeMillis();
for (int i = 0; i < SIZE; i++) {
arr1[i] = (int) Math.pow(i, 4);
}
end1 = System.currentTimeMillis();
System.out.println("pow: " + (end1 - st1));

arr1 = new int[SIZE];
st2 = System.currentTimeMillis();
for (int i = 0; i < SIZE; i++) {
arr1[i] = i * i * i * i;
}
end2 = System.currentTimeMillis();
System.out.println("mul: " + (end2 - st2));

arr1 = new int[SIZE];
st3 = System.currentTimeMillis();
for (int i = 0; i < SIZE; i++) {
arr1[i] = i^4;
}
end3 = System.currentTimeMillis();
System.out.println(" ^: " + (end3 - st3));

//to prevent optimizations form skipping the calculations
for (int i = 0; i < SIZE; i++) {
if (arr1[i] == 1){
System.out.println(1);
}
}
System.out.println("done");
}

如果前两个结果符合预期:

pow: 19253 19128 19205 19145 19185 19130 19162 19177 19191 19157 | 19173
mul: 91 86 91 85 98 90 90 105 87 95 | 92
^: 80 85 80 70 60 65 75 60 70 60 | 71

第三个有点令人困惑。怎么会^总是比简单乘法快一点,应该使用哪一个?

所有测试都是在类似条件下使用 JRE 1.7 运行的。

最佳答案

^ 运算符不执行求幂 - 它是按位“异或”(又名“异或”)。

使用 100000000 的四次方的整数数学运算会给出不正确的结果 - 32 位整数无法存储那么大的数字。

Math.pow() 将使用浮点运算。由于精度问题,答案可能不是 100% 准确,但应该能够代表所需的结果范围。

要获得如此大的数字的 100% 准确值,您应该使用 BigInteger 类。然而,它不会特别快。这是您在考虑准确性与性能时必须做出的权衡。

关于java - 整数幂的乘法、^ 运算符与 Math.pow(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13911180/

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