Function RandomInt() Foundation
Calculate a random numeric value
RandomInt( [<nInt>[,<nInt2>]] ) --> nRand
 The parameters determine a range from which a random numeric value is returned. If the function RandomInt() is called without any parameters then the return value is 0 or 1. If only the first parameter is passed then the return value is a numeric value of the range 1 to <nInt>. If the second parameter <nInt2>is passed then the first parameter is mandatory and the return value is of the range <nInt> to <nInt2>.
With the function RandomInt() a numeric value can be calculated that follows stochastic (random) principals. This can be useful to fill database fields with random values and to set up unit tests where coincidence shall play a role.
The algorithm used is based on a pseudo random generator. This kind of generator always creates the same sequence of evenly distributed random numbers when it is initialized with the same seed. However, in Xbase++ the random number generator is automatically initialized on each thread by using the operating system's cryptoprovider.
// Use RandomInt() to create 10 random floating 
// point numbers in the range from 0 to 1 with 
// 3 decimals 
PROCEDURE Main() 
   LOCAL n 
   // Display 3 decimals 
   SET DECIMALS TO 3 
   // Create random number from 0.000 to 1.000 
   FOR n := 1 to 10 
      ? RandomInt( 0, 1000 ) / 1000 
   NEXT 
   WAIT 
RETURN 
    #define NUM_FRACTAL 4 
#define NUM_POINTS  5000 
#define NUM_EDGE    3 
PROCEDURE Main() 
   LOCAL aThread 
   CLS 
   // Start several threads which execute the function Fractal 
   aThread := Array(NUM_FRACTAL) 
   AEval( aThread, { |t| t := Thread():new() }, , , .T. ) 
   AEval( aThread, { |t| t:start("Fractal") } ) 
   ThreadWaitAll( aThread ) 
   wait 
RETURN 
// 
// Paint a fractal 
// 
PROCEDURE Fractal() 
   LOCAL aEdges, TmpEdge, OldPoint, k, n 
   // Three point in the CRT Window is the triangle 
   aEdges := Array( NUM_EDGE ) 
   AEval( aEdges, { |e| e := RandPoint() }, , , .T. ) 
   // Set the starting point 
   OldPoint := RandPoint() 
   GraLine( , OldPoint, OldPoint ) 
   FOR n := 1 to NUM_POINTS 
      // Set a color 
      GraSetColor(, RandColor()) 
      // Any point of the of the triangle 
      TmpEdge := aEdges[RandomInt(NUM_EDGE)] 
      // New Point is half the way to the edge 
      OldPoint[1] := (TmpEdge[1]+OldPoint[1])/2 
      OldPoint[2] := (TmpEdge[2]+OldPoint[2])/2 
      // Draw Point 
      GraLine(, OldPoint, OldPoint) 
   NEXT 
RETURN 
// Return a point at a random position 
STATIC FUNCTION RandPoint() 
   STATIC aSize := NIL 
   IF aSize == NIL 
      aSize := SetAppWindow():currentSize() 
   ENDIF 
RETURN {RandomInt(0,aSize[1]),RandomInt(0,aSize[2])} 
// Create a color with random RGB values 
STATIC FUNCTION RandColor() 
   LOCAL nColor 
   nColor := GraMakeRGBColor( { RandomInt(0,255), ; 
                                RandomInt(0,255), ; 
                                RandomInt(0,255)}) 
RETURN nColor 
    If you see anything in the documentation that is not correct, does not match your experience with the particular feature or requires further clarification, please use this form to report a documentation issue.