De forma semelhante ao desenvolvido no trabalho 1, faremos a estimação do valor de \(\pi\) utilizando o método hit or miss, porém agora na extensão rcpp do R, que nos permite rodar os códigos em C dentro do ambiente do R.
knitr::opts_chunk$set(echo = FALSE)
Na implementação utilizando loops, teremos:
#include <Rcpp.h>
// [[Rcpp::export]]
double est_pi(int n){
int i, aux = 0; //contador e variável auxiliar para a contagem dos acertos
double x, y;
Rcpp::RNGScope scope;
for (i=0; i<n; i++){
x = R::runif(0, 1);
y = R::runif(0, 1);
if (pow(x,2) + pow(y,2) <= 1)
aux++;
}
return (double) 4.*aux/n;
}
Geraremos agora estimações de Monte Carlo utilizando \(100\), \(1000\) e \(10.000\) repetições. Com amostras de tamanho \(1000\) (\(1000\) replicações de cada método).
Que como visto, um número maior de iterações em cada simulação de monte-carlo gera estimativas melhores do valor de \(\pi\).