|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 11:00 pm
Генератор на случайни числа
| Автор |
Съобщение |
|
Ugeen
Ранг: Новодошъл
Регистриран на: Пон Яну 16, 2006 5:20 pm Мнения: 122 Местоположение: гр. Горна Оряховица
|
 Генератор на случайни числа
Колеги ,ще ви бъда благодарен ,ако някой от вас ми прати програма на С или Асемблер за PIC16f84,която генерира случайни числа (да може да се задава максималната стойност.На мен ми трябва до 16) ,но без да ги повтаря или да бъдат близки и да включва и "0".Пробвах
мои измислени алгоритми с броячи ,но не става добре.Опитах и един код от интернет но също не ми хареса.Целта ми е да получа колкото се може по-голямо разнообразие от числа.
|
| Вто Юни 27, 2006 1:41 pm |
|
 |
|
FiTTiLA
Ранг: Професионалист
Регистриран на: Сря Май 11, 2005 3:47 pm Мнения: 534
|
 Re: Генератор на случайни числа
На какъв процесор работиш ?
|
| Вто Юни 27, 2006 1:55 pm |
|
 |
|
Ugeen
Ранг: Новодошъл
Регистриран на: Пон Яну 16, 2006 5:20 pm Мнения: 122 Местоположение: гр. Горна Оряховица
|
Работя с PIC16F84
|
| Вто Юни 27, 2006 2:11 pm |
|
 |
|
denis_hasan
Ранг: Новодошъл
Регистриран на: Сря Окт 26, 2005 7:17 pm Мнения: 106 Местоположение: Sofia
|
имаш ли свободен пин на един от портовете.
какво значи да не бъдат близки?
незнам дали ще се получи ама пробвай все пак ........
значи ако имаш 1 свободен пин го правиш вход, без да му закачаш pullup или pulldown резистори
и го четеш тоя вход през фиксиран период от време и шивтваш резултата в една променлива
...
веднъж имах подобен проблем бях закачил един бутон на пика ама се беше откачил pullup-а и входа ту ми беше 1 ту 0(съвсем случайно), когато не е натиснат бутона
със брояч пак става ама там числата няма да са съвсем случайни
|
| Вто Юни 27, 2006 2:37 pm |
|
 |
|
Цецо
Ранг: Форумен бог
Регистриран на: Пон Сеп 27, 2004 9:22 am Мнения: 15501 Местоположение: София
|
Случайни неща на тоя свят няма. В синхронните системи каквито са микроконтролерите пък съвсем. Това с пина е малко несериозно според мен, защото състоянието му наистина е недефинирано, но пък като забие в едната посока може и там да си остане. А и 1/2 фактор на случайност общо взето е крайно недостатъчно. Достатъчно псевдослучайно може да се получи при брояч и някоя по шашава формула.
_________________ "Да еба и шибаната държава" мислеше си Гошо, докато се опитваше да улучи кофата за боклук от балкона на осмия етаж.
|
| Вто Юни 27, 2006 3:52 pm |
|
 |
|
Ugeen
Ранг: Новодошъл
Регистриран на: Пон Яну 16, 2006 5:20 pm Мнения: 122 Местоположение: гр. Горна Оряховица
|
Направих кръгов брояч ,който инкрементва на всяка обиколка през програмата .При натискане на бутон прочитам стойността му,но това не ми хареса никак,защото,в по вечето случаи ми дава едни и същи стойности (повтаря ги по няколко пъти) или крайните стойности и много рядко някъде по средата.Доколкото чета в нета,май това е задача с много повишена трудност,въпреки ,че изглежда проста работа.
|
| Вто Юни 27, 2006 4:02 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Брояч до 16 доста често ще се повтаря ако питаш мен  . Чети таймера като ти потрябва число.
|
| Вто Юни 27, 2006 4:07 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
Свободния пин има собствен капацитет и съпротивление. Дори и да ви се струва случайно превключването му, това може да се промени при определени външни влияния, например електрически полета, промяна на температурата и т.н. Тоест свободния пин е "прекалено случаен". Аз бих препоръчал външен генератор, добре екраниран и развързан по захранване. И на честота НЕ кратна на тактовата на процесора.
А най-добре таблица със случайни числа на незаетата част от паметта на процесора. Като таблицата се чете при натискане на бутон, без филтър на него. При натискане при всяко притреперване на контакта, процесора ще скача на нова стойност от таблицата и ще се получи доста добра "случайност".
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Вто Юни 27, 2006 4:15 pm |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Ако има наистина вьзможност за вьншна намеса (бутон примерно) няма нищо по-лесно от един брояч до 16 на по висока честота и готово. Макар че как ли ще се дефинира по-висока честота, повечето от нас не могат да тактуват и на 300Hz
Правил сьм си симулатор на зарче с TTL-ки, дори такта се генерираше от 3 NAND-а R и C и чилсата бяха доста случайни  , но това с вьншна намеса де. Друг е вьпросьт, че зарчетата не бяха много реално симулирани, понеже не се бях постарал да предвидя факта, че при два зара 7-цата (като сбор  ) се пада най-често, или поне би трябвало от гледна точна на статистиката 17% процента от всички хварляния някьде.
|
| Вто Юни 27, 2006 4:24 pm |
|
 |
