From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-74.mimecast.com (us-smtp-delivery-74.mimecast.com [216.205.24.74]) by sourceware.org (Postfix) with ESMTP id BC2AF385E035 for ; Thu, 26 Mar 2020 11:27:24 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org BC2AF385E035 Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-169-S_e4eUV0MBSL-FBd6aFfVg-1; Thu, 26 Mar 2020 07:27:20 -0400 X-MC-Unique: S_e4eUV0MBSL-FBd6aFfVg-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 7D6FE8010E8; Thu, 26 Mar 2020 11:27:19 +0000 (UTC) Received: from calimero.vinschen.de (ovpn-112-67.ams2.redhat.com [10.36.112.67]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 377E466834; Thu, 26 Mar 2020 11:27:19 +0000 (UTC) Received: by calimero.vinschen.de (Postfix, from userid 500) id 9A7E1A80F8C; Thu, 26 Mar 2020 12:27:17 +0100 (CET) Date: Thu, 26 Mar 2020 12:27:17 +0100 From: Corinna Vinschen To: Keith Packard Cc: newlib@sourceware.org, "Joseph S. Myers" Subject: Re: [PATCH] Fix spurious underflow exceptions for Bessel functions for double(from glibc bug 14155) Message-ID: <20200326112717.GH3261@calimero.vinschen.de> Reply-To: newlib@sourceware.org Mail-Followup-To: Keith Packard , newlib@sourceware.org, "Joseph S. Myers" References: <20200325181844.69580-1-keithp@keithp.com> MIME-Version: 1.0 In-Reply-To: <20200325181844.69580-1-keithp@keithp.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="Zrag5V6pnZGjLKiw" Content-Disposition: inline X-Spam-Status: No, score=-19.4 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_2, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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, 26 Mar 2020 11:27:26 -0000 --Zrag5V6pnZGjLKiw Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On Mar 25 11:18, Keith Packard via Newlib wrote: > From: "Joseph S. Myers" >=20 > =09This fix comes from glibc, from files which originated from > =09the same place as the newlib files. Those files in glibc carry > =09the same license as the newlib files. >=20 > Bug 14155 is spurious underflow exceptions from Bessel functions for > large arguments. (The correct results for large x are roughly > constant * sin or cos (x + constant) / sqrt (x), so no underflow > exceptions should occur based on the final result.) >=20 > There are various places underflows may occur in the intermediate > calculations that cause the failures listed in that bug. This patch > fixes problems for the double version where underflows occur in > calculating the intermediate functions P and Q (in particular, x**-12 > gets computed while calculating Q). Appropriate approximations are > used for P and Q for arguments at least 0x1p28 and above to avoid the > underflows. >=20 > For sufficiently large x - 0x1p129 and above - the code already has a > cut-off to avoid calculating P and Q at all, which means the > approximations -0.125 / x and 0.375 / x can't themselves cause > underflows calculating Q. This cut-off is heuristically reasonable > for the point beyond which Q can be neglected (based on expecting > around 0x1p-64 to be the least absolute value of sin or cos for large > arguments representable in double). >=20 > The float versions use a cut-off 0x1p17, which is less heuristically > justifiable but should still only affect values near zeroes of the > Bessel functions where these implementations are intrinsically > inaccurate anyway (bugs 14469-14472), and should serve to avoid > underflows (the float underflow for jn in bug 14155 probably comes > from the recurrence to compute jn). ldbl-96 uses 0x1p129, which may > not really be enough heuristically (0x1p143 or so might be safer - 143 > =3D 64 + 79, number of mantissa bits plus total number of significant > bits in representation) but again should avoid underflows and only > affect values where the code is substantially inaccurate anyway. > ldbl-128 and ldbl-128ibm share a completely different implementation > with no such cut-off, which I propose to fix separately. >=20 > Signed-off-by: Keith Packard > --- > newlib/libm/math/e_j0.c | 6 ++++-- > newlib/libm/math/e_j1.c | 6 ++++-- > newlib/libm/math/ef_j0.c | 6 +++--- > newlib/libm/math/ef_j1.c | 4 ++-- > 4 files changed, 13 insertions(+), 9 deletions(-) Pushed. Thanks, Corinna --=20 Corinna Vinschen Cygwin Maintainer Red Hat --Zrag5V6pnZGjLKiw Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEoVYPmneWZnwT6kwF9TYGna5ET6AFAl58kZUACgkQ9TYGna5E T6DxuhAAoWqeIiDiRQBG0MKz7SWSgP4dNIbUgVTHteA7QcuDaYj/H7d2nLplflQs gHjKVKGzP0WKulyoNgZj8uVh41vqGbrJCkWNZ29C3sGWJtC6ddrhWC6oxjJutJkh h1b7OkLeGLO7LnR4IYpmwWrKkSJsUJ2e7K9x9qfwIdNTRfEKyYvl4JM/c/j6d3S8 Ndl02gHRjFZ2vJUz0L10FuXmmwWibXGgChwAdRSoxrq8PBkTnyHCUxqb0jd/320m 7jnHCe/2D/iv+vWC6EvvSb5ufQZ+M3E2DrrzaT88zHFZRAjboxeiHS8HboRHdeya sBUZM/DAKNqW5izFiQhHvNcPKO0AvLHEAl89iL7ZdsdB7nR5g8QA2m1dR92vQjEh TZf5lgYhAZ6w43wsi7KTeKzmTgTg5B4t35mEZg0rlNV94wwrDci8I5h/QQx4kQAH 7Qhk5/7gdSoQl6xCuR6AbVJGMqC7xsbTJA39I2SnAjuqELdScIdqL1KBS+DEWvfI F+4UkfvPaRow59OjS+SsnU7W9T9C4soOMwojopa7boeiF4jFaRj0mkkAcjazMko6 jw0ZEPgSsXPmCpWm1F+Mt+1EgFvEVgjM3YMpL9aHYuRD3HmpTHi6mb2RRxRaup8u h+XehlshO7A4QS0umHa40uMe6nQKIjQabtGpoxI9PraamvMzWNg= =MucP -----END PGP SIGNATURE----- --Zrag5V6pnZGjLKiw--