-1

我正在做一个程序,该程序根据测量的放射性计算前一个时间点的放射性活动。

但是,如果半衰期与经过的时间相比非常大,我会得到 a0.00作为答案,然后A= Ao至少让我知道直到(times[i]-times[0])变大。

例如,如果(times[i]-times[0]) = 5Thalflife = 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; 
}
4

2 回答 2

3

times可能是一个整数数组,Hf也可能是一个整数。您需要将其中一个变量的声明更改为浮动变量,例如double,或者您需要在计算中强制转换其中一个变量。

将声明从:

int Hf;

到:

double Hf;

或投入计算:

(times[i]-times[0])/((double)Hf)
于 2013-02-03T20:11:15.973 回答
1

您将 int 除以 int,因此您使用的是整数除法。要进行双重除法,其中一个操作数至少必须是双精度数:

double result = ((double) i1) / i2
于 2013-02-03T20:07:38.637 回答