在没有太多条件句的情况下,我如何避免被零除



我有一个整数参数,用来控制事件在特定运行中发生的次数。

例如,如果每次运行的迭代次数是1000,那么如果我希望每200次迭代发生一次事件,那么参数FREQ将是5。但是,我希望能够更改迭代次数,但保持比率不变,并且如果我根本不希望事件发生,还希望能够将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块,但就混乱程度而言,它与使用嵌套条件句没有什么不同。这个问题有更优雅的解决方案吗?

重新安排条件如何?使用count*FREQ < N_ITER而不是count < N_ITER/FREQ。如果是FREQ = 0,则表达式仍然为true。

int N_ITER = 1000;
int FREQ = 5;
void doRun() {
int count = 0;
for (int i = 0; i < N_ITER; ++i) {
if (count*FREQ < N_ITER) {
doSomething();
count++;
} else {
doSomethingElse();
count = 0;
}
}
}

相关内容

最新更新