22 Name: imath.h
33 Purpose: Arbitrary precision integer arithmetic routines.
44 Author: M. J. Fromberger <http://www.dartmouth.edu/~sting/>
5- Info: $Id: imath.h,v 1.1 2006/07/13 04: 15:24 neilc Exp $
5+ Info: $Id: imath.h,v 1.2 2006/07/15 15:27:14 tgl Exp $
66
77 Copyright (C) 2002 Michael J. Fromberger, All Rights Reserved.
88
@@ -39,11 +39,15 @@ typedef unsigned char mp_sign;
3939typedef unsignedint mp_size ;
4040typedef int mp_result ;
4141#ifdef USE_LONG_LONG
42- typedef unsignedint mp_digit ;
43- typedef unsigned long long mp_word ;
42+ typedef uint32 mp_digit ;
43+ typedef uint64 mp_word ;
44+ #define MP_DIGIT_MAX 0xFFFFFFFFULL
45+ #define MP_WORD_MAX 0xFFFFFFFFFFFFFFFFULL
4446#else
45- typedef unsigned short mp_digit ;
46- typedef unsignedint mp_word ;
47+ typedef uint16 mp_digit ;
48+ typedef uint32 mp_word ;
49+ #define MP_DIGIT_MAX 0xFFFFUL
50+ #define MP_WORD_MAX 0xFFFFFFFFUL
4751#endif
4852
4953typedef struct mpz {
@@ -70,21 +74,6 @@ extern const mp_result MP_BADARG;
7074#define MP_DIGIT_BIT (sizeof(mp_digit) * CHAR_BIT)
7175#define MP_WORD_BIT (sizeof(mp_word) * CHAR_BIT)
7276
73- #ifdef USE_LONG_LONG
74- # ifndef ULONG_LONG_MAX
75- # ifdef ULLONG_MAX
76- # define ULONG_LONG_MAX ULLONG_MAX
77- # else
78- # error "Maximum value of unsigned long long not defined!"
79- # endif
80- # endif
81- # define MP_DIGIT_MAX (ULONG_MAX * 1ULL)
82- # define MP_WORD_MAX ULONG_LONG_MAX
83- #else
84- # define MP_DIGIT_MAX (USHRT_MAX * 1UL)
85- # define MP_WORD_MAX (UINT_MAX * 1UL)
86- #endif
87-
8877#define MP_MIN_RADIX 2
8978#define MP_MAX_RADIX 36
9079