Что нового

Random(1, 1, 1) = 0

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
CreatoR [?]
А что мешает самим соорудить функцию с проверкой:
уже сооружали.
http://autoit-script.ru/index.php?topic=1392.msg10003#msg10003
тока скорость (на моей тачке) упала в два раза


Добавлено:
Сообщение автоматически объединено:

Garrett
Код:
_Rnd()
Func _Rnd()
	For $i = 0 to .5 Step 0.1
		$a = $i
		$b = 1 - $i
		ConsoleWrite(Random($a, $b) & @CRLF)
	Next
EndFunc
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Kaster [?]
Читал (бегло) прежде чем написать (как и всегда), я просто заключил всё в несколько слов :laugh:
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Kaster сказал(а):


Добавлено:
Сообщение автоматически объединено:

Garrett
Код:
_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

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Garrett [?]
Но позвольте где диапазон в [0.5, 0.5]?
такой же философский вопрос, как и о численной природе нуля.

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

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Kaster сказал(а):
Garrett [?]
Но позвольте где диапазон в [0.5, 0.5]?
такой же философский вопрос, как и о численной природе нуля.

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

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

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

timsky

Осваивающий
Сообщения
93
Репутация
28
Garrett [?]
В таком случае, нужно просто, при MIN = MAX возвращять @error = 1 а при MIN > Max возвращять @error = 2, но результат при этом IMHO должен оставаться 0.
И что толку от такого нововведения?

И к вопросу о производительности:
АвтоИт написан на с++ и я уверен, что проверка If $min <= $max, которую предложил Kaster съест на порядок меньше тактов, нежели огород, который прижется городить на АвтоИт.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
timsky
Ну, как вы не поймёте функция Random выдаёт вам результат исходя из ваших данных! А результат дайте мне любое число из диапазона чисел 1 или 2 или 3 или 4 равен нулю! Нет там других чисел, есть только одно единственное число, то которое вы задали, или одно и то же число, которое пришло в переменной $MIN и в переменной $MAX, и они поэтому равны одному единственному числу!
 
Автор
timsky

timsky

Осваивающий
Сообщения
93
Репутация
28
Garrett [?]
Нет там других чисел, есть только одно единственное число, то которое вы задали, или одно и то же число, которое пришло в переменной $MIN и в переменной $MAX, и они поэтому равны одному единственному числу!
Там два аргумента, которые в конкретной ситуации оказались равны.

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

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

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Garrett
те ЯП которые знаю, в такой тривиальной ситуации, как эта, выдают правильный результат - 1. а не 0. Отсюда можно сделать, либо о непомерной правильности AutoIt, как с философской так и с практической точек зрения, либо, что это обычный недочет. я склоняюсь ко второму
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Я согласен с Garrett'ом. По логике вещей, если я вызываю функцию Random(), то надеюсь получить действительно случайное число, а не предсказуемый результат. Если функция не может выдать случайное число из заданного мной диапазона, то она просто обязана выдать ошибку...

Random() возвращает равномерно распределенные числа, и площадь нормализованной ЧХ (вероятность попадания в интервал от $Min до $Max) в этом случае должна быть равна 1, т.е. ($Max - $Min) * $Hn = 1. Если $Min = $Max, то 0 * $Hn = 0, что и требовалось доказать. Получается, что при $Min = $Max вероятность не определена, и функция должна возвратить ошибку.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
timsky
Предупреждение
Не переходим на личности. Даже в шутку



Добавлено:
Сообщение автоматически объединено:

OffTopic:
Yashied
то есть ты склоняешься к первому? что AutoIt умнее всех? ;D
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
По моей логике:
Random выдаёт ВАМ результат, выраженный в числах и только.
Смотрит есть в диапазоне, числа, если результат TRUE = есть, то вытаскивает в рандомном порядке эти числа и выдает вам.

А про работу, Random выдал бы результат FALSE = тоесть выбора нет, идите молодой человек работайте! Вот моя логика!
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
Kaster, если честно, то мне все равно, что будет выдавать функция при $Min = $Max (0 или $Max), но если это не является случайным числом, то флаг @error обязательно должен быть установлен (опять же, мне не важно 1, 2 или 65535). IMHO это правильно.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Kaster сказал(а):
Garrett
те ЯП которые знаю, в такой тривиальной ситуации, как эта, выдают правильный результат - 1. а не 0. Отсюда можно сделать, либо о непомерной правильности AutoIt, как с философской так и с практической точек зрения, либо, что это обычный недочет. я склоняюсь ко второму

