计算负数的幂

时间:2014-05-17 15:07:34

标签: c# linq

我对C#比较新,因为Math.Pow(x,y)返回NaN的负数(读:不是负功率),我想知道如何更有效地计算结果。我现在正在写的是一个基本的for循环,但我想知道它是否可以用更短的方式实现(使用Linq可能)?

for(int i=0;i<power;i++)
       {
           result = result * num;
       }

3 个答案:

答案 0 :(得分:4)

  

Math.Pow(x,y)返回NaN以获取负数。

那是因为没有为负基数定义任意取幂:

http://en.wikipedia.org/wiki/Exponentiation

  

当基数b是正实数时,可以通过指数函数为所有实数和偶数复数指数n定义b到n

现在,如果幂是一个整数,则定义负数来获得实际结果,就像你的情况一样,但是Pow不会为你计算它。你应该做的是:

  • 假设您想了解Pow(-2, 5)
  • 改为Pow问题Pow(2, 5)
  • 看看指数;如果它是偶数,那么你得到了正确的答案。如果是奇数,则将答案否定。

所以在这种情况下,Pow(2, 5)返回32.指数5是奇数,所以将它设为-32,然后你就完成了。

答案 1 :(得分:0)

以Pow表示(双倍基数,双倍幂),当基<0 fractional (例如:power = 0.5)时,那么会生成 NaN ,因为它可以在复杂域而不是实际域中计算。 因此,可能需要在使用它们之前检查 pow 功能的 base power 。在这种情况下,您应该将所需的值作为未定义的值(而不是NaN)返回。

波纹管功能执行此操作,并返回0而不是NaN:

// pow with desired Nan
public double Pow(double x,double y){
    double MyNaN = 0; // or any desired value for Nan
    double result = MyNaN; 

    if (Math.Floor (y) != y) { // if y is fractional number
        if (x < 0)  // if x is negative number
            return result;
    }

    result = Math.Pow (x, y);
    return result;

}

答案 2 :(得分:-1)