TSIL_COMPLEX TSIL_Tx0y (TSIL_REAL X, TSIL_REAL Y, TSIL_COMPLEX S, TSIL_REAL QQ) { TSIL_COMPLEX sqDeltaSXY, tp, tm, log1mtp, log1mtm; TSIL_REAL lnbarX, lnbarY; if (X < TSIL_TOL) { TSIL_Warn("TSIL_Tx0y", "T(x,0,y) is undefined for x = 0."); return TSIL_Infinity; } if (TSIL_CABS(S) < TSIL_TOL) return -TSIL_I2p(X, 0.0L, Y, QQ); if (Y < TSIL_TOL) return TSIL_Tx00(X, S, QQ); S = TSIL_AddIeps(S); sqDeltaSXY = TSIL_CSQRT(X*X + Y*Y + S*S - 2.0L*X*Y - 2.0L*X*S - 2.0L*Y*S); lnbarX = TSIL_LOG(X/QQ); lnbarY = TSIL_LOG(Y/QQ); tp = (Y - X + S + sqDeltaSXY)/(2.0L * Y); tm = (Y - X + S - sqDeltaSXY)/(2.0L * Y); log1mtp = TSIL_CLOG(1.0L - tp); log1mtm = TSIL_CLOG(1.0L - tm); return (-TSIL_Dilog (tp) - TSIL_Dilog (tm) + (1.0L - Y/S)*log1mtp*log1mtm + sqDeltaSXY * (log1mtp - log1mtm) / (2.0L * S) + lnbarX*lnbarY - 0.5L*(lnbarY + 1.0L)*(lnbarY + 1.0L) + (3.0L*S + Y - X) *(lnbarY-lnbarX)/(2.0L * S)); }
TSIL_COMPLEX TSIL_TyyxAtx (TSIL_REAL X, TSIL_REAL Y, TSIL_REAL QQ) { TSIL_REAL lnbarX, lnbarY; if (X < TSIL_TOL) return -TSIL_I2p(Y,Y,0,QQ); if (Y < TSIL_TOL) { TSIL_Warn("TSIL_TyyxAtx", "T(y,y,x) with s = 0 is undefined for x = 0."); return TSIL_Infinity; } lnbarX = TSIL_LOG(X/QQ); lnbarY = TSIL_LOG(Y/QQ); return -0.5L + (1.0L - Y/X)*(TSIL_Dilog(1.0 -X/Y) -Zeta2) + lnbarX - 2.0L*lnbarY + 0.5L*lnbarY*lnbarY; }
TSIL_COMPLEX TSIL_TxyyAtx (TSIL_REAL X, TSIL_REAL Y, TSIL_REAL QQ) { TSIL_REAL lnbarX, lnbarY; if (X < TSIL_TOL) { TSIL_Warn("TSIL_TxyyAtx", "T(x,y,y) is undefined for s = x = 0."); return TSIL_Infinity; } if (Y < TSIL_TOL) return TSIL_Tx00(X,X,QQ); lnbarX = TSIL_LOG(X/QQ); lnbarY = TSIL_LOG(Y/QQ); return (-0.5L + (Y/X-1.0L)*(TSIL_Dilog(1.0 -X/Y) -Zeta2) + lnbarX*(lnbarY - 1.0L) - 0.5L*lnbarY*lnbarY); }
TSIL_COMPLEX TSIL_Tx00 (TSIL_REAL X, TSIL_COMPLEX S, TSIL_REAL QQ) { TSIL_REAL lnbarX; if (X < TSIL_TOL) { TSIL_Warn("TSIL_Tx00", "T(x,0,0) is undefined for x = 0."); return TSIL_Infinity; } if (TSIL_CABS(S) < TSIL_TOL) return -TSIL_I2p(X, 0.0L, 0.0L, QQ); lnbarX = TSIL_LOG(X/QQ); if (TSIL_CABS (1.0L - S/X) < 10.0L*TSIL_TOL) return 2.0L*Zeta2 -0.5L -lnbarX + 0.5L*lnbarX*lnbarX; S = TSIL_AddIeps(S); return Zeta2 - 0.5L + (1.0L - X/S)*TSIL_CLOG(1.0L -S/X) -lnbarX + 0.5L*lnbarX*lnbarX + TSIL_Dilog (S/X); }
TSIL_COMPLEX TSIL_Beps0x (TSIL_REAL x, TSIL_COMPLEX s, TSIL_REAL qq) { TSIL_COMPLEX sqrtx, lnbarx, log1msox, lnbarms; if (TSIL_CABS(s) < TSIL_TOL) return TSIL_BepsAtZero (0, x, qq); if (x < TSIL_TOL) { lnbarms = TSIL_CLOG(-TSIL_AddIeps(s)/qq); return 4.0L - Zeta2/2.0L - 2.0L*lnbarms + lnbarms*lnbarms/2.0L; } sqrtx = TSIL_CSQRT(x); lnbarx = TSIL_CLOG(x/qq); if (TSIL_CABS(1 - s/x) < 10.0*TSIL_TOL) return 4.0L + Zeta2/2.0L + lnbarx*(lnbarx - 4.0L)/2.0L; log1msox = TSIL_CLOG(1.0L - TSIL_AddIeps(s)/x); return 4.0L + Zeta2/2.0L - 2.0L*lnbarx + lnbarx*lnbarx/2.0L + (1.0L - x/s)*(lnbarx*log1msox - 2.0L*log1msox + log1msox*log1msox/2.0L -TSIL_Dilog(s/(s-x))); }
TSIL_COMPLEX TSIL_Beps (TSIL_REAL X, TSIL_REAL Y, TSIL_COMPLEX S, TSIL_REAL QQ) { TSIL_COMPLEX sqrtdeltasxy, t1, t2, t3, t4, logt1, logt2, logt3, logt4; TSIL_COMPLEX log1mt1, log1mt2, sqrtx, sqrty, lnbarx, lnbary; TSIL_REAL temp; if (X < Y) {temp = X; X = Y; Y = temp;} if (TSIL_CABS(S) < TSIL_TOL) return TSIL_BepsAtZero (X, Y, QQ); if (Y < TSIL_TOL) return TSIL_Beps0x (X, S, QQ); sqrtx = TSIL_CSQRT(X); sqrty = TSIL_CSQRT(Y); lnbarx = TSIL_CLOG(X/QQ); lnbary = TSIL_CLOG(Y/QQ); if (TSIL_CABS(S - (sqrtx + sqrty)*(sqrtx + sqrty))/(X+Y) < 10.0*TSIL_TOL) return 4.0L + Zeta2/2.0L + (sqrtx*lnbarx*(lnbarx - 4.0L) + sqrty*lnbary*(lnbary - 4.0L))/(2.0L*(sqrtx + sqrty)); if (TSIL_CABS(S - (sqrtx - sqrty)*(sqrtx - sqrty))/(X+Y) < 10.0*TSIL_TOL) return 4.0L + Zeta2/2.0L + (sqrtx*lnbarx*(lnbarx - 4.0L) - sqrty*lnbary*(lnbary - 4.0L))/(2.0L*(sqrtx - sqrty)); S = TSIL_AddIeps(S); sqrtdeltasxy = TSIL_CSQRT(TSIL_Delta(S,X,Y)); t1 = ( S - X + Y + sqrtdeltasxy)/(2.0L*sqrtdeltasxy); t2 = (-S - X + Y + sqrtdeltasxy)/(2.0L*sqrtdeltasxy); t3 = (-S + X + Y + sqrtdeltasxy)/(2.0L*X); t4 = (-S + X + Y - sqrtdeltasxy)/(2.0L*X); /* printf("\ns = ");TSIL_cprintf(S);printf("\n"); */ /* printf("x = %Lf\n", X); */ /* printf("y = %Lf\n", Y); */ /* printf("sqrtdeltasxy = ");TSIL_cprintf(sqrtdeltasxy);printf("\n"); */ /* printf("\nt1 = ");TSIL_cprintf(t1);printf("\n"); */ /* printf("t2 = ");TSIL_cprintf(t2);printf("\n"); */ /* printf("t3 = ");TSIL_cprintf(t3);printf("\n"); */ /* printf("t4 = ");TSIL_cprintf(t4);printf("\n"); */ logt1 = TSIL_CLOG(t1); logt2 = TSIL_CLOG(t2); logt3 = TSIL_CLOG(t3); logt4 = TSIL_CLOG(t4); /* printf("\nlogt1 = ");TSIL_cprintf(logt1);printf("\n"); */ /* printf("logt2 = ");TSIL_cprintf(logt2);printf("\n"); */ /* printf("logt3 = ");TSIL_cprintf(logt3);printf("\n"); */ /* printf("logt4 = ");TSIL_cprintf(logt4);printf("\n"); */ log1mt1 = TSIL_CLOG(1.0L - t1); log1mt2 = TSIL_CLOG(1.0L - t2); return 4.0L + Zeta2/2.0L + (lnbarx*lnbarx + lnbary*lnbary)/4.0L - lnbarx - lnbary + (sqrtdeltasxy*(TSIL_Dilog(t2) - TSIL_Dilog(t1) + (logt3 - logt4)*(1.0L - lnbarx/4.0L - lnbary/4.0L) + (log1mt1 + log1mt2)*(logt2 - logt1)/2.0L) + (X - Y)*(lnbary - lnbarx)*(1.0L - lnbarx/4.0L - lnbary/4.0L))/S; }