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

From: NISHIMATSU Takeshi <t-nissie@...>
Date: 2003-05-31 06:24:10 UTC
List: ruby-list #37739
西松です.

[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
 西松 毅

In This Thread