У меня есть целочисленный параметр, который должен контролировать, сколько раз в конкретном прогоне происходит событие.
Например, если число итераций для каждого прогона равно 1000, тогда параметр FREQ
будет равен 5, если бы я хотел, чтобы событие происходило каждые 200 итераций. Тем не менее, я хочу иметь возможность изменять количество итераций, но сохранять соотношение одинаковым, а также иметь возможность установить для параметра FREQ
значение 0, если я не хочу, чтобы событие вообще происходило.
Вот что я сейчас использую:
int N_ITER = 1000;
int FREQ = 5;
void doRun(){
int count = 0;
for (int i = 0; i < N_ITER; ++i){
if (FREQ > 0){
if (count < N_ITER/FREQ){
doSomething();
count++;
}
else{
doSomethingElse();
count = 0;
}
}
else{
doSomething();
}
}
}
Это прекрасно работает, но не подходит, если у меня есть вложенные условные выражения, особенно когда у меня есть две партии doSomething()
, я чувствую, что это может быть выполнено легче, чем это.
Я пытался сделать одно условное if (FREQ > 0 && count < N_ITER/FREQ)
, но, очевидно, бросил Floating point exception
из-за деления на ноль.
Я также пытался использовать блок try / catch, но с точки зрения беспорядка он не отличался от использования вложенных условных выражений. Есть ли более элегантное решение этой проблемы?