Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
GHC
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Terraform modules
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Gesh
GHC
Commits
b756483d
Commit
b756483d
authored
26 years ago
by
Simon Marlow
Browse files
Options
Downloads
Patches
Plain Diff
[project @ 1998-12-03 14:37:43 by simonm]
oops, wrong version of gmp.h
parent
8cc2d8b1
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
ghc/includes/gmp.h
+568
-238
568 additions, 238 deletions
ghc/includes/gmp.h
with
568 additions
and
238 deletions
ghc/includes/gmp.h
+
568
−
238
View file @
b756483d
/* gmp.h -- Definitions for GNU multiple precision functions.
Copyright (C) 1991, 1993 Free Software Foundation, Inc.
Copyright (C) 1991, 1993
, 1994, 1995, 1996
Free Software Foundation, Inc.
This file is part of the GNU MP Library.
The GNU MP Library is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your
option)
any later version.
it under the terms of the GNU
Library
General Public License as published by
the Free Software Foundation; either version 2
of the License
, or (at your
option)
any later version.
The GNU MP Library is distributed in the hope that it will be useful,
but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public
License for more details.
The GNU MP Library is distributed in the hope that it will be useful,
but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Library General Public
License for more details.
You should have received a copy of the GNU General Public License
along with the GNU MP Library; see the file COPYING. If not, write to
the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
You should have received a copy of the GNU Library General Public License
along with the GNU MP Library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA. */
#ifndef __GMP_H__
#define __GMP_H__
#define __GNU_MP__
#ifndef __MP_H__
#ifndef __GNU_MP__
#define __GNU_MP__ 2
#define __need_size_t
#include
<stddef.h>
#undef __need_size_t
#if defined (__STDC__) || defined (__cplusplus)
#define __gmp_const const
#else
#define __gmp_const
#endif
#if defined (__GNUC__)
#define __gmp_inline __inline__
#else
#define __gmp_inline
#endif
#ifndef _EXTERN_INLINE
#ifdef __GNUC__
#define _EXTERN_INLINE extern __inline__
#else
#define _EXTERN_INLINE static
#endif
#endif
#ifndef MINT
#ifdef _SHORT_LIMB
typedef
unsigned
int
mp_limb_t
;
typedef
int
mp_limb_signed_t
;
#else
#ifdef _LONG_LONG_LIMB
typedef
unsigned
long
long
int
mp_limb_t
;
typedef
long
long
int
mp_limb_signed_t
;
#else
typedef
unsigned
long
int
mp_limb_t
;
typedef
long
int
mp_limb_signed_t
;
#endif
#endif
typedef
mp_limb_t
*
mp_ptr
;
typedef
__gmp_const
mp_limb_t
*
mp_srcptr
;
typedef
long
int
mp_size_t
;
typedef
long
int
mp_exp_t
;
#ifndef __MP_SMALL__
typedef
struct
{
long
int
alloc
;
/* Number of *limbs* allocated and pointed
int
_mp_
alloc
;
/* Number of *limbs* allocated and pointed
to by the D field. */
long
int
size
;
/* abs(SIZE) is the number of limbs
int
_mp_
size
;
/* abs(SIZE) is the number of limbs
the last field points to. If SIZE
is negative this is a negative
number. */
unsigned
long
int
*
d
;
/* Pointer to the limbs. */
}
__
MP_INT
;
mp_limb_t
*
_mp_
d
;
/* Pointer to the limbs. */
}
__
mpz_struct
;
#else
typedef
struct
{
short
int
alloc
;
/* Number of *limbs* allocated and pointed
short
int
_mp_
alloc
;
/* Number of *limbs* allocated and pointed
to by the D field. */
short
int
size
;
/* abs(SIZE) is the number of limbs
short
int
_mp_
size
;
/* abs(SIZE) is the number of limbs
the last field points to. If SIZE
is negative this is a negative
number. */
unsigned
long
int
*
d
;
/* Pointer to the limbs. */
}
__MP_INT
;
#endif
mp_limb_t
*
_mp_d
;
/* Pointer to the limbs. */
}
__mpz_struct
;
#endif
#endif
/* __GNU_MP__ */
#define MP_INT __MP_INT
typedef
unsigned
long
int
mp_limb
;
typedef
long
int
mp_limb_signed
;
typedef
mp_limb
*
mp_ptr
;
#ifdef __STDC__
typedef
const
mp_limb
*
mp_srcptr
;
#else
typedef
mp_limb
*
mp_srcptr
;
#endif
typedef
long
int
mp_size
;
/* User-visible types. */
typedef
__mpz_struct
MP_INT
;
typedef
__mpz_struct
mpz_t
[
1
];
/* Structure for rational numbers. Zero is represented as 0/any, i.e.
the denominator is ignored. Negative numbers have the sign in
the numerator. */
typedef
struct
{
MP_INT
num
;
MP_INT
den
;
__mpz_struct
_mp_
num
;
__mpz_struct
_mp_
den
;
#if 0
long
int num_alloc; /* Number of limbs allocated
int
_mp_
num_alloc; /* Number of limbs allocated
for the numerator. */
long
int num_size; /* The absolute value of this field is the
int
_mp_
num_size; /* The absolute value of this field is the
length of the numerator; the sign is the
sign of the entire rational number. */
mp_ptr num;
/* Pointer to the numerator limbs. */
long
int den_alloc; /* Number of limbs allocated
mp_ptr
_mp_
num; /* Pointer to the numerator limbs. */
int
_mp_
den_alloc; /* Number of limbs allocated
for the denominator. */
long
int den_size; /* Length of the denominator. (This field
int
_mp_
den_size; /* Length of the denominator. (This field
should always be positive.) */
mp_ptr den;
/* Pointer to the denominator limbs. */
mp_ptr
_mp_
den; /* Pointer to the denominator limbs. */
#endif
}
MP_RAT
;
}
__mpq_struct
;
#ifdef __STDC__
void
mp_set_memory_functions
(
void
*
(
*
)
(
size_t
),
void
*
(
*
)
(
void
*
,
size_t
,
size_t
),
void
(
*
)
(
void
*
,
size_t
));
typedef
__mpq_struct
MP_RAT
;
typedef
__mpq_struct
mpq_t
[
1
];
typedef
struct
{
int
_mp_prec
;
/* Max precision, in number of `mp_limb_t's.
Set by mpf_init and modified by
mpf_set_prec. The area pointed to
by the `d' field contains `prec' + 1
limbs. */
int
_mp_size
;
/* abs(SIZE) is the number of limbs
the last field points to. If SIZE
is negative this is a negative
number. */
mp_exp_t
_mp_exp
;
/* Exponent, in the base of `mp_limb_t'. */
mp_limb_t
*
_mp_d
;
/* Pointer to the limbs. */
}
__mpf_struct
;
/* typedef __mpf_struct MP_FLOAT; */
typedef
__mpf_struct
mpf_t
[
1
];
/* Types for function declarations in gmp files. */
/* ??? Should not pollute user name space with these ??? */
typedef
__gmp_const
__mpz_struct
*
mpz_srcptr
;
typedef
__mpz_struct
*
mpz_ptr
;
typedef
__gmp_const
__mpf_struct
*
mpf_srcptr
;
typedef
__mpf_struct
*
mpf_ptr
;
typedef
__gmp_const
__mpq_struct
*
mpq_srcptr
;
typedef
__mpq_struct
*
mpq_ptr
;
#ifndef _PROTO
#if defined (__STDC__) || defined (__cplusplus)
#define _PROTO(x) x
#else
#define _PROTO(x) ()
#endif
#endif
#ifndef __MPN
#if defined (__STDC__) || defined (__cplusplus)
#define __MPN(x) __mpn_##x
#else
#define __MPN(x) __mpn_
/**/
x
#endif
#endif
#if defined (FILE) || defined (H_STDIO) || defined (_H_STDIO) \
|| defined (_STDIO_H) || defined (_STDIO_H_) || defined (__STDIO_H__) \
|| defined (_STDIO_INCLUDED)
#define _GMP_H_HAVE_FILE 1
#endif
void
mp_set_memory_functions
_PROTO
((
void
*
(
*
)
(
size_t
),
void
*
(
*
)
(
void
*
,
size_t
,
size_t
),
void
(
*
)
(
void
*
,
size_t
)));
extern
__gmp_const
int
mp_bits_per_limb
;
/**************** Integer (i.e. Z) routines. ****************/
void
mpz_init
(
MP_INT
*
);
void
mpz_set
(
MP_INT
*
,
const
MP_INT
*
);
void
mpz_set_ui
(
MP_INT
*
,
unsigned
long
int
);
void
mpz_set_si
(
MP_INT
*
,
signed
long
int
);
int
mpz_set_str
(
MP_INT
*
,
const
char
*
,
int
);
void
mpz_init_set
(
MP_INT
*
,
const
MP_INT
*
);
void
mpz_init_set_ui
(
MP_INT
*
,
unsigned
long
int
);
void
mpz_init_set_si
(
MP_INT
*
,
signed
long
int
);
int
mpz_init_set_str
(
MP_INT
*
,
const
char
*
,
int
);
unsigned
long
int
mpz_get_ui
(
const
MP_INT
*
);
signed
long
int
mpz_get_si
(
const
MP_INT
*
);
char
*
mpz_get_str
(
char
*
,
int
,
const
MP_INT
*
);
void
mpz_clear
(
MP_INT
*
);
void
*
_mpz_realloc
(
MP_INT
*
,
mp_size
);
void
mpz_add
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_add_ui
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_sub
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_sub_ui
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_mul
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_mul_ui
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_div
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_div_ui
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_mod
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_mod_ui
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_divmod
(
MP_INT
*
,
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_divmod_ui
(
MP_INT
*
,
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_mdiv
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_mdiv_ui
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_mmod
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
unsigned
long
int
mpz_mmod_ui
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_mdivmod
(
MP_INT
*
,
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
unsigned
long
int
mpz_mdivmod_ui
(
MP_INT
*
,
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_sqrt
(
MP_INT
*
,
const
MP_INT
*
);
void
mpz_sqrtrem
(
MP_INT
*
,
MP_INT
*
,
const
MP_INT
*
);
int
mpz_perfect_square_p
(
const
MP_INT
*
);
int
mpz_probab_prime_p
(
const
MP_INT
*
,
int
);
void
mpz_powm
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_powm_ui
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
,
const
MP_INT
*
);
void
mpz_pow_ui
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_fac_ui
(
MP_INT
*
,
unsigned
long
int
);
void
mpz_gcd
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_gcdext
(
MP_INT
*
,
MP_INT
*
,
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_neg
(
MP_INT
*
,
const
MP_INT
*
);
void
mpz_com
(
MP_INT
*
,
const
MP_INT
*
);
void
mpz_abs
(
MP_INT
*
,
const
MP_INT
*
);
int
mpz_cmp
(
const
MP_INT
*
,
const
MP_INT
*
);
int
mpz_cmp_ui
(
const
MP_INT
*
,
unsigned
long
int
);
int
mpz_cmp_si
(
const
MP_INT
*
,
signed
long
int
);
void
mpz_mul_2exp
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_div_2exp
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_mod_2exp
(
MP_INT
*
,
const
MP_INT
*
,
unsigned
long
int
);
void
mpz_and
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_ior
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
void
mpz_xor
(
MP_INT
*
,
const
MP_INT
*
,
const
MP_INT
*
);
#if defined (FILE) || defined (_STDIO_H) || defined (__STDIO_H__)
void
mpz_inp_raw
(
MP_INT
*
,
FILE
*
);
void
mpz_inp_str
(
MP_INT
*
,
FILE
*
,
int
);
void
mpz_out_raw
(
FILE
*
,
const
MP_INT
*
);
void
mpz_out_str
(
FILE
*
,
int
,
const
MP_INT
*
);
#if defined (__cplusplus)
extern
"C"
{
#endif
void
*
_mpz_realloc
_PROTO
((
mpz_ptr
,
mp_size_t
));
void
mpz_array_init
(
MP_INT
[],
size_t
,
mp_size
);
void
mpz_random
(
MP_INT
*
,
mp_size
);
void
mpz_random2
(
MP_INT
*
,
mp_size
);
size_t
mpz_size
(
const
MP_INT
*
);
size_t
mpz_sizeinbase
(
const
MP_INT
*
,
int
);
void
mpz_abs
_PROTO
((
mpz_ptr
,
mpz_srcptr
));
void
mpz_add
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_add_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_and
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_array_init
_PROTO
((
mpz_ptr
,
mp_size_t
,
mp_size_t
));
void
mpz_cdiv_q
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
unsigned
long
int
mpz_cdiv_q_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_cdiv_qr
_PROTO
((
mpz_ptr
,
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
unsigned
long
int
mpz_cdiv_qr_ui
_PROTO
((
mpz_ptr
,
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_cdiv_r
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
unsigned
long
int
mpz_cdiv_r_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
unsigned
long
int
mpz_cdiv_ui
_PROTO
((
mpz_srcptr
,
unsigned
long
int
));
void
mpz_clear
_PROTO
((
mpz_ptr
));
void
mpz_clrbit
_PROTO
((
mpz_ptr
,
unsigned
long
int
));
int
mpz_cmp
_PROTO
((
mpz_srcptr
,
mpz_srcptr
));
int
mpz_cmp_si
_PROTO
((
mpz_srcptr
,
signed
long
int
));
int
mpz_cmp_ui
_PROTO
((
mpz_srcptr
,
unsigned
long
int
));
void
mpz_com
_PROTO
((
mpz_ptr
,
mpz_srcptr
));
void
mpz_divexact
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_fac_ui
_PROTO
((
mpz_ptr
,
unsigned
long
int
));
void
mpz_fdiv_q
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_fdiv_q_2exp
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
unsigned
long
int
mpz_fdiv_q_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_fdiv_qr
_PROTO
((
mpz_ptr
,
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
unsigned
long
int
mpz_fdiv_qr_ui
_PROTO
((
mpz_ptr
,
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_fdiv_r
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_fdiv_r_2exp
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
unsigned
long
int
mpz_fdiv_r_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
unsigned
long
int
mpz_fdiv_ui
_PROTO
((
mpz_srcptr
,
unsigned
long
int
));
void
mpz_gcd
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
unsigned
long
int
mpz_gcd_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_gcdext
_PROTO
((
mpz_ptr
,
mpz_ptr
,
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
double
mpz_get_d
_PROTO
((
mpz_srcptr
));
/* signed */
long
int
mpz_get_si
_PROTO
((
mpz_srcptr
));
char
*
mpz_get_str
_PROTO
((
char
*
,
int
,
mpz_srcptr
));
unsigned
long
int
mpz_get_ui
_PROTO
((
mpz_srcptr
));
mp_limb_t
mpz_getlimbn
_PROTO
((
mpz_srcptr
,
mp_size_t
));
unsigned
long
int
mpz_hamdist
_PROTO
((
mpz_srcptr
,
mpz_srcptr
));
void
mpz_init
_PROTO
((
mpz_ptr
));
#ifdef _GMP_H_HAVE_FILE
size_t
mpz_inp_binary
_PROTO
((
mpz_ptr
,
FILE
*
));
size_t
mpz_inp_raw
_PROTO
((
mpz_ptr
,
FILE
*
));
size_t
mpz_inp_str
_PROTO
((
mpz_ptr
,
FILE
*
,
int
));
#endif
void
mpz_init_set
_PROTO
((
mpz_ptr
,
mpz_srcptr
));
void
mpz_init_set_d
_PROTO
((
mpz_ptr
,
double
));
void
mpz_init_set_si
_PROTO
((
mpz_ptr
,
signed
long
int
));
int
mpz_init_set_str
_PROTO
((
mpz_ptr
,
const
char
*
,
int
));
void
mpz_init_set_ui
_PROTO
((
mpz_ptr
,
unsigned
long
int
));
int
mpz_invert
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_ior
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
int
mpz_jacobi
_PROTO
((
mpz_srcptr
,
mpz_srcptr
));
int
mpz_legendre
_PROTO
((
mpz_srcptr
,
mpz_srcptr
));
void
mpz_mod
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_mul
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_mul_2exp
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_mul_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_neg
_PROTO
((
mpz_ptr
,
mpz_srcptr
));
#ifdef _GMP_H_HAVE_FILE
size_t
mpz_out_binary
_PROTO
((
FILE
*
,
mpz_srcptr
));
size_t
mpz_out_raw
_PROTO
((
FILE
*
,
mpz_srcptr
));
size_t
mpz_out_str
_PROTO
((
FILE
*
,
int
,
mpz_srcptr
));
#endif
int
mpz_perfect_square_p
_PROTO
((
mpz_srcptr
));
unsigned
long
int
mpz_popcount
_PROTO
((
mpz_srcptr
));
void
mpz_pow_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_powm
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_powm_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
,
mpz_srcptr
));
int
mpz_probab_prime_p
_PROTO
((
mpz_srcptr
,
int
));
void
mpz_random
_PROTO
((
mpz_ptr
,
mp_size_t
));
void
mpz_random2
_PROTO
((
mpz_ptr
,
mp_size_t
));
unsigned
long
int
mpz_scan0
_PROTO
((
mpz_srcptr
,
unsigned
long
int
));
unsigned
long
int
mpz_scan1
_PROTO
((
mpz_srcptr
,
unsigned
long
int
));
void
mpz_set
_PROTO
((
mpz_ptr
,
mpz_srcptr
));
void
mpz_set_d
_PROTO
((
mpz_ptr
,
double
));
void
mpz_set_f
_PROTO
((
mpz_ptr
,
mpf_srcptr
));
void
mpz_set_q
_PROTO
((
mpz_ptr
,
mpq_srcptr
));
void
mpz_set_si
_PROTO
((
mpz_ptr
,
signed
long
int
));
int
mpz_set_str
_PROTO
((
mpz_ptr
,
const
char
*
,
int
));
void
mpz_set_ui
_PROTO
((
mpz_ptr
,
unsigned
long
int
));
void
mpz_setbit
_PROTO
((
mpz_ptr
,
unsigned
long
int
));
size_t
mpz_size
_PROTO
((
mpz_srcptr
));
size_t
mpz_sizeinbase
_PROTO
((
mpz_srcptr
,
int
));
void
mpz_sqrt
_PROTO
((
mpz_ptr
,
mpz_srcptr
));
void
mpz_sqrtrem
_PROTO
((
mpz_ptr
,
mpz_ptr
,
mpz_srcptr
));
void
mpz_sub
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_sub_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_tdiv_q
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_tdiv_q_2exp
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_tdiv_q_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_tdiv_qr
_PROTO
((
mpz_ptr
,
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_tdiv_qr_ui
_PROTO
((
mpz_ptr
,
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_tdiv_r
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
mpz_srcptr
));
void
mpz_tdiv_r_2exp
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_tdiv_r_ui
_PROTO
((
mpz_ptr
,
mpz_srcptr
,
unsigned
long
int
));
void
mpz_ui_pow_ui
_PROTO
((
mpz_ptr
,
unsigned
long
int
,
unsigned
long
int
));
/**************** Rational (i.e. Q) routines. ****************/
void
mpq_init
(
MP_RAT
*
);
void
mpq_clear
(
MP_RAT
*
);
void
mpq_set
(
MP_RAT
*
,
const
MP_RAT
*
);
void
mpq_set_ui
(
MP_RAT
*
,
unsigned
long
int
,
unsigned
long
int
);
void
mpq_set_si
(
MP_RAT
*
,
signed
long
int
,
unsigned
long
int
);
void
mpq_add
(
MP_RAT
*
,
const
MP_RAT
*
,
const
MP_RAT
*
);
void
mpq_sub
(
MP_RAT
*
,
const
MP_RAT
*
,
const
MP_RAT
*
);
void
mpq_mul
(
MP_RAT
*
,
const
MP_RAT
*
,
const
MP_RAT
*
);
void
mpq_div
(
MP_RAT
*
,
const
MP_RAT
*
,
const
MP_RAT
*
);
void
mpq_neg
(
MP_RAT
*
,
const
MP_RAT
*
);
int
mpq_cmp
(
const
MP_RAT
*
,
const
MP_RAT
*
);
void
mpq_inv
(
MP_RAT
*
,
const
MP_RAT
*
);
void
mpq_set_num
(
MP_RAT
*
,
const
MP_INT
*
);
void
mpq_set_den
(
MP_RAT
*
,
const
MP_INT
*
);
void
mpq_get_num
(
MP_INT
*
,
const
MP_RAT
*
);
void
mpq_get_den
(
MP_INT
*
,
const
MP_RAT
*
);
void
mpq_init
_PROTO
((
mpq_ptr
));
void
mpq_clear
_PROTO
((
mpq_ptr
));
void
mpq_set
_PROTO
((
mpq_ptr
,
mpq_srcptr
));
void
mpq_set_ui
_PROTO
((
mpq_ptr
,
unsigned
long
int
,
unsigned
long
int
));
void
mpq_set_si
_PROTO
((
mpq_ptr
,
signed
long
int
,
unsigned
long
int
));
void
mpq_set_z
_PROTO
((
mpq_ptr
,
mpz_srcptr
));
void
mpq_add
_PROTO
((
mpq_ptr
,
mpq_srcptr
,
mpq_srcptr
));
void
mpq_sub
_PROTO
((
mpq_ptr
,
mpq_srcptr
,
mpq_srcptr
));
void
mpq_mul
_PROTO
((
mpq_ptr
,
mpq_srcptr
,
mpq_srcptr
));
void
mpq_div
_PROTO
((
mpq_ptr
,
mpq_srcptr
,
mpq_srcptr
));
void
mpq_neg
_PROTO
((
mpq_ptr
,
mpq_srcptr
));
int
mpq_cmp
_PROTO
((
mpq_srcptr
,
mpq_srcptr
));
int
mpq_cmp_ui
_PROTO
((
mpq_srcptr
,
unsigned
long
int
,
unsigned
long
int
));
int
mpq_equal
_PROTO
((
mpq_srcptr
,
mpq_srcptr
));
void
mpq_inv
_PROTO
((
mpq_ptr
,
mpq_srcptr
));
void
mpq_set_num
_PROTO
((
mpq_ptr
,
mpz_srcptr
));
void
mpq_set_den
_PROTO
((
mpq_ptr
,
mpz_srcptr
));
void
mpq_get_num
_PROTO
((
mpz_ptr
,
mpq_srcptr
));
void
mpq_get_den
_PROTO
((
mpz_ptr
,
mpq_srcptr
));
double
mpq_get_d
_PROTO
((
mpq_srcptr
));
void
mpq_canonicalize
_PROTO
((
mpq_ptr
));
/**************** Float (i.e. F) routines. ****************/
void
mpf_abs
_PROTO
((
mpf_ptr
,
mpf_srcptr
));
void
mpf_add
_PROTO
((
mpf_ptr
,
mpf_srcptr
,
mpf_srcptr
));
void
mpf_add_ui
_PROTO
((
mpf_ptr
,
mpf_srcptr
,
unsigned
long
int
));
void
mpf_clear
_PROTO
((
mpf_ptr
));
int
mpf_cmp
_PROTO
((
mpf_srcptr
,
mpf_srcptr
));
int
mpf_cmp_si
_PROTO
((
mpf_srcptr
,
signed
long
int
));
int
mpf_cmp_ui
_PROTO
((
mpf_srcptr
,
unsigned
long
int
));
void
mpf_div
_PROTO
((
mpf_ptr
,
mpf_srcptr
,
mpf_srcptr
));
void
mpf_div_2exp
_PROTO
((
mpf_ptr
,
mpf_srcptr
,
unsigned
long
int
));
void
mpf_div_ui
_PROTO
((
mpf_ptr
,
mpf_srcptr
,
unsigned
long
int
));
void
mpf_dump
_PROTO
((
mpf_srcptr
));
int
mpf_eq
_PROTO
((
mpf_srcptr
,
mpf_srcptr
,
unsigned
long
int
));
double
mpf_get_d
_PROTO
((
mpf_srcptr
));
unsigned
long
int
mpf_get_prec
_PROTO
((
mpf_srcptr
));
char
*
mpf_get_str
_PROTO
((
char
*
,
mp_exp_t
*
,
int
,
size_t
,
mpf_srcptr
));
void
mpf_init
_PROTO
((
mpf_ptr
));
void
mpf_init2
_PROTO
((
mpf_ptr
,
unsigned
long
int
));
#ifdef _GMP_H_HAVE_FILE
size_t
mpf_inp_str
_PROTO
((
mpf_ptr
,
FILE
*
,
int
));
#endif
void
mpf_init_set
_PROTO
((
mpf_ptr
,
mpf_srcptr
));
void
mpf_init_set_d
_PROTO
((
mpf_ptr
,
double
));
void
mpf_init_set_si
_PROTO
((
mpf_ptr
,
signed
long
int
));
int
mpf_init_set_str
_PROTO
((
mpf_ptr
,
const
char
*
,
int
));
void
mpf_init_set_ui
_PROTO
((
mpf_ptr
,
unsigned
long
int
));
void
mpf_mul
_PROTO
((
mpf_ptr
,
mpf_srcptr
,
mpf_srcptr
));
void
mpf_mul_2exp
_PROTO
((
mpf_ptr
,
mpf_srcptr
,
unsigned
long
int
));
void
mpf_mul_ui
_PROTO
((
mpf_ptr
,
mpf_srcptr
,
unsigned
long
int
));
void
mpf_neg
_PROTO
((
mpf_ptr
,
mpf_srcptr
));
#ifdef _GMP_H_HAVE_FILE
size_t
mpf_out_str
_PROTO
((
FILE
*
,
int
,
size_t
,
mpf_srcptr
));
#endif
void
mpf_random2
_PROTO
((
mpf_ptr
,
mp_size_t
,
mp_exp_t
));
void
mpf_reldiff
_PROTO
((
mpf_ptr
,
mpf_srcptr
,
mpf_srcptr
));
void
mpf_set
_PROTO
((
mpf_ptr
,
mpf_srcptr
));
void
mpf_set_d
_PROTO
((
mpf_ptr
,
double
));
void
mpf_set_default_prec
_PROTO
((
unsigned
long
int
));
void
mpf_set_prec
_PROTO
((
mpf_ptr
,
unsigned
long
int
));
void
mpf_set_prec_raw
_PROTO
((
mpf_ptr
,
unsigned
long
int
));
void
mpf_set_q
_PROTO
((
mpf_ptr
,
mpq_srcptr
));
void
mpf_set_si
_PROTO
((
mpf_ptr
,
signed
long
int
));
int
mpf_set_str
_PROTO
((
mpf_ptr
,
const
char
*
,
int
));
void
mpf_set_ui
_PROTO
((
mpf_ptr
,
unsigned
long
int
));
void
mpf_set_z
_PROTO
((
mpf_ptr
,
mpz_srcptr
));
size_t
mpf_size
_PROTO
((
mpf_srcptr
));
void
mpf_sqrt
_PROTO
((
mpf_ptr
,
mpf_srcptr
));
void
mpf_sqrt_ui
_PROTO
((
mpf_ptr
,
unsigned
long
int
));
void
mpf_sub
_PROTO
((
mpf_ptr
,
mpf_srcptr
,
mpf_srcptr
));
void
mpf_sub_ui
_PROTO
((
mpf_ptr
,
mpf_srcptr
,
unsigned
long
int
));
void
mpf_ui_div
_PROTO
((
mpf_ptr
,
unsigned
long
int
,
mpf_srcptr
));
void
mpf_ui_sub
_PROTO
((
mpf_ptr
,
unsigned
long
int
,
mpf_srcptr
));
#if defined (__cplusplus)
}
#endif
/************ Low level positive-integer (i.e. N) routines. ************/
mp_limb
mpn_add
(
mp_ptr
,
mp_srcptr
,
mp_size
,
mp_srcptr
,
mp_size
);
mp_size
mpn_sub
(
mp_ptr
,
mp_srcptr
,
mp_size
,
mp_srcptr
,
mp_size
);
mp_size
mpn_mul
(
mp_ptr
,
mp_srcptr
,
mp_size
,
mp_srcptr
,
mp_size
);
mp_size
mpn_div
(
mp_ptr
,
mp_ptr
,
mp_size
,
mp_srcptr
,
mp_size
);
mp_limb
mpn_divmod_1
(
mp_ptr
,
mp_srcptr
,
mp_size
,
mp_limb
);
mp_limb
mpn_mod_1
(
mp_srcptr
,
mp_size
,
mp_limb
);
mp_limb
mpn_lshift
(
mp_ptr
,
mp_srcptr
,
mp_size
,
unsigned
int
);
mp_size
mpn_rshift
(
mp_ptr
,
mp_srcptr
,
mp_size
,
unsigned
int
);
mp_size
mpn_rshiftci
(
mp_ptr
,
mp_srcptr
,
mp_size
,
unsigned
int
,
mp_limb
);
mp_size
mpn_sqrt
(
mp_ptr
,
mp_ptr
,
mp_srcptr
,
mp_size
);
int
mpn_cmp
(
mp_srcptr
,
mp_srcptr
,
mp_size
);
#else
/* ! __STDC__ */
void
mp_set_memory_functions
();
/* This is ugly, but we need to make usr calls reach the prefixed function. */
#define mpn_add __MPN(add)
#define mpn_add_1 __MPN(add_1)
#define mpn_add_n __MPN(add_n)
#define mpn_addmul_1 __MPN(addmul_1)
#define mpn_bdivmod __MPN(bdivmod)
#define mpn_cmp __MPN(cmp)
#define mpn_divmod_1 __MPN(divmod_1)
#define mpn_divrem __MPN(divrem)
#define mpn_divrem_1 __MPN(divrem_1)
#define mpn_dump __MPN(dump)
#define mpn_gcd __MPN(gcd)
#define mpn_gcd_1 __MPN(gcd_1)
#define mpn_gcdext __MPN(gcdext)
#define mpn_get_str __MPN(get_str)
#define mpn_hamdist __MPN(hamdist)
#define mpn_lshift __MPN(lshift)
#define mpn_mod_1 __MPN(mod_1)
#define mpn_mul __MPN(mul)
#define mpn_mul_1 __MPN(mul_1)
#define mpn_mul_n __MPN(mul_n)
#define mpn_perfect_square_p __MPN(perfect_square_p)
#define mpn_popcount __MPN(popcount)
#define mpn_preinv_mod_1 __MPN(preinv_mod_1)
#define mpn_random2 __MPN(random2)
#define mpn_rshift __MPN(rshift)
#define mpn_scan0 __MPN(scan0)
#define mpn_scan1 __MPN(scan1)
#define mpn_set_str __MPN(set_str)
#define mpn_sqrtrem __MPN(sqrtrem)
#define mpn_sub __MPN(sub)
#define mpn_sub_1 __MPN(sub_1)
#define mpn_sub_n __MPN(sub_n)
#define mpn_submul_1 __MPN(submul_1)
#define mpn_udiv_w_sdiv __MPN(udiv_w_sdiv)
/**************** Integer (i.e. Z) routines. ****************/
#if defined (__cplusplus)
extern
"C"
{
#endif
mp_limb_t
mpn_add
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_size_t
,
mp_srcptr
,
mp_size_t
));
mp_limb_t
mpn_add_1
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_size_t
,
mp_limb_t
));
mp_limb_t
mpn_add_n
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_srcptr
,
mp_size_t
));
mp_limb_t
mpn_addmul_1
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_size_t
,
mp_limb_t
));
mp_limb_t
mpn_bdivmod
_PROTO
((
mp_ptr
,
mp_ptr
,
mp_size_t
,
mp_srcptr
,
mp_size_t
,
unsigned
long
int
));
int
mpn_cmp
_PROTO
((
mp_srcptr
,
mp_srcptr
,
mp_size_t
));
mp_limb_t
mpn_divmod_1
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_size_t
,
mp_limb_t
));
mp_limb_t
mpn_divrem
_PROTO
((
mp_ptr
,
mp_size_t
,
mp_ptr
,
mp_size_t
,
mp_srcptr
,
mp_size_t
));
mp_limb_t
mpn_divrem_1
_PROTO
((
mp_ptr
,
mp_size_t
,
mp_srcptr
,
mp_size_t
,
mp_limb_t
));
void
mpn_dump
_PROTO
((
mp_srcptr
,
mp_size_t
));
mp_size_t
mpn_gcd
_PROTO
((
mp_ptr
,
mp_ptr
,
mp_size_t
,
mp_ptr
,
mp_size_t
));
mp_limb_t
mpn_gcd_1
_PROTO
((
mp_srcptr
,
mp_size_t
,
mp_limb_t
));
mp_size_t
mpn_gcdext
_PROTO
((
mp_ptr
,
mp_ptr
,
mp_ptr
,
mp_size_t
,
mp_ptr
,
mp_size_t
));
size_t
mpn_get_str
_PROTO
((
unsigned
char
*
,
int
,
mp_ptr
,
mp_size_t
));
unsigned
long
int
mpn_hamdist
_PROTO
((
mp_srcptr
,
mp_srcptr
,
mp_size_t
));
mp_limb_t
mpn_lshift
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_size_t
,
unsigned
int
));
mp_limb_t
mpn_mod_1
_PROTO
((
mp_srcptr
,
mp_size_t
,
mp_limb_t
));
mp_limb_t
mpn_mul
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_size_t
,
mp_srcptr
,
mp_size_t
));
mp_limb_t
mpn_mul_1
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_size_t
,
mp_limb_t
));
void
mpn_mul_n
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_srcptr
,
mp_size_t
));
int
mpn_perfect_square_p
_PROTO
((
mp_srcptr
,
mp_size_t
));
unsigned
long
int
mpn_popcount
_PROTO
((
mp_srcptr
,
mp_size_t
));
mp_limb_t
mpn_preinv_mod_1
_PROTO
((
mp_srcptr
,
mp_size_t
,
mp_limb_t
,
mp_limb_t
));
void
mpn_random2
_PROTO
((
mp_ptr
,
mp_size_t
));
mp_limb_t
mpn_rshift
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_size_t
,
unsigned
int
));
unsigned
long
int
mpn_scan0
_PROTO
((
mp_srcptr
,
unsigned
long
int
));
unsigned
long
int
mpn_scan1
_PROTO
((
mp_srcptr
,
unsigned
long
int
));
mp_size_t
mpn_set_str
_PROTO
((
mp_ptr
,
const
unsigned
char
*
,
size_t
,
int
));
mp_size_t
mpn_sqrtrem
_PROTO
((
mp_ptr
,
mp_ptr
,
mp_srcptr
,
mp_size_t
));
mp_limb_t
mpn_sub
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_size_t
,
mp_srcptr
,
mp_size_t
));
mp_limb_t
mpn_sub_1
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_size_t
,
mp_limb_t
));
mp_limb_t
mpn_sub_n
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_srcptr
,
mp_size_t
));
mp_limb_t
mpn_submul_1
_PROTO
((
mp_ptr
,
mp_srcptr
,
mp_size_t
,
mp_limb_t
));
#if defined (__cplusplus)
}
#endif
void
mpz_init
();
void
mpz_set
();
void
mpz_set_ui
();
void
mpz_set_si
();
int
mpz_set_str
();
void
mpz_init_set
();
void
mpz_init_set_ui
();
void
mpz_init_set_si
();
int
mpz_init_set_str
();
unsigned
long
int
mpz_get_ui
();
long
int
mpz_get_si
();
char
*
mpz_get_str
();
void
mpz_clear
();
void
*
_mpz_realloc
();
void
mpz_add
();
void
mpz_add_ui
();
void
mpz_sub
();
void
mpz_sub_ui
();
void
mpz_mul
();
void
mpz_mul_ui
();
void
mpz_div
();
void
mpz_div_ui
();
void
mpz_mod
();
void
mpz_mod_ui
();
void
mpz_divmod
();
void
mpz_divmod_ui
();
void
mpz_mdiv
();
void
mpz_mdiv_ui
();
void
mpz_mmod
();
unsigned
long
int
mpz_mmod_ui
();
void
mpz_mdivmod
();
unsigned
long
int
mpz_mdivmod_ui
();
void
mpz_sqrt
();
void
mpz_sqrtrem
();
int
mpz_perfect_square_p
();
int
mpz_probab_prime_p
();
void
mpz_powm
();
void
mpz_powm_ui
();
void
mpz_pow_ui
();
void
mpz_fac_ui
();
void
mpz_gcd
();
void
mpz_gcdext
();
void
mpz_neg
();
void
mpz_com
();
void
mpz_abs
();
int
mpz_cmp
();
int
mpz_cmp_ui
();
int
mpz_cmp_si
();
void
mpz_mul_2exp
();
void
mpz_div_2exp
();
void
mpz_mod_2exp
();
void
mpz_and
();
void
mpz_ior
();
void
mpz_xor
();
void
mpz_inp_raw
();
void
mpz_inp_str
();
void
mpz_out_raw
();
void
mpz_out_str
();
void
mpz_array_init
();
void
mpz_random
();
void
mpz_random2
();
size_t
mpz_size
();
size_t
mpz_sizeinbase
();
#if defined (__GNUC__) || defined (_FORCE_INLINES)
_EXTERN_INLINE
mp_limb_t
#if defined (__STDC__) || defined (__cplusplus)
mpn_add_1
(
register
mp_ptr
res_ptr
,
register
mp_srcptr
s1_ptr
,
register
mp_size_t
s1_size
,
register
mp_limb_t
s2_limb
)
#else
mpn_add_1
(
res_ptr
,
s1_ptr
,
s1_size
,
s2_limb
)
register
mp_ptr
res_ptr
;
register
mp_srcptr
s1_ptr
;
register
mp_size_t
s1_size
;
register
mp_limb_t
s2_limb
;
#endif
{
register
mp_limb_t
x
;
/**************** Rational (i.e. Q) routines. ****************/
x
=
*
s1_ptr
++
;
s2_limb
=
x
+
s2_limb
;
*
res_ptr
++
=
s2_limb
;
if
(
s2_limb
<
x
)
{
while
(
--
s1_size
!=
0
)
{
x
=
*
s1_ptr
++
+
1
;
*
res_ptr
++
=
x
;
if
(
x
!=
0
)
goto
fin
;
}
void
mpq_init
();
void
mpq_clear
();
void
mpq_set
();
void
mpq_set_ui
();
void
mpq_set_si
();
void
mpq_add
();
void
mpq_sub
();
void
mpq_mul
();
void
mpq_div
();
void
mpq_neg
();
int
mpq_cmp
();
void
mpq_inv
();
void
mpq_set_num
();
void
mpq_set_den
();
void
mpq_get_num
();
void
mpq_get_den
();
return
1
;
}
/************ Low level positive-integer (i.e. N) routines. ************/
fin:
if
(
res_ptr
!=
s1_ptr
)
{
mp_size_t
i
;
for
(
i
=
0
;
i
<
s1_size
-
1
;
i
++
)
res_ptr
[
i
]
=
s1_ptr
[
i
];
}
return
0
;
}
_EXTERN_INLINE
mp_limb_t
#if defined (__STDC__) || defined (__cplusplus)
mpn_add
(
register
mp_ptr
res_ptr
,
register
mp_srcptr
s1_ptr
,
register
mp_size_t
s1_size
,
register
mp_srcptr
s2_ptr
,
register
mp_size_t
s2_size
)
#else
mpn_add
(
res_ptr
,
s1_ptr
,
s1_size
,
s2_ptr
,
s2_size
)
register
mp_ptr
res_ptr
;
register
mp_srcptr
s1_ptr
;
register
mp_size_t
s1_size
;
register
mp_srcptr
s2_ptr
;
register
mp_size_t
s2_size
;
#endif
{
mp_limb_t
cy_limb
=
0
;
if
(
s2_size
!=
0
)
cy_limb
=
mpn_add_n
(
res_ptr
,
s1_ptr
,
s2_ptr
,
s2_size
);
mp_limb
mpn_add
();
mp_size
mpn_sub
();
mp_size
mpn_mul
();
mp_size
mpn_div
();
mp_limb
mpn_lshift
();
mp_size
mpn_rshift
();
mp_size
mpn_rshiftci
();
int
mpn_cmp
();
#endif
/* __STDC__ */
if
(
s1_size
-
s2_size
!=
0
)
cy_limb
=
mpn_add_1
(
res_ptr
+
s2_size
,
s1_ptr
+
s2_size
,
s1_size
-
s2_size
,
cy_limb
);
return
cy_limb
;
}
_EXTERN_INLINE
mp_limb_t
#if defined (__STDC__) || defined (__cplusplus)
mpn_sub_1
(
register
mp_ptr
res_ptr
,
register
mp_srcptr
s1_ptr
,
register
mp_size_t
s1_size
,
register
mp_limb_t
s2_limb
)
#else
mpn_sub_1
(
res_ptr
,
s1_ptr
,
s1_size
,
s2_limb
)
register
mp_ptr
res_ptr
;
register
mp_srcptr
s1_ptr
;
register
mp_size_t
s1_size
;
register
mp_limb_t
s2_limb
;
#endif
{
register
mp_limb_t
x
;
x
=
*
s1_ptr
++
;
s2_limb
=
x
-
s2_limb
;
*
res_ptr
++
=
s2_limb
;
if
(
s2_limb
>
x
)
{
while
(
--
s1_size
!=
0
)
{
x
=
*
s1_ptr
++
;
*
res_ptr
++
=
x
-
1
;
if
(
x
!=
0
)
goto
fin
;
}
return
1
;
}
fin:
if
(
res_ptr
!=
s1_ptr
)
{
mp_size_t
i
;
for
(
i
=
0
;
i
<
s1_size
-
1
;
i
++
)
res_ptr
[
i
]
=
s1_ptr
[
i
];
}
return
0
;
}
_EXTERN_INLINE
mp_limb_t
#if defined (__STDC__) || defined (__cplusplus)
mpn_sub
(
register
mp_ptr
res_ptr
,
register
mp_srcptr
s1_ptr
,
register
mp_size_t
s1_size
,
register
mp_srcptr
s2_ptr
,
register
mp_size_t
s2_size
)
#else
mpn_sub
(
res_ptr
,
s1_ptr
,
s1_size
,
s2_ptr
,
s2_size
)
register
mp_ptr
res_ptr
;
register
mp_srcptr
s1_ptr
;
register
mp_size_t
s1_size
;
register
mp_srcptr
s2_ptr
;
register
mp_size_t
s2_size
;
#endif
{
mp_limb_t
cy_limb
=
0
;
if
(
s2_size
!=
0
)
cy_limb
=
mpn_sub_n
(
res_ptr
,
s1_ptr
,
s2_ptr
,
s2_size
);
if
(
s1_size
-
s2_size
!=
0
)
cy_limb
=
mpn_sub_1
(
res_ptr
+
s2_size
,
s1_ptr
+
s2_size
,
s1_size
-
s2_size
,
cy_limb
);
return
cy_limb
;
}
#endif
/* __GNUC__ */
/* Allow faster testing for negative, zero, and positive. */
#define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0)
#define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0)
#define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0)
/* Allow direct user access to numerator and denominator of a mpq_t object. */
#define mpq_numref(Q) (&((Q)->_mp_num))
#define mpq_denref(Q) (&((Q)->_mp_den))
/* When using GCC, optimize certain common comparisons. */
#if defined (__GNUC__)
#define mpz_cmp_ui(Z,UI) \
(__builtin_constant_p (UI) && (UI) == 0 \
? mpz_sgn (Z) : mpz_cmp_ui (Z,UI))
#define mpz_cmp_si(Z,UI) \
(__builtin_constant_p (UI) && (UI) == 0 ? mpz_sgn (Z) \
: __builtin_constant_p (UI) && (UI) > 0 ? mpz_cmp_ui (Z,UI) \
: mpz_cmp_si (Z,UI))
#define mpq_cmp_ui(Q,NUI,DUI) \
(__builtin_constant_p (NUI) && (NUI) == 0 \
? mpq_sgn (Q) : mpq_cmp_ui (Q,NUI,DUI))
#endif
#define mpn_divmod(qp,np,nsize,dp,dsize) mpn_divrem (qp,0,np,nsize,dp,dsize)
#if 0
#define mpn_divmod_1(qp,np,nsize,dlimb) mpn_divrem_1 (qp,0,np,nsize,dlimb)
#endif
/* Compatibility with GMP 1. */
#define mpz_mdiv mpz_fdiv_q
#define mpz_mdivmod mpz_fdiv_qr
#define mpz_mmod mpz_fdiv_r
#define mpz_mdiv_ui mpz_fdiv_q_ui
#define mpz_mdivmod_ui(q,r,n,d) \
((r == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d))
#define mpz_mmod_ui(r,n,d) \
((r == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d))
/* Useful synonyms, but not quite compatible with GMP 1. */
#define mpz_div mpz_fdiv_q
#define mpz_divmod mpz_fdiv_qr
#define mpz_div_ui mpz_fdiv_q_ui
#define mpz_divmod_ui mpz_fdiv_qr_ui
#define mpz_mod_ui mpz_fdiv_r_ui
#define mpz_div_2exp mpz_fdiv_q_2exp
#define mpz_mod_2exp mpz_fdiv_r_2exp
#define __GNU_MP_VERSION 2
#define __GNU_MP_VERSION_MINOR 0
#define __GMP_H__
#endif
/* __GMP_H__ */
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment