diff src/number.c @ 5602:c9e5612f5424

Support the MP library on recent FreeBSD, have it pass relevant tests. src/ChangeLog addition: 2011-11-26 Aidan Kehoe <kehoea@parhasard.net> * number-mp.c (bignum_to_string): Don't overwrite the accumulator we've just set up for this function. * number-mp.c (BIGNUM_TO_TYPE): mp_itom() doesn't necessarily do what this code used to think with negative numbers, it can treat them as unsigned ints. Subtract numbers from bignum_zero instead of multiplying them by -1 to convert them to their negative equivalents. * number-mp.c (bignum_to_int): * number-mp.c (bignum_to_uint): * number-mp.c (bignum_to_long): * number-mp.c (bignum_to_ulong): * number-mp.c (bignum_to_double): Use the changed BIGNUM_TO_TYPE() in these functions. * number-mp.c (bignum_ceil): * number-mp.c (bignum_floor): In these functions, be more careful about rounding to positive and negative infinity, respectively. Don't use the sign of QUOTIENT when working out out whether to add or subtract one, rather use the sign QUOTIENT would have if arbitrary-precision division were done. * number-mp.h: * number-mp.h (MP_GCD): Wrap #include <mp.h> in BEGIN_C_DECLS/END_C_DECLS. * number.c (Fbigfloat_get_precision): * number.c (Fbigfloat_set_precision): Don't attempt to call XBIGFLOAT_GET_PREC if this build doesn't support big floats.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 26 Nov 2011 17:59:14 +0000
parents 56144c8593a8
children a2912073be85
line wrap: on
line diff
--- a/src/number.c	Mon Nov 21 19:46:04 2011 +0100
+++ b/src/number.c	Sat Nov 26 17:59:14 2011 +0000
@@ -328,12 +328,14 @@
        (f))
 {
   CHECK_BIGFLOAT (f);
+#ifdef HAVE_BIGFLOAT
 #ifdef HAVE_BIGNUM
   bignum_set_ulong (scratch_bignum, XBIGFLOAT_GET_PREC (f));
   return Fcanonicalize_number (make_bignum_bg (scratch_bignum));
 #else
   return make_fixnum ((int) XBIGFLOAT_GET_PREC (f));
 #endif
+#endif
 }
 
 DEFUN ("bigfloat-set-precision", Fbigfloat_set_precision, 2, 2, 0, /*
@@ -364,8 +366,9 @@
       dead_wrong_type_argument (Qintegerp, f);
       return Qnil;
     }
-
+#ifdef HAVE_BIGFLOAT
   XBIGFLOAT_SET_PREC (f, prec);
+#endif
   return Fbigfloat_get_precision (f);
 }