#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define FRANDOM ((double) random()/RAND_MAX)
#define a 0
#define b 2
#define N 1e4 // não poderia inicializar vetor
double f(double x) {
return pow(sin(1/(x*(x-2))),2);
}
int main(void)
{
double sum1=0., sum2=0., sum3=0.;
int i;
// valor da integral:
for (i=0;i<N;i++)
{
double x=FRANDOM*(b-a);
sum1+=f(x);
}
double I = (b-a)/N * sum1;
printf("%lf\n",I);
// <f>:
for (i=0;i<N;i++)
{
double x=FRANDOM*(b-a);
sum2+=f(x);
}
double fm = sum2/N;
// <f^2>:
for (i=0;i<N;i++)
{
double x=FRANDOM*(b-a);
sum3+=f(x)*f(x);
}
double fm2 = sum3/N;
double e = ((b-a)/sqrt(N))*sqrt(fm2-fm*fm);
printf("Valor da integral: %lf\nErro: %lf\n",I,e); // ex.: diminuindo o valor de N em 2 ordens de magnitude, o erro aumenta 1 ordem de magnitude (pois vai com sqrt(N))
return 0;
}
Comments