【问题标题】:NaN, Java troubleNaN,Java 麻烦
【发布时间】:2014-11-08 12:01:33
【问题描述】:

我正在尝试将两个完整的双精度值相除(即所有内存都填充有高精度数字的双精度变量)。而且,运算的结果会被分配到一个双精度变量中。

当我执行这个过程时,这个返回我 NaN。

我之前在某个地方读到过,两个完整的双精度值在它们之间相乘或相除时会产生一个高内存值,一个不能在双精度变量中分配的值。

我说的对吗?

我该如何解决这个问题?

public class CoeficienteAngular {

    public static double coefAngularImpar(    int x/*Coeficiente 
    da longarina a qual se analiza*/,         double y/*Distância 
    entre as longarinas*/,                     double z/*Somatorio*/){

        double beta;
        double betaPrim;

        betaPrim = (double) x/y;
        beta = betaPrim/z;

        return beta;
    }

    public static double coefAngularPar(    int x/*Coeficiente 
    da longarina que se analiza*/,             double y/*Distância 
    entre as longarinas*/,                     double z/*Somatório*/){

        double numerador, denominador, fatorCorrecao;
        double beta;

        int moduloL = Math.abs(x);

        numerador = (double)(moduloL-1)+(double)(1/2);
        denominador = y*z;

        fatorCorrecao = 1;//Inicializando a variável
        if(x>=0){
            fatorCorrecao = 1;
        }else if(x<0){
            fatorCorrecao = -1;
        }

        beta = fatorCorrecao*(numerador/denominador);
        return beta;
    }

}

【问题讨论】:

  • 什么? 所有内存都被高精度数字填满是什么意思?请举个例子。
  • 我的意思是所有小数位都被占用了。例如:0,333333333333333。我相信这是双变量可能分配的最多小数位数。
  • 再举个例子。它们可以被 0 占据。
  • 我不知道你想说什么。能否举个完整代码的例子?
  • 这就是我写1.0/2.0 :) 的原因。这是返回0.5 的两个浮点值的除法。 (double)(1/2) 改为除以整数,返回 0 并将结果转换为 double => 0.0。你也可以写1D/2DDd 也可以使用)将数字标记为 double 值。

标签: java nan double-precision


【解决方案1】:

不要使用双打。为避免精度损失,请改用BigDecimal (see Javadoc)。您还可以阅读此post,其中人们完美地解释了使用 BigDecimal 的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    • 2014-02-03
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多