1/* mpz_cdiv_q -- Division rounding the quotient towards +infinity.  The
2   remainder gets the opposite sign as the denominator.
3
4Copyright 1994, 1995, 1996, 2000, 2001, 2005 Free Software Foundation, Inc.
5
6This file is part of the GNU MP Library.
7
8The GNU MP Library is free software; you can redistribute it and/or modify
9it under the terms of the GNU Lesser General Public License as published by
10the Free Software Foundation; either version 3 of the License, or (at your
11option) any later version.
12
13The GNU MP Library is distributed in the hope that it will be useful, but
14WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
16License for more details.
17
18You should have received a copy of the GNU Lesser General Public License
19along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.  */
20
21#include "gmp.h"
22#include "gmp-impl.h"
23
24void
25mpz_cdiv_q (mpz_ptr quot, mpz_srcptr dividend, mpz_srcptr divisor)
26{
27  mp_size_t dividend_size = dividend->_mp_size;
28  mp_size_t divisor_size = divisor->_mp_size;
29  mpz_t rem;
30  TMP_DECL;
31
32  TMP_MARK;
33
34  MPZ_TMP_INIT (rem, ABS (divisor_size));
35
36  mpz_tdiv_qr (quot, rem, dividend, divisor);
37
38  if ((divisor_size ^ dividend_size) >= 0 && rem->_mp_size != 0)
39    mpz_add_ui (quot, quot, 1L);
40
41  TMP_FREE;
42}
43