Java循环不变量

时间:2011-05-23 14:40:32

标签: java logarithm invariants loop-invariant

int logarithmCeiling(int x) {
    int power = 1;
    int count = 0;

    while (power < x) {
        power = 2 *power;
        count = count +1;
    }
    return count;
}

上面的代码是Java中用于计算并使用while循环返回给定正整数的较低对数的方法。我如何为上面的循环提供不变量?即每次循环体结束时,它在开始之前保持,以及循环条件的否定。

4 个答案:

答案 0 :(得分:1)

电源总是等于循环开始和结束时的2 ^计数。对于否定,当循环结束时,x <= power = 2 ^ count。

答案 1 :(得分:0)

power的值与count的值之间存在简单的关系:power = 2 count 。这保持在循环的开始和结束,但不在循环体中的某些位置。

答案 2 :(得分:0)

查找始终为真的变量或条件。每个迭代计数总是递增1,并且幂总是乘以2.因为函数的目的是找到给定参数的较低对数,你可以说循环不变量是count总是等于对数的x,向下舍入。另一个是计数总是等于幂的对数。

答案 3 :(得分:0)

我猜你正在寻找一种适用于证明方法部分正确性的不变量?否则“true”或“false”总是不变量。我会选择这样的东西:

I: {(power <= x) AND (power == 2 ^ count) AND (x > 2 ^ count -1) AND (power >= 1)}

r.h.s.可以从初始化中隐含,并有助于确保x的下限。 与否定的循环条件一起,您可以在以后暗示。

{(x <= 2 ^ count) AND (x > 2 ^ (count -1))}

这正是您想要显示整个函数的部分正确性。