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_B00 (TSIL_COMPLEX S, TSIL_REAL QQ) { if (TSIL_CABS (S) < TSIL_TOL) { TSIL_Warn("TSIL_B00", "B(0,0) is undefined when s=0."); return TSIL_Infinity; } S = TSIL_AddIeps(S); return (2.0L - TSIL_CLOG(-S/QQ)); }
TSIL_COMPLEX TSIL_B0x (TSIL_REAL X, TSIL_COMPLEX S, TSIL_REAL QQ) { if (TSIL_FABS (X) < TSIL_TOL) return TSIL_B00(S,QQ); if (TSIL_CABS (S) < TSIL_TOL) return (1.0L - TSIL_LOG (X/QQ)); if (TSIL_CABS (1.0L - S/X) < 10.0L*TSIL_TOL) return 2.0L - TSIL_LOG(X/QQ); S = TSIL_AddIeps(S); return 2.0L + ((X - S)*TSIL_CLOG((X - S)/QQ) - X*TSIL_LOG(X/QQ))/S; }
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_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_B (TSIL_REAL X, TSIL_REAL Y, TSIL_COMPLEX S, TSIL_REAL QQ) { TSIL_REAL temp; TSIL_COMPLEX sqDeltaSXY, lnbarX, lnbarY; if (TSIL_FABS (X) < TSIL_FABS (Y)) {temp = Y; Y = X; X = temp;} if (TSIL_FABS (X) < TSIL_TOL) return TSIL_B00(S,QQ); if (TSIL_FABS (Y) < TSIL_TOL) return TSIL_B0x(X,S,QQ); if (TSIL_CABS (S) < TSIL_TOL) { if (TSIL_FABS (1.0L - Y/X) > 0.0L) return (1.0L + (Y*TSIL_LOG(Y/QQ) - X*TSIL_LOG(X/QQ))/(X-Y)); else return (-TSIL_LOG (X/QQ)); } S = TSIL_AddIeps(S); sqDeltaSXY = TSIL_CSQRT(TSIL_Delta(S, X, Y)); lnbarX = TSIL_LOG (X/QQ); lnbarY = TSIL_LOG (Y/QQ); /* Following avoids roundoff error for very negative s. */ if ((TSIL_CREAL(S) < -10.0L*(X+Y)) && (TSIL_CIMAG(S) < TSIL_TOL)) { return (2.0L - 0.5L * (lnbarX + lnbarY) + (sqDeltaSXY * TSIL_CLOG(0.5L*(X + Y - S + sqDeltaSXY)/Y) + 0.5L * (Y - X - sqDeltaSXY) * (lnbarX - lnbarY))/S); } return (2.0L - 0.5L * (lnbarX + lnbarY) + (-sqDeltaSXY * TSIL_CLOG(0.5L*(X + Y - S - sqDeltaSXY)/X) + 0.5L * (Y - X - sqDeltaSXY) * (lnbarX - lnbarY))/S); }
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; }