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#librarySystem.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)和你的答案,但不正确。