int pow(int a, int b)
//@requires b>= 0;
{
if (b == 0) return 1;
return pow(a, b-1) *a;
}
:warning: check what pow(a, b-1) returns when b==0; we certainly want it to return a value other than 1 and a function. The function above will return 1 and exit.
int f(int x, int y)
//@requires y>=0
//@ensures \result == pow(a, b)
{
int a = x;
int b = y;
int r = 1;
while (y>1) {
if (y % 2 == 1) {
r = x*r;
}
x = x*x;
y = y/2;
}
}
:warning: //@requires should be before curly braces :warning: \result can only take the value after the function runs, so you have to copy the value. Otherwise, it should raise an error.
:warning: one-line comment @requires should be like the following, remember the @
:warning: the first function is O(n)
while the second is O(log n)
/*@requires e>=0 @*/
:question: does c0 only have int?
:question: when does =
assigns a pointer, not a actual value
Table of Content