[ruby-list:37740] Re: missing/erf.c

From: matz@... (Yukihiro Matsumoto)
Date: 2003-05-31 23:54:52 UTC
List: ruby-list #37740
まつもと ゆきひろです

In message "[ruby-list:37739] Re: missing/erf.c"
    on 03/05/31, NISHIMATSU Takeshi <t-nissie@imr.tohoku.ac.jp> writes:

|[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 はセットしなくてかまわないのですよね.
|と思います.

「きりがないから」というのがその理由です。で、一応POSIXをひ
とつの目安にしてます。が、C99に入ってるなら問題ないでしょう。

|まずその行は実行されないハズで, 実行されたとしても最小
|の桁が浮動小数点数演算のため振動した結果だと思うので,
|[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
|      のような近似曲線を使ったものにする.(これをその
|      まま使うのはライセンス的にまずいのですよね.)
|という策があります.

どれが良いのかは、私がerfを使わないので分かりません。

少なくとも[3]のものにライセンス的な問題はありません、BSDライ
センスなら。FreeBSDの一部なのできっとそうでしょう。

In This Thread