|
Balkana
Ранг: Популярен
Регистриран на: Чет Дек 01, 2005 10:42 pm Мнения: 301
|
Това което може да пробваш е 4-битова хеш функция върху стойността на таймера и някаква стойност в системата която има случаен или псевдослучаен характер  в общия случай, всичко базирано на таймера страда от недостатъка че мястото където ти трябват случайните числа се изпълнява циклично също и хваща едни и същи числа на таймера.
Другото което може да опиташ е някой от цикличните полиноми за CRC - при тях всяка следваща стойност зависи от предишната, и сравнително случайни числа може да получиш по метода дето навремето беше използван в стандартните библиотеки на борланд - инициализираш полинома със някакво число (например взето от таймера) и после няколко пъти цъкаш полинома ...
Най-накрая - потърси в гугъла "алгоритъм за получаване на псевдослучайни числа" 
|
| Вто Юни 27, 2006 4:49 pm |
|
 |
|
zz_stefanov
Ранг: Популярен
Регистриран на: Пон Дек 26, 2005 3:19 pm Мнения: 336 Местоположение: Varna
|
Истинската случайност може да дойде само от външна намеса в случаен момент. Иначе няма отърване от повторения на целия пакет псевдослучайни числа. Ползвах онзи генератор от правец 82, и той всяка сутрин ми осигуряваше един и същ начален и редичка от текстове на програмата за радиотелеграфия. Нещата се оправиха когата когато склъпих един безкраен цилъл на теглене на RND, който се прекъсваше от ресета и тогава ми започваше програмата. То се знае че резултата е псевдо случаен, но поне текстовете не бяха запомнящи се  . Някои ползват часовник и какво ли още не, но вързано ли е към един клок няма чиста случайност. Дриго важно е разпределението на изтеглените цисла. Ако пуснеш статистика за повечето генератори ще се хванеш за главата. Всичко зависи за какво ще го ползваш, нали няма да правиш тото
Успех 
|
| Вто Юни 27, 2006 6:24 pm |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
zz_stefanov като спомена за тото-то  занете ли, че преди няколко години на немското като му направили статистика и ... и те се хванали за главата. Оказало се, че радиуса на сверата, в която бьркат числата и реда на вкарването им вьтре до известна степен влияе на резултата.
Какьв бил номерьт, вьздушния поток подемал колоната с числа (мисля ше са общо 7 при 6/49) и при последователното вмькване на топките, вероятността да бьдат изтеглени началните и крайните числана всяка колона (1,2,6,7 примерно) била значително по-голяма поради факта, че при разбьркването те най-често оставали по периферията на сферата. Голяма шашма а
Някой да е правил статистика на бьлгарското 
|
| Вто Юни 27, 2006 8:39 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Ами сигурно не е , но не е труно да се направи, предполагам някъде ги има излезлите числа за последните години.
Относно случайните генератори, то как определяш дали работи както ти искаш или не, на колко числа гледаш разпределение. При условие че имащ само от 0-16 то наистина ако генератора генерира само 16 стойности хич не е добре. Има си методи за целта, изпозлва се голямо число коеот се скалира, това е по сигурно. Ако се разчетеш из нета ще намериш, аз преди три четери месеца доста рових по въпроса. Имаи хардуерни чипове, зависи за какво ти трябва.
|
| Вто Юни 27, 2006 8:52 pm |
|
 |
|
HCL
Ранг: Форумен бог
Регистриран на: Вто Дек 14, 2004 1:31 pm Мнения: 3849
|
Тони ако не ти представлява проблем, кажи някой чип, Bookmarks ако си правил докато си ровил или го имаш в главата, ще ми е интересно да го видя.
|
| Вто Юни 27, 2006 9:01 pm |
|
 |
|
rumen
Ранг: Почетен член
Регистриран на: Чет Ное 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 |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 0 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|