6 out of 9 rated this helpful - Rate this topic

Rnd Function (Visual Basic)

Updated: July 2008

Returns a random number of type Single.

Public Shared Function Rnd[(Number)] As Single
Number

Optional. A Single value or any valid Single expression.

If number is

Rnd generates

Less than zero

The same number every time, using Number as the seed.

Greater than zero

The next random number in the sequence.

Equal to zero

The most recently generated number.

Not supplied

The next random number in the sequence.

The Rnd function returns a value less than 1, but greater than or equal to zero.

The value of Number determines how Rnd generates a random number.

For any given initial seed, the same number sequence is generated because each successive call to the Rnd function uses the previously generated number as a seed for the next number in the sequence.

Before calling Rnd, use the Randomize statement without an argument to initialize the random-number generator with a seed based on the system timer.

To produce random integers in a given range, use the following formula.

randomValue = CInt(Math.Floor((upperbound - lowerbound + 1) * Rnd())) + lowerbound


Here, upperbound is the highest number in the range, and lowerbound is the lowest number in the range.

Note Note:

To repeat sequences of random numbers, call Rnd with a negative argument immediately before using Randomize with a numeric argument. Using Randomize with the same value for Number does not repeat the previous sequence.

Security note Security Note:

Because the Random statement and the Rnd function start with a seed value and generate numbers that fall within a finite range, the results may be predictable by someone who knows the algorithm used to generate them. Consequently, the Random statement and the Rnd function should not be used to generate random numbers for use in cryptography.

This example uses the Rnd function to generate a random integer value in the range from 1 to 6.

' Initialize the random-number generator.
Randomize()
' Generate random value between 1 and 6.
Dim value As Integer = CInt(Int((6 * Rnd()) + 1))


Namespace: Microsoft.VisualBasic

Module: VBMath

Assembly: Visual Basic Runtime Library (in Microsoft.VisualBasic.dll)

Date

History

Reason

July 2008

Revised code example.

Customer feedback.

Did you find this helpful?
(1500 characters remaining)
Community Content Add
Annotations FAQ
Rnd() broke
Birbilis: the reason you get an error is because you say "dim rnd As New Random" and then you write "6*rnd()" later on
-----

Did it just like that and now I get

Error1Class 'System.Random' cannot be indexed because it has no default property.C:\Users\Mark\AppData\Local\Temporary Projects\WindowsApplication1\Form1.vb21846WindowsApplication1

from

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim p As System.Drawing.Graphics
Randomize()
p = PictureBox2.CreateGraphics

Dim perc As Single = 0
Dim rnd As New Random
Dim rnd2 As New Random
Dim func_num As Integer
Dim clr As Color
Dim x As Single = 1
Dim y As Single = 1


For i As Long = 1 To 5000000
Dim num As Double = rnd.NextDouble()
Dim k As Integer = CInt(Int((6 * rnd()) + 1))
Dim pen1 As New System.Drawing.Pen(m_Clr(k), 1)
For j As Integer = 0 To 3

num = num - m_Prob(j)
If num <= 0 Then
func_num = j
clr = m_Clr(j)

Exit For
End If
Application.DoEvents()
Next j

x = x * m_Func(func_num, 0, 0) + y * _
m_Func(func_num, 0, 1) + m_Plus(func_num, 0)
y = x * m_Func(func_num, 1, 0) + y * _
m_Func(func_num, 1, 1) + m_Plus(func_num, 1)


Dim point1 As System.Drawing.Point
Dim point2 As System.Drawing.Point
point1.X = (x * 75) + 150
point1.Y = (y * 75) + 150
point2.X = (x * 75) + 150.01
point2.Y = (y * 75) + 150.01
p.DrawLine(pen1, point1, point2)
perc = i / 5000000
' Round must be used with a number not a string
perc = 100 * Math.Round(perc, 2)
TextBox1.Text = perc & "%" & " " & "Completed!"
Application.DoEvents()
Next i

End Sub
End Class