There's a bit of a mess with the gamma functions. There are _r versions of these functions that pass through the sign return pointer instead of applying it locally as they should. That reduces the set of gamma functions as follows: Reentrant functions: double float __ieee754_lgamma_r __ieee754_lgammaf_r __ieee754_gamma __ieee754_gammaf lgamma_r lgammaf_r tgamma tgammaf gamma/gammaf should be alternate names for tgamma/tgammaf, and would thus be re-entrant. Non-reentrant functions: __ieee754_lgamma __ieee754_lgammaf lgamma lgammaf -- -keith