Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Lua] Генерация случайных чисел, Почему-то не работает... 
:(
    Опции темы
cleg
Дата 22.9.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.9.2006

Репутация: 1
Всего: 3



По идее должно быть нормально так:

Код

math.randseed = os.time()
print(math.random(10))


то есть проинициализировали генератор случайных чисел и пытаемся генерировать. но всегда получается 1. какое бы значение randseed я не присваивал. 
в чем тут собака порылась?
PM MAIL   Вверх
Cr@$h
Дата 22.9.2006, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 4
Всего: 41



Цитата

Функции random и randomseed представляют собой интерфейсы к простому генератору случайных чисел, предоставляемому ANSI C (соответвенно функции rand и srand). Не может быть дпно никаких гарантий касательно их статистических свойств. Функция random при вызове без параметров возвращает псевдослучайное вещественное число в диапазоне [0,1). При вызове с параметром n, random вернет псевдослучайное целое число в диапазоне [1,n]. При вызове с двумя параметрами l и u, random вернет псевдослучайное целое число в диапазоне [l,u]. Границы всегда входят в диапазон. 

Цитата

os.time ([table])

Returns the current time when called without arguments, or a time representing the date and time specified by the given table. This table must have fields year, month, and day, and may have fields hour, min, sec, and isdst (for a description of these fields, see the os.date function). 

The returned value is a number, whose meaning depends on your system. In POSIX, Windows, and some other systems, this number counts the number of seconds since some given start time (the "epoch"). In other systems, the meaning is not specified, and the number returned by time can be used only as an argument to date and difftime.

Кодом
Код

print(math.random(10))

Ты пытаешься генерить целое число из диапазона [1, 10]. А что если начальное значение
Код

math.randseed = os.time()

Интерпретируется для последовательности целых чисел одинаково (да и вообще, может). Посмотри, что возвращает os.time(). Например, гипотетически, если бы она возвращала число из интервала [0, 1], то, возможно, интерпретировалось бы как 0 для целых чисел, а значит последовательность начиналась бы с одного места. Это гипотетический пример. Попробуй в начале сам, в ручную задават seed и посмотри, работает ли. Если работает, выводи после установкии seed на экран os.time() и, если можно, сам math.randseed.
PM MAIL ICQ   Вверх
cleg
Дата 22.9.2006, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.9.2006

Репутация: 1
Всего: 3



так я ж написал - какой бы randseed не ставил - не канает. результат один.
поиск по wiki Lua подсказал решение:

Код

math.randomseed( os.time() )
print(math.random(100))
print(math.random(100))


 smile 

оказывается randomseed - функция а не свойство. но странно почему тогда интерпретатор не ругается.
и второй интересный сюрприз - первое значение math.random() всегда одинаковое. а псевдослучайное значение получается только раза с третьего.

так что тему можно закрывать.
PM MAIL   Вверх
Cr@$h
Дата 22.9.2006, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 4
Всего: 41



Цитата(cleg @  22.9.2006,  19:11 Найти цитируемый пост)
оказывается randomseed - функция а не свойство. но странно почему тогда интерпретатор не ругается.

Ха, ничего себе. А, может, интерпретатор вообще не ловит такое.
Цитата(cleg @  22.9.2006,  19:11 Найти цитируемый пост)
и второй интересный сюрприз - первое значение math.random() всегда одинаковое. а псевдослучайное значение получается только раза с третьего

Дело в том, что если встретилось одинаковое число у двух последовательностей, то потом они совпадают, т.к. следующее число зависит от предыдущего. Странно всё это.
PM MAIL ICQ   Вверх
cleg
Дата 25.9.2006, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 11.9.2006

Репутация: 1
Всего: 3



Да, в общем-то присваивание значения методу в рамках Lua - допустимая операция. Он трактует это как изменение ссылки.
А вот почему случайное число в псевдослучайной последовательности всегда второе - непонятно! :-)

ЗЫ Когда закончу разбираться с Lua выложу оформленые мысли. Язык интересный...
PM MAIL   Вверх
Cr@$h
Дата 25.9.2006, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


Профиль
Группа: Участник Клуба
Сообщений: 1693
Регистрация: 3.4.2005
Где: Санкт-Петербург, Россия

Репутация: 4
Всего: 41



Цитата(cleg @  25.9.2006,  15:02 Найти цитируемый пост)
А вот почему случайное число в псевдослучайной последовательности всегда второе - непонятно!

А первое всегда 1? Хм. smile Да, неочень хорошо, да и не встречал нигде. Он помнит seed внутри, но почему то использует его только на второй раз...
Цитата(cleg @  25.9.2006,  15:02 Найти цитируемый пост)
Когда закончу разбираться с Lua выложу оформленые мысли. Язык интересный... 

Давай, будет интересно многим, уверен. Если что у нас вики есть, в Viki и раздел потом можно будет создать при необходимости.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Добро пожаловать в раздел "Другие языки" форума Vingrad!

Void
Void

Раздел посвящён различным языкам программирования, для которых (в силу невысокой популярности) нет отдельного раздела (GPSS, Lua, MATLAB, Ada, Forth, Smalltalk, Tcl, REXX, AWK и др.)

  • Обязательно следуйте правилам Форума.
  • Пожалуйста, прочитайте и следуйте рекомендациям по работе в разделе и навигации по Форуму.
  • Для вставки текстов исходных кодов используйте подсветку синтаксиса из выплывающего списка Код в форме ответа. Если Ваш язык в списке не представлен, то используйте тег: [code=ваш_язык]код[/code], например, [code=ada]код[/code]. Если в будущем подсветка синтаксиса для указанного языка будет реализована, исходный код преобразится.
  • Помните, один вопрос - одна тема.

Приятного времяпрепровождения! С уважением, Void, kemiisto .

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Другие языки | Следующая тема »


 




[ Время генерации скрипта: 0.0735 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.