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

时间:2018-11-03 09:00:22

标签: c++ conditional divide-by-zero floating-point-exceptions

我有一个整数参数,该参数应控制事件在特定运行中发生了多少次。

例如,如果每次运行的迭代次数为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()时,我觉得应该比这更容易实现。 / p>

我尝试将一个条件条件设为if (FREQ > 0 && count < N_ITER/FREQ),但显然是因为除以零而抛出了Floating point exception

我也尝试过使用try / catch块,但是就杂乱而言,它与使用嵌套条件没有什么不同。有没有更优雅的解决方案?

1 个答案:

答案 0 :(得分:1)

如何重新安排条件?使用count < N_ITER/FREQ代替count*FREQ < N_ITER。如果为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;
        }
    }
}