#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