Génération de nombres aléatoires uniformément distribués (0,1) - page 2

 
gumgum >>:


== :(

Je vous ai donné un code de travail qui donne des résultats acceptables pour les applications. Plus la possibilité de spécifier n'importe quelle gamme de MF.

 
joo >>:

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

Et la cuillère ?

 
Yurixx >>:

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

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

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

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

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

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


? ??!!!!

"Ou peut-être que vous voulez que votre GSH génère tous les numéros un segment (0,1) ?" c'est quoi cette absurdité ? Avez-vous étudié la théorie des nombres.

 
Urain >>:

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

Je dois en mettre un peu plus dans ma bouche ? :)

 
joo >>:

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


C'est parti !
 
gumgum >>:


Ну поехало!

Pourquoi ne pouvez-vous pas normaliser la prise vous-même ?

 
gumgum >>:


Ну поехало!

Allez ! 32767 pièces par unité de longueur, c'est bien. Vous pourriez faire 100000000 bien sûr, mais pourquoi ?!

 
Urain >>:

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


Je fais ça.

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);
}
Mais....
 

gumgum, alors essayez ceci. Le principe est le même, mais au lieu de générer des entiers de 0 à 32767, vous obtenez environ 0 à 2^30. Chaque nombre est égal à MathRand() + MathRand()*32768. Je n'ai pas encore étudié les distributions, mais j'espère que pour les tâches peu exigeantes, elles seront excellentes.

Ce sont des nombres de type AB dans le système numérique 32768.

Mieux encore, utilisez un dll. Il y en a une, elle génère immédiatement de si grands nombres.

 
Mathemat >>:

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

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


Je l'ai essayé. Ce n'est pas bon là-bas.
Raison: