From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gtd-gmbh.de (mail.gtd.eu [46.24.46.35]) by sourceware.org (Postfix) with ESMTPS id 97AC33858C60 for ; Thu, 10 Feb 2022 16:12:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 97AC33858C60 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gtd-gmbh.de Authentication-Results: sourceware.org; spf=none smtp.mailfrom=gtd-gmbh.de X-MDAV-Result: clean X-MDAV-Processed: gtd-gmbh.de, Thu, 10 Feb 2022 17:10:44 +0100 Received: by gtd-gmbh.de (MDaemon PRO v21.0.3) with ESMTPSA id md5001016219045.msg; Thu, 10 Feb 2022 17:10:43 +0100 X-Spam-Processed: gtd-gmbh.de, Thu, 10 Feb 2022 17:10:43 +0100 (not processed: message from trusted or authenticated source) X-MDRemoteIP: 194.140.115.106 X-MDArrival-Date: Thu, 10 Feb 2022 17:10:43 +0100 X-Authenticated-Sender: andoni.arregui@gtd-gmbh.de X-Return-Path: prvs=1040cef51b=andoni.arregui@gtd-gmbh.de X-Envelope-From: andoni.arregui@gtd-gmbh.de X-MDaemon-Deliver-To: newlib@sourceware.org Message-ID: <53d624876330f071a9a1588651b5c73db8ca2070.camel@gtd-gmbh.de> Subject: [PATCH 1/2] Improve lgammaf range for very small cases From: Andoni Arregi Reply-To: andoni.arregui@gtd-gmbh.de To: newlib@sourceware.org Date: Thu, 10 Feb 2022 17:10:35 +0100 In-Reply-To: References: <99cdb95d3263da03844fa0343c22d9e4ab87375e.camel@gtd-gmbh.de> Organization: GTD GmbH Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.42.3 MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-MDCFSigsAdded: gtd-gmbh.de X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, SPF_HELO_NONE, SPF_NONE, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: newlib@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Newlib mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 10 Feb 2022 16:12:27 -0000 The original cut for small arguments at |x|<2**-70 (copied from the double version) produces that when computing nadj we get a subnormal number for t*x and thus, the division of pi/subnormal will be INF and the logarithm of it too, which is wrong as a result for lgammaf in this range. The proposed new limit seems to be safe and has been tested to produce accurate results. (Courstesy of Andreas Jung, ESA) --- newlib/libm/math/erf_lgamma.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/newlib/libm/math/erf_lgamma.c b/newlib/libm/math/erf_lgamma.c index f88f63092..84d02159b 100644 --- a/newlib/libm/math/erf_lgamma.c +++ b/newlib/libm/math/erf_lgamma.c @@ -168,7 +168,7 @@ static float zero= 0.0000000000e+00; *signgamp = -1; return one/(x-x); } - if(ix<0x1c800000) { /* |x|<2**-70, return -log(|x|) */ + if(ix<0x30800000) { /* |x|<2**-30, return -log(|x|) */ if(hx<0) { *signgamp = -1; return -__ieee754_logf(-x); -- 2.35.1