default(realprecision,38);
default(parisize,"15M")
testF(v, D0, D) =
{
  for(i=1,#v,
    my ([n,d,z] = v[i]);
    localbitprec(D);
    a = hypergeom(n,d,z);
    localbitprec(D + 64);
    b = hypergeom(n,d,z);
    e = exponent(a/b - 1);
    if (e > -D0, print(i,": ", e));
  );
}
{ localbitprec(320);
v11=[
[0.1,0.2,0.5], [-0.1,0.2,0.5], [0.1,0.2,-0.5+I], [1+I,1+I,1-I],
/*5*/
[10^(-8),10^(-8),10^(-10)], [10^(-8),10^(-12),-10^(-10)+10^(-12)*I], [1,1,10+10^(-9)*I], [1,3,10], [500,511,10],
/*10*/
[8.1,10.1,100], [1,2,600], [100,1.5,2.5], [-60,1,10], [60,1,10],
/*15*/
[60,1,-10], [-60,1,-10], [1000,1,10^(-3)], [10^(-3),1,700], [500,1,-5],
/*20*/
[-500,1,5], [20,-10+10^(-9),-2.5], [20,10-10^(-9),2.5], [-20,-10+10^(-12),2.5], [50,10,200*I],
/*25*/
[-5,(-5+10^(-9))*(1+I),-1], [4,80,200], [-4,500,300], [5,0.1,-2+300*I], [-5,0.1,2+300*I],
/*30*/
[2+8*I,-150+I,150], [5,2,100-1000*I], [-5,2,-100+1000*I], [-5,-2-I,1+(2-10^(-10))*I], [1,10^(-12),1],
/*35*/
[10,10^(-12),10], [1,-1+10^(-12)*I,1], [1000,1,-1000], [-1000,1,1000], [-10+500*I,5*I,10],
/*40*/
[20,10+1000*I,-5]];
}
print("1F1");
testF(v11, 128, 128)
testF(v11, 256, 256)

hypergeom([],[],-3.5)
hypergeom(1.5,[],0.5)
hypergeom(-0.5,[],3)
hypergeom([],2.5,15)
hypergeom([],2.5,-15)
hypergeom([],2.5,15*I)
v20=[[[1,1],[],-3], [[1,1],[],-3+10^-20*I], [[1,3/2],[],-3], [[1,-1],[],10^-4]];
print("2F0");
testF(v20, 128, 128)

{localbitprec(320);
v21=[
[[0.1,0.2],0.3,0.5],
[[-0.1,0.2],0.3,0.5],
[[0.1,0.2],-0.3,-0.5+0.5*I],
[[10^(-8),10^(-8)],10^(-8),10^(-6)],
[[10^(-8),-10^(-6)],10^(-12),-10^(-10)+10^(-12)*I],
[[1,10],1,0.5+10^(-9)*I],
[[1,-1+10^(-12)*I],1,-0.8],
[[2+8*I,3-5*I],sqrt(2)-Pi*I,0.75],
[[100,200],350,I],
/*10*/
[[2+10^(-9),3],5,-0.75],
[[-2,-3],-5+10^(-9),0.5],
[[-1,-1.5],-2-10^(-15),0.5],
[[500,-500],500,0.75],
[[500,500],500,-0.6],
[[-1000,-2000],-4000.1,-0.5],
[[-100,-200],-300+10^(-9),0.5*sqrt(2)],
[[300,10],5,0.5],
[[5,-300],10,0.5],
[[10,5],-300.5,0.5],
/*20*/
[[2+200*I,5],10,0.6],
[[2+200*I,5-100*I],10+500*I,0.8],
[[2,5],10-500*I,-0.8],
[[2.25,3.75],-0.5,-1],
[[1,2],4+3*I,0.6-0.8*I],
[[1,0.9],2,exp(I*Pi/3)],
[[1,2.5],5,exp(I*Pi/3)],
[[-1,0.9],2,exp(-I*Pi/3)],
[[4,1.1],2,0.5+(0.5*sqrt(3)-0.01)*I],
[[5,2.2],-2.5,0.49+0.5*sqrt(3)*I],
/*30*/
[[2/3,1],4/3,exp(I*Pi/3)],
[[1/2,5/2],5,3/4],
[[1/2,1/5],3,3/5+9/10*I],
[[1/2,1/5],3,3/5+I],
[[-2,-4/5],-9/5,3/5],
[[1,2],4,1],
[[-1/2,-3/2],4,99/100],
[[10,-1],2,1+I],
[[1,-10],2,1+2*I],
[[-2,1/2],1,100],
/*40*/
[[-2,1/2],1,-100],
[[3/2,3/2],1,0.97],
[[3/2,3/2],1,1.03],
[[3/2,-1/2],4/3,exp(I*Pi/3)],
[[1/2,1/3],11/6, 101/100 + I/2^30]
];
}
print("2F1");
testF(v21, 125, 128)
testF(v21, 250, 256)

