#include <perms.h>
// Edinburgh IMP77 Compiler - Version 8.4
//
// 1 %begin
int main(int argc, char **argv) { /*%begin*/
_imp_initialise(argc, argv);
// 2 %predicate almost equals(%real left, right)
int ALMOSTEQUALS(float LEFT, float RIGHT) {
// 3 %true %if left * 0.999999 <= right <= left * 1.000001
{
// Double-sided test on RIGHT (Part I)
float tmp;
if (LEFT * 0.999999 > (tmp = RIGHT)) goto L_0001;
// Double-sided test on RIGHT (Part II)
if (tmp > LEFT * 1.000001) goto L_0001;
}
return 1 /*TRUE*/;
L_0001:;
// 4 %true %if right * 0.999999 <= left <= right * 1.000001
{
// Double-sided test on LEFT (Part I)
float tmp;
if (RIGHT * 0.999999 > (tmp = LEFT)) goto L_0002;
// Double-sided test on LEFT (Part II)
if (tmp > RIGHT * 1.000001) goto L_0002;
}
return 1 /*TRUE*/;
L_0002:;
// 5 %false
return 0 /*FALSE*/;
// 6 %end
} /* end of ALMOSTEQUALS */
// 7
// 8 %if almost equals(pi, 3.1415926) %start
if (!(ALMOSTEQUALS(_imp_PI(), 3.1415926))) goto L_0003;
// 9 %finish
L_0003:;
// 10
// 11 %endofprogram
_imp_stop(0);
return 0;
end_0:;
}