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 48331385842C for ; Wed, 9 Feb 2022 16:32:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 48331385842C 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, Wed, 09 Feb 2022 17:30:13 +0100 Received: by gtd-gmbh.de (MDaemon PRO v21.0.3) with ESMTPSA id md5001016213177.msg; Wed, 09 Feb 2022 17:30:12 +0100 X-Spam-Processed: gtd-gmbh.de, Wed, 09 Feb 2022 17:30:12 +0100 (not processed: message from trusted or authenticated source) X-MDRemoteIP: 109.90.104.197 X-MDArrival-Date: Wed, 09 Feb 2022 17:30:12 +0100 X-Authenticated-Sender: andoni.arregui@gtd-gmbh.de X-Return-Path: prvs=1039b972d0=andoni.arregui@gtd-gmbh.de X-Envelope-From: andoni.arregui@gtd-gmbh.de X-MDaemon-Deliver-To: newlib@sourceware.org Message-ID: <85c7d43bb4311ae4bc0bc49c749f2735ca6ab7b2.camel@gtd-gmbh.de> Subject: [PATCH 2/2] Add a missing default case in lgamma From: Andoni Arregi Reply-To: andoni.arregui@gtd-gmbh.de To: newlib@sourceware.org Date: Wed, 09 Feb 2022 17:30:08 +0100 In-Reply-To: References: 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.0 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: Wed, 09 Feb 2022 16:32:07 -0000 The missing default case leads to large errors for |x| in range [2.0, 3.0[. In case of i=2, i.e., in the range between [2,3[, the computation "r += logf(z)" is not performed and hence the result was wrong. The added default case resolves this issue. (Courtesy of Andreas Jung, ESA) --- newlib/libm/math/er_lgamma.c | 1 + newlib/libm/math/erf_lgamma.c | 1 + 2 files changed, 2 insertions(+) diff --git a/newlib/libm/math/er_lgamma.c b/newlib/libm/math/er_lgamma.c index 5c88548fb..65727c6ab 100644 --- a/newlib/libm/math/er_lgamma.c +++ b/newlib/libm/math/er_lgamma.c @@ -302,6 +302,7 @@ static double zero= 0.00000000000000000000e+00; case 5: z *= (y+4.0); /* FALLTHRU */ case 4: z *= (y+3.0); /* FALLTHRU */ case 3: z *= (y+2.0); /* FALLTHRU */ + default: r += __ieee754_log(z); break; } /* 8.0 <= x < 2**58 */ diff --git a/newlib/libm/math/erf_lgamma.c b/newlib/libm/math/erf_lgamma.c index 84d02159b..e7311cacf 100644 --- a/newlib/libm/math/erf_lgamma.c +++ b/newlib/libm/math/erf_lgamma.c @@ -238,6 +238,7 @@ static float zero= 0.0000000000e+00; case 5: z *= (y+(float)4.0); /* FALLTHRU */ case 4: z *= (y+(float)3.0); /* FALLTHRU */ case 3: z *= (y+(float)2.0); /* FALLTHRU */ + default: r += __ieee754_logf(z); break; } /* 8.0 <= x < 2**58 */ -- 2.35.1