v31=[[[1,1,2],[3],-3], [[1,1,2],[3],-3+10^-20*I], [[1,3/2,2],[3],-3], [[1,-1,2],[3],10^-4]];
print("3F1");
testF(v31, 128, 128)

v32=[[[1,1,2],[3,I],-3], [[1,1,2],[3,I],-3+10^-20*I], [[1,3/2,2],[3,I],-3], [[1,-1,2],[3,I],10^-4]];
print("3F2");
testF(v32, 128, 128)

localprec(115); hyperu(5/6,5/3,230) \\ cancellation in F11

hypergeom([1,1],2,-1.000000000000001)
f(a,c)=exponent( hypergeom([a,2],c,(c-2)/(a-1)) - (a-1)*(c-1)/(a+1-c) );
for(j=28,32,print(j/5,": ",f(3,j/5)));
f(4,1/5)
hypergeom([3,2],3.4,0.7)
hypergeom([1.5,2.1],[-3.5,1.1],1)
a=sqrt(Pi)*(1-erfc(sqrt(2)))/sqrt(2)+exp(-2)/2-1/2;
b=hypergeom([1/2,1],[3/2,2],-2); exponent(a-b)
a=5/3;
T1=hypergeom([1,1,1],[a,a],1);
hypergeom([1,1,1],[a,a],-1)
T2=hypergeom([2,1,1],[a+1,a+1],1)
T3=hypergeom([2*a-1,1,1],[a+1,a+1],1)
b=T1+(a-1)^2/(a^2*(2*a-3))*(T2-2*(a-1)*T3)-gamma(a)^2/((2*a-3)*gamma(2*a-2));
exponent(b) <= -122
airy(0)
airy(I)
airy(1)
airy(100)[1]
airy(-100)[2]
hypergeom([1,1,1,1/2],[3/4,3/2,3/2],1)
hypergeom([1,2,1,1,1,1/2],[1,2,3/4,3/2,3/2],1)
F(k,a)=Pi^(k-1/2)*gamma(a)/(2^(3*k-1)*gamma(a+1/2))*hypergeom(concat(vector(k,j,1),1/2),concat(a+1/2,vector(k-1,j,3/2)),1);
L=lfuninit(lfunetaquo([4,2;8,2]),[1,6,1],2);
lindep([lfun(L,3),F(3,5/4),F(3,3/4),F(3,1/4)])

hypergeom([1/6,2/3],1/2,2)

hypergeom([],[],x)
hypergeom([2],[],x)
hypergeom([2],[],1/2+x)
hypergeom([2],[],1/2+x^2)
hypergeom([2,1],[3],x)
hypergeom([2,1],[3],1/2+x)
hypergeom([2,1],[3],1/2+x^2)

hypergeom([1/12,1/12],2/3,3)
hypergeom([1/12,5/12],1/2,1323/1331)
hypergeom([1/12,7/12],2/3,125/121)

\\ #2382
f(a, b, c, r, t) =
{
  A = round(10*a)/10;
  B = round(10*b)/10;
  C = round(10*c)/10;
  R = round(10*r)/10;
  T = round(10*t)/10;
  z = 1 - r*exp(t*I*Pi);
  Z = 1 - R*exp(T*I*Pi);
  exponent(hypergeom([a,b],[c],z) - hypergeom([A,B],[C],Z));
}
f(1.1, 1.3, 1.4, 0.8, -0.3)
f(1.1, 0.3, 3.4, 0.1, -0.4)
f(1.1, 0.3, 4.4, -0.3, 0.8)
f(1.2, 0.3, 3.5, 0.2, -0.4)
f(1.2, 0.3, 4.5, -0.3, 0.8)
f(1.2, 1.2, 1.4, -0.3, 0.7)

hypergeom([0,0],[1],2) \\ #2425

\\ Errors, keep at end
airy(O(x))
hypergeom("","",O(x))
hypergeom([2,1],0,1)
hypergeom([2,1],[2,-1],1)
hypergeom([2,3],1,1)
hypergeom([1/2,1/2,1/2],[1/3,1/3], 1 - 10^-6)
hypergeom([1,2,3,4],[],1/2)
