我有两个值:X = -78.0921
和Y = -64.6294
. 现在,当我想计算Math.Pow(X, Y)
它时返回 NaN。我应该怎么办?我怎么解决这个问题?
我应该如何计算这个功率?有没有其他函数可以计算这个?......或者它可能不是数学定义的?
我有两个值:X = -78.0921
和Y = -64.6294
. 现在,当我想计算Math.Pow(X, Y)
它时返回 NaN。我应该怎么办?我怎么解决这个问题?
我应该如何计算这个功率?有没有其他函数可以计算这个?......或者它可能不是数学定义的?
您试图计算一个不真实的数字。
我的意思是,如果我们尝试了你能想到的最大数字和最小数字之间的每一个数字,那么这些数字都不是 -78.0921 的 -64.6294 次方的解。
事实上,没有实数是 -1 的 0.5 次方或 -1 的平方根的解,通常对于 a^b,如果 a 为负数且 b 为非整数,则结果不是实数。
无法用实数表达这种有用的结果导致了复数的发明。我们说sqrt(-1) = i
,复数系统中的虚数单位 - 所有复数都有一个实部和一个虚部,表示为a + b*i
。
一般来说,分数幂的负数不会产生实数结果,因为它会包含 i 的某些分量 - 幂越接近 0.5,i 越多,越接近 0.0,越真实,并且路径遵循真实和虚构之间的圆圈,例如
-1^x = cos(pi*x)+i*sin(pi*x)
阅读有关复数的更多信息:http ://en.wikipedia.org/wiki/Complex_number
如果您希望在 C# 中使用复数,请尝试http://msdn.microsoft.com/en-us/library/system.numerics.complex.aspx
但是,除非复数在您的问题领域中具有某种意义(例如,它们在许多电气工程、物理和信号分析问题中都有意义),否则您的数据可能是错误的,或者您的逻辑可能是错误的,试图做这样的事情首先。
这是我用于(本机 C# 库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);
}
}
希望能帮助到你!
我遇到了类似的问题并按如下所示进行处理,您必须根据需要调整最小值和最大值,在我的情况下它们是 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);
if (y%2==0)
Console.Write(z);
else
Console.Write(-z);
}