| SkIv | 
                        
			
			  
			
				 Сообщение
					#1				
			 
		 | 
	
        	
        		![]() Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: IVAN Репутация:    0           	 | 
       
			
			 Уважаемые прогерры, скжите пожалуйста как устроен выбор случайных чисел в функции random. 
			
			
					
		 | 
	
![]() ![]()  | 
	
| Altair | 
                        
			
			  
			
				 Сообщение
					#2				
			 
		 | 
	
        	
        		![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация:    45           	 | 
       
			
			 Используется таймер для получения случайного числа. 
			
			Таймер хранит текущее время в секундах... Длинное число, постоянно изменяется, из него можно брать псевдослучайные числа... Вот здесь есть информация про системный таймер и получение случайного числа. -------------------- Помогая друг другу, мы справимся с любыми трудностями! 
					
		"Не опускать крылья!" (С)  | 
	
| Malice | 
                        
			
			  
			
				 Сообщение
					#3				
			 
		 | 
	
        	
        		![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация:    20           	 | 
       
			
			 Сможешь доказать, что делается именно так ? На примере TP. 
			
			
					
		 | 
	
| Altair | 
                        
			
			  
			
				 Сообщение
					#4				
			 
		 | 
	
        	
        		![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация:    45           	 | 
       
			
			 Ну нужно дизассемблировать код и посмотреть что там, это не сложно. 
			
			Сам принцип основан на таймере, а точная реализация не важна... -------------------- Помогая друг другу, мы справимся с любыми трудностями! 
					
		"Не опускать крылья!" (С)  | 
	
| Malice | 
                        
			
			  
			
				 Сообщение
					#5				
			 
		 | 
	
        	
        		![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация:    20           	 | 
       
			
			 И всетаки ? Чтобы не быть голословным, так сказать. А так можно сказать, что рандом основан на какой нибудь хитрой функции, зависящей от предыдущего числа (ну умножили на что-то, сдвинули и т.п.) 
			
			
					
		 | 
	
| Бродяжник | 
                        
			
			  
			
				 Сообщение
					#6				
			 
		 | 
	
| 
        	
        		 Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 206 Пол: Мужской Репутация:    3           	 | 
       
			
			 В Turbo C таймер используется только для randomize(), видимо и в ТР тоже. А так-то последовательность псевдослучайная, строго повторяемая. Причем период повторения вполне реально исчерпать. У меня был знакомый, который экспериментировал с теорией вероятности и теорией чисел. Так вот у него была прога, где использовался random из Турбо Си. И он мне однажды говорит: "Слушай, а как оно случайные числа генерит? Я ему задал сгенерить матрицу MxN, потом удалил повторяющиеся строки, вышло S строк. Потом я ему задал матрицу Mx(2*N), удалил повторения - что такое! Опять S строк осталось, и при чем те же самые, что и в первый раз!" (К этому надо добавить. что матрицы у него были строк эдак на двести-триста тысяч и более). 
			
			
					
		Кстати, с наступающим всех!  | 
	
| SkIv | 
                        
			
			  
			
				 Сообщение
					#7				
			 
		 | 
	
        	
        		![]() Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: IVAN Репутация:    0           	 | 
       
			
			 Так все дело в таймере, а тогда как определяется величина этого таймера 
			
			
					
		Сообщение отредактировано: SkIv -  | 
	
| Altair | 
                        
			
			  
			
				 Сообщение
					#8				
			 
		 | 
	
        	
        		![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация:    45           	 | 
       
			
			 Цитата И всетаки ? Чтобы не быть голословным, так сказать. А так можно сказать, что рандом основан на какой нибудь хитрой функции, зависящей от предыдущего числа (ну умножили на что-то, сдвинули и т.п.) А вполне возможно что каждое следующее зависит от предыдущего какая разница? Суть в том, что первое число все равно с таймера возьмется. Так или иначе random основан на таймере. И что значит голословным? Я кинул ссылку на статью... -------------------- Помогая друг другу, мы справимся с любыми трудностями! 
					
		"Не опускать крылья!" (С)  | 
	
| Malice | 
                        
			
			  
			
				 Сообщение
					#9				
			 
		 | 
	
        	
        		![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация:    20           	 | 
       
			
			 А как быть с этим утверждением: 
			
			
					
		Цитата  Используется таймер для получения случайного числа. Таймер хранит текущее время в секундах... Длинное число, постоянно изменяется, из него можно брать псевдослучайные числа... ? Здесь не про первое число, а про все. Суть в том, что первое число все равно с таймера возьмется. Так или иначе random основан на таймере. Если не вызывать randomize, то даже первое число никак таймера не коснется. И что значит голословным? Я кинул ссылку на статью... Статья про то, как с помощь таймера сделать рандом. Но не говорящая, что именно таким способом работает стандартная функция Random. Сообщение отредактировано: Malice -  | 
	
| arhimag | 
                        
			
			  
			
				 Сообщение
					#10				
			 
		 | 
	
        	
        		![]() Знаток ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 424 Пол: Мужской Репутация:    2           	 | 
       
			
			 Используйте поиск, мне вольво кидал ссылки на функции рандома 
			
			-------------------- Чего хочет женщина – того хочет Бог 
					
		 | 
	
| Altair | 
                        
			
			  
			
				 Сообщение
					#11				
			 
		 | 
	
        	
        		![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация:    45           	 | 
       
			
			 Malice, я не собираюсь с тобой спорить, автор темы получит две версии и сам разберется, если ему это необходимо. 
			
			-------------------- Помогая друг другу, мы справимся с любыми трудностями! 
					
		"Не опускать крылья!" (С)  | 
	
| Malice | 
                        
			
			  
			
				 Сообщение
					#12				
			 
		 | 
	
        	
        		![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация:    20           	 | 
       
			
			 Хорошо, ты прав, спорить не надо. Но одна конкретная функция не может работать 2-мя способами, поэтому я приведу небольшой пример, на этом и покончим  
			
			
					
		 
 my_rnd.pas ( 826 байт )
Кол-во скачиваний: 590Проверено на TP, на других компиляторах может быть чуть иначе. Сообщение отредактировано: Malice -  | 
	
| xds | 
                        
			
			  
			
				 Сообщение
					#13				
			 
		 | 
	
        	
        		![]() N337 ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 737 Пол: Мужской Репутация:    26           	 | 
       
			
			 Очередное число псевдослучайной последовательности Random получает на основе предыдущего, взятого из переменной System.RandSeed. Начальное значение RandSeed - 0. Его можно изменить на "случайное" с помощью вызова Randomize, который просто записывает в RandSeed значение, возвращённое int 21h/ah = 2Ch. 
			
			-------------------- The idiots are winning. 
					
		 | 
	
| Bokul | 
                        
			
			  
			
				 Сообщение
					#14				
			 
		 | 
	
        	
        		![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация:    11           	 | 
       
			
			 xds, откуда такая инфа? Исходники копал?  
			
			-------------------- Лао-Цзы : 
					
		Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.  | 
	
| Lapp | 
                        
			
			  
			
				 Сообщение
					#15				
			 
		 | 
	
        	
        		![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация:    159           	 | 
       
			
			 xds, откуда такая инфа? Исходники копал? Bokul, это все совсем не секрет. Например, есть в том "Иллюстрированном самоучителе по Турбо Паскалю", ссылку на который я кидал (Приложение 4, модуль System). Malice, спасибо за пример. Еще интересно бы разобраться, как работает вызов без параметра.. Мне кажется, текущий вопрос можно немного трансформировать так: 1. Оценить качество стандартного ГСЧ. 2. Высказать предложения по его улучшению. -------------------- я - ветер, я северный холодный ветер 
					
		я час расставанья, я год возвращенья домой  | 
	
| Bokul | 
                        
			
			  
			
				 Сообщение
					#16				
			 
		 | 
	
        	
        		![]() Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 117 Пол: Мужской Реальное имя: Богдан Репутация:    11           	 | 
       
			
			 Я не о RandSeed (о ней еще Malice писал в подобной теме ), я обо этом:  int 21h/ah = 2Ch.. 
			
			P.S. Кстати почему тема в свободном? -------------------- Лао-Цзы : 
					
		Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.  | 
	
| Lapp | 
                        
			
			  
			
				 Сообщение
					#17				
			 
		 | 
	
        	
        		![]() Уникум ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 6 823 Пол: Мужской Реальное имя: Лопáрь (Андрей) Репутация:    159           	 | 
       
			
			 я обо этом: int 21h/ah = 2Ch.. Ну, это легко додумать, учитывая информацию об обращении к таймеру (то самое руководство, Приложение 4, модуль System, Процедуры и функции). P.S. Кстати почему тема в свободном? А просто модератор Свободного мышей не ловит.. Или чтоб спецы губу не раскатывали на увеличение своего количества полезных мессаджей.. -------------------- я - ветер, я северный холодный ветер 
					
		я час расставанья, я год возвращенья домой  | 
	
| Malice | 
                        
			
			  
			
				 Сообщение
					#18				
			 
		 | 
	
        	
        		![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация:    20           	 | 
       
			
			 Malice, спасибо за пример. Да не за что. Хотел просто вырезать кусок из дизасма, а потом причесал, а он возьми, да заработай Цитата   Еще интересно бы разобраться, как работает вызов без параметра.. Здесь тоже все просто: кроме функции random есть еще 2: Random_real и random_extended, вызываются в зависимости от использования (extended) или не использования сопроцессора. Цитата  Мне кажется, текущий вопрос можно немного трансформировать так: 1. Оценить качество стандартного ГСЧ. 2. Высказать предложения по его улучшению. Ну это надо выяснить через какой период повторится randseed, чем ближе к Dword - тем лучше  | 
	
| Malice | 
                        
			
			  
			
				 Сообщение
					#19				
			 
		 | 
	
        	
        		![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 705 Пол: Мужской Репутация:    20           	 | 
       
			
			 Ну это надо выяснить через какой период повторится randseed, чем ближе к Dword - тем лучше Проверил - повторился ровно через Dword, т.е. $FFFFFFFF.  | 
	
| SkIv | 
                        
			
			  
			
				 Сообщение
					#20				
			 
		 | 
	
        	
        		![]() Новичок ![]() Группа: Пользователи Сообщений: 26 Пол: Мужской Реальное имя: IVAN Репутация:    0           	 | 
       
			
			 Поспрашивал у знакомых и один мне выдал такую формулу r(i)=(r(i+1)*a+c)/m, где a,c,m константы и подбираются самостоятельно (около 2e16) , а первое число берется из какого либо системного показателя. 
			
			
					
		 | 
	
![]() ![]()  | 
	
 
  | 
		Текстовая версия | 4.11.2025 11:47 |