RosettaCodeData/Task/Modified-random-distribution/FreeBASIC/modified-random-distributio...

44 lines
865 B
Plaintext

#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