Generación de números aleatorios distribuidos uniformemente (0,1) - página 2

 
gumgum >>:


== :(

Te he dado un código de trabajo que da resultados aceptables para las aplicaciones. Además de la posibilidad de especificar cualquier rango de MF.

 
joo >>:

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

¿Y qué pasa con la cuchara?

 
Yurixx >>:

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

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

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

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

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

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


¡¡¡¡???!!!!

"O quizás quieras que tu GSH genere todos los números un segmento (0,1)?" ¿Qué clase de tontería es esa? ¿Has estudiado la teoría de los números.

 
Urain >>:

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

¿Debería poner un poco más en mi boca? :)

 
joo >>:

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


¡Aquí vamos!
 
gumgum >>:


Ну поехало!

Bueno, en realidad lo que no se puede es normalizar la toma por sí mismo.

 
gumgum >>:


Ну поехало!

¡Vamos! 32767 piezas por unidad de longitud está bien. Podrías hacer 100000000 por supuesto, pero ¿por qué?

 
Urain >>:

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


Yo hago esto.

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

chicle, entonces prueba esto. El principio es el mismo, pero en lugar de generar enteros de 0 a 32767 se obtiene de 0 a 2^30. Cada número es MathRand() + MathRand()*32768. No he explorado cómo serán las distribuciones, pero espero que para tareas no muy exigentes sea de lo mejor.

Son números del tipo AB en el sistema numérico 32768.

Mejor aún, utiliza una dll. Hay uno, que genera inmediatamente números tan grandes.

 
Mathemat >>:

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

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


Lo he probado. No es bueno allí.
Razón de la queja: