#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int f2(unsigned long x) ; 

int main(void) {

	unsigned long x, range = 1000000, greatest_x = 0 ; 
	double y, greatest_y = 0.0 ; 
	
	printf("start: 0 - %d\n", range); 
	
	for (x = 0; x < range; x++) {
		y = f2(x) ; 
		if (x % 10000 == 0)
			printf("x = %d, y = %.6f\n", x, y); 
		if (y > greatest_y) {
			greatest_y = y ; 
			greatest_x = x ; 
		}
	}
	
	printf("greatest_x = %d, greatest_y = %.6f\n", greatest_x, greatest_y) ; 

	exit(0) ; 
}


int f2(unsigned long x) {

	const double E = 2.718281828459 ; 

	const int A1 = 120 ; const double a1 = .5 ;  	/* 8000 */ 
	const int A3 = 100 ; const double x03 = 1.0 ; const double a3 = 5.0 ; 
	const int A4 = 80 ; const double x04 = 1.0 ; const double a4 = 5.0 ; 
	const int A5 = 60 ; const double x05 = .01 ; const double a5 = 5.0 ; 
	const int A6 = 40 ; const double x06 = .01 ; const double a6 = 5.0 ; 
	const int A7 = 20 ; const double x07 = .01 ; const double a7 = 5.0 ; 

	double _y ; 

	_y = A1 * sin( (double)(x/a1)) + 
		 A3 * exp( (-pow( (double)((x)-x03), (double)2)) / a3) + 
		 A4 * exp( (-pow( (double)((x)-x04), (double)2)) / a4) + 
		 A5 * exp( (-pow( (double)((x)-x05), (double)2)) / a5) + 
		 A6 * exp( (-pow( (double)((x)-x06), (double)2)) / a6) + 
		 A7 * exp( (-pow( (double)((x)-x07), (double)2)) / a7) +
		 200 ;  
		 
	return((int)_y) ; 
}


