Switch to unified view

a/SpezFunkt2.mod.m2pp b/SpezFunkt2.mod.m2pp
...
...
45
  (* 14.02.18, MRi: Erstellen der ersten Version von CdGamma                *)
45
  (* 14.02.18, MRi: Erstellen der ersten Version von CdGamma                *)
46
  (* 23.05.18, MRi: Erweiterung von CdGamma und Aufnahme in SpezFunkt2      *)
46
  (* 23.05.18, MRi: Erweiterung von CdGamma und Aufnahme in SpezFunkt2      *)
47
  (* 19.12.18, MRi: Ersetzen von GammaIn durch Neuuebersetzng von AS239     *)
47
  (* 19.12.18, MRi: Ersetzen von GammaIn durch Neuuebersetzng von AS239     *)
48
  (*                da die alte Routine (basierend auf AS32) fuer grosse X  *)
48
  (*                da die alte Routine (basierend auf AS32) fuer grosse X  *)
49
  (*                teilweise falsche Ergebnisse erzielt hatte.             *)
49
  (*                teilweise falsche Ergebnisse erzielt hatte.             *)
50
  (* 19.12.18, MRi: Erstellen der ersten Version von AlNorm                 *)
50
  (*------------------------------------------------------------------------*)
51
  (*------------------------------------------------------------------------*)
51
  (* Testroutinen vorhanden, IBeta gegen unabhaengigen Fortran-Code ge-     *)
52
  (* Testroutinen vorhanden, IBeta gegen unabhaengigen Fortran-Code ge-     *)
52
  (* testet, IGamma & JGamma nur gegen Pascal-Aequivalent                   *)
53
  (* testet, IGamma & JGamma nur gegen Pascal-Aequivalent                   *)
53
  (* Testcode (parially against Fortran versions) in TstSpzFun2             *)
54
  (* Testcode (parially against Fortran versions) in TstSpzFun2             *)
54
  (* dGamit wird in BoysInt2Lib intensiv genutzt                            *)
55
  (* dGamit wird in BoysInt2Lib intensiv genutzt                            *)
...
...
60
  (*------------------------------------------------------------------------*)
61
  (*------------------------------------------------------------------------*)
61
  (* Implementation : Michael Riedl                                         *)
62
  (* Implementation : Michael Riedl                                         *)
62
  (* Licence        : GNU Lesser General Public License (LGPL)              *)
63
  (* Licence        : GNU Lesser General Public License (LGPL)              *)
63
  (*------------------------------------------------------------------------*)
64
  (*------------------------------------------------------------------------*)
64
65
65
  (* $Id: SpezFunkt2.mod.m2pp,v 1.4 2018/02/17 09:17:19 mriedl Exp $ *)
66
  (* $Id: SpezFunkt2.mod.m2pp,v 1.6 2019/02/01 22:24:03 mriedl Exp mriedl $ *)
66
67
67
FROM Errors          IMPORT FatalError,ErrOut,Fehler,Fehlerflag;
68
FROM Errors          IMPORT FatalError,ErrOut,Fehler,Fehlerflag;
68
                     IMPORT LowLong;
69
                     IMPORT LowLong;
69
FROM TestReal        IMPORT Real8NaNquite,IsNearInteger;
70
FROM TestReal        IMPORT Real8NaNquite,IsNearInteger;
70
                     IMPORT TestReal;
71
                     IMPORT TestReal;
...
...
104
105
105
          (* machine dependent constants *)
106
          (* machine dependent constants *)
106
107
107
          CONST ltone = 7.0; utzero = 18.66; con = 1.28;
108
          CONST ltone = 7.0; utzero = 18.66; con = 1.28;
108
109
109
                p   =   0.398942280444; q   =   0.39990348504;
110
                p  =   0.398942280444; q  =   0.399903485040;
110
                r   =   0.398942280385;
111
                r  =   0.398942280385;
111
                a1  =   5.75885480458;  a2  =   2.62433121679;
112
                a1 =   5.758854804580; a2 =   2.624331216790;
112
                a3  =   5.92885724438;
113
                a3 =   5.928857244380;
