Blame stdlib/gmp.h

Packit 6c4009
/* gmp.h -- Definitions for GNU multiple precision functions.
Packit 6c4009
Packit 6c4009
Copyright (C) 1991-2018 Free Software Foundation, Inc.
Packit 6c4009
Packit 6c4009
This file is part of the GNU MP Library.
Packit 6c4009
Packit 6c4009
The GNU MP Library is free software; you can redistribute it and/or modify
Packit 6c4009
it under the terms of the GNU Lesser General Public License as published by
Packit 6c4009
the Free Software Foundation; either version 2.1 of the License, or (at your
Packit 6c4009
option) any later version.
Packit 6c4009
Packit 6c4009
The GNU MP Library is distributed in the hope that it will be useful, but
Packit 6c4009
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
Packit 6c4009
or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
Packit 6c4009
License for more details.
Packit 6c4009
Packit 6c4009
You should have received a copy of the GNU Lesser General Public License
Packit 6c4009
along with the GNU MP Library; see the file COPYING.LIB.  If not, see
Packit 6c4009
<http://www.gnu.org/licenses/>.  */
Packit 6c4009
Packit 6c4009
#ifndef __GMP_H__
Packit 6c4009
Packit 6c4009
#include <features.h>
Packit 6c4009
Packit 6c4009
#ifndef __GNU_MP__
Packit 6c4009
#define __GNU_MP__ 2
Packit 6c4009
#define __need_size_t
Packit 6c4009
#include <stddef.h>
Packit 6c4009
#undef __need_size_t
Packit 6c4009
Packit 6c4009
#if defined (__STDC__) || defined (__cplusplus)
Packit 6c4009
#define __gmp_const const
Packit 6c4009
#else
Packit 6c4009
#define __gmp_const
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#if defined (__GNUC__)
Packit 6c4009
#define __gmp_inline __inline__
Packit 6c4009
#else
Packit 6c4009
#define __gmp_inline
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#ifndef _EXTERN_INLINE
Packit 6c4009
#ifdef __GNUC__
Packit 6c4009
#define _EXTERN_INLINE __extern_inline
Packit 6c4009
#else
Packit 6c4009
#define _EXTERN_INLINE static
Packit 6c4009
#endif
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#ifdef _SHORT_LIMB
Packit 6c4009
typedef unsigned int		mp_limb_t;
Packit 6c4009
typedef int			mp_limb_signed_t;
Packit 6c4009
#else
Packit 6c4009
#ifdef _LONG_LONG_LIMB
Packit 6c4009
typedef unsigned long long int	mp_limb_t;
Packit 6c4009
typedef long long int		mp_limb_signed_t;
Packit 6c4009
#else
Packit 6c4009
typedef unsigned long int	mp_limb_t;
Packit 6c4009
typedef long int		mp_limb_signed_t;
Packit 6c4009
#endif
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
typedef mp_limb_t *		mp_ptr;
Packit 6c4009
typedef __gmp_const mp_limb_t *	mp_srcptr;
Packit 6c4009
typedef long int		mp_size_t;
Packit 6c4009
typedef long int		mp_exp_t;
Packit 6c4009
Packit 6c4009
#ifndef __MP_SMALL__
Packit 6c4009
typedef struct
Packit 6c4009
{
Packit 6c4009
  int _mp_alloc;		/* Number of *limbs* allocated and pointed
Packit 6c4009
				   to by the D field.  */
Packit 6c4009
  int _mp_size;			/* abs(SIZE) is the number of limbs
Packit 6c4009
				   the last field points to.  If SIZE
Packit 6c4009
				   is negative this is a negative
Packit 6c4009
				   number.  */
Packit 6c4009
  mp_limb_t *_mp_d;		/* Pointer to the limbs.  */
Packit 6c4009
} __mpz_struct;
Packit 6c4009
#else
Packit 6c4009
typedef struct
Packit 6c4009
{
Packit 6c4009
  short int _mp_alloc;		/* Number of *limbs* allocated and pointed
Packit 6c4009
				   to by the D field.  */
Packit 6c4009
  short int _mp_size;		/* abs(SIZE) is the number of limbs
Packit 6c4009
				   the last field points to.  If SIZE
Packit 6c4009
				   is negative this is a negative
Packit 6c4009
				   number.  */
Packit 6c4009
  mp_limb_t *_mp_d;		/* Pointer to the limbs.  */
Packit 6c4009
} __mpz_struct;
Packit 6c4009
#endif
Packit 6c4009
#endif /* __GNU_MP__ */
Packit 6c4009
Packit 6c4009
/* User-visible types.  */
Packit 6c4009
typedef __mpz_struct MP_INT;
Packit 6c4009
typedef __mpz_struct mpz_t[1];
Packit 6c4009
Packit 6c4009
/* Structure for rational numbers.  Zero is represented as 0/any, i.e.
Packit 6c4009
   the denominator is ignored.  Negative numbers have the sign in
Packit 6c4009
   the numerator.  */
