/* First determine that the quotients and remainders computed
with different functions are equal. */ if (mpz_cmp (quotient, quotient2) != 0)
dump_abort ("quotients from mpz_fdiv_qr_ui and mpz_fdiv_q_ui differ",
dividend, divisor); if (mpz_cmp (remainder, remainder2) != 0)
dump_abort ("remainders from mpz_fdiv_qr_ui and mpz_fdiv_r_ui differ",
dividend, divisor);
/* Check if the sign of the quotient is correct. */ if (mpz_cmp_ui (quotient, 0) != 0) if ((mpz_cmp_ui (quotient, 0) < 0)
!= (mpz_cmp_ui (dividend, 0) < 0))
dump_abort ("quotient sign wrong", dividend, divisor);
/* Check if the remainder has the same sign as the (positive) divisor
(quotient rounded towards minus infinity). */ if (mpz_cmp_ui (remainder, 0) != 0) if (mpz_cmp_ui (remainder, 0) < 0)
dump_abort ("remainder sign wrong", dividend, divisor);
mpz_mul_ui (temp, quotient, divisor);
mpz_add (temp, temp, remainder); if (mpz_cmp (temp, dividend) != 0)
dump_abort ("n mod d != n - [n/d]*d", dividend, divisor);
mpz_abs (remainder, remainder); if (mpz_cmp_ui (remainder, divisor) >= 0)
dump_abort ("remainder greater than divisor", dividend, divisor);
if (mpz_cmp_ui (remainder, r_rq) != 0)
dump_abort ("remainder returned from mpz_fdiv_qr_ui is wrong",
dividend, divisor); if (mpz_cmp_ui (remainder, r_q) != 0)
dump_abort ("remainder returned from mpz_fdiv_q_ui is wrong",
dividend, divisor); if (mpz_cmp_ui (remainder, r_r) != 0)
dump_abort ("remainder returned from mpz_fdiv_r_ui is wrong",
dividend, divisor); if (mpz_cmp_ui (remainder, r) != 0)
dump_abort ("remainder returned from mpz_fdiv_ui is wrong",
dividend, divisor);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.