为什么没有数学?以整数为指数的幂
本文关键字:整数 指数 为什么 | 更新日期: 2023-09-27 18:04:32
我读到Math.Pow
的实现非常复杂,无法处理分数次方。当你不需要分数次幂的时候,为什么没有一种方法可以让指数的形式变成int型,从而更快呢?
因为你只需要把它转换回浮点数,乘以底数的对数。
<标题> n <一口>一口> = e <一口> m×ln n 一口>标题>对于编译器来说,只有在指数为常数的情况下,才值得通过转换为一系列乘法来进行优化。这种情况下你可以自己写x*x
或x*x*x
。
编辑:所以如果你想避免你的数学是由数学。Pow实现(它使用指数函数),只是不要调用它。如果数学。对于整数,Pow将被添加,编译器将从如何调用它来确定它是否应该发出乘法代码(如果n是常数且很小)或默认使用指数函数。对于编译器来说,这是一项非常重要的工作,而且在性能方面没有任何提高。
我不认为快速数学函数是他们编程时的首要任务(参见为什么是数学?DivRem如此低效)。他们可以使用平方除法,这样会更快,至少对于小的指数。
然而,由于浮点数受舍入影响,提供两种不同的实现可能意味着不同的结果,例如,对于pow(5.9,7)和pow(5.9,7.0),这在某些情况下可能是不希望的。
你可以自己写(C语言):
int intPow(int a,int b){
int answer = a;
int i;
for(i=0;i<b-1;i++)
answer *= a;
return answer;
}