Packit 6c4009
typedef struct
Packit 6c4009
{
Packit 6c4009
  __mpz_struct _mp_num;
Packit 6c4009
  __mpz_struct _mp_den;
Packit 6c4009
#if 0
Packit 6c4009
  int _mp_num_alloc;		/* Number of limbs allocated
Packit 6c4009
				   for the numerator.  */
Packit 6c4009
  int _mp_num_size;		/* The absolute value of this field is the
Packit 6c4009
				   length of the numerator; the sign is the
Packit 6c4009
				   sign of the entire rational number.  */
Packit 6c4009
  mp_ptr _mp_num;		/* Pointer to the numerator limbs.  */
Packit 6c4009
  int _mp_den_alloc;		/* Number of limbs allocated
Packit 6c4009
				   for the denominator.  */
Packit 6c4009
  int _mp_den_size;		/* Length of the denominator.  (This field
Packit 6c4009
				   should always be positive.) */
Packit 6c4009
  mp_ptr _mp_den;		/* Pointer to the denominator limbs.  */
Packit 6c4009
#endif
Packit 6c4009
} __mpq_struct;
Packit 6c4009
Packit 6c4009
typedef __mpq_struct MP_RAT;
Packit 6c4009
typedef __mpq_struct mpq_t[1];
Packit 6c4009
Packit 6c4009
typedef struct
Packit 6c4009
{
Packit 6c4009
  int _mp_prec;			/* Max precision, in number of `mp_limb_t's.
Packit 6c4009
				   Set by mpf_init and modified by
Packit 6c4009
				   mpf_set_prec.  The area pointed to
Packit 6c4009
				   by the `d' field contains `prec' + 1
Packit 6c4009
				   limbs.  */
Packit 6c4009
  int _mp_size;			/* abs(SIZE) is the number of limbs
Packit 6c4009
				   the last field points to.  If SIZE
Packit 6c4009
				   is negative this is a negative
Packit 6c4009
				   number.  */
Packit 6c4009
  mp_exp_t _mp_exp;		/* Exponent, in the base of `mp_limb_t'.  */
Packit 6c4009
  mp_limb_t *_mp_d;		/* Pointer to the limbs.  */
Packit 6c4009
} __mpf_struct;
Packit 6c4009
Packit 6c4009
/* typedef __mpf_struct MP_FLOAT; */
Packit 6c4009
typedef __mpf_struct mpf_t[1];
Packit 6c4009
Packit 6c4009
/* Types for function declarations in gmp files.  */
Packit 6c4009
/* ??? Should not pollute user name space with these ??? */
Packit 6c4009
typedef __gmp_const __mpz_struct *mpz_srcptr;
Packit 6c4009
typedef __mpz_struct *mpz_ptr;
Packit 6c4009
typedef __gmp_const __mpf_struct *mpf_srcptr;
Packit 6c4009
typedef __mpf_struct *mpf_ptr;
Packit 6c4009
typedef __gmp_const __mpq_struct *mpq_srcptr;
Packit 6c4009
typedef __mpq_struct *mpq_ptr;
Packit 6c4009
Packit 6c4009
#ifndef _PROTO
Packit 6c4009
#if defined (__STDC__) || defined (__cplusplus)
Packit 6c4009
#define _PROTO(x) x
Packit 6c4009
#else
Packit 6c4009
#define _PROTO(x) ()
Packit 6c4009
#endif
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#ifndef __MPN
Packit 6c4009
#if defined (__STDC__) || defined (__cplusplus)
Packit 6c4009
#define __MPN(x) __mpn_##x
Packit 6c4009
#else
Packit 6c4009
#define __MPN(x) __mpn_/**/x
Packit 6c4009
#endif
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#if defined (FILE) || defined (_STDIO_H_) || defined (__STDIO_H__) || defined (H_STDIO)
Packit 6c4009
#define _GMP_H_HAVE_FILE 1
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
void mp_set_memory_functions _PROTO ((void *(*) (size_t),
Packit 6c4009
				      void *(*) (void *, size_t, size_t),
Packit 6c4009
				      void (*) (void *, size_t)));
