#include #include #define A 106 #define C 1283 #define M 6075 #define SEMENTE 1234 #define IA 16807 #define IM 2147483647 #define AM (1.0/IM) #define IQ 127773 #define IR 2836 #define MASK 123459876 float alearuim(long int *semente); float alea(long *id); float f(float x); int main(void) { long int i, n, semente; float x, a, b, soma, integral; n = 1000; /* Integracao por Monte Carlo */ a = 0; b = 1; semente = SEMENTE; for (i = 0; i < n; i++) { x = alea(&semente); soma = soma + f(x); } integral = (b - a) * soma/(float)n; printf("Integral calculada = %f\n", integral); } float f(float x) { return(exp(x)); } float alearuim(long int *semente) { float x; *semente = (A * (*semente) + C) % M; x = (float) (*semente)/(float) M; return x; } float alea(long *id) { long k; float ans; *id ^= MASK; k = (*id)/IQ; *id = IA * (*id - k * IQ) - IR * k; if (*id < 0) *id += IM; ans = AM * (*id); *id ^= MASK; return (ans); }