113
                b1  = -29.8213557807;   b2  =  48.6959930692;
114
                b1 = -29.821355780700; b2 =  48.695993069200;
115
114
                c1  =  -3.8052E-08;     c2  =   3.98064794E-04;
116
                c1 =  -3.80520000E-08; c2 =   3.98064794E-04;
115
                c3  =  -0.151679116635; c4  =   4.8385912808;
117
                c3 =  -0.151679116635; c4 =   4.838591280800;
116
                c5  =   0.742380924027; c6  =   3.99019417011;
118
                c5 =   0.742380924027; c6 =   3.990194170110;
119
117
                d1  =   1.00000615302;  d2  =   1.98615381364;
120
                d1 =   1.000006153020; d2 =   1.986153813640;
118
                d3  =   5.29330324926;  d4  = -15.1508972451;
121
                d3 =   5.293303249260; d4 = -15.150897245100;
119
                d5  =  30.789933034;
122
                d5 =  30.789933034000;
120
123
121
          VAR   z,y,alnorm : LONGREAL;
124
          VAR   z,y,alnorm : LONGREAL;
122
                up         : BOOLEAN;
125
                up         : BOOLEAN;
123
BEGIN
126
BEGIN
124
      up := Upper;
127
      up := Upper;
...
...
149
PROCEDURE GammaIn(    X      : LONGREAL;
152
PROCEDURE GammaIn(    X      : LONGREAL;
150
                      P      : LONGREAL;
153
                      P      : LONGREAL;
151
                  VAR Ifault : INTEGER) : LONGREAL;
154
                  VAR Ifault : INTEGER) : LONGREAL;
152
155
153
          (*----------------------------------------------------------------*)
156
          (*----------------------------------------------------------------*)
154
          (* Auxiliary functions required: ALOGAM := logarithm of the gamma *)
157
          (* This is a M2 verions of AS239. Auxiliary functions required    *)
155
          (* function, and AlNorm := algorithm AS66                         *)
158
          (* are the logarithm of the gamma function and AlNorm (AS66).     *)
156
          (*----------------------------------------------------------------*)
159
          (*----------------------------------------------------------------*)
157
160
158
          CONST  Tol    = 1.0E-14; 
161
          CONST  Tol    = 1.0E-14; 
159
                 Xbig   = 1.0E+08; Oflow   = MAX(REAL); 
162
                 Xbig   = 1.0E+08; Oflow   = LFLOAT(MAX(REAL)); 
160
                 Elimit =   -88.0; Plimit = 1000.0;
163
                 Elimit =   -88.0; Plimit = 1000.0;
161
164
162
          VAR    pn1,pn2,pn3,pn4,pn5,pn6  : LONGREAL;
165
          VAR    pn1,pn2,pn3,pn4,pn5,pn6  : LONGREAL;
163
                 a,b,c,an,rn,arg,gamma    : LONGREAL;
166
                 a,b,c,an,rn,arg,gamma    : LONGREAL;
164
BEGIN
167
BEGIN
...
...
171
      IF (X = 0.0) THEN
174
      IF (X = 0.0) THEN
172
        RETURN 0.0;
175
        RETURN 0.0;
173
      END; (* IF *)
176
      END; (* IF *)
174
      (* Use a normal approximation if P > Plimit *)
177
      (* Use a normal approximation if P > Plimit *)
175
      IF (P > Plimit) THEN
178
      IF (P > Plimit) THEN
176
        pn1 := 3.0*sqrt(P)*((X/P)**(1.0/3.0)+1.0/(9.0*P)-1.0);
179
        pn1 := 3.0*sqrt(P)*(power((X/P),(1.0/3.0)) + 1.0/(9.0*P) - 1.0);
177
        RETURN AlNorm(pn1,FALSE);
180
        RETURN AlNorm(pn1,FALSE);
178
      END; (* IF *)
181
      END; (* IF *)
179
      (* If X is extremely large compared to P then set gamma = 1 *)
182
      (* If X is extremely large compared to P then set gamma = 1 *)
180
      IF (X > Xbig) THEN
183
      IF (X > Xbig) THEN
181
        RETURN 1.0;
184
        RETURN 1.0;