VB Monte Carlo RNG Example

← All NMath Code Examples


Imports System

Imports CenterSpace.NMath.Core

Namespace CenterSpace.NMath.Examples.VisualBasic

  A .NET example in Visual Basic showing how to calculate an approximation for Pi using a Monte
  Carlo method and the uniform random number generator class RandGenUniform.
  Imagine a 2 x 2 square with corners at (1,1), (1,-1), (-1,-1) and (-1,1)
  and a unit circle, centered on the origin, inscribed within it. Generate 
  random points inside the square and let M be the number of points
  that fall within the unit circle and N be the total number of points
  generated. As the number N gets large, the quantity M/N should approximate the 
  ratio of the area of the circle to the square, which is pi/4. Hence, we can
  use the ratio 4*M/N to approximate Pi.
  Module MonteCarloRNGExample

    Sub Main()

      Construct a random number generator that generates random deviates
      distributed uniformly over the interval [-1,1]
      Dim Rng As New RandGenUniform(-1.0, 1.0)

      Well approximate pi to within 5 digits.
      Dim Tolerance As Double = 0.00001

      Dim PiApproximation As Double = 0
      Dim total As Integer = 0
      Dim NumInCircle As Integer = 0
      Dim X, Y As Double Coordinates of the random point.

      Generate random points until our approximation within
      the desired tolerance.
      While (Math.Abs(Math.PI - PiApproximation) > Tolerance)
        X = Rng.Next()
        Y = Rng.Next()
        If (X * X + Y * Y <= 1.0) Then Is the point in the circle?
          NumInCircle = NumInCircle + 1
        End If

        total = total + 1
        PiApproximation = 4.0 * (CType(NumInCircle, Double) / CType(total, Double))
      End While

      Console.Write("Pi calculated to within " + Math.Abs(Math.Log10(Tolerance)).ToString())
      Console.WriteLine(" digits with " + total.ToString() + " random points.")
      Console.WriteLine("Approximated Pi = " + PiApproximation.ToString())

      Console.WriteLine("Press Enter Key")

    End Sub
  End Module
End Namespace

← All NMath Code Examples