RND

4 отговора 0 прегледа
#1

RND

Na kakuv princip raboti generatora na slu4aini 4isla ?

Отговор
в отговор на *** #2

Re: RND

Таймер

Si Vis Pacem, Para Bellum
Отговор
в отговор на *** #3

Re: RND

Ако почакаш малко и новите продукти на Intel видят бял свят, ще можеш да разчиташ на напълно случайни числа, базирани на топлинни флуктуации на тока в процесора. Иначе, на даден алгоритъм се подава стойност, взета от системния таймер и той я преобразува най-често в реално число между 0 и 1.

Mixy
Отговор
в отговор на *** #4

Re: RND

При генерирането на случайни числа няма нищо случайно. :-) Това е един алгоритъм, който генерира псевдослучайни числа. Алгоритъмът се инициализира с една стойност обикновенно long в ANSI C и Java. Нарича се seed. След това всеки път като поискаш случайно число то се определя от предишното.
Значи ако го инициалиризараш алгоритъма с едно и също число той ще връща едни и същи числа.

Пример на Java:
java.util.Random rnd = new java.util.Random(1);
rnd.nextLong();

Ако следващия път отново го инициализираш с 1 ще ти върне същите числа. Използвай времето (timera) да инициализираш алгоритъма. Повечето езици от високо ниво крият тази инициализация и когато извикаш за първи път nextRandom() те го инициализират с timera.

За ANSI C/C++ функциите са:

srand(long seed) - за инициализация
rand() - за следващо случайно число между 0.0 и 1.0
има и RAND_MAX константа.


#include <stdlib.h>
#include <time.h>

// Така го инициализираш с timera

srand(time(NULL));

// А така със твое си число. Но помни, че всеки път инициализиран със същото число ще връща същата поредица от "случайни" числа.

srand(10);

// Така вземаш цяло число число между 1 и 100 щото
rand() връща double.

long р = 1 + (long) (100.0 * rand()) / (RAND_MAX + 1.0));

А за другите езици направо си го викаш и то се инициализира първия път с времето.


Отговор
в отговор на Never Mind #5

Re: RND

нещата казани в началото са правилни,
нещата за C и Java вероятно са правилни
за другите езици - зависи от езика
за Delphi и VB (всички диалекти на Microsoft или IBM/Lotus) има инициализация Randomize (името на процедурата е еднакаво за двата езика, нещата които прави вероятно не са)

--------
А Картаген... вие си знаете за Картаген
s/Картаген/Модератор/g
Отговор