#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:;
}