Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 计算负数的幂_C#_Linq - Fatal编程技术网

C# 计算负数的幂

C# 计算负数的幂,c#,linq,C#,Linq,我对C#比较陌生,因为Math.Pow(x,y)返回一个负数的NaN(读:不是负幂),我想知道如何更有效地计算结果。我现在写的是一个基本的for循环,但我想知道它是否可以用更短的方式实现(可能使用Linq) for(int i=0;i Math.Pow(x,y)返回负数的NaN 这是因为没有为负基数定义任意幂运算: 当基b是正实数时,可以通过指数函数为所有实数甚至复指数n定义b到n 现在,如果幂是整数,则定义负数的幂运算以获得实数结果,就像您的情况一样,但是Pow不会为您计算它。您应该做的是:

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

for(int i=0;i
Math.Pow(x,y)
返回负数的
NaN

这是因为没有为负基数定义任意幂运算:

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

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

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

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

我想你可以使用System.Numerics.Complex来计算虚数

见:

在Pow(双基,双幂)中,当基<0为分数(ex:power=0.5)时,将生成NaN,因为它可在复域中计算,而不是在实域中。 因此,在使用pow函数之前,您可能需要检查basepower函数。在这种情况下,您应该将所需值作为未定义值(而不是NaN)返回

bellow函数执行此操作,并返回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;

}
//具有所需Nan的pow
公共双电源(双x,双y){
double MyNaN=0;//或Nan的任何所需值
双结果=MyNaN;
if(Math.Floor(y)!=y){//如果y是分数
if(x<0)//如果x是负数
返回结果;
}
结果=数学功率(x,y);
返回结果;
}

你是说它返回
NaN
对于类似
Math.pow(-2,5)
?使用Math.pow(Math.Abs(x,y)),然后应用正确的符号。Math.pow拒绝负x,因为如果y不是整数,“应用正确的符号”是不可能的。你发布的循环将返回1(假设结果初始化为1)如果你只是想写一个更有效的幂算法,你可以使用分而治之的方法,参见链接(这是一个
C
程序,但是翻译成
C#
应该很简单)我本来打算给雷蒙德的评论作为答案,但他抢先给了我。一旦更正,应该是Math.Pow(Math.Abs(x),y)。然后如果y是奇数,你用另一种方法求反,结果是正的。y必须是一个整数值。如果幂为负,它将返回1,而不是这种情况。无论如何,代码很好,我想我可以翻译它。我不明白。
Pow(-2,5)
确实返回
-32
-@Vedanshu一件可能导致这一结果的事情是,如果你的指数不是一个整数,但是非常接近一个整数,以至于你没有注意到它不是。
double a=-2,b=4.999999999999999999;Console.WriteLine({0}{1}={2}),a,b,Math.Pow(a,b));
打印“-2^5=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;

}