Well, the Gaussian frame of mind is better reflected by my dice-rolling friend above, Greg A.
I actually did a probability distribution curve model showing precisely this. The best way to do random numbers on an even frequency distribution is a bell curve.
Here's my original program, UP polls 100 more data for a frequency distribution curve. The cyan one is 10d10, second is 5d20, third is 20d5. I did have an exclusionary system going where the Gaussian generator would drop, say, the bottom two, and that had an effect of regulating and increasing my results (a mean result became more frequent, the mean became higher).
SYNC ON : SYNC RATE 0 :
init()
Gather()
REPEAT
IF upkey()=1
Gather()
INC seed_base,1
ENDIF
SYNC
UNTIL DOWNKEY()=1
END
FUNCTION init()
//Color Constant Library Courtesy Mr909
#CONSTANT col_white RGB(255,255,255)
#CONSTANT col_black RGB(0,0,0)
#CONSTANT col_gray RGB(128,128,128)
#CONSTANT col_red RGB(255,0,0)
#CONSTANT col_green RGB(0,255,0)
#CONSTANT col_blue RGB(0,0,255)
#CONSTANT col_cyan RGB(0,255,255)
#CONSTANT col_magenta RGB(255,0,255)
#CONSTANT col_yellow RGB(255,255,0)
GLOBAL count
GLOBAL seed_base
DIM graph_one(100)
DIM graph_two(100)
DIM graph_three(100)
DIM dice(20)
DIM exclude(10)
DIM bottom(10)
//Setups
SYNC RATE 60
SYNC ON
seed_base=1
RANDOMIZE seed_base
SET WINDOW SIZE 640,480
//Variable Setups
count=0
GLOBAL bx
GLOBAL by
bx=64
by=400
//Make sure all values are reset
FOR a=1 to 100
graph_one(a)=0
NEXT a
FOR a=1 to 100
graph_two(a)=0
NEXT a
FOR a=1 to 100
graph_three(a)=0
NEXT a
range=0
print "v"
ENDFUNCTION
FUNCTION Gather()
RANDOMIZE TIMER()
FOR cl=1 TO 100
//Calculation Steps
CLS
INK col_white,col_black
sub=0
//Clear the dice totals and bottom bars so they total correctly
total_one=0
total_two=0
total_three=0
//Total range one
GTenRand()
FOR adit=1 TO 10
INC total_one,dice(adit)
NEXT adit
//Total range two-5d20
GTwentyRand()
FOR adit=1 TO 5
INC total_two,dice(adit)
NEXT adit
//Total range three-20d5
GFiveRand()
FOR adit=1 TO 20
INC total_three,dice(adit)
NEXT adit
//Graph 'dem crazeh results! :D :D :D
INC graph_one(total_one),1
INC graph_two(total_two),1
INC graph_three(total_three),1
INC count
NEXT cl
//Drawing The Graph
CLS
INK col_white,col_black
CENTER TEXT 32,32,"Count:"
CENTER TEXT 32,48,STR$(count)
//Drawing The Background
INK col_gray,col_black
horiz=100
vert=50
scale=5
FOR x=1 TO horiz
LINE bx+(x*scale),by,bx+(x*scale),by-(vert*scale)
NEXT x
FOR y=1 TO vert
LINE bx,by-(y*scale),bx+(horiz*scale),by-(y*scale)
NEXT y
//First Graph
INK col_cyan,col_black
FOR pnt=2 TO 100
LINE bx+(5*(pnt-1)),by-(graph_one(pnt-1))/5,bx+(5*pnt),by-(graph_one(pnt))/5
NEXT pnt
//Second Graph
INK col_yellow,col_black
FOR pnt=2 TO 100
LINE bx+(5*(pnt-1)),by-(graph_two(pnt-1))/5,bx+(5*pnt),by-(graph_two(pnt))/5
NEXT pnt
//Third Graph
INK col_magenta,col_black
FOR pnt=2 TO 100
LINE bx+(5*(pnt-1)),by-(graph_three(pnt-1))/5,bx+(5*pnt),by-(graph_three(pnt))/5
NEXT pnt
ENDFUNCTION
function Glowest()
//Clear excluded indexes and bottom numbers to ensure randoms don't pick duplicated indexes
FOR ex=1 TO 10
exclude(ex)=0
NEXT ex
FOR bt=1 TO 10
bottom(bt)=0
NEXT bt
//EXCLUDE LOWEST
FOR b=1 TO 10
FOR a=1 TO range AND (a=exclude())=0
IF dice(a)<bottom(b)
bottom(b)=dice(a)
exclude(b)=a
ENDIF
NEXT a
NEXT b
endfunction
function GFiveRand()
FOR di=1 TO 20
dice(di)= RND(4)+1
NEXT di
ENDFUNCTION
function GTenRand()
FOR di=1 TO 20
dice(di)= RND(9)+1
NEXT di
ENDFUNCTION
function GTwentyRand()
FOR di=1 TO 20
dice(di)= RND(19)+1
NEXT di
ENDFUNCTION
My other method, and, you can yell at me for poor code structure until you're blue in the face and I won't care, is actually the same system I used for the name generator code. It reflects even statistic-based weight where you can increase odds by an amount relative to every other instance chance just by toying around with that attached .ini, copying the same number over and over. You could easily do the same with an array.
Best of luck Phaelax, I hope I helped.