#include "math.h"

#ifdef __SASC
#include "m68881.h"
#endif

/* Settate bene le librerie matematiche. Si consiglia di usare un
 * processore con FPU, ma non e' strettamente necessario. Con un
 * processore privo di FPU, settate il numero massimo di iterazioni a non
 * oltre 6.
 */
#include <stdio.h>
#include <time.h>


/* Numero di passi di iterazione. Piu' alto e', piu' il processore
 * impieghera' per calcolare pi greco. Il valore "7" corrisponde a
 * 3.141.593 iterazioni che su uno 040 con l'ausilio di FPU vengono
 * calcolate in qualche secondo. Ogni passo successivo aumenta il
 * tempo di calcolo di circa 10 volte rispetto al precedente.
 */
#ifndef MAXPASSES
#define MAXPASSES	8
#endif


typedef double mand_t;

int main(void)
{
	mand_t	zr, zi, cr, ci;
	mand_t	rsquared, isquared;
	double	counter;
	double	starti;
	int	pass;
	clock_t	start,end;

	printf("Calculating PI based on escape times from the `neck' at (-0.75, 0.0) of\n");
	printf("the Mandelbrot set.\n");
	printf("\n");
	start = clock();

	for (starti = 1.0, pass = 0;  pass < MAXPASSES;  starti *= 0.1, pass++)
	{
		zr = 0.0;
		zi = 0.0;
		cr = -.75;
		ci = starti;
		rsquared = zr * zr;
		isquared = zi * zi;

		for (counter = 0; rsquared + isquared <= 4.0; counter++)
		{
			zi = zr * zi * 2;
			zi += ci;
			zr = rsquared - isquared;
			zr += cr;
			rsquared = zr * zr;
			isquared = zi * zi;
		}

		printf("E is %.8f, num iterations is %8.f, PI is ~%.8f\n", starti, counter, starti * counter);
	}

	end = clock();
	printf("\nProcessor time used = %f\n", ((double)(end - start))/CLOCKS_PER_SEC);
	return 0;
}
