RND
4 отговора
0 прегледа
Re: RND
Ако почакаш малко и новите продукти на Intel видят бял свят, ще можеш да разчиташ на напълно случайни числа, базирани на топлинни флуктуации на тока в процесора. Иначе, на даден алгоритъм се подава стойност, взета от системния таймер и той я преобразува най-често в реално число между 0 и 1.
Mixy
Mixy
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));
А за другите езици направо си го викаш и то се инициализира първия път с времето.
Значи ако го инициалиризараш алгоритъма с едно и също число той ще връща едни и същи числа.
Пример на 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));
А за другите езици направо си го викаш и то се инициализира първия път с времето.
Re: RND
нещата казани в началото са правилни,
нещата за C и Java вероятно са правилни
за другите езици - зависи от езика
за Delphi и VB (всички диалекти на Microsoft или IBM/Lotus) има инициализация Randomize (името на процедурата е еднакаво за двата езика, нещата които прави вероятно не са)
--------
А Картаген... вие си знаете за Картаген
s/Картаген/Модератор/g
нещата за C и Java вероятно са правилни
за другите езици - зависи от езика
за Delphi и VB (всички диалекти на Microsoft или IBM/Lotus) има инициализация Randomize (името на процедурата е еднакаво за двата езика, нещата които прави вероятно не са)
--------
А Картаген... вие си знаете за Картаген
s/Картаген/Модератор/g