Отговори на тема  [ 31 мнения ]  Отиди на страница 1, 2, 3  Следваща
Генератор на случайни числа 
Автор Съобщение
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение Генератор на случайни числа
Колеги ,ще ви бъда благодарен ,ако някой от вас ми прати програма на С или Асемблер за PIC16f84,която генерира случайни числа (да може да се задава максималната стойност.На мен ми трябва до 16) ,но без да ги повтаря или да бъдат близки и да включва и "0".Пробвах
мои измислени алгоритми с броячи ,но не става добре.Опитах и един код от интернет но също не ми хареса.Целта ми е да получа колкото се може по-голямо разнообразие от числа.


Вто Юни 27, 2006 1:41 pm
Профил
Ранг: Професионалист
Ранг: Професионалист
Аватар

Регистриран на: Сря Май 11, 2005 3:47 pm
Мнения: 534
Мнение Re: Генератор на случайни числа
Ugeen написа:
...


На какъв процесор работиш ?


Вто Юни 27, 2006 1:55 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение 
Работя с PIC16F84


Вто Юни 27, 2006 2:11 pm
Профил
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Сря Окт 26, 2005 7:17 pm
Мнения: 106
Местоположение: Sofia
Мнение 
имаш ли свободен пин на един от портовете.
какво значи да не бъдат близки?

незнам дали ще се получи ама пробвай все пак ........

значи ако имаш 1 свободен пин го правиш вход, без да му закачаш pullup или pulldown резистори
и го четеш тоя вход през фиксиран период от време и шивтваш резултата в една променлива
...
веднъж имах подобен проблем бях закачил един бутон на пика ама се беше откачил pullup-а и входа ту ми беше 1 ту 0(съвсем случайно), когато не е натиснат бутона :)

със брояч пак става ама там числата няма да са съвсем случайни


Вто Юни 27, 2006 2:37 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пон Сеп 27, 2004 9:22 am
Мнения: 15501
Местоположение: София
Мнение 
Случайни неща на тоя свят няма. В синхронните системи каквито са микроконтролерите пък съвсем. Това с пина е малко несериозно според мен, защото състоянието му наистина е недефинирано, но пък като забие в едната посока може и там да си остане. А и 1/2 фактор на случайност общо взето е крайно недостатъчно. Достатъчно псевдослучайно може да се получи при брояч и някоя по шашава формула.

_________________
"Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.


Вто Юни 27, 2006 3:52 pm
Профил ICQ
Ранг: Новодошъл
Ранг: Новодошъл

Регистриран на: Пон Яну 16, 2006 5:20 pm
Мнения: 122
Местоположение: гр. Горна Оряховица
Мнение 
Направих кръгов брояч ,който инкрементва на всяка обиколка през програмата .При натискане на бутон прочитам стойността му,но това не ми хареса никак,защото,в по вечето случаи ми дава едни и същи стойности (повтаря ги по няколко пъти) или крайните стойности и много рядко някъде по средата.Доколкото чета в нета,май това е задача с много повишена трудност,въпреки ,че изглежда проста работа.


Вто Юни 27, 2006 4:02 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Ное 12, 2004 3:38 pm
Мнения: 9103
Местоположение: Chicago, IL
Мнение 
Брояч до 16 доста често ще се повтаря ако питаш мен 8) . Чети таймера като ти потрябва число.


Вто Юни 27, 2006 4:07 pm
Профил
Ранг: Напреднал
Ранг: Напреднал
Аватар

Регистриран на: Пет Окт 21, 2005 8:45 am
Мнения: 499
Мнение 
Свободния пин има собствен капацитет и съпротивление. Дори и да ви се струва случайно превключването му, това може да се промени при определени външни влияния, например електрически полета, промяна на температурата и т.н. Тоест свободния пин е "прекалено случаен". Аз бих препоръчал външен генератор, добре екраниран и развързан по захранване. И на честота НЕ кратна на тактовата на процесора.
А най-добре таблица със случайни числа на незаетата част от паметта на процесора. Като таблицата се чете при натискане на бутон, без филтър на него. При натискане при всяко притреперване на контакта, процесора ще скача на нова стойност от таблицата и ще се получи доста добра "случайност".

