From owner-cvs-src@FreeBSD.ORG Sat Feb 26 02:32:07 2005 Return-Path: Delivered-To: cvs-src@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 12B5F16A4CE; Sat, 26 Feb 2005 02:32:07 +0000 (GMT) Received: from VARK.MIT.EDU (VARK.MIT.EDU [18.95.3.179]) by mx1.FreeBSD.org (Postfix) with ESMTP id A798B43D39; Sat, 26 Feb 2005 02:32:06 +0000 (GMT) (envelope-from das@FreeBSD.ORG) Received: from VARK.MIT.EDU (localhost [127.0.0.1]) by VARK.MIT.EDU (8.13.3/8.13.1) with ESMTP id j1Q2Vnd6063382; Fri, 25 Feb 2005 21:31:49 -0500 (EST) (envelope-from das@FreeBSD.ORG) Received: (from das@localhost) by VARK.MIT.EDU (8.13.3/8.13.1/Submit) id j1Q2VnRw063381; Fri, 25 Feb 2005 21:31:49 -0500 (EST) (envelope-from das@FreeBSD.ORG) Date: Fri, 25 Feb 2005 21:31:49 -0500 From: David Schultz To: src-committers@FreeBSD.ORG, cvs-src@FreeBSD.ORG, cvs-all@FreeBSD.ORG Message-ID: <20050226023149.GA63314@VARK.MIT.EDU> Mail-Followup-To: src-committers@FreeBSD.ORG, cvs-src@FreeBSD.ORG, cvs-all@FreeBSD.ORG, imp@freebsd.org References: <200502240632.j1O6WDP9029589@repoman.freebsd.org> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200502240632.j1O6WDP9029589@repoman.freebsd.org> cc: imp@FreeBSD.ORG Subject: Re: cvs commit: src/lib/msun/src e_expf.c X-BeenThere: cvs-src@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: CVS commit messages for the src tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Feb 2005 02:32:07 -0000 On Thu, Feb 24, 2005, David Schultz wrote: > das 2005-02-24 06:32:13 UTC > > FreeBSD src repository > > Modified files: > lib/msun/src e_expf.c > Log: > Revert rev 1.8, which causes small (e.g. 2 ulp) errors for some > inputs. The trouble with replacing two floats with a double is that > the latter has 6 extra bits of precision, which actually hurts > accuracy in many cases. All of the constants are optimal when float > arithmetic is used, and would need to be recomputed to do this right. This is related to a good reason why we can't switch the default precision on i386 to extended. Many of the functions in libm use minimax approximations, which are ``optimal'' approximations in the sense that their maximum error over all in-range inputs is the smallest possible (unless more terms are used). These approximations take rounding error into account, so when the machine precision is increased, they're no longer optimal and the error in the approximation can increase significantly. There are less efficient methods that don't depend on the exact machine precision, e.g. Chebyshev approximations, but it would be a PITA to switch everything.