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 件のコメント:
コメントを投稿