Да это так! Вопрос только почему.
Yashied как нельзя лучше объяснил, однако во многих ЯП это не так.
 
Автор
timsky

timsky

Осваивающий
Сообщения
93
Репутация
28
Garrett [?]
Не надо обижаться на ТЫкание, ибо это принято так в тырнете. На форумах сетевой этикет.


Yashied [?]
Random() возвращает равномерно распределенные числа, и площадь нормализованной ЧХ (вероятность попадания в интервал от $Min до $Max) в этом случае должна быть равна 1, т.е. ($Max - $Min) * $Hn = 1. Если $Min = $Max, то 0 * $Hn = 0, что и требовалось доказать. Получается, что при $Min = $Max вероятность не определена, и функция должна возвратить ошибку.
Да пусть возвращает ошибку, я не против, но в @error. А в качестве результата желательно чтобы возвращала хоть что-то из переданных ей параметров, а именно то самое единственное число, которое по стечению обстоятельств оказалось в обоих аргументах.

Кому нужно рельно 100% Рандом по всем канонам, тот будет проверять @error, но в простых житейских задачах, с коими я постоянно имею дело Рандом используется для Рандомного выбора из доступных вариантов, а АвтоИт в этом случае вообще возвращает 0.

Пример:

Код:
$rnd = Random($a, $b, 1)
Select
    Case $rnd = 1
        ;Что-то выполняется

    Case $rnd = 2
        ;Что-то выполняется

    Case $rnd = 3
        ;Что-то выполняется

    ; ит.д...
EndSelect


$a всегда как минимум равен еденице, но вот $b, например, зависит от ввода пользователя, который абсолютно не в курсе, как работает нормализация ЧХ и прочее.
И подобных случаев у меня было не мало. Если в других функциях идут навстречу реалиям, то почему бы и здесь не пойти?


Garrett [?]
Да это так! Вопрос только почему.
Yashied как нельзя лучше объяснил, однако во многих ЯП это не так.
Потому что нет ничего идеального и все должно соответствовать реалиям и необходимости.
 

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5,379
Репутация
2,724
timsky, я не знаю, почему Valik сначала сделал 1, а потом вернул 0. Он разработчик, ему видней. Но я думаю, что, так как принято почти во всех функциях, в случае ошибки возвращать 0, это сделано и для функции Random().


Добавлено:
Сообщение автоматически объединено:

timsky сказал(а):
Кому нужно рельно 100% Рандом по всем канонам, тот будет проверять @error...

Кому нужны действительно случайные числа, не будут проверять @error, а будут проверять $Min И $Max.

;)
 

SyDr

Сидра
Сообщения
651
Репутация
158
timsky, а проверка, меньше ли $b, чем $a есть где-то?
Ведь пользователю абсолютно всё равно на это.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
timsky [?]
Не надо обижаться на ТЫкание, ибо это принято так в тырнете. На форумах сетевой этикет.
Не в коем случае я не обиделся! Вот опять, ваша логика чисто житейская ;) Я просто, не накаляя обстановку выразил то что вам написал Kaster (он опередил меня :smile: ). Здесь идёт дискуссия, причём жаркая, и если в какой-нибудь теме более спокойной вы бы мне написали ты я даже бы не заметил. В данной ситуации, я расценил это просто как неуважения ко мне, а я его, по-моему, от вас не заслужил!

Да пусть возвращает ошибку, я не против, но в @error. А в качестве результата желательно чтобы возвращала хоть что-то из переданных ей параметров, а именно то самое единственное число, которое по стечению обстоятельств оказалось в обоих аргументах.

Вот тут я согласен на все 100%. Пусть возвращает массив, как это делают многие функции.

Потому что нет ничего идеального и все должно соответствовать реалиям и необходимости.

Вот тут вы повторяете мои слова, которые я всегда говорю людям, так или иначе имеющим отношения к творчеству. Но в программирование это не проходит. Тут должно быть всё чётко! Иначе "Терминатор" станет явью :smile:
 
Верх