Hi, I'm using GMP 6.2. Has been working fine for 2+ years now, great library.
I've built the library (64-bit) using Cygwin. This creates a DLL and a gmp.h file that can be used with Microsoft Visual Studio C compiler. As you probably know, MSVC strangely defines long as 32-bits. In gmp.h, these lines appear: #ifdef __GMP_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 unsigned long int mp_bitcnt_t; The problem is that while _LONG_LONG_LIMB is defined, the definition of mp_bitcnt_t ought to also use "long long". I get this compiler warning calling mpz_tstbit: warning C4244: 'argument': conversion from 'uint64_t' to 'mp_bitcnt_t', possible loss of data Yes, I'm creating mpz values with more than 4 billion bits. Minor issue #2 (I should have reported this years ago, sorry): In gmp.h, these lines: mpn_neg (mp_ptr __gmp_rp, mp_srcptr __gmp_up, mp_size_t __gmp_n) { while (*__gmp_up == 0) /* Low zero limbs are unchanged by negation. */ { *__gmp_rp = 0; if (!--__gmp_n) /* All zero */ return 0; ++__gmp_up; ++__gmp_rp; } *__gmp_rp = (- *__gmp_up) & GMP_NUMB_MASK; The last line generates this compiler warning: warning C4146: unary minus operator applied to unsigned type, result still unsigned Let me know if you need any more info. Regards, George Woltman _______________________________________________ gmp-bugs mailing list gmp-bugs@gmplib.org https://gmplib.org/mailman/listinfo/gmp-bugs