C# 为什么Math.Pow(-78.0921,-64.6294)返回NaN?

C# 为什么Math.Pow(-78.0921,-64.6294)返回NaN?,c#,C#,我有两个值:X=-78.0921和Y=-64.6294。现在,当我想计算Math.Pow(X,Y)时,它返回NaN。我该怎么办?我怎样才能解决这个问题 我应该如何计算这个功率?是否有其他函数可以计算此值?…或者它可能没有数学定义?这些输入的返回值为NaN x

我有两个值:
X=-78.0921
Y=-64.6294
。现在,当我想计算
Math.Pow(X,Y)
时,它返回NaN。我该怎么办?我怎样才能解决这个问题

我应该如何计算这个功率?是否有其他函数可以计算此值?…或者它可能没有数学定义?

这些输入的返回值为
NaN


x<0,但不具有负不确定性;y不是整数、负整数或正整数:返回NaN


返回
NaN
的原因是函数没有为您的输入值定义好。Wikipedia关于的文章涵盖了这个主题。

我想你的意思是它返回
NaN
,因为你的输入与以下内容匹配:


x<0,但不具有负不确定性;y不是整数、负整数或正整数


这是正确的。

您试图计算一个不真实的数字

我的意思是,如果我们尝试了你能想到的最大数和最小数之间的每一个数,这些数都不是-78.0921到-64.6294幂的解

事实上,没有实数是-1到0.5的幂的解,也没有实数是-1的平方根,通常对于a^b,如果a是负数,b是非整数,结果不是实数。

无法用实数表示这样一个有用的结果导致了复数的发明。我们说
sqrt(-1)=i
,复数系统中的虚单位-所有复数都有实部和虚部,表示为
a+b*i

一般来说,分数次幂的负数不会产生实数结果,因为它会包含i的某些分量-幂越接近a.5,i越多,越接近a.0,越真实,路径沿着实数和虚数之间的圆,例如

-1^x=cos(pi*x)+i*sin(pi*x)

阅读有关复数的更多信息:


如果您希望在C#中处理复数,请尝试


但是,除非复数在您的问题域中有某种意义(例如,它们在许多电气工程、物理和信号分析问题中都有意义)可能是您的数据有误,或者您的逻辑有误,一开始就尝试这样做。

我遇到了类似的问题,并按如下所示进行处理,您必须根据需要调整最小值和最大值,在我的情况下,它们是0和10

      double alpha =  FastMath.pow(weight, parameters.getAlpha());
      if(alpha == Double.NEGATIVE_INFINITY) {
          alpha = 0d;
      } 
      if(alpha == Double.POSITIVE_INFINITY) {
          alpha = 10d;
      } 

      double beta = FastMath.pow(1d / distanceMatrix[row][column],
           parameters.getBeta());
      if(beta == Double.NEGATIVE_INFINITY) {
          beta = 0d;
      } 
      if(beta == Double.POSITIVE_INFINITY) {
          beta = 10d;
      } 

这是C#的另一个弱点。我们知道-125的立方根等于-5,但是
Console.Write(Math.Pow(-125,1.0/3))的结果是NaN。
也许你应该试试这个:

if (x>0) {
  Console.Write(Math.Pow(x,y));
}
else if (x<0) {
  double x = Abs(x);
  double z = Math.Pow(x,y);
  Console.Write(-z);
}
if(x>0){
Console.Write(Math.Pow(x,y));
}
否则如果(x这是我使用的(原生C#library
System.Numerics
):

Complex.Pow(x,y).Real;

结果如下所示:

double checkSquareRoot(double x, double y)
        {
            var result = Math.Pow(x, y);

            if (x > 0)
            {
                return result;
            }
            else
            {
                return -1 * Math.Pow(-x, y);
            }
        }

希望有帮助!

你希望值是什么?它会返回NaN而不是无穷大?类似的帖子:你真的想要复杂的结果吗?如果你真的想要的话,这可以做到。但在我看来,你更可能在计算输入时出错。你想要吗?它不是一个实数,它很复杂。你可以计算
-Math.Pow(78.09,-64.63)
但是你不能计算
Math.Pow(-78.09,-64.63)
。这里:这些数字确实是NaN。x<0但不是负整数;y不是整数、负整数或正整数。文档没有给出任何关于为什么这些值没有定义的细节?(-a^(-b)只是-1.0/(a^b)是吗?它必须返回NaN有一个很好的理由吗?啊,我在想-(a)^(-b)是-1.0/(a^b),而(-a)^(-b)实际上是复杂的,当然应该是NaN。我认为你的“一般”陈述不太正确。例如,
(-1)^(-1/3)
@rynah,x分量是
cos(-pi/3)
,y分量是
sin(-pi/3)
。在我看来没问题。它的实根也是
-1
,不过?@rynah您正在阅读标题为“所有-1/1的第三根:”。它的一个属性是-1,而不是(-1)^(-1/3)(这是另一个属性)复数太复杂了,我用的是pow func,它不等于math.pow.complex.pow(2,2)!=math.pow(2,2)好的,谢谢你的回答。事实上,我在我的项目中没有从复数中受益。我使用的公式有一个问题。这肯定是奇怪的。现在有很多论文被杂志接受,即使它们是垃圾和作弊。我使用的公式我在一篇论文中找到了。无论如何,谢谢你能给出FastMath吗?Thx,我来看看。FastMath能解决FastMath.pow(-10,1.0/3)吗?我试着用Math.pow(-10,2)和你的答案,但不正确。