2. Имею разумные соображения в тему, можно обсудить на досуге.
1. Хорошее решение, спасибо. Суть та же, что и у меня, но ты обошёлся одним разметочным массивом вместо двух - отсюда и выигрыш в скорости. Похоже. лучше уже ничего не сделаешь.
Хорошее решение, спасибо. Суть та же, что и у меня, но ты обошёлся одним разметочным массивом вместо двух - отсюда и выигрыш в скорости. Похоже. лучше уже ничего не сделаешь.
Выигрыш достигнут многими мелкими улучшениями. Можно и ещё ускорить чуток "по мелочи".
Например если при вызове рулетки заранее уменьшить на единицу второй параметр:
int Roulette(double &array[], int MaxIndex)
{
double p, sum=0, zero = array[MaxIndex] - 1.1;
for(int i=0; i!=MaxIndex; i++)
{
select[i] = sum += array[i] - zero;
}
// бросим "шарик"
p=RNDfromCI(0,sum);
// посмотрим, на какой сектор упал "шарик"for(int u=0;u!=MaxIndex;u++)
{ if(select[u]>=p) return(u);}
return -1;
}
А так:
?
Ускорил в полтора раза.
Ноль (в твоём случае "коэффициент") выбирается так же бестолково (почти "от балды").
// Как потенциальный юзер предлагаю ещё тщательно обдумать сей момэнт.
// Имею разумные соображения в тему, можно обсудить на досуге.
если вместо единицы при вычислении zero поставить 1.1 - результаты (численные, а не скоростные) будет полностью соответствовать твоим
Такой вопрос https://www.mql5.com/ru/forum/6343/page5#comment_177533 в этой теме уместен?
1. Ускорил в полтора раза.
2. Имею разумные соображения в тему, можно обсудить на досуге.
1. Хорошее решение, спасибо. Суть та же, что и у меня, но ты обошёлся одним разметочным массивом вместо двух - отсюда и выигрыш в скорости. Похоже. лучше уже ничего не сделаешь.
Ну разве что вынести за цикл разметку:
:)
2. Конечно.
Такой вопрос https://www.mql5.com/ru/forum/6343/page5#comment_177533 в этой теме уместен?
А вот так...
На вход подается массив с размерами секторов (сортировка массива не требуется).
Почему у вас там в массиве отрицательное число - не понял. Наверно разметка секторов?
Хорошее решение, спасибо. Суть та же, что и у меня, но ты обошёлся одним разметочным массивом вместо двух - отсюда и выигрыш в скорости. Похоже. лучше уже ничего не сделаешь.
Выигрыш достигнут многими мелкими улучшениями. Можно и ещё ускорить чуток "по мелочи".
Например если при вызове рулетки заранее уменьшить на единицу второй параметр:
получаем ещё вполне измеримую разницу
Но это далеко не всё. Настоящий выигрыш "по-крупному" впереди. Жди, отлажусь - выложу.
// здесь есть мелкий баг - уже пофиксен.
А вот так...
1. На вход подается массив с размерами секторов (сортировка массива не требуется).
2. Почему у вас там в массиве отрицательное число - не понял. Наверно разметка секторов?
1. Проблэм в том, что на вход подаются сырые данные. Их по ходы пьесы ещё только нужно превратить в размеры секторов. Это кагбэ часть задачи. :)
2. Да ни фига. Помучай joo, он признается, если надавишь как следует. А я отлаживаться пошёл. ;)
Результат не впечатлил?
Это по наивности. ;) Увеличь входной массив в 10000 раз - тогда обязательно впечатлит.
--
Жду сравнительных тестов. // на большом массиве.
;)
Жду сравнительных тестов. // на большом массиве.
Похоже не дождусь.. :)
Придётся опять самому:
Заодно причесал напоследок и засунул всё в класс. "Настройку" секторов рулетки вынес в CRoulette.Reset();