この C ソース ファイルgamma()
を指す関数の R ソース コードを調べていました。
コードのスニペットは次のとおりです。
#ifdef NOMORE_FOR_THREADS
static int ngam = 0;
static double xmin = 0, xmax = 0., xsml = 0., dxrel = 0.;
/* Initialize machine dependent constants, the first time gamma() is called.
FIXME for threads ! */
if (ngam == 0) {
ngam = chebyshev_init(gamcs, 42, DBL_EPSILON/20);/*was .1*d1mach(3)*/
gammalims(&xmin, &xmax);/*-> ./gammalims.c */
xsml = exp(fmax2(log(DBL_MIN), -log(DBL_MAX)) + 0.01);
/* = exp(.01)*DBL_MIN = 2.247e-308 for IEEE */
dxrel = sqrt(DBL_EPSILON);/*was sqrt(d1mach(4)) */
}
#else
/* For IEEE double precision DBL_EPSILON = 2^-52 = 2.220446049250313e-16 :
* (xmin, xmax) are non-trivial, see ./gammalims.c
* xsml = exp(.01)*DBL_MIN
* dxrel = sqrt(DBL_EPSILON) = 2 ^ -26
*/
# define ngam 22
# define xmin -170.5674972726612
# define xmax 171.61447887182298
# define xsml 2.2474362225598545e-308
# define dxrel 1.490116119384765696e-8
#endif
これで、このコードが、などngam
の変数の値を初期化していることがわかりました。しかし、 が何であるかはわかりません。xsml
dxrel
NOMORE_FOR_THREADS
それが定義されている場所を見つけることができなかったので、いつ#ifdef
句に入るか、それ以外の場合は句に入っ#else
てIEEE標準に従って変数を定義するかについて混乱しています。
誰かが定義されているものNOMORE_FOR_THREADS
や定義されている場所に光を当てることができれば、それは本当に役に立ちます.
助けてくれてありがとう。