Thema: PI Thread
Einzelnen Beitrag anzeigen
Alt 30.05.2007, 13:00   #26
rev.antun
Inventar
 
Registriert seit: 02.04.2002
Alter: 61
Beiträge: 5.198

Mein Computer

Standard



Code:
int main(int argc, char *argv[])
{
	int digits = 25, dispdigits;
	
	if (argc > 1) {
		digits = atoi(argv[1]);
	}
	dispdigits = digits;
	if (argc > 2) {
		dispdigits = atoi(argv[2]);
	}
	
	blocks = (int) (digits / 9.632959861247397) + 5;
	
	ul *pi = init();
	
	timeBeginPeriod(1);
	ul t = timeGetTime();
	calc_pi(pi);
	timeEndPeriod(1);
	t = timeGetTime() - t;
	
	ulprint("  pi = ", pi, dispdigits);

	fprintf(stderr, "Time to calculate %d digits = %1.3f seconds\n", 
		digits, t * 0.001);

#ifndef NDEBUG
	ul *pi_5 = init();

	divmask = 0;
	
	timeBeginPeriod(1);
	t = timeGetTime();
	calc_pi(pi);
	timeEndPeriod(1);
	t = timeGetTime() - t;
	
	fprintf(stderr, "TDiv to calculate %d digits = %1.3f seconds\n", 
		digits, t * 0.001);

	timeBeginPeriod(1);
	t = timeGetTime();
	calc_pi_5_239(pi_5);
	timeEndPeriod(1);
	t = timeGetTime() - t;

	fprintf(stderr, "5/239   calculate %d digits = %1.3f seconds\n", 
		digits, t * 0.001);

	if (memcmp(&pi[2], &pi_5[2], sizeof(ul)*(blocks-1))) {
		fprintf(stderr,"Not equal results!\n");
		ulprint("pi_5 = ", pi, dispdigits);
		for (int i = blocks; (i >= 0) && (pi[i] != pi_5[i]); i--) ;
		fprintf(stderr, "%d different blocks!\n", blocks - i);
	}
	else 
		fprintf(stderr, "All OK!\n");
	
	free(pi_5);

	fprintf(stderr,"divs = %u, muls = %u, adds = %u, subs = %u, maxdiv = %u\n",
		divs, muls, adds, subs, maxdiv);

#endif
	free(pi); 

	return 0;
}
rev.antun ist offline   Mit Zitat antworten