2010年12月13日月曜日

MFPR と machine epsilon

mpackを使っての SDP を生成するプログラムを作成。
ただ、途中でMFPRの動きがすこし怪しい感じがある。

たとえば、1+e > 1 となる最小の e を求めると prec = 600 のときに 1.0e-200 程度であり、これが実質的な machine epsilon に相当するはずだが、mpfr_printf で表示させると 600 桁に近い情報を持っていることが表示される(足し算は600桁近い情報で行っている)。
つまり、四則演算に使っている桁数と比較演算に使っている桁数にずれがあるようなのである。
いずれにしても、SDP の生成の場合は、それを見越して prec を設定する。

SDPA-GMP で解くときを考えると、SDPA-GMP のパラメータを epsilon = 1.0e-20 とするなら、その約 30 倍の prec = 600 程度であれば桁数にゆとりを持って生成できる。epsilon = 1.0e-80 なら prec = 2400 である。もちろん、SDPA-GMP の パラメータの precision も調整しておく必要がある。 epsilon の6倍程度の桁数が必要である。epsilon = 1.0e-20 なら、precision = 120, epsilon = 1.0e-80 なら precision = 480 である。

SDPA-GMP の場合、出力ファイルに relative eps の行で machine epsilon を表示してくれるので、これの桁数が epsilon の桁数の倍以上の精度になるように precision を設定する必要がある。


今日の作業内容:MFPR, センサネットワーク
今日のランチ: らく チキンカツ
明日の予測作業時間:5h

0 件のコメント:

コメントを投稿