n <- 10000 res <- numeric(0) while (length(res) < n) { X <- runif(1, -1, +1) p <- sqrt(1 - X^2) U <- runif(1) if (U <= p) { res <- c(res, X) # cat("accept", X, "\n") } else { # cat("reject", X, "\n") } } hist(res, probability = TRUE) x <- seq(-1, +1, by=0.01) lines(x, 2/pi*sqrt(1-x^2), col="red", lwd = 2)