Geração de números aleatórios uniformemente distribuídos (0,1) - página 2

 
gumgum >>:


== :(

Eu lhe dei um código de trabalho que dá resultados aceitáveis para as aplicações. Além disso, a capacidade de especificar qualquer faixa MF.

 
joo >>:

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

Então, e a colher?

 
Yurixx >>:

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

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

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

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

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

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


???!!!!

"Ou talvez você queira que seu GSH gere todos os números um segmento (0,1) ?" que tipo de bobagem é essa ? Você já estudou a teoria dos números.

 
Urain >>:

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

Devo colocar mais um pouco na minha boca? :)

 
joo >>:

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


Aqui vamos nós!
 
gumgum >>:


Ну поехало!

Bem, realmente o que você não pode normalizar a tomada você mesmo.

 
gumgum >>:


Ну поехало!

Vamos lá! 32767 peças por unidade de comprimento é bom. Você poderia fazer 100000000, é claro, mas por quê?!

 
Urain >>:

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


Eu faço isso.

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

gumgum, então tente isto. O princípio é o mesmo, mas em vez de gerar números inteiros de 0 a 32767 você recebe cerca de 0 a 2^30. Cada número é MathRand() + MathRand()*32768. Ainda não investiguei como serão as distribuições, mas espero que, por não ser muito exigente, seja uma ponta de lança.

Estes são números do tipo AB no sistema de números 32768.

Melhor ainda, use um dll. Existe um, que gera imediatamente números tão grandes.

 
Mathemat >>:

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

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


Experimentei-o. Não é bom lá.