Автор Тема: случайни числа  (Прочетена 1741 пъти)

vstoykov

  • Напреднали
  • *****
  • Публикации: 1286
  • Distribution: Ubuntu
  • Window Manager: Fluxbox
    • Профил
    • WWW
случайни числа
« -: Jul 25, 2006, 17:22 »
При всяко стартиране на програмата "случайните числа" са еднакви. Това нормално ли е?
http://d.interbild.net/vstoykov/tmp/screenshots/random.png



Активен

winboze

  • Напреднали
  • *****
  • Публикации: 242
    • Профил
    • WWW
случайни числа
« Отговор #1 -: Jul 25, 2006, 17:44 »
Доколкото си спомням, май в C трябва да се използва randomize() преди rand(). Пробвай в началото на main() да сложиш
randomize();
Активен

.: МРАЗЯ ПАКЕТНИ ЗАВИСИМОСТИ :.

sdr

  • Напреднали
  • *****
  • Публикации: 655
    • Профил
случайни числа
« Отговор #2 -: Jul 25, 2006, 17:52 »
Истината е в /dev/urandom иначе се позлва ранодм генератора на стандартната библиотека а той може да не е много добъ. За гарантирано добър генератор си намери имплементация на Mersenne Twister
Активен

mironcho

  • Напреднали
  • *****
  • Публикации: 495
    • Профил
случайни числа
« Отговор #3 -: Jul 25, 2006, 21:26 »
Тука има няколко примера за псевдо генератор:

http://cplus.about.com/od/cprogrammingtips/l/aa041403a.htm
Активен

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
случайни числа
« Отговор #4 -: Jul 25, 2006, 21:55 »
Цитат (vstoykov @ Юли 25 2006,17:22)
При всяко стартиране на програмата "случайните числа" са еднакви. Това нормално ли е?
http://d.interbild.net/vstoykov/tmp/screenshots/random.png

За това му казват Генератор на Псевдослучайни Числа '<img'>

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

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

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

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

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

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

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

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

TeodorGig

  • Напреднали
  • *****
  • Публикации: 14
    • Профил
случайни числа
« Отговор #6 -: Aug 02, 2006, 14:51 »
Добави следните редове:

#include <time.h>

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

srand( time(NULL) );

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

Lord Bad

  • Напреднали
  • *****
  • Публикации: 1667
  • Distribution: Fedora 13
  • Window Manager: GNOME
  • Jedi Knight
    • Профил
случайни числа
« Отговор #7 -: Aug 02, 2006, 16:11 »
randomize е от Pascal, не е от С. Трябва само да сменяш сийда надеждно - времето е добра идея по принцип, но според мен /dev/urandom е по-добра...
Активен

Fuelled by Fedora 13 "Goddard"
====================================
Rock it!