【发布时间】: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/2D。D(d也可以使用)将数字标记为double值。
标签: java nan double-precision