set_ui.c revision 1.1.1.2 1 1.1 mrg /* mpq_set_ui(dest,ulong_num,ulong_den) -- Set DEST to the rational number
2 1.1 mrg ULONG_NUM/ULONG_DEN.
3 1.1 mrg
4 1.1 mrg Copyright 1991, 1994, 1995, 2001, 2002, 2003 Free Software Foundation, Inc.
5 1.1 mrg
6 1.1 mrg This file is part of the GNU MP Library.
7 1.1 mrg
8 1.1 mrg The GNU MP Library is free software; you can redistribute it and/or modify
9 1.1 mrg it under the terms of the GNU Lesser General Public License as published by
10 1.1 mrg the Free Software Foundation; either version 3 of the License, or (at your
11 1.1 mrg option) any later version.
12 1.1 mrg
13 1.1 mrg The GNU MP Library is distributed in the hope that it will be useful, but
14 1.1 mrg WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 1.1 mrg or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 1.1 mrg License for more details.
17 1.1 mrg
18 1.1 mrg You should have received a copy of the GNU Lesser General Public License
19 1.1 mrg along with the GNU MP Library. If not, see http://www.gnu.org/licenses/. */
20 1.1 mrg
21 1.1 mrg #include "gmp.h"
22 1.1 mrg #include "gmp-impl.h"
23 1.1 mrg
24 1.1 mrg void
25 1.1 mrg mpq_set_ui (MP_RAT *dest, unsigned long int num, unsigned long int den)
26 1.1 mrg {
27 1.1 mrg if (GMP_NUMB_BITS < BITS_PER_ULONG)
28 1.1 mrg {
29 1.1 mrg if (num == 0) /* Canonicalize 0/d to 0/1. */
30 1.1 mrg den = 1;
31 1.1 mrg mpz_set_ui (mpq_numref (dest), num);
32 1.1 mrg mpz_set_ui (mpq_denref (dest), den);
33 1.1 mrg return;
34 1.1 mrg }
35 1.1 mrg
36 1.1 mrg if (num == 0)
37 1.1 mrg {
38 1.1 mrg /* Canonicalize 0/n to 0/1. */
39 1.1 mrg den = 1;
40 1.1.1.2 mrg SIZ(NUM(dest)) = 0;
41 1.1 mrg }
42 1.1 mrg else
43 1.1 mrg {
44 1.1.1.2 mrg PTR(NUM(dest))[0] = num;
45 1.1.1.2 mrg SIZ(NUM(dest)) = 1;
46 1.1 mrg }
47 1.1 mrg
48 1.1.1.2 mrg PTR(DEN(dest))[0] = den;
49 1.1.1.2 mrg SIZ(DEN(dest)) = (den != 0);
50 1.1 mrg }
51