_________________
Простотията е Божи дар, но човек не бива да парадира с подаръците си!


Вто Юни 27, 2006 4:15 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Ако има наистина вьзможност за вьншна намеса (бутон примерно) няма нищо по-лесно от един брояч до 16 на по висока честота и готово. Макар че как ли ще се дефинира по-висока честота, повечето от нас не могат да тактуват и на 300Hz :)
Правил сьм си симулатор на зарче с TTL-ки, дори такта се генерираше от 3 NAND-а R и C и чилсата бяха доста случайни :D , но това с вьншна намеса де. Друг е вьпросьт, че зарчетата не бяха много реално симулирани, понеже не се бях постарал да предвидя факта, че при два зара 7-цата (като сбор :)) се пада най-често, или поне би трябвало от гледна точна на статистиката 17% процента от всички хварляния някьде.


Вто Юни 27, 2006 4:24 pm
Профил WWW
Ранг: Популярен
Ранг: Популярен

Регистриран на: Чет Дек 01, 2005 10:42 pm
Мнения: 301
Мнение 
Това което може да пробваш е 4-битова хеш функция върху стойността на таймера и някаква стойност в системата която има случаен или псевдослучаен характер :) в общия случай, всичко базирано на таймера страда от недостатъка че мястото където ти трябват случайните числа се изпълнява циклично също и хваща едни и същи числа на таймера.
Другото което може да опиташ е някой от цикличните полиноми за CRC - при тях всяка следваща стойност зависи от предишната, и сравнително случайни числа може да получиш по метода дето навремето беше използван в стандартните библиотеки на борланд - инициализираш полинома със някакво число (например взето от таймера) и после няколко пъти цъкаш полинома ...
Най-накрая - потърси в гугъла "алгоритъм за получаване на псевдослучайни числа" :)


Вто Юни 27, 2006 4:49 pm
Профил
Ранг: Популярен
Ранг: Популярен

Регистриран на: Пон Дек 26, 2005 3:19 pm
Мнения: 336
Местоположение: Varna
Мнение 
Истинската случайност може да дойде само от външна намеса в случаен момент. Иначе няма отърване от повторения на целия пакет псевдослучайни числа. Ползвах онзи генератор от правец 82, и той всяка сутрин ми осигуряваше един и същ начален и редичка от текстове на програмата за радиотелеграфия. Нещата се оправиха когата когато склъпих един безкраен цилъл на теглене на RND, който се прекъсваше от ресета и тогава ми започваше програмата. То се знае че резултата е псевдо случаен, но поне текстовете не бяха запомнящи се :) . Някои ползват часовник и какво ли още не, но вързано ли е към един клок няма чиста случайност. Дриго важно е разпределението на изтеглените цисла. Ако пуснеш статистика за повечето генератори ще се хванеш за главата. Всичко зависи за какво ще го ползваш, нали няма да правиш тото :)
Успех :)

_________________
http://ds-portfolio.com/bg/


Вто Юни 27, 2006 6:24 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
zz_stefanov като спомена за тото-то :) занете ли, че преди няколко години на немското като му направили статистика и ... и те се хванали за главата. Оказало се, че радиуса на сверата, в която бьркат числата и реда на вкарването им вьтре до известна степен влияе на резултата.
Какьв бил номерьт, вьздушния поток подемал колоната с числа (мисля ше са общо 7 при 6/49) и при последователното вмькване на топките, вероятността да бьдат изтеглени началните и крайните числана всяка колона (1,2,6,7 примерно) била значително по-голяма поради факта, че при разбьркването те най-често оставали по периферията на сферата. Голяма шашма а :)
Някой да е правил статистика на бьлгарското :D


