我对C#比较新,因为Math.Pow(x,y)返回NaN的负数(读:不是负功率),我想知道如何更有效地计算结果。我现在正在写的是一个基本的for循环,但我想知道它是否可以用更短的方式实现(使用Linq可能)?
for(int i=0;i<power;i++)
{
result = result * num;
}
答案 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)
我认为您可以使用可以计算Imaginary的System.Numerics.Complex。
http://www.extremeoptimization.com/QuickStart/CSharp/ComplexNumbers.aspx
https://www.codeproject.com/Tips/3370/Complex-Math-Library-for-Csharp-and-VB-NET