2010年12月9日木曜日

MPFR の sqrt

SDPA の関係で多倍長計算の MPFR を調べているが、sqrt の挙動でよくわからない点がある。

例えば、
  mpfr_set_default_prec(prec);
  mpf_class mtmp2 = 2.0;
  mtmp2 = sqrt(mtmp2);
  gmp_printf("sqrt(2)   in mpfr  %.80Fe\n",mtmp2.get_mpf_t());
  mpf_class residual = mtmp2 * mtmp2 - 2.0;
  gmp_printf("residual  in mpfr  %.80Fe\n",residual.get_mpf_t());
とした場合、ビット数 (prec) = 300 で
prec = 300
sqrt(2)   in mpfr  1.41421356237309504876000000000000000000000000000000000000000000000000000000000000e+00
residual  in mpfr  -1.07199229837017405496000000000000000000000000000000000000000000000000000000000000e-19
となるが 2000 にあげても
prec = 2000
sqrt(2)   in mpfr  1.41421356237309504876000000000000000000000000000000000000000000000000000000000000e+00
residual  in mpfr  -1.07199229837017405496000000000000000000000000000000000000000000000000000000000000e-19
と同じ結果が出てきている。
sqrt(2) の表示自体は桁数の表示の仕方に問題があるのかもしれないが、residual が変わらないのはおかしいような気がする。

これについては、明日続けて調べる必要がありそうだ。

今日の作業内容:MPFR チェック
今日のランチ:味庵 豚肉のキムチ炒め
明日の予測作業時間:5h

0 件のコメント:

コメントを投稿