【问题标题】:Floating point - NaN浮点数 - NaN
【发布时间】:2013-05-05 16:32:58
【问题描述】:

我正在从事一个关于 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.1,2.30.3 - NaN 是输出。

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

【问题讨论】:

  • 查看关于小数指数的细分 (mathsisfun.com/algebra/exponent-fractional.html) - 正如下面的海报所述,将负数提升为小数指数是一个复数
  • 是的..我需要复习我的数学概念..此外,我试过的在线计算器也欺骗了我..还是谢谢

标签: java floating-point nan floating-point-precision


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    下面的链接使用下面的示例来解释当您将负基数提高到小数时所获得的复数解决方案背后的数学原理以及 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;
    }
    

    有关数学证明,请参见此链接:

    A Programmatic Approach to Finding a Real Solution to a Function Having a Potentially Negative Base and Fractional Exponent

    【讨论】:

      【解决方案3】:

      根据Math.pow Javadocs

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

      (强调我的)

      那是因为raising a negative number to a non-integral power yields a complex number。一种情况是无法取数字的平方根:(-1)^0.5。结果不存在实数,它启发了虚数i,它在数学中被定义为-1 的平方根。一般来说,负数的非整数次方得到一个复数,它是一个实数和一个虚数之和。

      【讨论】:

      • 好的。谢谢..我需要复习我的数学概念..此外,在线计算器(链接:calculatorsoup.com/calculators/algebra/exponent-fractions.php)也需要这样做..:p
      • 是的,您提供的链接中的计算器似乎需要更正。甚至 Windows 计算器也会给出“无效输入”。
      • 是的..应该试过 Windows 计算器..没想到
      • 检查我的解决方案,它可能会帮助你。
      【解决方案4】:

      在我看来是一个复数。

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

      是时候购买新计算器了。

      【讨论】:

      猜你喜欢
      • 2012-03-09
      • 2011-07-23
      • 2020-11-11
      • 1970-01-01
      • 1970-01-01
      • 2017-06-15
      • 2015-04-06
      • 2018-07-11
      • 2023-01-31
      相关资源
      最近更新 更多