-1

測定された放射性崩壊に基づいて、以前の時点での放射性崩壊を計算するプログラムを実行しています。

しかし、経過時間と比較して半減期が非常に長い場合、私は答えとしてaを取得し、少なくとも大きくなるまで0.00私を残します。A= Ao(times[i]-times[0])

たとえば、取得(times[i]-times[0]) = 5Thalflife = 6540たいのに0.000764525990.0使用するタイプが2倍間違っている場合、または/問題を引き起こしているのはコマンドですか?

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おそらく整数でもあります。これらの変数の 1 つの宣言を のような浮動変数に変更するかdouble、計算で変数の 1 つをキャストする必要があります。

宣言を次のように変更します。

int Hf;

に:

double Hf;

または、計算にキャストします。

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

int を int で除算しているため、整数除算を使用しています。二重除算を行うには、オペランドの少なくとも 1 つが double でなければなりません。

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