3

この 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の変数の値を初期化していることがわかりました。しかし、 が何であるかはわかりません。xsmldxrelNOMORE_FOR_THREADS

それが定義されている場所を見つけることができなかったので、いつ#ifdef句に入るか、それ以外の場合は句に入っ#elseてIEEE標準に従って変数を定義するかについて混乱しています。

誰かが定義されているものNOMORE_FOR_THREADSや定義されている場所に光を当てることができれば、それは本当に役に立ちます.

助けてくれてありがとう。

4

1 に答える 1