检查数字是否达到阈值

Check if a number has touched threshold

本文关键字:阈值 是否 数字 检查      更新时间:2023-10-16

我有一个变量A(初始化为零),变量B(初始化为常量整数X)

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

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

例如:案例1

变量A - 12变量B - 20- 输出 - A 尚未触及阈值

案例2

变量A - 19变量B - 20- 输出 - A 尚未触及阈值

案例3变量A - 25变量B - 20- 输出 - A 已触及当前阈值

案例4变量 A - 41变量B - 20- 输出 - A 已触及阈值

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

编辑:

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

请建议...

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

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

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

如果你可以随时使用一个函数来递增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再次低于第一个阈值时,这也将处理增量更新中的负数。它还可以正确处理负数,而基于%的解决方案可能不会。

(伪代码,未测试)

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 threshholdn";