计算负数的幂

本文关键字:计算 | 更新日期: 2023-09-27 18:03:53

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

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

计算负数的幂

Math.Pow(x,y)对于负数返回NaN

这是因为任意取幂对于负基数是没有定义的:

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

当b为正实数时,b的n次方可以通过指数函数

定义为所有实数指数和偶数复指数n

现在,如果幂是整数,则定义负数的幂以获得实数结果,如在您的情况下,但Pow不会为您计算它。你应该做的是:

  • 假设你想知道Pow(-2, 5)
  • Pow(2, 5)的问题交给Pow
  • 看指数;如果它是偶数,那么你就得到了正确答案。如果是奇数,则使答案为负数。

在本例中,Pow(2, 5)返回32。指数5是奇数,所以改成-32,就完成了

in Pow(双基,双功率),当base <0功率分数(例如:power=0.5),则生成NaN,因为它在复域而非实域可计算。因此,在使用pow函数之前,您可能需要检查basepower。在这种情况下,您应该将所需的值作为未定义值返回(而不是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;
}

我认为你可以用System.Numerics.Complex来计算虚数。

见:https://msdn.microsoft.com/en-us/library/system.numerics.complex%28v=vs.110%29.aspx?f=255& MSPPError = -2147217396

http://www.extremeoptimization.com/QuickStart/CSharp/ComplexNumbers.aspx

https://www.codeproject.com/Tips/3370/Complex-Math-Library-for-Csharp-and-VB-NET