检查数字是否触及阈值

时间:2015-01-22 10:29:53

标签: c++ c math integer

我有一个VariableA(初始化为零),VariableB(初始化为常数整数X)

变量A不均匀地增加,例如:+ 1,+ 3,+ 7,+ 24 .......

我想检查变量A是否已经达到预定义的VariableB阈值,我尝试使用Mod运算符,但由于变量A以不均匀的格式增加,我无法准确检查@变量A已经越过变量B阈值。

例如: 案例1

VariableA - 12 VariableB - 20 - 输出 - A尚未达到阈值

案例2

VariableA - 19 VariableB - 20 - 输出 - A尚未达到阈值

案例3 VariableA - 25 VariableB - 20 - 输出 - A已触及当前阈值

案例4 VariableA - 41 VariableB - 20 - 输出 - A已触及阈值

案例5 VariableA - 48 VariableB - 20 - 输出 - A未触及下一个阈值,因为20 + 20 + 20没有发生。

编辑:

  

案例5变量A - 48变量B - 20 - 第一阈值   当VariableA大于或等于变量B(20)时将到达,   当变量A大于或等于时,第二个Threashold将到达   2XVariableB(40),当VariableA更大时,第三个阈值将达到   等于或等于3XVariableB(60)

请建议。 ..

3 个答案:

答案 0 :(得分:1)

int a = 0, b = 20;
while(...)
{
    increment(); 
    if(a >= b) //Reached threshold
    {
        do_stuff();  
        b += 20;
    }
}

你的问题不是很清楚,但可能是这样的?

(答案已编辑,因为我在& b初始化时错了)

答案 1 :(得分:0)

如果您只想在a增加时使用某个函数,这非常简单。

int foo(int* a, int b, int increment){
    const int bar = *a / b;

    *a += increment;
    return bar - *a / b;
}

这不仅可以告诉您,还有多少阈值a已提升。

const int bar = foo(&VariableA, VariableB, 13);

if(bar == 1){
    printf("VariableA has touched %s threshold", (VariableA < VariableB * 2 ? "the current" : "a"));
}else if(bar > 1){
    printf("VariableA has touched %d thresholds", bar);
}else{
    printf("VariableA has not touched %s", (VariableA < VariableB * 2 ? "the threshold yet" : "the next threshold"));
}

VariableA再次低于第一个阈值时,这也将处理增量更新中的负数。它还可以正确处理负数,而基于%的解决方案可能不会。

答案 2 :(得分:0)

(伪代码,未经测试)

int oldA, A, B, C;

oldA = A;
A += whatever;
C = A/B ; /* integer division on purpose */
if ( (oldA < C*B) && (A >= C*B) )
  printf "hit a threshhold\n";