next up previous
: 「多価関数は関数ではない」余話 : 単行本サポートページ : 76ページ「等角写像」の定義について

85ページの補遺

85ページの glibc のことについてのページで、 ソースコードからの検索の仕方を知りたい方のために、ここで その詳細を述べましょう。 (長すぎるのと、本題から離れるので、本では入れませんでした。) 以下、linux などのウニッペケ系のOS で作業することを想定して書きます。 windows なら cygwin をインストールしてもよいでしょう。

  1. glibc をダウンロード。 近くの Ring server などから glibc のディレクトリ、たとえば
      http://www.ring.gr.jp/pub/GNU/glibc/
    
    にブラウザでたどり着いて、glibc-2.2.5.tar.gz を手にいれる。 場合によってはもっと新しい版があるかも知れない。

  2. 展開。
      tar -zxvf glibc-2.2.5.tar.gz
    

  3. 展開したファイルから、"sin(" または "sin (" という文字列の 入っているファイルを見つける。 これには find と grep を組み合わせるとよい。 たとえば、次のような内容の a.sh をつくって
    #ここから
    #!/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
    

    とやれば、ファイル名だけを取り出すこともできる。

  4. 関係ないファイルを選別。
    	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/ 以下のファイルしか残らないはず。

  5. さらに選別。 ldbl-128 や ldbl-96 は long double version であって、 dbl-64 とほぼ同じことを 精度を変えて行っている。
    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
    
  6. 中のコメントや、プログラムを読んでみると、 s_sin.cdosincos.csincos32.c を 部品として使っていて、 大ボスであることが分かる。

    ieee754 はもともと浮動小数点での計算の仕様を定めた規約であるようです。 (ちなみに、浮動小数点での計算自体は倍精度計算などの方が有利な点が多いので 余り使われなくなる傾向があるようです。とは言え倍精度計算も計算の仕様自体は 浮動小数点での計算に準じるはずです)



平成16年11月14日