Linux за българи: Форуми

Програмиране => Общ форум => Темата е започната от: vstoykov в Jul 25, 2006, 17:22



Титла: случайни числа
Публикувано от: vstoykov в Jul 25, 2006, 17:22
При всяко стартиране на програмата "случайните числа" са еднакви. Това нормално ли е?
http://d.interbild.net/vstoykov/tmp/screenshots/random.png





Титла: случайни числа
Публикувано от: winboze в Jul 25, 2006, 17:44
Доколкото си спомням, май в C трябва да се използва randomize() преди rand(). Пробвай в началото на main() да сложиш
randomize();


Титла: случайни числа
Публикувано от: sdr в Jul 25, 2006, 17:52
Истината е в /dev/urandom иначе се позлва ранодм генератора на стандартната библиотека а той може да не е много добъ. За гарантирано добър генератор си намери имплементация на Mersenne Twister


Титла: случайни числа
Публикувано от: mironcho в Jul 25, 2006, 21:26
Тука има няколко примера за псевдо генератор:

http://cplus.about.com/od/cprogrammingtips/l/aa041403a.htm


Титла: случайни числа
Публикувано от: VladSun в Jul 25, 2006, 21:55
Цитат (vstoykov @ Юли 25 2006,17:22)
При всяко стартиране на програмата "случайните числа" са еднакви. Това нормално ли е?
http://d.interbild.net/vstoykov/tmp/screenshots/random.png

За това му казват Генератор на Псевдослучайни Числа :)

Съветите, които са ти дали по-горе ще ти свършат работа, ако наистина искаш при всяко пускане да са различни числата.

Има случаи, в които, обаче ти трябва една и съща поредица от "случайни числа".

Всичко това зависи от така наречения "seed". Това е число от което почва да се генерира псевдослучайната поредица.

Ако искаш различни числа, то за "seed" трябва да избереш число получено от достатъчно случаен фактор - системното време в милисекунди, координатите от точки получени от движението на мишката или други подобни.

Искам да кажа, че учудването ти може да е негативно, но в някои случаи псевдослучайността е полезна.


Титла: случайни числа
Публикувано от: в Jul 26, 2006, 11:15
Цитат (sdr @ Юли 25 2006,18:52)
Истината е в /dev/urandom иначе се позлва ранодм генератора на стандартната библиотека а той може да не е много добъ. За гарантирано добър генератор си намери имплементация на Mersenne Twister

/dev/{|u|s}random са интерфейс към генератора на случайни числа на ядрото и нямат общо с rand от libc. Ако при rand след като се захрани с едно и също число винаги се получава една и съща поредица, то при ядрото се използва и допълнителни смущения от устройства и т.н. .....


Титла: случайни числа
Публикувано от: TeodorGig в Aug 02, 2006, 14:51
Добави следните редове:

#include <time.h>

А на първият ред в main():

srand( time(NULL) );

Това ще инициализира генератора на случайни числа с текущата стойност на системния часовник.


Титла: случайни числа
Публикувано от: Lord Bad в Aug 02, 2006, 16:11
randomize е от Pascal, не е от С. Трябва само да сменяш сийда надеждно - времето е добра идея по принцип, но според мен /dev/urandom е по-добра...