/* This is the F_Maker program */
/* F_Maker.c - Ch Iossif @ April 2006 */

#include <stdio.h>
#include "Newton_DComplex.h"

#define FILE_NAME "f_maker.img"

int main() {
    FILE *fp;
    dcomplex z,fz,rizes[100],pz;
    double eps,c;
    int n,j,l,nr,i,m,nit,kit,ok,row,col,bv;

    m=1;
    nit=30;
    eps=1.0e-12;
    nr=0;
    row=col=0;
    for (i=0;i<100;i++)
        rizes[i]=dcmplx(0.0,0.0);

    fp=fopen(FILE_NAME,"w");
    n=1500;
    c=5.0;
    for (j=-n;j<=n;j++,row++) {
        for (l=-n;l<=n;l++,col++) {
            z=dcmplx((double)j*c/n,(double)l*c/n);
            pz=z;
            bv=0;
            if (newton_dcomplex(m,nit,eps,&z,&fz,&kit)==1) {
                ok=0;
                for (i=0;i<nr;i++)
                    if (dcmplx_abs(dcmplx_sub(z,rizes[i]))<3*eps) {
                        ok=1;
                        bv=i+1;
                    }
                if (!ok) {
                    rizes[nr++]=z;
                    bv=nr;
                    printf("Input:\t\tz=(%lf%+lfi)\nOutput:\t\tz=(%lf%+lfi)\n\t\tf(z)=(%lf%+lfi)\n\t\t|f(z)|=%le\n\n",pz.real,pz.imag,z.real,z.imag,fz.real,fz.imag,dcmplx_abs(fz));
                }
            }
            fprintf(fp,"%2d",bv);
        }
        fprintf(fp,"\n");
    }
    fprintf(fp,"%d %d",row,col);
    fclose(fp);
    return 0;
}

dcomplex f(dcomplex z) {
    return dcmplx_add(dcmplx_mul(dcmplx_sqr(z),z),dcmplx(8.0,0.0));
}

dcomplex df(dcomplex z) {
    return dcmplx_mul(dcmplx(3.0,0.0),dcmplx_sqr(z));
}

