Особенности языка mql5, тонкости и приёмы работы - страница 135
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы очень внимательны, спасибо. Ошибся, не поставил скобки, так и пользовался бы "нечестной" функцией.
ЗЫ: внёс правки в исходное сообщение.
объясните пожалуйста, чем данная конструкция лучше банального rand()%max.
ЗЫ я понял что вы имеете ввиду.
Ну тогда - а если max>32767? Ведь Ваша функция имеет тип uint, а генерирует максимум, что и rand(), т.е. 32767
тогда уж лучше использовать что-то вроде
Вы очень внимательны, спасибо. Ошибся, не поставил скобки, так и пользовался бы "нечестной" функцией.
ЗЫ: внёс правки в исходное сообщение.
Вы хоть осознаете, что если кто-то захочет воспользоваться вашей честной функцией и напишет get_rand(10), то это будет работать в 3276 раз медленнее, чем rand()%10
Ну тогда - а если max>32767? Ведь Ваша функция имеет тип uint, а генерирует максимум, что и rand(), т.е. 32767
тогда уж лучше использовать что-то вроде
А MathRand() возвращает int, что если кто-то будет ждать от неё число с шестью нулями? Расcчитываю на некоторый уровень публики. Вот, вы и сами знаете как получить > 32767.
Просто часто не задумываясь пишут rand()%3, а увидят моё сообщение и осознают что там будет сдвиг вероятностей.
Вы хоть осознаете, что если кто-то захочет воспользоваться вашей честной функцией и напишет get_rand(10), то это будет работать в 3276 раз медленнее, чем rand()%10
Ну да, очень медленно, на цикл из миллиона вызовов повторный вызов while случится около 300 раз. Если ваши программы состоят из голого for() в котором дёргается get_rand(), то это будет критично, наверное.
А вы осознаёте, что планировщик ос отбирает у вас кучу процессорного времени и несоизмеримо с rand() тормозит выполнение? Раз вы так торопитесь, то вам нужен какой-нибудь дос.
А MathRand() возвращает int, что если кто-то будет ждать от неё число с шестью нулями? Расcчитываю на некоторый уровень публики. Вот, вы и сами знаете как получить > 32767.
Просто часто не задумываясь пишут rand()%3, а увидят моё сообщение и осознают что там будет сдвиг вероятностей.
Ну да, очень медленно, на цикл из миллиона вызовов повторный вызов while случится около 300 раз. Если ваши программы состоят из голого for() в котором дёргается get_rand(), то это будет критично, наверное.
А вы осознаёте, что планировщик ос отбирает у вас кучу процессорного времени и несоизмеримо с rand() тормозит выполнение? Раз вы так торопитесь, то вам нужен какой-нибудь дос.
А MathRand() возвращает int, что если кто-то будет ждать от неё число с шестью нулями? Расcчитываю на некоторый уровень публики. Вот, вы и сами знаете как получить > 32767.
Просто часто не задумываясь пишут rand()%3, а увидят моё сообщение и осознают что там будет сдвиг вероятностей.
Ну да, очень медленно, на цикл из миллиона вызовов повторный вызов while случится около 300 раз. Если ваши программы состоят из голого for() в котором дёргается get_rand(), то это будет критично, наверное.
А вы осознаёте, что планировщик ос отбирает у вас кучу процессорного времени и несоизмеримо с rand() тормозит выполнение? Раз вы так торопитесь, то вам нужен какой-нибудь дос.
Да не бойтесь Вы признавать свои ошибки. В этом нет ничего страшного и унизительного. Все мы ошибаемся. Это нормально.
Куда проще и полезней в плане восприятия сообщества сказать: "Да - был неправ. Спасибо." вместо попыток оправдываться.
Ведь такой вариант работает гораздо быстрее и универсальнее:
можно еще его убыстрить если перекодировать c ulong в uint, если не нужны большие числа( будет 3 rand() вместо пяти).
Да не бойтесь Вы признавать свои ошибки. В этом нет ничего страшного и унизительного. Все мы ошибаемся. Это нормально.
Куда проще и полезней в плане восприятия сообщества сказать: "Да - был неправ. Спасибо." вместо попыток оправдываться.
Ведь такой вариант работает гораздо быстрее и универсальнее:
можно еще его убыстрить если перекодировать c ulong в uint, если не нужны большие числа( будет 3 rand() вместо пяти).
Т.е. вас не смущает нечестность вашей реализации (по скорости, кстати, она будет много медленней)? Ну как знаете.
Зы: нечестность - генерация разных чисел диапазона с разной вероятностью.Т.е. вас не смущает нечестность вашей реализации (по скорости, кстати, она будет много медленней)? Ну как знаете.
Зы: нечестность - генерация разных чисел диапазона с разной вероятностью.Вы это серьёзно?
да
https://stackoverflow.com/questions/10984974/why-do-people-say-there-is-modulo-bias-when-using-a-random-number-generator
да
https://stackoverflow.com/questions/10984974/why-do-people-say-there-is-modulo-bias-when-using-a-random-number-generator
Т.е. Вы готовы поджечь 100-долларовую купюру, чтобы найти закатившуюся под кровать 10 центовую монетку?
Вы зря недооцениваете роль вероятностей. На многомиллионных итерациях эти "закатившиеся монетки" выльются вам во вполне осязаемые цифры. Тем более, ваш код очевидно нерационален при малых диапазонах (постоянно делать по пять вызовов rand() - это вот как-раз таки "поджигание купюры")
Полгода назад эту тему уже обсуждали на форуме, я предложил такой вариант:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Как получить случайное число в N-ном деапазоне ?
Alexey Navoykov, 2018.12.31 01:25
Прошлый мой код оказался некорректный. Перемудрил с разрядами. Вот правильный вариант, а заодно и более лаконичный: