Автор Тема: Random(1, 1, 1) = 0  (Прочитано 16704 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн timsky [?]

  • Осваивающий
  • **
  • Сообщений: 93

  • Автор темы
  • Репутация: 28
  • Пол: Мужской
    • Персональный блог об AutoIt, Miranda, железе, полезном софте и прочей лабуде...
    • Награды
Re: Random(1, 1, 1) = 0
« Ответ #15, Отправлен: Март 26, 2010, 16:02:10 »
Полностью согласен с Kaster.
Сделать нужно всего одну поправку: Если Min и Max равны, то выдать это число.
Вот например, сейчас пишу скрипт, где Min либо меньше, либо на крайняк может быть равен Max, а сколько лишних телодвижений приходится делать, чтобы обойти это ограничение. И это уже не первый раз, когда сталкиваюсь с этой проблемой.

Мне кажется, что логика должна быть таковой:
Функция возвращает рандомное значение в диапазоне от Min до Max.
Естественно, когда Min > Max, то это ошибка. Но когда эти аргументы равны, то диапазон просто сужается до одного единственного значения.

Ну и, наконец, во втором тикете Valik конкретно указал, что в какой-то бетуе эта функция УЖЕ возвращает 1.
http://timsky.ru - Персональный блог об AutoIt, Miranda, железе, полезном софте и прочей лабуде...

Русское сообщество AutoIt

Re: Random(1, 1, 1) = 0
« Ответ #15 Отправлен: Март 26, 2010, 16:02:10 »

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3999
  • Репутация: 963
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #16, Отправлен: Март 26, 2010, 16:20:11 »
Полностью согласен с Kaster.
Сделать нужно всего одну поправку: Если Min и Max равны, то выдать это число.
Вот например, сейчас пишу скрипт, где Min либо меньше, либо на крайняк может быть равен Max, а сколько лишних телодвижений приходится делать, чтобы обойти это ограничение. И это уже не первый раз, когда сталкиваюсь с этой проблемой.

Мне кажется, что логика должна быть таковой:
Функция возвращает рандомное значение в диапазоне от Min до Max.
Естественно, когда Min > Max, то это ошибка. Но когда эти аргументы равны, то диапазон просто сужается до одного единственного значения.

Ну и, наконец, во втором тикете Valik конкретно указал, что в какой-то бетуе эта функция УЖЕ возвращает 1.

Проверка на равенство это хорошо, но скажите, пожалуйста, по логике, есть смысл выбирать случайное число, из диапазона который состоит из одного числа? Где логика? Если вам нужно это число так задайте его прямо!

Скорблю и помню.




Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #17, Отправлен: Март 26, 2010, 16:25:06 »
Garrett
в ручную - нет. но если операция изъятия произвольного числа содержится в другой функции, причем пределы являются параметрами большой функции тоже, то становится накладным проводить каждый раз сравнение пределов на идентичность становится накладным
Конференция посвященная AutoIt на jabber.ru - [email protected]
Как попасть на конференцию читаем тут


Русское сообщество AutoIt

Re: Random(1, 1, 1) = 0
« Ответ #17 Отправлен: Март 26, 2010, 16:25:06 »

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3999
  • Репутация: 963
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #18, Отправлен: Март 26, 2010, 16:34:00 »
Kaster если вас не затруднит, приведите пример, пожалуйста. Просто мне на самом деле трудно представить, где понадобится значение:
Код: AutoIt [Выделить]
Random(1,1,1)

Если 1 это и есть 1

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #19, Отправлен: Март 26, 2010, 16:37:23 »
А что мешает самим соорудить функцию с проверкой:

Код: AutoIt [Выделить]
ConsoleWrite(_Random(1, 1) & @LF)

Func _Random($iMin=0, $iMax=1, $iFlag=0)
    If $iMin < $iMax Then
        Return Random($iMin, $iMax, $iFlag)
    EndIf
   
    Return $iMax
EndFunc



Правила, Поиск, Супер тема


AutoIt is simple, subtle, elegant.


«Не оказываю тех. поддержку через ПМ/ICQ, и по электронной почте - для этого есть форум. (C)»
«Законы Мэрфи неоспоримы!»


Мои работы

Русское сообщество AutoIt

Re: Random(1, 1, 1) = 0
« Ответ #19 Отправлен: Март 26, 2010, 16:37:23 »

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #20, Отправлен: Март 26, 2010, 16:40:25 »
CreatoR  [?]
Цитировать
А что мешает самим соорудить функцию с проверкой:
уже сооружали.
http://autoit-script.ru/index.php?topic=1392.msg10003#msg10003
тока скорость (на моей тачке) упала в два раза


Добавлено: Март 26, 2010, 16:45:31
Garrett
Код: AutoIt [Выделить]
_Rnd()
Func _Rnd()
    For $i = 0 to .5 Step 0.1
        $a = $i
        $b = 1 - $i
        ConsoleWrite(Random($a, $b) & @CRLF)
    Next
EndFunc

« Последнее редактирование: Март 26, 2010, 16:45:31 от Kaster, Причина: Объединение сообщений »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #21, Отправлен: Март 26, 2010, 17:03:46 »
Kaster  [?]
Цитировать
скорость (на моей тачке) упала в два раза
Этого следовало ожидать, за функционал нужно платить.

Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #22, Отправлен: Март 26, 2010, 17:10:46 »
OffTopicCreatoR  [?]
Цитировать
Этого следовало ожидать, за функционал нужно платить.
читай всю тему  ;D

Русское сообщество AutoIt

Re: Random(1, 1, 1) = 0
« Ответ #22 Отправлен: Март 26, 2010, 17:10:46 »

Оффлайн CreatoR [?]

  • Администратор
  • *
  • Сообщений: 8082
  • Репутация: 2314
  • Пол: Мужской
  • AutoIt is simple, subtle, elegant
    • CreatoR's Lab
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #23, Отправлен: Март 26, 2010, 17:30:32 »
Kaster  [?]
Цитировать
читай всю тему
Читал (бегло) прежде чем написать (как и всегда), я просто заключил всё в несколько слов :laugh:

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3999
  • Репутация: 963
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #24, Отправлен: Март 26, 2010, 17:35:41 »


Добавлено: Март 26, 2010, 16:45:31
Garrett
Код: AutoIt [Выделить]
_Rnd()
Func _Rnd()
    For $i = 0 to .5 Step 0.1
        $a = $i
        $b = 1 - $i
        ConsoleWrite(Random($a, $b) & @CRLF)
    Next
EndFunc


И в чём здесь суть?
В этом примере вы в цикле задаёте параметры функции Random и получаете рандомное число из диапазонов [0, 1] [0.1, 0.9] [0.2, 0.8] [0.3, 0.7] [0.4, 0.6] [0.5, 0.5]
Но позвольте где диапазон в [0.5, 0.5]?
0.5 вам может вернуть диапазон чисел начиная с 0.4 по 0.6

P.S. Может я чего-то, и упускаю, но IMHO не вижу смысла писать Random(1,1,1) так как это и есть 1.


Оффлайн Kaster [?]

  • Бритва, Бритва Оккама
  • Глобальный модератор
  • *
  • Сообщений: 4020
  • Репутация: 622
  • Пол: Мужской
  • Мой Аватар, он лучший самый
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #25, Отправлен: Март 26, 2010, 17:45:02 »
Garrett  [?]
Цитировать
Но позвольте где диапазон в [0.5, 0.5]?
такой же философский вопрос, как и о численной природе нуля.

Цитировать
Может я чего-то, и упускаю
да. то, что параметрами функции являются не всегда определенные числа. в большинстве своем это некие переменные. которые могут принимать любые значения. речь именно про это. если проверять каждое значение, то потеря производительности налицо. функция должна возвращать правильное значение независимо от того, насколько оно тривиально.

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3999
  • Репутация: 963
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #26, Отправлен: Март 26, 2010, 18:07:13 »
Garrett  [?]
Цитировать
Но позвольте где диапазон в [0.5, 0.5]?
такой же философский вопрос, как и о численной природе нуля.

Ну, да  :) 0 = число, ноль = тоже результат!

