マイナス×マイナス

メンヘラ人工知能エンジニアのブログ/ 博士(工学)

math.h

 研究室で log とか sin とか実装しようとしているひとがいたりする.普段,何気なく使っている math.h .実体はまったく知らない.そこで, glibcとかはどうなってるのか,気になったので,Kodersからたどって調べてみた.

Koders-GNU C Libraryのw_log.c

 __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 とか返してるし).