UnmannerПросто вопрос у вас выглядит как-то глупо. 
Пока на паскале
Код:
// Равномерное распределение на отрезки 0..1
function MyRandom:Real;
begin
MyRandSeed:=(MyRandSeed*$08088405+1);        //MyRandSeed- сучайное число на придыдущщем шаге
Result:=MyRandSeed*(1.0/$10000) / $10000;    // Rand - Случайное число в диапозоне [0..1]
end;
function MyRandom(m:Integer):Integer; Overload;
begin
MyRandSeed:=(MyRandSeed*$08088405+1);        //MyRandSeed- сучайное число на придыдущщем шаге
Result:=MyRandSeed mod m;    // Rand - Случайное число
end;
function MyRandomInteger:Integer;
begin
MyRandSeed:=(MyRandSeed*$08088405+1);        //MyRandSeed- сучайное число на придыдущщем шаге
Result:=MyRandSeed;    // Rand - Случайное число
end;
var
IsTwoNorm:Boolean=False;
TwoNorm:Real;
// Нормальное   распределение
function MyRandomNorm:Real;
var s,u,v:Real;
begin
if IsTwoNorm then
 begin
 Result:=TwoNorm;
 IsTwoNorm:=False;
 end else
 begin
 repeat
 u:=MyRandom*2-1;  // получается из равномерного распределения
 v:=MyRandom*2-1;
 s:=u*u+v*v;
 until s<=1;
 TwoNorm:=v*sqrt(-2*ln(s)/s);
 isTwoNorm:=True;
 Result:=u*sqrt(-2*ln(s)/s);
 end;
end;
// Нормальное   распределение оно же гауссовское
function RandomNorm(Mean,StdDev:Real):Real;
begin
Result:=MyRandomNorm*StdDev+Mean;
end;
с++
Код:
bool IsTwoNorm;
double TwoNorm;
double
MyRandomNorm ()
{
double  s,u,v;
if (IsTwoNorm) {
 return TwoNorm;
 IsTwoNorm=false;
 } else
 {
 do {
 u=(rand()/(RAND_MAX)*2-1;  
 v=(rand()/(RAND_MAX)*2-1;
 s=u*u+v*v;
 } while (s<=1.0);
 TwoNorm=v*sqrt(-2*ln(s)/s);
 isTwoNorm=true;
 return u*sqrt(-2*ln(s)/s);
 };
};
double RandomNorm2(double Mean,StdDev)
{
return MyRandomNorm()*StdDev+Mean;
}
Надеюсь правильно на Си перевел. Сейчас времени нет проверить.