How to simulate an approximation of pi with Numba?

I would like to approximate the value of pi using a Monte Carlo method, with different input points (10, 10**1 and so on) and get the code faster with Numba.

Here as follows, there is a simulation with inputs = 10

import numba
from random import *
import math
from math import sqrt

@numba.jit(nopython=True)
def go_fast(pi): 
    inside = 0
    inputs =10
    for i in range(0,inputs):
        x=random()
        y=random()
        if sqrt(x*x+y*y)<=1:
            inside+=1
            pi=4*inside/inputs 
            return (pi)

pi = math.pi      
go_fast(pi)

I would just like to make sure that the simulation was correctly set since the result get from here seems a bit misleading. Thanks

>Solution :

This function

def go_fast(pi): 
    inside = 0
    inputs =10
    for i in range(0,inputs):
        x=random()
        y=random()
        if sqrt(x*x+y*y)<=1:
            inside+=1
            pi=4*inside/inputs 
            return (pi)

would terminate as soon as x, y for which sqrt(x*x+y*y)<=1 hold will be encountered, in other words number of turns of your for loop is not deterministic (any value between 1 and 10). If you want constant number of turns of said for you need to put return outside body of said loop, this also apply to pi calucation as it should be done after data is collected, that is your code should be

def go_fast(pi): 
    inside = 0
    inputs =10
    for i in range(0,inputs):
        x=random()
        y=random()
        if sqrt(x*x+y*y)<=1:
            inside+=1
    pi=4*inside/inputs 
    return pi

Leave a Reply