计算负数的幂
本文关键字:计算 | 更新日期: 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函数之前,您可能需要检查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;
}
我认为你可以用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