diff options
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, |