Вто Юни 27, 2006 8:39 pm
Профил WWW
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Ами сигурно не е , но не е труно да се направи, предполагам някъде ги има излезлите числа за последните години.
Относно случайните генератори, то как определяш дали работи както ти искаш или не, на колко числа гледаш разпределение. При условие че имащ само от 0-16 то наистина ако генератора генерира само 16 стойности хич не е добре. Има си методи за целта, изпозлва се голямо число коеот се скалира, това е по сигурно. Ако се разчетеш из нета ще намериш, аз преди три четери месеца доста рових по въпроса. Имаи хардуерни чипове, зависи за какво ти трябва.


Вто Юни 27, 2006 8:52 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Вто Дек 14, 2004 1:31 pm
Мнения: 3849
Мнение 
Тони ако не ти представлява проблем, кажи някой чип, Bookmarks ако си правил докато си ровил или го имаш в главата, ще ми е интересно да го видя.


Вто Юни 27, 2006 9:01 pm
Профил WWW
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Чет Ное 25, 2004 3:42 pm
Мнения: 913
Мнение ПРОТОН
Не възможно със математически методи генериране на случайни числа Псевдо случайни да във дълга редица да
но повтерението е неминуемо.

Ето какво генерира ПРОТОНА на командата RANDOM
26 думички.
Псевдо случайно число от 1 до 65535.
Можеш да си го обработиш математически за твойте цели.

Sorry, but the maximum filesize for all Attachments is reached. Please contact the Board Administrator if you have questions.

Неможах да кача 6к. Незнам защо ама не ме и интересува.

Ето ти най важната част от файла:

0000000C 00095 PBP#RND = 12
0000000D 00096 PBP#RNDH = 13
0000 00097 ORG 0
0000 2816 00098 GOTO START@
0001 080D 00099 RN@DM MOVF 13,W
0002 040C 00100 IORWF 12,W
0003 1903 00101 SKPNZ
0004 0A8C 00102 INCF 12,F
0005 3080 00103 MOVLW 128
0006 1A0C 00104 BTFSC 12,4
0007 068D 00105 XORWF 13,F
0008 190C 00106 BTFSC 12,2
0009 068D 00107 XORWF 13,F
000A 188C 00108 BTFSC 12,1
000B 068D 00109 XORWF 13,F
000C 0D0D 00110 RLF 13,W
000D 0D8C 00111 RLF 12,F
000E 0D8D 00112 RLF 13,F
000F 080C 00113 MOVF 12,W
0010 2811 00114 GOTO I@NT
0011 1383 00115 I@NT BCF 3,7
0012 1283 00116 I@NT2 BCF 3,5
0013 1303 00117 BCF 3,6
0014 0000 00118 NOP
0015 0008 00119 RETURN
0016 00120 START@
0016 00121 MAIN@PROG@START
00008 LIST
00009
0000000E 00010 _A = 14
0000000F 00011 _AH = 15
00000016 00012 F2_SOF EQU $ ; RNADOM.PRP
00000016 00013 F2_EOF EQU $ ; RNADOM.PRP
00000016 00014 F1_SOF EQU $ ; RNADOM.BAS
00000016 00015 F1_000012 EQU $ ; in [RNADOM.BAS] a= Random
0016 2001 00016 CALL RN@DM
0017 008E 00017 MOVWF _A
0018 080D 00018 MOVF PBP#RNDH,W
0019 008F 00019 MOVWF _AH
0000001A 00020 F1_EOF EQU $ ; RNADOM.BAS
00021 LIST
00022 END
MPASM 5.01 RNADOM.ASM 6-28-2006 9:49:44 PAGE 2



Протона има и команда SEED за Seed the random number generator, in order to obtain a more random result.
Ако искаш да използваш и нея дръпни си го и дерзай.


Сря Юни 28, 2006 10:19 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 31 мнения ]  Отиди на страница 1, 2, 3  Следваща

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 1 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни