math.h
研究室で log とか sin とか実装しようとしているひとがいたりする.普段,何気なく使っている math.h .実体はまったく知らない.そこで, glibcとかはどうなってるのか,気になったので,Kodersからたどって調べてみた.
__kernel_standard (x, x, 49); /* log2 (x < 0) */
とか,
__ieee754_log (x)
と,なっている.で,肝心のそれらは,
math_private.hで
extern double __ieee754_log ((double)); extern double __kernel_standard ((double,double,int));
となってて,結局よく分からん.なにやら,FdLibMなるものを使っているらしい.とりあえず,fdlibm でググってみると,__ieee754_log(x)の実装が見つかった.なにやら,マクローリン展開したり,Reme Algorithm(Remez Algorithmのtypo?)とかいうのを使っているらしい….わからん….
__kernel_standardのほうは,例外処理のようだ(とりあえず zero とか HUGE とか ERANGE とか返してるし).