17.4.25 別の形の繰り返し

繰り返しの計算は、別の形で定義することもできます。

放射性物質の崩壊する割合の計算を、「現在の割合がxのときのn秒後の割合」を求める問題だと考え直してみます。すると、

という関係になります。つまり

となります。この考え方で「現在の割合がxときからn秒後の割合を求める」関数 tc99m_from(x,n)

# let rec tc99m_from(x,n) = return2 if n=0 then x return2 else tc99m_from(x *. (1.0 -. disintegration_per_sec), n-1 ) ;; return2   val tc99m_from : float * int -> float = <fun>

のようにも定義できます。

1時間後にテクネチウムが残っている割合を求めるには, 「最初の割合が1.0のときに60*60秒後の割合」なので次のようになります:

# tc99m_from(1.0, 60*60) ;; return2 - : float = 0.891069983611419536

これでも前のページで定義した tc99m と同じ結果が得られていることが分かります.

前の tc99m かわりとして次のような関数を定義することもできます.

# let tc99m_alt(n) = tc99m_from(1.0,n) ;; return2 val tc99m_alt : int -> float = <fun> # tc99m_alt(60*60) ;; return2 - : float = 0.891069983611 #