Generazione di numeri casuali uniformemente distribuiti (0,1) - pagina 2

 
gumgum >>:


== :(

Vi ho dato un codice funzionante che dà risultati accettabili per le applicazioni. Più la possibilità di specificare qualsiasi gamma MF.

 
joo >>:

Я Вам дал рабочий код, дающий приемлемые результаты для прикладных задач. Плюс возможность указывать любой диапазон CЧ.

E il cucchiaio?

 
Yurixx >>:

А вам, уважаемый, известно, что между любыми, сколь угодно близкими друг к другу, вещественными числами имеется бесчисленное множество вещественных чисел ?

А известно, что интервал (0,1) по мощности эквивалентен бесконечной прямой ?

Если нет - задумайтесь об этом.

Если да - правильно формулируйте свой вопрос.

Заодно попытайтесь сказать, с какой плотностью (штук на ед. длины) вы хотите иметь генерацию СЧ ?

А может вы хотите, чтобы ваш ГСЧ генерил все числа отрезка (0,1) ?


???!!!!

"O forse vuoi che il tuo GSH generi tutti i numeri un segmento (0,1)?" che razza di assurdità è questa? Hai studiato la teoria dei numeri.

 
Urain >>:

Ну так а ложку?

Devo metterne ancora un po' in bocca? :)

 
joo >>:

Могет быть, ещё в рот положить? :)


Ci siamo!
 
gumgum >>:


Ну поехало!

Beh, in realtà cosa non si può normalizzare la presa da soli.

 
gumgum >>:


Ну поехало!

Forza! 32767 pezzi per unità di lunghezza va bene. Si potrebbe fare 100000000 naturalmente, ma perché?!

 
Urain >>:

Ну действительно что не можешь сам нормализовать дубль.


Io faccio questo.

double ranD(int rsign,int rstep)
{
double sumR=0;
for(int zr=1;zr<=2;zr++)
{
//----
string ran="0.";
for(int z=1;z<=rstep;z++)
{
ran=ran+DoubleToStr(MathFloor((MathRand()/32767.0)*10),0);
}
double randou=StrToDouble(ran);
if(rsign==1)
   {
   randou=2*randou-1;
   }
sumR+=randou*randou;
//----
}

randou=randou/MathSqrt(sumR);
//Print("randou = "+randou);
return(randou);
}
Ma....
 

gumgum, allora provate questo. Il principio è lo stesso, ma invece di generare numeri interi da 0 a 32767 si ottiene circa da 0 a 2^30. Ogni numero è MathRand() + MathRand()*32768. Non ho esplorato come saranno le distribuzioni, ma si spera che per compiti non troppo impegnativi sia al top.

Sono numeri di tipo AB nel sistema di numeri 32768.

Meglio ancora, usa un dll. Ce n'è uno, genera immediatamente dei numeri così grandi.

 
Mathemat >>:

gumgum, тогда попробуй вот так. Принцип тот же, но вместо генерации целых чисел от 0 до 32767 ты получишь примерно от 0 до 2^30. Каждое число - это MathRand() + MathRand()*MathRand(). Я не исследовал, как будут распределены, но надеюсь, что для не слишком требовательных задач все будет тип-топ.

Это числа вида AB в 32768-ичной системе счисления.


Provato. Non va bene lì.