version 1.1.1.2, 2000/09/09 14:12:49 |
version 1.1.1.3, 2003/08/25 16:06:32 |
|
|
/* mpz_cmp(u,v) -- Compare U, V. Return postive, zero, or negative |
/* mpz_cmp(u,v) -- Compare U, V. Return postive, zero, or negative |
based on if U > V, U == V, or U < V. |
based on if U > V, U == V, or U < V. |
|
|
Copyright (C) 1991, 1993, 1994, 1996 Free Software Foundation, Inc. |
Copyright 1991, 1993, 1994, 1996, 2001 Free Software Foundation, Inc. |
|
|
This file is part of the GNU MP Library. |
This file is part of the GNU MP Library. |
|
|
Line 26 MA 02111-1307, USA. */ |
|
Line 26 MA 02111-1307, USA. */ |
|
#include "gmp.h" |
#include "gmp.h" |
#include "gmp-impl.h" |
#include "gmp-impl.h" |
|
|
#ifndef BERKELEY_MP |
|
int |
int |
#if __STDC__ |
#ifdef BERKELEY_MP |
mpz_cmp (mpz_srcptr u, mpz_srcptr v) |
|
#else |
|
mpz_cmp (u, v) |
|
mpz_srcptr u; |
|
mpz_srcptr v; |
|
#endif |
|
#else /* BERKELEY_MP */ |
|
int |
|
#if __STDC__ |
|
mcmp (mpz_srcptr u, mpz_srcptr v) |
mcmp (mpz_srcptr u, mpz_srcptr v) |
#else |
#else |
mcmp (u, v) |
mpz_cmp (mpz_srcptr u, mpz_srcptr v) |
mpz_srcptr u; |
|
mpz_srcptr v; |
|
#endif |
#endif |
#endif /* BERKELEY_MP */ |
|
{ |
{ |
mp_size_t usize = u->_mp_size; |
mp_size_t usize, vsize, dsize, asize; |
mp_size_t vsize = v->_mp_size; |
mp_srcptr up, vp; |
mp_size_t size; |
int cmp; |
mp_srcptr up, vp; |
|
int cmp; |
|
|
|
if (usize != vsize) |
usize = SIZ(u); |
return usize - vsize; |
vsize = SIZ(v); |
|
dsize = usize - vsize; |
|
if (dsize != 0) |
|
return dsize; |
|
|
if (usize == 0) |
asize = ABS (usize); |
return 0; |
up = PTR(u); |
|
vp = PTR(v); |
size = ABS (usize); |
MPN_CMP (cmp, up, vp, asize); |
|
return (usize >= 0 ? cmp : -cmp); |
up = u->_mp_d; |
|
vp = v->_mp_d; |
|
|
|
cmp = mpn_cmp (up, vp, size); |
|
|
|
if (cmp == 0) |
|
return 0; |
|
|
|
if ((cmp < 0) == (usize < 0)) |
|
return 1; |
|
else |
|
return -1; |
|
} |
} |