### 7.6 Comparison Functions

Function: `int` mpf_cmp `(const mpf_t op1, const mpf_t op2)`
Function: `int` mpf_cmp_z `(const mpf_t op1, const mpz_t op2)`
Function: `int` mpf_cmp_d `(const mpf_t op1, double op2)`
Function: `int` mpf_cmp_ui `(const mpf_t op1, unsigned long int op2)`
Function: `int` mpf_cmp_si `(const mpf_t op1, signed long int op2)`

Compare op1 and op2. Return a positive value if op1 > op2, zero if op1 = op2, and a negative value if op1 < op2.

`mpf_cmp_d` can be called with an infinity, but results are undefined for a NaN.

Function: `int` mpf_eq `(const mpf_t op1, const mpf_t op2, mp_bitcnt_t op3)`

This function is mathematically ill-defined and should not be used.

Return non-zero if the first op3 bits of op1 and op2 are equal, zero otherwise. Note that numbers like e.g., 256 (binary 100000000) and 255 (binary 11111111) will never be equal by this function’s measure, and furthermore that 0 will only be equal to itself.

Function: `void` mpf_reldiff `(mpf_t rop, const mpf_t op1, const mpf_t op2)`

Compute the relative difference between op1 and op2 and store the result in rop. This is abs(op1-op2)/op1.

Macro: `int` mpf_sgn `(const mpf_t op)`

Return +1 if op > 0, 0 if op = 0, and -1 if op < 0.

This function is actually implemented as a macro. It evaluates its argument multiple times.