diff options
| author | Paul Eggert | 2013-06-20 07:15:42 -0700 |
|---|---|---|
| committer | Paul Eggert | 2013-06-20 07:15:42 -0700 |
| commit | 89561f72e587677618afa2fd6962704e841e39e8 (patch) | |
| tree | 9b790c6b916c853df24a72eebd505c38501ccec6 /src/floatfns.c | |
| parent | 47199123698df3a14acb016c3869075b2d6012d5 (diff) | |
| download | emacs-89561f72e587677618afa2fd6962704e841e39e8.tar.gz emacs-89561f72e587677618afa2fd6962704e841e39e8.zip | |
Add log2 support and make log10 obsolete for consistency.
* configure.ac (log2): Check for this function.
* doc/lispref/numbers.texi (Math Functions): Remove obsolete function log10.
* lisp/subr.el (log10): Move here from C code, and declare as obsolete.
All uses of (log10 X) replaced with (log X 10).
* src/floatfns.c (Flog) [HAVE_LOG2]: Use log2 if available and if the
base is 2; this is more accurate.
(Flog10): Move to Lisp (marked obsolete there).
Diffstat (limited to 'src/floatfns.c')
| -rw-r--r-- | src/floatfns.c | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/src/floatfns.c b/src/floatfns.c index dd6d3dfe582..f3d0936f888 100644 --- a/src/floatfns.c +++ b/src/floatfns.c | |||
| @@ -25,7 +25,8 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 25 | /* C89 requires only the following math.h functions, and Emacs omits | 25 | /* C89 requires only the following math.h functions, and Emacs omits |
| 26 | the starred functions since we haven't found a use for them: | 26 | the starred functions since we haven't found a use for them: |
| 27 | acos, asin, atan, atan2, ceil, cos, *cosh, exp, fabs, floor, fmod, | 27 | acos, asin, atan, atan2, ceil, cos, *cosh, exp, fabs, floor, fmod, |
| 28 | frexp, ldexp, log, log10, *modf, pow, sin, *sinh, sqrt, tan, *tanh. | 28 | frexp, ldexp, log, log10 [via (log X 10)], *modf, pow, sin, *sinh, |
| 29 | sqrt, tan, *tanh. | ||
| 29 | 30 | ||
| 30 | C99 and C11 require the following math.h functions in addition to | 31 | C99 and C11 require the following math.h functions in addition to |
| 31 | the C89 functions. Of these, Emacs currently exports only the | 32 | the C89 functions. Of these, Emacs currently exports only the |
| @@ -33,10 +34,10 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ | |||
| 33 | acosh, atanh, cbrt, *copysign, erf, erfc, exp2, expm1, fdim, fma, | 34 | acosh, atanh, cbrt, *copysign, erf, erfc, exp2, expm1, fdim, fma, |
| 34 | fmax, fmin, fpclassify, hypot, ilogb, isfinite, isgreater, | 35 | fmax, fmin, fpclassify, hypot, ilogb, isfinite, isgreater, |
| 35 | isgreaterequal, isinf, isless, islessequal, islessgreater, *isnan, | 36 | isgreaterequal, isinf, isless, islessequal, islessgreater, *isnan, |
| 36 | isnormal, isunordered, lgamma, log1p, log2, *logb (approximately), | 37 | isnormal, isunordered, lgamma, log1p, *log2 [via (log X 2)], *logb |
| 37 | lrint/llrint, lround/llround, nan, nearbyint, nextafter, | 38 | (approximately), lrint/llrint, lround/llround, nan, nearbyint, |
| 38 | nexttoward, remainder, remquo, *rint, round, scalbln, scalbn, | 39 | nextafter, nexttoward, remainder, remquo, *rint, round, scalbln, |
| 39 | signbit, tgamma, trunc. | 40 | scalbn, signbit, tgamma, trunc. |
| 40 | */ | 41 | */ |
| 41 | 42 | ||
| 42 | #include <config.h> | 43 | #include <config.h> |
| @@ -252,21 +253,16 @@ If the optional argument BASE is given, return log ARG using that base. */) | |||
| 252 | 253 | ||
| 253 | if (b == 10.0) | 254 | if (b == 10.0) |
| 254 | d = log10 (d); | 255 | d = log10 (d); |
| 256 | #if HAVE_LOG2 | ||
| 257 | else if (b == 2.0) | ||
| 258 | d = log2 (d); | ||
| 259 | #endif | ||
| 255 | else | 260 | else |
| 256 | d = log (d) / log (b); | 261 | d = log (d) / log (b); |
| 257 | } | 262 | } |
| 258 | return make_float (d); | 263 | return make_float (d); |
| 259 | } | 264 | } |
| 260 | 265 | ||
| 261 | DEFUN ("log10", Flog10, Slog10, 1, 1, 0, | ||
| 262 | doc: /* Return the logarithm base 10 of ARG. */) | ||
| 263 | (Lisp_Object arg) | ||
| 264 | { | ||
| 265 | double d = extract_float (arg); | ||
| 266 | d = log10 (d); | ||
| 267 | return make_float (d); | ||
| 268 | } | ||
| 269 | |||
| 270 | DEFUN ("sqrt", Fsqrt, Ssqrt, 1, 1, 0, | 266 | DEFUN ("sqrt", Fsqrt, Ssqrt, 1, 1, 0, |
| 271 | doc: /* Return the square root of ARG. */) | 267 | doc: /* Return the square root of ARG. */) |
| 272 | (Lisp_Object arg) | 268 | (Lisp_Object arg) |
| @@ -564,7 +560,6 @@ syms_of_floatfns (void) | |||
| 564 | defsubr (&Sexp); | 560 | defsubr (&Sexp); |
| 565 | defsubr (&Sexpt); | 561 | defsubr (&Sexpt); |
| 566 | defsubr (&Slog); | 562 | defsubr (&Slog); |
| 567 | defsubr (&Slog10); | ||
| 568 | defsubr (&Ssqrt); | 563 | defsubr (&Ssqrt); |
| 569 | 564 | ||
| 570 | defsubr (&Sabs); | 565 | defsubr (&Sabs); |