diff options
| author | Paul Eggert | 2015-03-24 11:42:53 -0700 |
|---|---|---|
| committer | Paul Eggert | 2015-03-24 11:43:21 -0700 |
| commit | 711770da9101a94ada42881cb86a976d323e9348 (patch) | |
| tree | 71465e72be54b14ec973cbf50a4a424449b31a07 /src/floatfns.c | |
| parent | 1e043f5e79bf67c9ebfa35623edcff0633d37a75 (diff) | |
| download | emacs-711770da9101a94ada42881cb86a976d323e9348.tar.gz emacs-711770da9101a94ada42881cb86a976d323e9348.zip | |
Fix minor ldexp issues
* doc/lispref/numbers.texi (Float Basics): Improve ldexp documentation.
* src/floatfns.c (Fldexp): Require 2 args. Avoid undefined behavior
if the exponent is out of 'int' range. Improve documentation.
Fixes: bug#20185
Diffstat (limited to 'src/floatfns.c')
| -rw-r--r-- | src/floatfns.c | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/src/floatfns.c b/src/floatfns.c index c68b9bd3a65..072e85776b5 100644 --- a/src/floatfns.c +++ b/src/floatfns.c | |||
| @@ -185,14 +185,14 @@ If X is zero, both parts (SGNFCAND and EXP) are zero. */) | |||
| 185 | return Fcons (make_float (sgnfcand), make_number (exponent)); | 185 | return Fcons (make_float (sgnfcand), make_number (exponent)); |
| 186 | } | 186 | } |
| 187 | 187 | ||
| 188 | DEFUN ("ldexp", Fldexp, Sldexp, 1, 2, 0, | 188 | DEFUN ("ldexp", Fldexp, Sldexp, 2, 2, 0, |
| 189 | doc: /* Construct number X from significand SGNFCAND and exponent EXP. | 189 | doc: /* Return X * 2**EXP, as a floating point number. |
| 190 | Returns the floating point value resulting from multiplying SGNFCAND | 190 | EXP must be an integer. */) |
| 191 | (the significand) by 2 raised to the power of EXP (the exponent). */) | ||
| 192 | (Lisp_Object sgnfcand, Lisp_Object exponent) | 191 | (Lisp_Object sgnfcand, Lisp_Object exponent) |
| 193 | { | 192 | { |
| 194 | CHECK_NUMBER (exponent); | 193 | CHECK_NUMBER (exponent); |
| 195 | return make_float (ldexp (XFLOATINT (sgnfcand), XINT (exponent))); | 194 | int e = min (max (INT_MIN, XINT (exponent)), INT_MAX); |
| 195 | return make_float (ldexp (XFLOATINT (sgnfcand), e)); | ||
| 196 | } | 196 | } |
| 197 | 197 | ||
| 198 | DEFUN ("exp", Fexp, Sexp, 1, 1, 0, | 198 | DEFUN ("exp", Fexp, Sexp, 1, 1, 0, |