rand()
5 отговора
174 прегледа
rand()
niakoi moje li da mi obiasni kak se izpolzva rand() vuv C (ANSI C) i kak se generirat istinski random numbers ?
mejdu drugoto viarno li e che PC-tata nemogat da generirat istinski random numbers a edin quantum computer moje ?
- null
mejdu drugoto viarno li e che PC-tata nemogat da generirat istinski random numbers a edin quantum computer moje ?
- null
Re: rand()
Мога само да ти кажа да използваш инструкцията rdtsc (0x0F,0x31), която дава в eax:edx брояча на процесорни клокове и по-точно eax, където му е младшата част. Това за randomize (srand). От там си действаш я със стандартния алгоритъм, я си намираш/измисляш нов, или просто повтаряш.
Виждал съм да се генерират случайни числа на базата на движението на мишката над прозореца. Не знам как и не ме интересува за сега. Това е от мен.
Виждал съм да се генерират случайни числа на базата на движението на мишката над прозореца. Не знам как и не ме интересува за сега. Това е от мен.
Re: rand()
Be temata e dosta obshirna shto ne potarsish na google-to po vaprosa.
rand() ti dava psevdosluchaini chisla,
"istinski" sluchaini mojesh da poluchish, ama s neizvestni svoistva (razpredelenie) po niakolko nachina: pogledni na [линк] naprimer, ili pak ako si na Linux /dev/urandom.
Inache na C parvo triabva da "zaseesh" generatora, t.e nekoia seed funkcia:
rand() ti dava psevdosluchaini chisla,
"istinski" sluchaini mojesh da poluchish, ama s neizvestni svoistva (razpredelenie) po niakolko nachina: pogledni na [линк] naprimer, ili pak ako si na Linux /dev/urandom.
Inache na C parvo triabva da "zaseesh" generatora, t.e nekoia seed funkcia:
#include <stdlib.h>
#include <stdio.h>
main(){
int i;
srandom(123456);
for(i=1;i<=100;i++){
printf("%d\n", random());
}
}
[\pre][\red]
Re: rand()
В ANSII С функцията rand() има следния вид:
int __cdecl rand (void)
{
return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}
Последователността на случайните числа се определя от началното значение на holdrand, което се задава с srand ().
Както се вижда, това не са истински случайни числа а псевдослучайни - получават се по алгоритъм. Те имат сравнително равномерно разпределение и стават за моделиране по метода на Монте-Карло например. За приложения в областта на криптографията обаче са слаби.
РС компютрите нямат "random device" което да им дава възможност да създават истински случайни числа. За quantum computer не знам дали има такова устройство.
Срещал съм един добър алгоритъм за генериране на случайни числа под Виндовс, който се закача с hook-функция за мишка, клавиатура, следи мрежовата активност и стартираните процеси, и дава отлични резултати.
Изобщо правенето на "истински" случайни числа си е цяла наука.
int __cdecl rand (void)
{
return(((holdrand = holdrand * 214013L + 2531011L) >> 16) & 0x7fff);
}
Последователността на случайните числа се определя от началното значение на holdrand, което се задава с srand ().
Както се вижда, това не са истински случайни числа а псевдослучайни - получават се по алгоритъм. Те имат сравнително равномерно разпределение и стават за моделиране по метода на Монте-Карло например. За приложения в областта на криптографията обаче са слаби.
РС компютрите нямат "random device" което да им дава възможност да създават истински случайни числа. За quantum computer не знам дали има такова устройство.
Срещал съм един добър алгоритъм за генериране на случайни числа под Виндовс, който се закача с hook-функция за мишка, клавиатура, следи мрежовата активност и стартираните процеси, и дава отлични резултати.
Изобщо правенето на "истински" случайни числа си е цяла наука.
Re: rand()
PP. Zabravih da spomena kakvo pravi /dev/urandom (/dev/random) pod Linux:
Prihvashta signali ot mrejavata karta i mishkata (dokolkoto mi e izvestno) i pravi niakoi preobrazuvania za da "homogenizira"
poluchenite sluchaini chisla, inache sam chel za harduerni ustroistva koito se prikachat dopalnitelno kam PC i proizvejdat sl. chisla
ot niakakav fizichen proces (radio shum, radioaktivan razpad i dr.) ama tebe tova edva li shte ti svarshi rabota.
Prihvashta signali ot mrejavata karta i mishkata (dokolkoto mi e izvestno) i pravi niakoi preobrazuvania za da "homogenizira"
poluchenite sluchaini chisla, inache sam chel za harduerni ustroistva koito se prikachat dopalnitelno kam PC i proizvejdat sl. chisla
ot niakakav fizichen proces (radio shum, radioaktivan razpad i dr.) ama tebe tova edva li shte ti svarshi rabota.