Packit 6c4009
extern const int mp_bits_per_limb;
Packit 6c4009
Packit 6c4009
/**************** Integer (i.e. Z) routines.  ****************/
Packit 6c4009
Packit 6c4009
#if defined (__cplusplus)
Packit 6c4009
extern "C" {
Packit 6c4009
#endif
Packit 6c4009
void *_mpz_realloc _PROTO ((mpz_ptr, mp_size_t));
Packit 6c4009
Packit 6c4009
void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr));
Packit 6c4009
void mpz_add _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_and _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_array_init _PROTO ((mpz_ptr, mp_size_t, mp_size_t));
Packit 6c4009
void mpz_cdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
unsigned long int mpz_cdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_cdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
unsigned long int mpz_cdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_cdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
unsigned long int mpz_cdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
unsigned long int mpz_cdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_clear _PROTO ((mpz_ptr));
Packit 6c4009
void mpz_clrbit _PROTO ((mpz_ptr, unsigned long int));
Packit 6c4009
int mpz_cmp _PROTO ((mpz_srcptr, mpz_srcptr));
Packit 6c4009
int mpz_cmp_si _PROTO ((mpz_srcptr, signed long int));
Packit 6c4009
int mpz_cmp_ui _PROTO ((mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_com _PROTO ((mpz_ptr, mpz_srcptr));
Packit 6c4009
void mpz_divexact _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_fac_ui _PROTO ((mpz_ptr, unsigned long int));
Packit 6c4009
void mpz_fdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_fdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
unsigned long int mpz_fdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_fdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
unsigned long int mpz_fdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_fdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_fdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
unsigned long int mpz_fdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
unsigned long int mpz_fdiv_ui _PROTO ((mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_gcd _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
/* signed */ long int mpz_get_si _PROTO ((mpz_srcptr));
Packit 6c4009
char *mpz_get_str _PROTO ((char *, int, mpz_srcptr));
Packit 6c4009
unsigned long int mpz_get_ui _PROTO ((mpz_srcptr));
Packit 6c4009
mp_limb_t mpz_getlimbn _PROTO ((mpz_srcptr, mp_size_t));
Packit 6c4009
unsigned long int mpz_hamdist _PROTO ((mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_init _PROTO ((mpz_ptr));
Packit 6c4009
#ifdef _GMP_H_HAVE_FILE
Packit 6c4009
size_t mpz_inp_binary _PROTO ((mpz_ptr, FILE *));
Packit 6c4009
size_t mpz_inp_raw _PROTO ((mpz_ptr, FILE *));
Packit 6c4009
size_t mpz_inp_str _PROTO ((mpz_ptr, FILE *, int));
Packit 6c4009
#endif
Packit 6c4009
void mpz_init_set _PROTO ((mpz_ptr, mpz_srcptr));
Packit 6c4009
void mpz_init_set_d _PROTO ((mpz_ptr, double));
Packit 6c4009
void mpz_init_set_si _PROTO ((mpz_ptr, signed long int));
Packit 6c4009
int mpz_init_set_str _PROTO ((mpz_ptr, const char *, int));
Packit 6c4009
void mpz_init_set_ui _PROTO ((mpz_ptr, unsigned long int));
Packit 6c4009
int mpz_invert _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_ior _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
int mpz_jacobi _PROTO ((mpz_srcptr, mpz_srcptr));
Packit 6c4009
int mpz_legendre _PROTO ((mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_mod _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_mul _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr));
Packit 6c4009
#ifdef _GMP_H_HAVE_FILE
Packit 6c4009
size_t mpz_out_binary _PROTO ((FILE *, mpz_srcptr));
Packit 6c4009
size_t mpz_out_raw _PROTO ((FILE *, mpz_srcptr));
Packit 6c4009
size_t mpz_out_str _PROTO ((FILE *, int, mpz_srcptr));
Packit 6c4009
#endif
Packit 6c4009
int mpz_perfect_square_p _PROTO ((mpz_srcptr));
Packit 6c4009
unsigned long int mpz_popcount _PROTO ((mpz_srcptr));
Packit 6c4009
void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr));
Packit 6c4009
int mpz_probab_prime_p _PROTO ((mpz_srcptr, int));
Packit 6c4009
void mpz_random _PROTO ((mpz_ptr, mp_size_t));
Packit 6c4009
void mpz_random2 _PROTO ((mpz_ptr, mp_size_t));
Packit 6c4009
unsigned long int mpz_scan0 _PROTO ((mpz_srcptr, unsigned long int));
Packit 6c4009
unsigned long int mpz_scan1 _PROTO ((mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_set _PROTO ((mpz_ptr, mpz_srcptr));
Packit 6c4009
void mpz_set_d _PROTO ((mpz_ptr, double));
Packit 6c4009
void mpz_set_si _PROTO ((mpz_ptr, signed long int));
Packit 6c4009
int mpz_set_str _PROTO ((mpz_ptr, const char *, int));
Packit 6c4009
void mpz_set_ui _PROTO ((mpz_ptr, unsigned long int));
Packit 6c4009
void mpz_setbit _PROTO ((mpz_ptr, unsigned long int));
Packit 6c4009
size_t mpz_size _PROTO ((mpz_srcptr));
Packit 6c4009
size_t mpz_sizeinbase _PROTO ((mpz_srcptr, int));
Packit 6c4009
void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr));
Packit 6c4009
void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr));
Packit 6c4009
void mpz_sub _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_tdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_tdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_tdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_tdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_tdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_tdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
Packit 6c4009
void mpz_tdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_tdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
Packit 6c4009
void mpz_ui_pow_ui _PROTO ((mpz_ptr, unsigned long int, unsigned long int));
Packit 6c4009
Packit 6c4009
/**************** Rational (i.e. Q) routines.  ****************/
Packit 6c4009
Packit 6c4009
void mpq_init _PROTO ((mpq_ptr));
Packit 6c4009
void mpq_clear _PROTO ((mpq_ptr));
Packit 6c4009
void mpq_set _PROTO ((mpq_ptr, mpq_srcptr));
Packit 6c4009
void mpq_set_ui _PROTO ((mpq_ptr, unsigned long int, unsigned long int));
Packit 6c4009
void mpq_set_si _PROTO ((mpq_ptr, signed long int, unsigned long int));
Packit 6c4009
void mpq_add _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
Packit 6c4009
void mpq_sub _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
Packit 6c4009
void mpq_mul _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
Packit 6c4009
void mpq_div _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
Packit 6c4009
void mpq_neg _PROTO ((mpq_ptr, mpq_srcptr));
Packit 6c4009
int mpq_cmp _PROTO ((mpq_srcptr, mpq_srcptr));
Packit 6c4009
int mpq_cmp_ui _PROTO ((mpq_srcptr, unsigned long int, unsigned long int));
Packit 6c4009
void mpq_inv _PROTO ((mpq_ptr, mpq_srcptr));
Packit 6c4009
void mpq_set_num _PROTO ((mpq_ptr, mpz_srcptr));
Packit 6c4009
void mpq_set_den _PROTO ((mpq_ptr, mpz_srcptr));
Packit 6c4009
void mpq_get_num _PROTO ((mpz_ptr, mpq_srcptr));
Packit 6c4009
void mpq_get_den _PROTO ((mpz_ptr, mpq_srcptr));
Packit 6c4009
double mpq_get_d _PROTO ((mpq_srcptr));
Packit 6c4009
void mpq_canonicalize _PROTO ((mpq_ptr));
Packit 6c4009
Packit 6c4009
/**************** Float (i.e. F) routines.  ****************/
Packit 6c4009
Packit 6c4009
void mpf_abs _PROTO ((mpf_ptr, mpf_srcptr));
Packit 6c4009
void mpf_add _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
Packit 6c4009
void mpf_add_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
Packit 6c4009
void mpf_clear _PROTO ((mpf_ptr));
Packit 6c4009
int mpf_cmp _PROTO ((mpf_srcptr, mpf_srcptr));
Packit 6c4009
int mpf_cmp_si _PROTO ((mpf_srcptr, signed long int));
Packit 6c4009
int mpf_cmp_ui _PROTO ((mpf_srcptr, unsigned long int));
Packit 6c4009
void mpf_div _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
Packit 6c4009
void mpf_div_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
Packit 6c4009
void mpf_div_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
Packit 6c4009
void mpf_dump _PROTO ((mpf_srcptr));
Packit 6c4009
int mpf_eq _PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int));
Packit 6c4009
unsigned long int mpf_get_prec _PROTO ((mpf_srcptr));
Packit 6c4009
char *mpf_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr));
Packit 6c4009
void mpf_init _PROTO ((mpf_ptr));
Packit 6c4009
void mpf_init2 _PROTO ((mpf_ptr, unsigned long int));
Packit 6c4009
#ifdef _GMP_H_HAVE_FILE
Packit 6c4009
size_t mpf_inp_str _PROTO ((mpf_ptr, FILE *, int));
Packit 6c4009
#endif
Packit 6c4009
void mpf_init_set _PROTO ((mpf_ptr, mpf_srcptr));
Packit 6c4009
void mpf_init_set_d _PROTO ((mpf_ptr, double));
Packit 6c4009
void mpf_init_set_si _PROTO ((mpf_ptr, signed long int));
Packit 6c4009
int mpf_init_set_str _PROTO ((mpf_ptr, char *, int));
Packit 6c4009
void mpf_init_set_ui _PROTO ((mpf_ptr, unsigned long int));
Packit 6c4009
void mpf_mul _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
Packit 6c4009
void mpf_mul_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
Packit 6c4009
void mpf_mul_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
Packit 6c4009
void mpf_neg _PROTO ((mpf_ptr, mpf_srcptr));
Packit 6c4009
#ifdef _GMP_H_HAVE_FILE
Packit 6c4009
size_t mpf_out_str _PROTO ((FILE *, int, size_t, mpf_srcptr));
Packit 6c4009
#endif
Packit 6c4009
void mpf_random2 _PROTO ((mpf_ptr, mp_size_t, mp_exp_t));
Packit 6c4009
void mpf_reldiff _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
Packit 6c4009
void mpf_set _PROTO ((mpf_ptr, mpf_srcptr));
Packit 6c4009
void mpf_set_d _PROTO ((mpf_ptr, double));
Packit 6c4009
void mpf_set_default_prec _PROTO ((unsigned long int));
Packit 6c4009
void mpf_set_prec _PROTO ((mpf_ptr, unsigned long int));
Packit 6c4009
void mpf_set_prec_raw _PROTO ((mpf_ptr, unsigned long int));
Packit 6c4009
void mpf_set_si _PROTO ((mpf_ptr, signed long int));
Packit 6c4009
int mpf_set_str _PROTO ((mpf_ptr, const char *, int));
Packit 6c4009
void mpf_set_ui _PROTO ((mpf_ptr, unsigned long int));
Packit 6c4009
size_t mpf_size _PROTO ((mpf_srcptr));
Packit 6c4009
void mpf_sqrt _PROTO ((mpf_ptr, mpf_srcptr));
Packit 6c4009
void mpf_sqrt_ui _PROTO ((mpf_ptr, unsigned long int));
Packit 6c4009
void mpf_sub _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
Packit 6c4009
void mpf_sub_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
Packit 6c4009
void mpf_ui_div _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
Packit 6c4009
void mpf_ui_sub _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
Packit 6c4009
#if defined (__cplusplus)
Packit 6c4009
}
Packit 6c4009
#endif
Packit 6c4009
/************ Low level positive-integer (i.e. N) routines.  ************/
Packit 6c4009
Packit 6c4009
/* This is ugly, but we need to make usr calls reach the prefixed function.  */
Packit 6c4009
#define mpn_add			__MPN(add)
Packit 6c4009
#define mpn_add_1		__MPN(add_1)
Packit 6c4009
#define mpn_add_n		__MPN(add_n)
Packit 6c4009
#define mpn_addmul_1		__MPN(addmul_1)
Packit 6c4009
#define mpn_bdivmod		__MPN(bdivmod)
Packit 6c4009
#define mpn_cmp			__MPN(cmp)
Packit 6c4009
#define mpn_divmod_1		__MPN(divmod_1)
Packit 6c4009
#define mpn_divrem		__MPN(divrem)
Packit 6c4009
#define mpn_divrem_1		__MPN(divrem_1)
Packit 6c4009
#define mpn_dump		__MPN(dump)
Packit 6c4009
#define mpn_gcd			__MPN(gcd)
Packit 6c4009
#define mpn_gcd_1		__MPN(gcd_1)
Packit 6c4009
#define mpn_gcdext		__MPN(gcdext)
Packit 6c4009
#define mpn_get_str		__MPN(get_str)
Packit 6c4009
#define mpn_hamdist		__MPN(hamdist)
Packit 6c4009
#define mpn_lshift		__MPN(lshift)
Packit 6c4009
#define mpn_mod_1		__MPN(mod_1)
Packit 6c4009
#define mpn_mul			__MPN(mul)
Packit 6c4009
#define mpn_mul_1		__MPN(mul_1)
Packit 6c4009
#define mpn_mul_n		__MPN(mul_n)
Packit 6c4009
#define mpn_perfect_square_p	__MPN(perfect_square_p)
Packit 6c4009
#define mpn_popcount		__MPN(popcount)
Packit 6c4009
#define mpn_preinv_mod_1	__MPN(preinv_mod_1)
Packit 6c4009
#define mpn_random2		__MPN(random2)
Packit 6c4009
#define mpn_rshift		__MPN(rshift)
Packit 6c4009
#define mpn_scan0		__MPN(scan0)
Packit 6c4009
#define mpn_scan1		__MPN(scan1)
Packit 6c4009
#define mpn_set_str		__MPN(set_str)
Packit 6c4009
#define mpn_sqrtrem		__MPN(sqrtrem)
Packit 6c4009
#define mpn_sub			__MPN(sub)
Packit 6c4009
#define mpn_sub_1		__MPN(sub_1)
Packit 6c4009
#define mpn_sub_n		__MPN(sub_n)
Packit 6c4009
#define mpn_submul_1		__MPN(submul_1)
Packit 6c4009
#define mpn_udiv_w_sdiv		__MPN(udiv_w_sdiv)
Packit 6c4009
Packit 6c4009
#if defined (__cplusplus)
Packit 6c4009
extern "C" {
Packit 6c4009
#endif
Packit 6c4009
mp_limb_t mpn_add _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
Packit 6c4009
mp_limb_t mpn_add_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
Packit 6c4009
mp_limb_t mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
Packit 6c4009
mp_limb_t mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
Packit 6c4009
mp_limb_t mpn_bdivmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, unsigned long int));
Packit 6c4009
int mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
Packit 6c4009
mp_limb_t mpn_divmod_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
Packit 6c4009
mp_limb_t mpn_divrem _PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t));
Packit 6c4009
mp_limb_t mpn_divrem_1 _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t));
Packit 6c4009
void mpn_dump _PROTO ((mp_srcptr, mp_size_t));
Packit 6c4009
mp_size_t mpn_gcd _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
Packit 6c4009
mp_limb_t mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
Packit 6c4009
mp_size_t mpn_gcdext _PROTO ((mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t));
Packit 6c4009
size_t mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t));
Packit 6c4009
unsigned long int mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
Packit 6c4009
mp_limb_t mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
Packit 6c4009
mp_limb_t mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t));
Packit 6c4009
mp_limb_t mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t));
Packit 6c4009
mp_limb_t mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
Packit 6c4009
void mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
Packit 6c4009
int mpn_perfect_square_p _PROTO ((mp_srcptr, mp_size_t));
Packit 6c4009
unsigned long int mpn_popcount _PROTO ((mp_srcptr, mp_size_t));
Packit 6c4009
mp_limb_t mpn_preinv_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t));
Packit 6c4009
void mpn_random2 _PROTO ((mp_ptr, mp_size_t));
Packit 6c4009
mp_limb_t mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
Packit 6c4009
unsigned long int mpn_scan0 _PROTO ((mp_srcptr, unsigned long int));
Packit 6c4009
unsigned long int mpn_scan1 _PROTO ((mp_srcptr, unsigned long int));
Packit 6c4009
mp_size_t mpn_set_str _PROTO ((mp_ptr, const unsigned char *, size_t, int));
Packit 6c4009
mp_size_t mpn_sqrtrem _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t));
Packit 6c4009
mp_limb_t mpn_sub _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t));
Packit 6c4009
mp_limb_t mpn_sub_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
Packit 6c4009
mp_limb_t mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
Packit 6c4009
mp_limb_t mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t));
Packit 6c4009
#if defined (__cplusplus)
Packit 6c4009
}
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#if defined (__GNUC__) || defined (_FORCE_INLINES)
Packit 6c4009
_EXTERN_INLINE mp_limb_t
Packit 6c4009
#if defined (__STDC__) || defined (__cplusplus)
Packit 6c4009
mpn_add_1 (register mp_ptr res_ptr,
Packit 6c4009
	   register mp_srcptr s1_ptr,
Packit 6c4009
	   register mp_size_t s1_size,
Packit 6c4009
	   register mp_limb_t s2_limb)