Цитировать
Может я чего-то, и упускаю
да. то, что параметрами функции являются не всегда определенные числа. в большинстве своем это некие переменные. которые могут принимать любые значения. речь именно про это. если проверять каждое значение, то потеря производительности налицо. функция должна возвращать правильное значение независимо от того, насколько оно тривиально.

Вот теперь я наконец понял что вы так взъелись на Random  :laugh: (или может, я, плохо вникал в суть дискусии  :-[ )
В таком случае, нужно просто, при MIN = MAX возвращять @error = 1, а при MIN > Max возвращять @error = 2, но результат при этом IMHO должен оставаться 0.

Оффлайн timsky [?]

  • Осваивающий
  • **
  • Сообщений: 93

  • Автор темы
  • Репутация: 28
  • Пол: Мужской
    • Персональный блог об AutoIt, Miranda, железе, полезном софте и прочей лабуде...
    • Награды
Re: Random(1, 1, 1) = 0
« Ответ #27, Отправлен: Март 26, 2010, 18:09:44 »
Garrett  [?]
Цитировать
В таком случае, нужно просто, при MIN = MAX возвращять @error = 1 а при MIN > Max возвращять @error = 2, но результат при этом IMHO должен оставаться 0.
И что толку от такого нововведения?

И к вопросу о производительности:
AutoIt написан на с++ и я уверен, что проверка If $min <= $max, которую предложил Kaster съест на порядок меньше тактов, нежели огород, который прижется городить на AutoIt.
« Последнее редактирование: Март 26, 2010, 18:18:37 от timsky »

Оффлайн Garrett [?]

  • Глобальный модератор
  • *
  • Сообщений: 3999
  • Репутация: 963
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Random(1, 1, 1) = 0
« Ответ #28, Отправлен: Март 26, 2010, 18:22:24 »
timsky
Ну, как вы не поймёте функция Random выдаёт вам результат исходя из ваших данных! А результат дайте мне любое число из диапазона чисел 1 или 2 или 3 или 4 равен нулю! Нет там других чисел, есть только одно единственное число, то которое вы задали, или одно и то же число, которое пришло в переменной $MIN и в переменной $MAX, и они поэтому равны одному единственному числу!

Оффлайн timsky [?]

  • Осваивающий
  • **
  • Сообщений: 93

  • Автор темы
  • Репутация: 28
  • Пол: Мужской
    • Персональный блог об AutoIt, Miranda, железе, полезном софте и прочей лабуде...
    • Награды
Re: Random(1, 1, 1) = 0
« Ответ #29, Отправлен: Март 26, 2010, 18:42:00 »
Garrett  [?]
Цитировать
Нет там других чисел, есть только одно единственное число, то которое вы задали, или одно и то же число, которое пришло в переменной $MIN и в переменной $MAX, и они поэтому равны одному единственному числу!
Там два аргумента, которые в конкретной ситуации оказались равны.

Это ты не понимаешь. Объясню на пальцах:
1) Вот у тебя есть выбор из разных вариантов работы и из них нужно выбрать одну. Ты выберешь какую-то из диапазона.
2) А вот если есть только одно место, где тебя возьмут на работу. И что? С голоду будешь помирать, либо пойдешь на работу?

