From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Paul Eggert Newsgroups: gmane.emacs.bugs Subject: bug#20185: 24.4.50; problem with built-in function "ldexp" Emacs Ver: 24.4.50.1 Date: Tue, 24 Mar 2015 11:57:10 -0700 Organization: UCLA Computer Science Department Message-ID: <5511B386.6010802@cs.ucla.edu> References: <87y4mn4fvq.fsf@snares-penguin.marcade.biz> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------030003040505080407070709" X-Trace: ger.gmane.org 1427223504 3269 80.91.229.3 (24 Mar 2015 18:58:24 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 24 Mar 2015 18:58:24 +0000 (UTC) Cc: 20185-done@debbugs.gnu.org To: Bernard Hurley Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Mar 24 19:58:12 2015 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1YaU1i-0006vQ-Pu for geb-bug-gnu-emacs@m.gmane.org; Tue, 24 Mar 2015 19:58:11 +0100 Original-Received: from localhost ([::1]:33940 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YaU1i-00075G-38 for geb-bug-gnu-emacs@m.gmane.org; Tue, 24 Mar 2015 14:58:10 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:46674) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YaU1f-000758-1z for bug-gnu-emacs@gnu.org; Tue, 24 Mar 2015 14:58:08 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YaU1a-0001P4-Rm for bug-gnu-emacs@gnu.org; Tue, 24 Mar 2015 14:58:07 -0400 Original-Received: from debbugs.gnu.org ([140.186.70.43]:45483) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YaU1a-0001Oo-P7 for bug-gnu-emacs@gnu.org; Tue, 24 Mar 2015 14:58:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1YaU1a-0006Et-5g for bug-gnu-emacs@gnu.org; Tue, 24 Mar 2015 14:58:02 -0400 In-Reply-To: <87y4mn4fvq.fsf@snares-penguin.marcade.biz> Resent-From: Paul Eggert Original-Sender: "Debbugs-submit" Resent-To: bug-gnu-emacs@gnu.org Resent-Date: Tue, 24 Mar 2015 18:58:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: cc-closed 20185 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Mail-Followup-To: 20185@debbugs.gnu.org, eggert@cs.ucla.edu, bernard@marcade.biz Original-Received: via spool by 20185-done@debbugs.gnu.org id=D20185.142722344323918 (code D ref 20185); Tue, 24 Mar 2015 18:58:01 +0000 Original-Received: (at 20185-done) by debbugs.gnu.org; 24 Mar 2015 18:57:23 +0000 Original-Received: from localhost ([127.0.0.1]:35257 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YaU0w-0006Di-IF for submit@debbugs.gnu.org; Tue, 24 Mar 2015 14:57:23 -0400 Original-Received: from smtp.cs.ucla.edu ([131.179.128.62]:38857) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1YaU0t-0006DQ-2L for 20185-done@debbugs.gnu.org; Tue, 24 Mar 2015 14:57:20 -0400 Original-Received: from localhost (localhost.localdomain [127.0.0.1]) by smtp.cs.ucla.edu (Postfix) with ESMTP id 4856CA6003F; Tue, 24 Mar 2015 11:57:12 -0700 (PDT) X-Virus-Scanned: amavisd-new at smtp.cs.ucla.edu Original-Received: from smtp.cs.ucla.edu ([127.0.0.1]) by localhost (smtp.cs.ucla.edu [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id W28+rImDLULl; Tue, 24 Mar 2015 11:57:10 -0700 (PDT) Original-Received: from Penguin.CS.UCLA.EDU (Penguin.CS.UCLA.EDU [131.179.64.200]) by smtp.cs.ucla.edu (Postfix) with ESMTPSA id B2FB7A60001; Tue, 24 Mar 2015 11:57:10 -0700 (PDT) User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.5.0 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:100895 Archived-At: This is a multi-part message in MIME format. --------------030003040505080407070709 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Thanks for catching that bug. While fixing it I noticed some related minor glitches with ldexp, so I installed the attached patch. --------------030003040505080407070709 Content-Type: text/x-patch; name="0001-Fix-minor-ldexp-issues.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="0001-Fix-minor-ldexp-issues.patch" >From 68a58397370381fd9b5d08f5cc16a5afa2b5fd26 Mon Sep 17 00:00:00 2001 From: Paul Eggert Date: Tue, 24 Mar 2015 11:42:53 -0700 Subject: [PATCH] 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 --- doc/lispref/ChangeLog | 4 ++++ doc/lispref/numbers.texi | 12 +++++++++--- src/ChangeLog | 7 +++++++ src/floatfns.c | 10 +++++----- 4 files changed, 25 insertions(+), 8 deletions(-) diff --git a/doc/lispref/ChangeLog b/doc/lispref/ChangeLog index a546306..9b1bbb3 100644 --- a/doc/lispref/ChangeLog +++ b/doc/lispref/ChangeLog @@ -1,3 +1,7 @@ +2015-03-24 Paul Eggert + + * numbers.texi (Float Basics): Improve ldexp documentation. + 2015-03-23 Eli Zaretskii * commands.texi (Event Input Misc): Fix incorrect usage of @code. diff --git a/doc/lispref/numbers.texi b/doc/lispref/numbers.texi index 8d1d3a7..7b4a0a6 100644 --- a/doc/lispref/numbers.texi +++ b/doc/lispref/numbers.texi @@ -265,9 +265,15 @@ If @var{x} is a NaN, then @var{s} is also a NaN@. If @var{x} is zero, then @var{e} is 0. @end defun -@defun ldexp sig &optional exp -This function returns a floating-point number corresponding to the -significand @var{sig} and exponent @var{exp}. +@defun ldexp s e +Given a numeric significand @var{s} and an integer exponent @var{e}, +this function returns the floating point number +@ifnottex +@var{s} * 2**@var{e}. +@end ifnottex +@tex +@math{s 2^e}. +@end tex @end defun @defun copysign x1 x2 diff --git a/src/ChangeLog b/src/ChangeLog index 815c117..23f125c 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,10 @@ +2015-03-24 Paul Eggert + + Fix minor ldexp issues + * floatfns.c (Fldexp): Require 2 args. Avoid undefined behavior + if the exponent is out of 'int' range. Improve documentation. + Fixes: bug#20185 + 2015-03-24 Daniel Colascione * process.c (Fprocess_running_child_p): Return number identifier of diff --git a/src/floatfns.c b/src/floatfns.c index c68b9bd..072e857 100644 --- a/src/floatfns.c +++ b/src/floatfns.c @@ -185,14 +185,14 @@ If X is zero, both parts (SGNFCAND and EXP) are zero. */) return Fcons (make_float (sgnfcand), make_number (exponent)); } -DEFUN ("ldexp", Fldexp, Sldexp, 1, 2, 0, - doc: /* Construct number X from significand SGNFCAND and exponent EXP. -Returns the floating point value resulting from multiplying SGNFCAND -(the significand) by 2 raised to the power of EXP (the exponent). */) +DEFUN ("ldexp", Fldexp, Sldexp, 2, 2, 0, + doc: /* Return X * 2**EXP, as a floating point number. +EXP must be an integer. */) (Lisp_Object sgnfcand, Lisp_Object exponent) { CHECK_NUMBER (exponent); - return make_float (ldexp (XFLOATINT (sgnfcand), XINT (exponent))); + int e = min (max (INT_MIN, XINT (exponent)), INT_MAX); + return make_float (ldexp (XFLOATINT (sgnfcand), e)); } DEFUN ("exp", Fexp, Sexp, 1, 1, 0, -- 2.1.0 --------------030003040505080407070709--