diff options
| author | Paul Eggert | 2012-09-09 09:06:33 -0700 |
|---|---|---|
| committer | Paul Eggert | 2012-09-09 09:06:33 -0700 |
| commit | f6196b87e1ceee0d56f2fe6f3aa2b9d1d82c44b0 (patch) | |
| tree | 3400f2f4898ce1fc39ad437faa5e55714129d30b /src/data.c | |
| parent | 8ed43f154827121c624a5a93808340618bd8f03f (diff) | |
| download | emacs-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.c | 27 |
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 | ||
| 51 | Lisp_Object Qnil, Qt, Qquote, Qlambda, Qunbound; | 46 | Lisp_Object Qnil, Qt, Qquote, Qlambda, Qunbound; |
| 52 | static Lisp_Object Qsubr; | 47 | static 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 | ||
| 2741 | double | ||
| 2742 | fmod (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 | |||
| 2762 | DEFUN ("mod", Fmod, Smod, 2, 2, 0, | 2735 | DEFUN ("mod", Fmod, Smod, 2, 2, 0, |
| 2763 | doc: /* Return X modulo Y. | 2736 | doc: /* Return X modulo Y. |
| 2764 | The result falls between zero (inclusive) and Y (exclusive). | 2737 | The result falls between zero (inclusive) and Y (exclusive). |