MCInt <- function(Mv = 1000, fn){
    h <- function(m) {
      x<-runif(m)
      v<-fn(x)
      return(mean(v))
    }
    val <- h(Mv)
    return(val)
}


f<-function(x){return(sqrt(x))}

set.seed(123)
M<-1e7
system.time(Ival<-MCInt(Mv=M,fn=f))
print(Ival)


MCInt.par <- function(Mv = 1000, fn){
    h <- function(m) {
      x<-runif(m)
      v<-fn(x)
      return(mean(v))
    }
    nodes <- getDoParWorkers()
    p <- foreach(m = rep(Mv/nodes, nodes),.combine = "c") %dopar% h(m)
    p <- mean(p)
    return(p)
  }
set.seed(123)
M<-1e7
system.time(Ival<-MCInt.par(Mv=M,fn=f))
print(Ival)