Судя по твоей логике будешь с голоду помирать :D

Русское сообщество AutoIt

Re: Random(1, 1, 1) = 0
« Ответ #29 Отправлен: Март 26, 2010, 18:42:00 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
2 Ответов
2873 Просмотров
Последний ответ Сентябрь 05, 2011, 21:40:37
от jilexandr
10 Ответов
6303 Просмотров
Последний ответ Январь 19, 2012, 23:56:47
от vadimkou
1 Ответов
1854 Просмотров
Последний ответ Февраль 28, 2013, 13:32:45
от madmasles
4 Ответов
2832 Просмотров
Последний ответ Май 19, 2013, 14:37:02
от takse
1 Ответов
814 Просмотров
Последний ответ Февраль 25, 2015, 00:59:58
от CreatoR
5 Ответов
1635 Просмотров
Последний ответ Сентябрь 29, 2015, 23:31:43
от Kaster
4 Ответов
1045 Просмотров
Последний ответ Декабрь 16, 2015, 21:00:56
от ra4o
2 Ответов
1359 Просмотров
Последний ответ Январь 16, 2016, 15:10:04
от chernobeloe
5 Ответов
1486 Просмотров
Последний ответ Май 31, 2016, 23:35:44
от inververs
2 Ответов
268 Просмотров
Последний ответ Ноябрь 18, 2018, 12:33:05
от mikzin