为什么没有数学?以整数为指数的幂

本文关键字:整数 指数 为什么 | 更新日期: 2023-09-27 18:04:32

我读到Math.Pow的实现非常复杂,无法处理分数次方。当你不需要分数次幂的时候,为什么没有一种方法可以让指数的形式变成int型,从而更快呢?

为什么没有数学?以整数为指数的幂

因为你只需要把它转换回浮点数,乘以底数的对数。

<标题> n <一口> = e <一口> m×ln n

对于编译器来说,只有在指数为常数的情况下,才值得通过转换为一系列乘法来进行优化。这种情况下你可以自己写x*xx*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;
}