Packit 6c4009
#else
Packit 6c4009
mpn_add_1 (res_ptr, s1_ptr, s1_size, s2_limb)
Packit 6c4009
     register mp_ptr res_ptr;
Packit 6c4009
     register mp_srcptr s1_ptr;
Packit 6c4009
     register mp_size_t s1_size;
Packit 6c4009
     register mp_limb_t s2_limb;
Packit 6c4009
#endif
Packit 6c4009
{
Packit 6c4009
  register mp_limb_t x;
Packit 6c4009
Packit 6c4009
  x = *s1_ptr++;
Packit 6c4009
  s2_limb = x + s2_limb;
Packit 6c4009
  *res_ptr++ = s2_limb;
Packit 6c4009
  if (s2_limb < x)
Packit 6c4009
    {
Packit 6c4009
      while (--s1_size != 0)
Packit 6c4009
	{
Packit 6c4009
	  x = *s1_ptr++ + 1;
Packit 6c4009
	  *res_ptr++ = x;
Packit 6c4009
	  if (x != 0)
Packit 6c4009
	    goto fin;
Packit 6c4009
	}
Packit 6c4009
Packit 6c4009
      return 1;
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
 fin:
Packit 6c4009
  if (res_ptr != s1_ptr)
Packit 6c4009
    {
Packit 6c4009
      mp_size_t i;
Packit 6c4009
      for (i = 0; i < s1_size - 1; i++)
Packit 6c4009
	res_ptr[i] = s1_ptr[i];
Packit 6c4009
    }
Packit 6c4009
  return 0;
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
_EXTERN_INLINE mp_limb_t
Packit 6c4009
#if defined (__STDC__) || defined (__cplusplus)
Packit 6c4009
mpn_add (register mp_ptr res_ptr,
Packit 6c4009
	 register mp_srcptr s1_ptr,
Packit 6c4009
	 register mp_size_t s1_size,
Packit 6c4009
	 register mp_srcptr s2_ptr,
Packit 6c4009
	 register mp_size_t s2_size)
Packit 6c4009
#else
Packit 6c4009
mpn_add (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
Packit 6c4009
     register mp_ptr res_ptr;
Packit 6c4009
     register mp_srcptr s1_ptr;
Packit 6c4009
     register mp_size_t s1_size;
Packit 6c4009
     register mp_srcptr s2_ptr;
Packit 6c4009
     register mp_size_t s2_size;
Packit 6c4009
#endif
Packit 6c4009
{
Packit 6c4009
  mp_limb_t cy_limb = 0;
Packit 6c4009
Packit 6c4009
  if (s2_size != 0)
Packit 6c4009
    cy_limb = mpn_add_n (res_ptr, s1_ptr, s2_ptr, s2_size);
Packit 6c4009
Packit 6c4009
  if (s1_size - s2_size != 0)
Packit 6c4009
    cy_limb = mpn_add_1 (res_ptr + s2_size,
Packit 6c4009
			 s1_ptr + s2_size,
Packit 6c4009
			 s1_size - s2_size,
Packit 6c4009
			 cy_limb);
Packit 6c4009
  return cy_limb;
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
_EXTERN_INLINE mp_limb_t
Packit 6c4009
#if defined (__STDC__) || defined (__cplusplus)
Packit 6c4009
mpn_sub_1 (register mp_ptr res_ptr,
Packit 6c4009
	   register mp_srcptr s1_ptr,
Packit 6c4009
	   register mp_size_t s1_size,
Packit 6c4009
	   register mp_limb_t s2_limb)
Packit 6c4009
#else
Packit 6c4009
mpn_sub_1 (res_ptr, s1_ptr, s1_size, s2_limb)
Packit 6c4009
     register mp_ptr res_ptr;
Packit 6c4009
     register mp_srcptr s1_ptr;
Packit 6c4009
     register mp_size_t s1_size;
Packit 6c4009
     register mp_limb_t s2_limb;
Packit 6c4009
#endif
Packit 6c4009
{
Packit 6c4009
  register mp_limb_t x;
Packit 6c4009
Packit 6c4009
  x = *s1_ptr++;
Packit 6c4009
  s2_limb = x - s2_limb;
Packit 6c4009
  *res_ptr++ = s2_limb;
Packit 6c4009
  if (s2_limb > x)
Packit 6c4009
    {
Packit 6c4009
      while (--s1_size != 0)
Packit 6c4009
	{
Packit 6c4009
	  x = *s1_ptr++;
Packit 6c4009
	  *res_ptr++ = x - 1;
Packit 6c4009
	  if (x != 0)
Packit 6c4009
	    goto fin;
Packit 6c4009
	}
Packit 6c4009
Packit 6c4009
      return 1;
Packit 6c4009
    }
Packit 6c4009
Packit 6c4009
 fin:
Packit 6c4009
  if (res_ptr != s1_ptr)
Packit 6c4009
    {
Packit 6c4009
      mp_size_t i;
Packit 6c4009
      for (i = 0; i < s1_size - 1; i++)
Packit 6c4009
	res_ptr[i] = s1_ptr[i];
Packit 6c4009
    }
Packit 6c4009
  return 0;
Packit 6c4009
}
Packit 6c4009
Packit 6c4009
_EXTERN_INLINE mp_limb_t
Packit 6c4009
#if defined (__STDC__) || defined (__cplusplus)
Packit 6c4009
mpn_sub (register mp_ptr res_ptr,
Packit 6c4009
	 register mp_srcptr s1_ptr,
Packit 6c4009
	 register mp_size_t s1_size,
Packit 6c4009
	 register mp_srcptr s2_ptr,
Packit 6c4009
	 register mp_size_t s2_size)
Packit 6c4009
#else
Packit 6c4009
mpn_sub (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
Packit 6c4009
     register mp_ptr res_ptr;
Packit 6c4009
     register mp_srcptr s1_ptr;
Packit 6c4009
     register mp_size_t s1_size;
Packit 6c4009
     register mp_srcptr s2_ptr;
Packit 6c4009
     register mp_size_t s2_size;
Packit 6c4009
#endif
Packit 6c4009
{
Packit 6c4009
  mp_limb_t cy_limb = 0;
Packit 6c4009
Packit 6c4009
  if (s2_size != 0)
Packit 6c4009
    cy_limb = mpn_sub_n (res_ptr, s1_ptr, s2_ptr, s2_size);
Packit 6c4009
Packit 6c4009
  if (s1_size - s2_size != 0)
Packit 6c4009
    cy_limb = mpn_sub_1 (res_ptr + s2_size,
Packit 6c4009
			 s1_ptr + s2_size,
Packit 6c4009
			 s1_size - s2_size,
Packit 6c4009
			 cy_limb);
Packit 6c4009
  return cy_limb;
Packit 6c4009
}
Packit 6c4009
#endif /* __GNUC__ */
Packit 6c4009
Packit 6c4009
/* Allow faster testing for negative, zero, and positive.  */
Packit 6c4009
#define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0)
Packit 6c4009
#define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0)
Packit 6c4009
#define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0)
Packit 6c4009
Packit 6c4009
/* Allow direct user access to numerator and denominator of a mpq_t object.  */
Packit 6c4009
#define mpq_numref(Q) (&((Q)->_mp_num))
Packit 6c4009
#define mpq_denref(Q) (&((Q)->_mp_den))
Packit 6c4009
Packit 6c4009
/* When using GCC, optimize certain common comparisons.  */
Packit 6c4009
#if defined (__GNUC__)
Packit 6c4009
#define mpz_cmp_ui(Z,UI) \
Packit 6c4009
  (__builtin_constant_p (UI) && (UI) == 0				\
Packit 6c4009
   ? mpz_sgn (Z) : mpz_cmp_ui (Z,UI))
Packit 6c4009
#define mpz_cmp_si(Z,UI) \
Packit 6c4009
  (__builtin_constant_p (UI) && (UI) == 0 ? mpz_sgn (Z)			\
Packit 6c4009
   : __builtin_constant_p (UI) && (UI) > 0 ? mpz_cmp_ui (Z,UI)		\
Packit 6c4009
   : mpz_cmp_si (Z,UI))
Packit 6c4009
#define mpq_cmp_ui(Q,NUI,DUI) \
Packit 6c4009
  (__builtin_constant_p (NUI) && (NUI) == 0				\
Packit 6c4009
   ? mpq_sgn (Q) : mpq_cmp_ui (Q,NUI,DUI))
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
#define mpn_divmod(qp,np,nsize,dp,dsize) mpn_divrem (qp,0,np,nsize,dp,dsize)
Packit 6c4009
#if 0
Packit 6c4009
#define mpn_divmod_1(qp,np,nsize,dlimb) mpn_divrem_1 (qp,0,np,nsize,dlimb)
Packit 6c4009
#endif
Packit 6c4009
Packit 6c4009
/* Compatibility with GMP 1.  */
Packit 6c4009
#define mpz_mdiv	mpz_fdiv_q
Packit 6c4009
#define mpz_mdivmod	mpz_fdiv_qr
Packit 6c4009
#define mpz_mmod	mpz_fdiv_r
Packit 6c4009
#define mpz_mdiv_ui	mpz_fdiv_q_ui
Packit 6c4009
#define mpz_mdivmod_ui(q,r,n,d) \
Packit 6c4009
  ((r == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d))
Packit 6c4009
#define mpz_mmod_ui(r,n,d) \
Packit 6c4009
  ((r == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d))
Packit 6c4009
Packit 6c4009
/* Useful synonyms, but not quite compatible with GMP 1.  */
Packit 6c4009
#define mpz_div		mpz_fdiv_q
Packit 6c4009
#define mpz_divmod	mpz_fdiv_qr
Packit 6c4009
#define mpz_div_ui	mpz_fdiv_q_ui
Packit 6c4009
#define mpz_divmod_ui	mpz_fdiv_qr_ui
Packit 6c4009
#define mpz_mod_ui	mpz_fdiv_r_ui
Packit 6c4009
#define mpz_div_2exp	mpz_fdiv_q_2exp
Packit 6c4009
#define mpz_mod_2exp	mpz_fdiv_r_2exp
Packit 6c4009
Packit 6c4009
#define __GNU_MP_VERSION 2
Packit 6c4009
#define __GNU_MP_VERSION_MINOR 0
Packit 6c4009
#define __GMP_H__
Packit 6c4009
#endif /* __GMP_H__ */