From: NISHIMATSU Takeshi Date: 2003-05-31T15:24:10+09:00 Subject: [ruby-list:37739] Re: missing/erf.c 西松です. [ruby-list:37738] でまつもとさん: (数学関数について) > 厳密に言うとPOSIXに入ってないものに関してはちょっと慎重にな > ろうと思っています。ですから、 j0, j1, jn, y0, y1, yn の方が > 取り込みやすいですね。 どのような点について慎重になろうとされているのでしょうか. (1)取り込みそのものについて. やたら関数が増えるのはよくない. (2)関数名. (3)(不正な引数が与えられたときの)エラーの処理について. (4)missing/*.c の精度. でしょうか. 今回の erf, erfc については (1)SVID3, XPG4.2, BSD4.3, C99 で採用されているので, そんなに 特殊ではない. 個人的にはないと不便. (2)erf, erfc 以外になることはおそらくない. (3)全領域にわたってなめらかな関数なので, エラーは返さない. (画像を http://www.vni.com/products/jmsl/api/com/imsl/math/Sfun.html に見つけました. Googleの画像検索は便利ですね.) (4)じつはあまり注意していません. また, inexact, underflow はセットしなくてかまわないのですよね. と思います. > また、missing/*.cはRuby固有の関数を含まないことが望ましいで > すから(他の状況でも使えるように)、 > > |今回の missing/erf.c の中には > | rb_raise(rb_eRuntimeError, "missing/erf.c:q_gamma(): could not converge."); > |があります. よいでしょうか. > > はちょっとよくないです。 まずその行は実行されないハズで, 実行されたとしても最小 の桁が浮動小数点数演算のため振動した結果だと思うので, [1]その行は削除. [2]printf("missing/erf.c:q_gamma(): could not converge."); などにしておく. もしくは, [3]http://ftp.rutgers.edu/pub/FreeBSD/FreeBSD-current/src/lib/libm/common_source/erf.c のような近似曲線を使ったものにする.(これをその まま使うのはライセンス的にまずいのですよね.) という策があります. -- love && peace && free_software NISHIMATSU Takeshi t-nissie@imr.edu OR t-nissie@imr.tohoku.ac.jp 西松 毅