Given a random number generator, (rng), generating numbers in the range 0.0 .. 1.0 called rgen, for example; and a function modifier(x)
taking an number in the same range and generating the probability that the input should be generated, in the same range 0..1; then implement the following algorithm for generating random numbers to the probability given by function modifier:

while True:
    random1 = rgen()
    random2 = rgen()
    if random2 < modifier(random1):
        answer = random1
        break
    endif
endwhile
Task

 Create a modifier function that generates a 'V' shaped probability of number generation using something like, for example:
                      modifier(x)  =  2*(0.5 - x)  if x < 0.5  else 2*(x - 0.5) 

 Create a generator of random numbers with probabilities modified by the above function.
 Generate >= 10,000 random numbers subject to the probability modification.
 Output a textual histogram with from 11 to 21 bins showing the distribution of the random numbers generated.


Show your output here, on this page.




#define NRUNS 100000
#define NBINS 20
 
function modifier( x as double ) as double
    return iif(x < 0.5, 2*(0.5 - x), 2*(x - 0.5))
end function
 
function modrand() as double
    dim as double random1, random2
    do
        random1 = rnd
        random2 = rnd
        if random2 < modifier(random1) then
            return random1
        endif
    loop
end function
 
function histo( byval bn as uinteger ) as string
    dim as double db = NRUNS/(50*NBINS)
    dim as string h
    while bn > db:
        h = h + "#"
        bn -= db
    wend
    return h
 
end function
 
dim as uinteger bins(0 to NBINS-1), i, b
dim as double db = 1./NBINS, rand
 
randomize timer
 
for i = 1 to NRUNS
    rand = modrand()
    b = int(rand/db)
    bins(b) += 1
next i
 
for b = 0 to NBINS-1
    print using "Bin ## (#.## to #.##): & ####";b;b*db;(b+1)*db;histo(bins(b));bins(b)
next b