aboutsummaryrefslogtreecommitdiffstats
path: root/src/data.c
diff options
context:
space:
mode:
authorPaul Eggert2012-09-09 09:06:33 -0700
committerPaul Eggert2012-09-09 09:06:33 -0700
commitf6196b87e1ceee0d56f2fe6f3aa2b9d1d82c44b0 (patch)
tree3400f2f4898ce1fc39ad437faa5e55714129d30b /src/data.c
parent8ed43f154827121c624a5a93808340618bd8f03f (diff)
downloademacs-f6196b87e1ceee0d56f2fe6f3aa2b9d1d82c44b0.tar.gz
emacs-f6196b87e1ceee0d56f2fe6f3aa2b9d1d82c44b0.zip
Assume C89 or later for math functions.
This simplifies the code, and makes it a bit smaller and faster, and (most important) makes it easier to clean up signal handling since we can stop worring about floating-point exceptions in library code. That was a problem before C89, but the problem went away many years ago on all practical Emacs targets. * configure.ac (frexp, fmod): Remove checks for these functions, as we now assume them. (FLOAT_CHECK_DOMAIN, HAVE_INVERSE_HYPERBOLIC, NO_MATHERR) (HAVE_EXCEPTION): Remove; no longer needed. * admin/CPP-DEFINES (HAVE_FMOD, HAVE_FREXP, FLOAT_CHECK_DOMAIN) (HAVE_INVERSE_HYPERBOLIC, NO_MATHERR): Remove. * src/data.c, src/image.c, src/lread.c, src/print.c: Don't include <math.h>; no longer needed. * src/data.c, src/floatfns.c (IEEE_FLOATING_POINT): Don't worry that it might be autoconfigured, as that never happens. * src/data.c (fmod): * src/doprnt.c (DBL_MAX_10_EXP): * src/print.c (DBL_DIG): Remove. C89 or later always defines these. * src/floatfns.c (HAVE_MATHERR, FLOAT_CHECK_ERRNO, FLOAT_CHECK_DOMAIN) (in_float, float_error_arg, float_error_arg2, float_error_fn_name) (arith_error, domain_error, domain_error2): Remove all this pre-C89 cruft. Do not include <errno.h> as that's no longer needed -- we simply return what C returns. All uses removed. (IN_FLOAT, IN_FLOAT2): Remove. All uses replaced with the wrapped code. (FLOAT_TO_INT, FLOAT_TO_INT2, range_error, range_error2): Remove. All uses expanded, as these macros are no longer used more than once and are now more trouble than they're worth. (Ftan): Use tan, not sin / cos. (Flogb): Assume C89 frexp. (fmod_float): Assume C89 fmod. (matherr) [HAVE_MATHERR]: Remove; no longer needed. (init_floatfns): Remove. All uses removed.
Diffstat (limited to 'src/data.c')
-rw-r--r--src/data.c27
1 files changed, 0 insertions, 27 deletions
diff --git a/src/data.c b/src/data.c
index de107fc04a5..a4cca0a3ee5 100644
--- a/src/data.c
+++ b/src/data.c
@@ -36,17 +36,12 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
36#include "keymap.h" 36#include "keymap.h"
37 37
38#include <float.h> 38#include <float.h>
39/* If IEEE_FLOATING_POINT isn't defined, default it from FLT_*. */
40#ifndef IEEE_FLOATING_POINT
41#if (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \ 39#if (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \
42 && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128) 40 && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128)
43#define IEEE_FLOATING_POINT 1 41#define IEEE_FLOATING_POINT 1
44#else 42#else
45#define IEEE_FLOATING_POINT 0 43#define IEEE_FLOATING_POINT 0
46#endif 44#endif
47#endif
48
49#include <math.h>
50 45
51Lisp_Object Qnil, Qt, Qquote, Qlambda, Qunbound; 46Lisp_Object Qnil, Qt, Qquote, Qlambda, Qunbound;
52static Lisp_Object Qsubr; 47static Lisp_Object Qsubr;
@@ -2737,28 +2732,6 @@ Both must be integers or markers. */)
2737 return val; 2732 return val;
2738} 2733}
2739 2734
2740#ifndef HAVE_FMOD
2741double
2742fmod (double f1, double f2)
2743{
2744 double r = f1;
2745
2746 if (f2 < 0.0)
2747 f2 = -f2;
2748
2749 /* If the magnitude of the result exceeds that of the divisor, or
2750 the sign of the result does not agree with that of the dividend,
2751 iterate with the reduced value. This does not yield a
2752 particularly accurate result, but at least it will be in the
2753 range promised by fmod. */
2754 do
2755 r -= f2 * floor (r / f2);
2756 while (f2 <= (r < 0 ? -r : r) || ((r < 0) != (f1 < 0) && ! isnan (r)));
2757
2758 return r;
2759}
2760#endif /* ! HAVE_FMOD */
2761
2762DEFUN ("mod", Fmod, Smod, 2, 2, 0, 2735DEFUN ("mod", Fmod, Smod, 2, 2, 0,
2763 doc: /* Return X modulo Y. 2736 doc: /* Return X modulo Y.
2764The result falls between zero (inclusive) and Y (exclusive). 2737The result falls between zero (inclusive) and Y (exclusive).