генератор на..
27 отговора
10 прегледа
генератор на..
Ако ти трябват истински случайни числа, то чисто софтуерните решения са неподходящи. По интернет някъде се мотае cryptography-FAQ. Ако искаш потърси там идеи. Доколкото си спомням един възможен начин е ако имаш звукова карта със възможност за дигитализиране на звук да изключиш всякакви устройства от входа на картата и да запишеш това което се чете от входа й. Получените данни са с ниска ентропия, така че трябва допълнително да ги компресираш с някакъв алгоритъм и резултата е поток от случайни данни. Все пак доколкото си спомням не всички карти са подходящи, така че ако смяташ да ползваш този метод най-добре си намери FAQ-а и го прочети.
възможни ли са случайните числа
Повторенията сами по себе си не са проблем. Проблемът когато се окаже че между елементите на "случайната" има някаква зависимост (както е в твоето предложение за използване на системния таймер) и ние сме в състояние чрез анализ на тези елементи горе-долу да открием каква е зависимоста. В интернет съществува цял клас атаки които ползват т.нар. "tcp sequence number prediction". Основния момент при тези атаки е анализът на едно поле от пакетите получавани от машината-жертва и откриването на някаква зависимост между стойностите на полето в отделните пакети. Стойностите в това поле би трябвало да са случайни но в действителност всички машини ползват различни методи за генериране на псевдослучайни числа. Едни от най-уязвимите машини са... Windows машините. За генериране на случайните числа те ползват... текущото време. Доста учудващо, а?
Ти предлагаш да се ползват три различни функции, но и трите са функция на една променлива - текущото време, а дори и сто различни функции на една и съща променлива да ползваш няма да увеличиш "количеството случайност" в твоя генератор на случайни числа - същия ефект може и да се постигне чрез ползване на една достатъчно сложна функция.
генератор на..
или не сте ме разбрали правилно, или аз не съм обяснил добре
има разлика между СЛУЧАЙНИ и ПСЕВДОСЛУЧАЙНИ числа и ако не я знаете можете да питате. Penguin почти уцели. наистина между генерираните числа трябва да има зависимост. всяко число зависи от предишното и е въпрос на това функцията която ги генерира да е достатъчно сложна. А именно и това ми трябва.
генератор на..
Добре де, що не пробваш с криптографска хеш-функция - RipeMD, SHA или нещо подобно, и после да правиш mod M. Така всички числа ще са функия на първоначалния seed, който подаваш на хеш-функцията
Генератор
При някои програмни езици използуването на функцията Random с определен параметър води до генерирането на една и съща поредица от случайни числа, но във вашия случай се изисква пълно изчерпване на диапазона без повторение. Предлагам ви да го разбиете диапазона на N интервала, да запишете междинните стойности в масив, да "разбъркате" масива и да го четете последователно.
program Generator;
const
LO=...; {Долна граница на диапазона}
HI=...; {Горна граница на диапазона}
N=...; {Брой интервали в диапазона}
var
RAN: array [0..N] of real; {Псевдослучаен масив}
TEMP,STEP: real;
I,J: Longint;
begin
STEP:=(HI-LO)/N;
for I:=0 to N do RAN[I]:=LO+I*STEP; {Генериране на числата}
Randomize;
for I:=N downto 1 do {"Разбъкване" на числата}
begin
J:=Trunc(Random(I));
TEMP:=RAN[J];
RAN[J]:=RAN[I];
RAN[I]:=TEMP
end
end.
Изпълнението е просто, но иска памет и време при много големи N.
хмм
Tova e edin dobar nachin za generacia na psewdosluchaini chisla. V Knut moje da vidish na kakvi uslovia trjabva da orgovarjat a,c i M.