我正在做一个程序,根据测量的放射性计算先前时间点的无线电活动。
然而,如果半衰期与经过的时间相比非常大,那么我得到一个0.00
作为答案,然后至少留下A= Ao
,直到(times[i]-times[0])
变大。
例如,如果(times[i]-times[0]) = 5
和Thalflife = 6540
我想获得0.00076452599
但是我得到的0.0
是错误类型的两倍,或者是/
给我这个问题的命令?
private double[]theoreticalVals(double activity) {
/* below is an implementation of the activity decay
* calculation formula A= Ao/2^(t/Thalflife)
* An array of values will be returned.
* The times array defines the length of the array and gives the point in time values
*/
double Ao= activity;
double [] vals = new double[times.length];
double a;
vals[0]=Ao; //initial activity
for(int i = 1; i<times.length;i++){
a =(times[i]-times[0])/Hf; //
double lowerhalfterm = Math.pow(.5,a); // 2-(^(t/Thalflife))
vals[i]= Ao/lowerhalfterm;
} // A=Ao/2^(t/Thalflife)
return vals;
}
答案 0 :(得分:3)
times
可能是一个整数数组,Hf
可能也是一个整数。您需要将其中一个变量的声明更改为浮动变量,例如double
,或者您需要在计算中转换其中一个变量。
更改声明:
int Hf;
为:
double Hf;
或者在计算中投出:
(times[i]-times[0])/((double)Hf)
答案 1 :(得分:1)
你将int除以int,所以你使用整数除法。要进行双重划分,其中一个操作数至少必须是双重的:
double result = ((double) i1) / i2