85ページの glibc のことについてのページで、 ソースコードからの検索の仕方を知りたい方のために、ここで その詳細を述べましょう。 (長すぎるのと、本題から離れるので、本では入れませんでした。) 以下、linux などのウニッペケ系のOS で作業することを想定して書きます。 windows なら cygwin をインストールしてもよいでしょう。
http://www.ring.gr.jp/pub/GNU/glibc/にブラウザでたどり着いて、glibc-2.2.5.tar.gz を手にいれる。 場合によってはもっと新しい版があるかも知れない。
tar -zxvf glibc-2.2.5.tar.gz
#ここから #!/bin/sh file=$1 if [ ! -d $file ]; then grep 'sin *(' $file >>scanned.dat if [ $? = 0 ] ;then echo $file >>scanned.dat fi fi #ここまでつぎのようなコマンドを打つ。
find glibc-2.2.5 -exec sh a.sh {} \;
scanned.dat には "sin(" または "sin (" を含むファイルと、その含む行が 全て書き込まれる。 あとは、
grep "^glibc-2.2.5" scanned.dat
とやれば、ファイル名だけを取り出すこともできる。
test テストファイル manual マニュアル *.h は定義が書いてあるだけで、具体的な計算はされない。 acos は arc cos asin は arc sin cexp は complex exponential function csin は complex sine ia64 は intel 64 bit CPU 用の計算 t_* は数値の表(テーブル)この時点で、glibc-2.2.5/sysdeps/ieee754/ 以下のファイルしか残らないはず。
glibc-2.2.5/sysdeps/ieee754/flt-32/s_sincosf.c glibc-2.2.5/sysdeps/ieee754/flt-32/s_sinf.cはfloat(浮動小数点での計算)用で、これらはほかの計算を呼び出すだけの 短いプログラムである。
glibc-2.2.5/sysdeps/ieee754/dbl-64/sincos.tblこれは文字通りテーブル
glibc-2.2.5/sysdeps/ieee754/dbl-64/s_sincos.c
これも他のプログラムを呼び出す短いラッパープログラム
というわけで、以下の三つが残る。
glibc-2.2.5/sysdeps/ieee754/dbl-64/s_sin.c glibc-2.2.5/sysdeps/ieee754/dbl-64/dosincos.c glibc-2.2.5/sysdeps/ieee754/dbl-64/sincos32.c
s_sin.c
が dosincos.c
や sincos32.c
を
部品として使っていて、
大ボスであることが分かる。
ieee754 はもともと浮動小数点での計算の仕様を定めた規約であるようです。 (ちなみに、浮動小数点での計算自体は倍精度計算などの方が有利な点が多いので 余り使われなくなる傾向があるようです。とは言え倍精度計算も計算の仕様自体は 浮動小数点での計算に準じるはずです)