 #include <math.h>
 #include <stdio.h>
 #include <stdlib.h>
 #define DB double
 #define DO(x,y) for(x=0;x<y;x++)
 using namespace std;
 #include <complex>
 typedef complex<double> z_type;
 #define Re(x) x.real()
 #define Im(x) x.imag()
 #include "conto.cin"

 z_type f45E(z_type z){int n; z_type e,s;
 DB coeu[21]={1.,
 0.44858743119526122890, .19037224679780675668, 
 0.77829576536968278770e-1, 0.30935860305707997953e-1, 
 0.12022125769065893274e-1, 0.45849888965617461424e-2,
 0.17207423310577291102e-2, 0.63681090387985537364e-3,
 0.23276960030302567773e-3, 0.84145511838119915857e-4,
 0.30115646493706434120e-4, 0.10680745813035087964e-4,
 0.37565713615564248453e-5, 0.13111367785052622794e-5,
 0.45437916254218158081e-6, 0.15642984632975371803e-6,
 0.53523276400816416929e-7, 0.18207786280204973113e-7,  
 0.61604764947389226744e-8, 0.2e-8};
 	e=exp(.32663425997828098238*(z-1.11520724513161));	
  	s=coeu[20]; for(n=19;n>=0;n--) { s*=e; s+=coeu[n]; } 
 //	s=coeu[19]; for(n=18;n>=0;n--) { s*=e; s+=coeu[n]; } 
 	return 4.+s*e;}
 z_type F45E(z_type z){ DB b=sqrt(2.);
 			if(Re(z)<-1.) return f45E(z);
  			return exp(F45E(z-1.)*log(b));
 		}

 // #include"Sqrt2f45E.cin"
int main(){ int j,k,m,n; DB x,y, p,q, t; z_type z,c,d, cu,cd;
 int M=501,M1=M+1;
 int N=401,N1=N+1;
 DB X[M1],Y[N1], g[M1*N1],f[M1*N1], w[M1*N1]; // w is working array.
 char v[M1*N1]; // v is working array
 FILE *o;o=fopen("Sqrt2figf45e.eps","w");  ado(o,202,204);
 fprintf(o,"101 101 translate\n 10 10 scale\n");
 DO(m,M1) X[m]=-10.+.04*(m-.5);
 //DO(n,N1) Y[n]=-10.+.04*(n-.5);
  DO(n,N1) Y[n]=2.79*sinh(2.*(n-200.5)/200.);
 for(m=-10;m<11;m++) {M(m,-10)L(m,10)}
 for(n=-10;n<11;n++) {M(  -10,n)L(10,n)} 
 fprintf(o,"1 setlinejoin 2 setlinecap\n");
 fprintf(o," .006 W 0 0 0 RGB S\n");
 // z_type tm,tp,F[M1*N1];
 DO(m,M1)DO(n,N1){	g[m*N1+n]=9999;
 			f[m*N1+n]=9999;}
 DO(m,M1){x=X[m]; 
 DO(n,N1){y=Y[n]; z=z_type(x,y);	
 		c=F45E(z);
 		p=Re(c); 
 		q=Im(c);
 		if(p>-25. && p<25. && q>-25. && q<25.
 		&& fabs(p)>1.e-14
 		&& fabs(q)>1.e-14
 		) { g[m*N1+n]=p; f[m*N1+n]=q;}
 	}}
 p=2.5; q=.5;
 for(m=-8;m<8;m++)for(n=2;n<10;n+=2)conto(o,f,w,v,X,Y,M,N, (m+.1*n),-q,q); fprintf(o,".01 W 0 .6 0 RGB S\n");
 for(m=0;m<8;m++) for(n=2;n<10;n+=2)conto(o,g,w,v,X,Y,M,N,-(m+.1*n),-q,q); fprintf(o,".01 W .9 0 0 RGB S\n");
 for(m=0;m<8;m++) for(n=2;n<10;n+=2)conto(o,g,w,v,X,Y,M,N, (m+.1*n),-q,q); 	fprintf(o,".01 W 0 0 .9 RGB S\n");
 for(m= 1;m<16;m++) conto(o,f,w,v,X,Y,M,N, (0.-m),-p,p);fprintf(o,".03 W .8 0 0 RGB S\n");
 for(m= 1;m<16;m++) conto(o,f,w,v,X,Y,M,N, (0.+m),-p,p);fprintf(o,".03 W 0 0 .8 RGB S\n");
                conto(o,f,w,v,X,Y,M,N, (0.  ),-2*p,2*p); fprintf(o,".03 W .5 0 .5 RGB S\n");
 for(m=-31;m<16;m++)conto(o,g,w,v,X,Y,M,N,(0.+m),-p,p);fprintf(o,".03 W 0 0 0 RGB S\n");
 // #include "plofu.cin"
 // p=1.e-15;
 //for(n=-10;n<11;n++) {q=p*n; z=z_type(q,0.); printf("%19.15f %19.16f\n",q,  Re(uq2e(z))  ); }
 //M(-10,0)L(-2,0)fprintf(o,".04 W 1 0 1 RGB S\n");
 fprintf(o,"showpage\n%c%cTrailer",'%','%'); fclose(o);
  system("epstopdf Sqrt2figf45e.eps"); 
 system(    "open Sqrt2figf45e.pdf"); //for macintosh
 return 0; 
}

