У меня есть целочисленный параметр, который должен контролировать, сколько раз в конкретном прогоне происходит событие.
Например, если количество итераций для каждого прогона равно 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, но с точки зрения беспорядка он ничем не отличался от использования вложенных условных выражений. Есть ли более элегантное решение этой проблемы?
if (FREQ > 0 && count < N_ITER/FREQ)
, но, очевидно, это вызвало исключение с плавающей запятой из-за деления на ноль. Это невозможно.&&
замкнуло бы и предотвратило оценкуN_ITER/FREQ
, если быFREQ > 0
было ложно. - person HolyBlackCat   schedule 03.11.2018continue
помогает уменьшить вложенность - person Mateen Ulhaq   schedule 03.11.2018catch
его. Скорее, это сигнал. - person HolyBlackCat   schedule 03.11.2018SIGFPE
. Демонстрация: coliru.stacked-crooked.com/a/3b7791e2684a52a2 - person HolyBlackCat   schedule 03.11.2018