sinのソースコード

を探していました.まずはRINGのサーバからGNUのツールでglibcを探して適当なバージョンのを落とします.
http://www.dnsbalance.ring.gr.jp/archives/GNU/glibc/
次にそれを展開して,mathの中のCファイルを見たのですが見つからず,頭にきてsin.cで検索したところファイルが見つかるので,いろいろ見てみるとatan2を呼び出している模様.
同じようにatan2.cで見ると,どうやらテーブルを作って場合分けをしているようですね.
あのテーブルは誰がどのように作ったのでしょう?
というかそうなるとπの正確さに行き着くのか・・・ となると割り算って事かな?むぅ〜
仕事の合間に適当にやったので正確かどうかわかりません.それよりFireFoxが重くて日記の入力がしにくくて困ります.
一応glibcを見る前にJAVAのソースから当たったのですが,見つけられなかったので,glibcを使いました.
どっかで誰かが書いているだろうし,数値演算ライブラリの本とか(ニューメリカルレシピ・イン・シー 日本語版―C言語による数値計算のレシピ)に詳しく書いてあるはずなので興味があればきちんと調べてください.標準で用意されているライブラリの中身を調べなきゃならない状況というのもあるでしょうし.
コツというかglibcは大体使いたい関数名のCのファイルがあるので検索していけば良いということでしょう.

追記:というか思ったことなのですが,洗練された道具ってほんとすばらしいですよね.棍棒と日本刀くらい違うというのでしょうか?アルゴリズムとか手法というのは勉強のしがいがありますね〜

追記2:追記を書いていたら消えた・・・
ヒットが増えましたね.時事ネタでもないのに何でだ?
atan2ですが内部で使っている関数が3つありまして,
glibc-1.09.1\sysdeps\ieee754\support.c
にコメントがあったのでそのまま書き出してみましょう.

* (a) copysign(x,y)
* returns x with the sign of y.
* (b) scalb(x,N)
* returns x * (2**N), for integer values N.
* (c) logb(x)
* returns the unbiased exponent of x, a signed integer in
* double precision, except that logb(0) is -INF, logb(INF)
* is +INF, and logb(NAN) is that NAN.

copysignは中でfabsを読んでいたので,符号に関する処理で確定でしょう.
scalbはよくわかりません.x掛ける2のN乗ってことか?ならpow関数と何が違うんでしょう?ん〜 教えてえろい人.
logbはlogかと思っていたのですが違うようですね.コードを見てもなんか良くわかりませんがなんか場合分けしていろんな値を返している模様.でもこれって0除算にならないのかとっても不思議ですね.むぅ〜