code: public /*@ pure @*/ int cmp(FDBigInteger other) {
          int aSize = nWords + offset;
          int bSize = other.nWords + other.offset;
          if (aSize > bSize) {
              return 1;
          } else if (aSize < bSize) {
              return -1;
          }
          int aLen = nWords;
          int bLen = other.nWords;
          while (aLen > 0 && bLen > 0) {
              int a = data[--aLen];
              int b = other.data[--bLen];
              if (a != b) {
                  return ((a & LONG_MASK) < (b & LONG_MASK)) ? -1 : 1;
              }
          }
          if (aLen > 0) {
              return checkZeroTail(data, aLen);
          }
          if (bLen > 0) {
              return -checkZeroTail(other.data, bLen);
          }
          return 0;
      }
docs: /*@
  @ ensures \result == (this.value() < other.value() ? -1 : this.value() > other.value() ? +1 : 0);
  @