gpt4 book ai didi

java - 类似于 a^b 的快速函数

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:54 27 4
gpt4 key购买 nike

这有点晦涩,但我需要一个可以非常快速地计算并且类似于 a^b 的函数,其中 a 在 0 和 1 之间并且 b 非常大。对于许多 b,它将一次计算一个 a。理想情况下,结果将在 0.4% 以内。提前致谢。

最佳答案

将我的评论转化为答案:

既然您提到 b 足够大,可以四舍五入为整数,那么一种方法是使用 Binary Exponentiation algorithm通过平方。

Math.pow() 很慢,因为它需要处理非整数幂。因此,在您的情况下可能会做得更好,因为您可以利用整数幂算法。


一如既往,对您的实现进行基准测试,看看它是否真的比 Math.pow() 更快。​​


这是 OP 发现的一个实现:

public static double pow(double a, int b) {
double result = 1;
while(b > 0) {
if (b % 2 != 0) {
result *= a;
b--;
}
a *= a;
b /= 2;
}

return result;

}

这是我的快速(未优化)实现:

public static double intPow(double base,int pow){
int c = Integer.numberOfLeadingZeros(pow);

pow <<= c;

double value = 1;
for (; c < 32; c++){
value *= value;
if (pow < 0)
value *= base;
pow <<= 1;
}

return value;
}

这应该适用于所有积极的 pow。但我没有将它与 Math.pow() 进行基准测试。

关于java - 类似于 a^b 的快速函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12541410/

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