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)

Implementação

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\).