Что нового

[Баг] Работа функции Random при Min=Max

C2H5OH

AutoIT Гуру
Сообщения
1 473
Репутация
333
В текущей реализации вызов функции Random с Min=Max считается ошибкой и функция возвращает 0.

Код:
$i = Random ( 5, 5, 1 )
MsgBox(0, "случайное значение от 5 до 5", "результат: " & $i & @CR & "код ошибки: " & @error)


Я считаю что такой вызов вполне корректен и в такой ситуации функция Random должна была бы вернуть Min, он же Max, он же 5 в данном конкретном примере.
 

Garrett

Модератор
Локальный модератор
Сообщения
3 999
Репутация
964
C2H5OH [?]
Я считаю что такой вызов вполне корректен
Корректнее IMHO будет так :smile:
Код:
MsgBox(0, "случайное значение от 5 до 5", "результат: 5")

IMHO ошибка потому, что нет явного диапазона чисел, из которого нужно сделать выбор.
 
Автор
C2H5OH

C2H5OH

AutoIT Гуру
Сообщения
1 473
Репутация
333
Конкретная ситуация:
я формирую список из $N линков, а потом из них случайным образом выбираю на какой кликнуть.
Код:
$i = Random ( 1, $N, 1 )


Так вот если у меня в списке оказался один линк, то я вызываю
Код:
$i = Random ( 1, 1, 1 )

И получаю что мне нужно взять нулевой линк, что ну никак не правильно.

НЕ ПУТАТЬ!
Если линков ноль, то у меня пойдёт вызов
Код:
$i = Random ( 1, 0, 1 )

Для которого результат 0 является корректным с точи зрения логики ситуации.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4 020
Репутация
622
лечится простым
Код:
Func RandomEx($iMin, $iMax, $flag)
    If $iMin = $iMax Then
        Return $iMin
    Else
        $tmp = Random($iMin, $iMax, $flag)
        Return SetError(@error, 0, $tmp)
    EndIf
EndFunc
 
Автор
C2H5OH

C2H5OH

AutoIT Гуру
Сообщения
1 473
Репутация
333
Kaster,
та я знаю, мне не сложно добавить проверку перед каждым вызовом Random.

Но я считаю что функция Random должна сама по другому реагировать на такие входные параметры. Потому что где-то в другом месте, в другое время, кто-нибудь ещё воспользуется функцией Random при Min=Max, но он не будет знать таких тонкостей и тоже будет предполагать что функция вернёт другое, более логичное значение. И тоже буде выискивать почему у него неправильно работает скрипт...
 

kaster

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

Yashied

Модератор
Команда форума
Глобальный модератор
Сообщения
5 379
Репутация
2 713
Я думаю это связано с ГСЧ, который используется в AutoIt и, собственно, не пренадлежит AuoIt.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8 473
Репутация
2 403
На эту тему есть тикет (на самом деле даже несколько).

Kaster [?]
все что реализуемо быстро и просто не будет добавлено в основной дистр
Добавлять не нужно, пусть хотя бы документацию обновят, добавив упоминание об этом поведении.
 
Верх