0

我正在从事一个关于 java 的研究项目,其中必须进行一些艰难的计算。但是我已经完成了大部分工作,但停留在一个点上。我必须计算以下内容:

(2.1-2.3) 提高到 0.3 次方。

但我得到了答案NaN.. 我已经尝试使用floatdouble变量来存储结果,但是它显示了相同的结果。奇怪的是,当我用计算器做同样的事情时,它显示了结果-0.430512

我不知道如何使它与java
代码一起工作同样是:

Math.pow((provider1[k][a][m]-provider1[k][j][m]),prior[k][m]);. 

当上述值为 时2.12.3-0.3NaN输出。

但是,当值为和时2.1,它会获得正确的值 ( )。有人可以帮助如何做到这一点。2.33-0.08

4

4 回答 4

4

根据Math.powJavadocs

  • 如果第一个参数是有限的并且小于零
    • 如果第二个参数是有限偶整数,则结果等于将第一个参数的绝对值提高到第二个参数的幂的结果
    • 如果第二个参数是有限奇整数,则结果等于将第一个参数的绝对值提高到第二个参数的幂的结果的负数
    • 如果第二个参数是有限的而不是整数,则结果为 NaN

(强调我的)

这是因为将负数提高到非整数幂会产生复数。一种情况是无法取数字的平方根:(-1)^0.5. 结果不存在于实数中,它启发了i在数学中定义为 的平方根的虚数-1。通常,将负数提高到非整数次方会产生复数,它是实数和虚数之和。

于 2013-05-10T22:26:21.377 回答
0

我希望这对您或将来的其他人有所帮助:

下面的链接使用下面的示例来解释当您将负基数提高到小数时所获得的复数解决方案背后的数学原理以及 abs() 如何为您提供帮助。当您尝试使用标准 Math.* 函数时,它不知道如何处理解决方案的复杂部分。以 Java 为例,要使用负基数和正小数指数进行计算,通常可以使用:

double d = Math.pow(base,exp);

但是,对于负基数和小数指数,这会导致 NaN,因为存在复杂的解决方案。

如果解决方案的复杂部分对您来说并不重要(就像我的情况一样),您可以使用这种方法。

本例中使用的方程是 Yamada 和 Gunn 对 Rackett 方程的修改中的参数“Phi”:

phi = (1-T/Tc)^(2/7) - (1-Tr/Tc)^(2/7)

double calculatePhi(double T, double Tr, double Tc){
  double l = T/Tc;
  double m = Tr/Tc;
  double n = 2/7.0;
  double q = (1-l);  //possibly negative
  double r = (1-m);  //possibly negative
  q = abs(q);
    double numa = Math.exp(n * Math.log(q));
  r = abs(r)
    double numb = Math.exp(n * Math.log(r));
  double phi = numa - numb;
  return phi;
}

请参阅此链接以获取数学证明:

寻找具有潜在负基数和分数指数的函数的真正解的程序化方法

于 2013-06-27T04:09:14.770 回答
0

对我来说看起来像一个复数。

我的 HP 15C 科学计算器告诉我 (-0.2)^0.3 是一个错误。

是时候购买新计算器了。

于 2013-05-10T22:23:20.080 回答
0

这一定是一个错误。检查您正在使用的计算器。

于 2017-02-11T16:57:08.163 回答