From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail3-relais-sop.national.inria.fr (mail3-relais-sop.national.inria.fr [192.134.164.104]) by sourceware.org (Postfix) with ESMTPS id E0C2F385800A for ; Wed, 13 Jan 2021 05:46:51 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org E0C2F385800A Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=inria.fr Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=Paul.Zimmermann@inria.fr X-IronPort-AV: E=Sophos;i="5.79,343,1602540000"; d="scan'208";a="369825329" Received: from tomate.loria.fr (HELO tomate) ([152.81.10.51]) by mail3-relais-sop.national.inria.fr with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Jan 2021 06:46:49 +0100 Date: Wed, 13 Jan 2021 06:46:49 +0100 Message-Id: From: Paul Zimmermann To: "Keith Packard" Cc: newlib@sourceware.org In-Reply-To: <878sd8e62g.fsf@keithp.com> Subject: Re: issue with tgammaf References: <87een3eyq4.fsf@keithp.com> <87sgbheouh.fsf@keithp.com> <878sd8e62g.fsf@keithp.com> X-Spam-Status: No, score=-3.8 required=5.0 tests=BAYES_00, KAM_DMARC_STATUS, RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL, 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: Wed, 13 Jan 2021 05:46:53 -0000 Dear Keith, > Do you know that newlib has two different sets of 32-bit math functions? > Arm supplied a new set of many common math functions that use 64-bit > doubles for the intermediate computations? I'd be very interested in > measuring the effect of that code on accuracy. The new paths are > selected by compiling newlib with -D__OBSOLETE_MATH_DEFAULT=0 while the > old can be selected with -D__OBSOLETE_MATH_DEFAULT=1 here are the differences. For each function, the first line is newlib-4.1.0 with default configuration, the second line is newlib-4.1.0 with -D__OBSOLETE_MATH_DEFAULT=1. Functions that do not appear (like acos) give the same results in both cases (thus probably there is no new code). For each line, "errors" is the number of binary32 inputs that are incorrectly rounded, "errors2" is the number of inputs with an error >= 2 ulps, and "maxerr" is the maximal error. In summary, the old code (__OBSOLETE_MATH_DEFAULT=1) is always better in terms of accuracy, with huge differences for some functions (cos, exp, exp10, exp2, log, log2, sin, pow). For bivariate functions (atan2, hypot, pow), the tests are not exhaustive. Best regards, Paul acosh: Total: errors=244658623 (5.72%) errors2=2698 maxerr=2.01e+00 ulp(s) Total: errors=243413455 (5.69%) errors2=2698 maxerr=2.01e+00 ulp(s) asinh: Total: errors=542122908 (12.67%) errors2=2748 maxerr=1.78e+00 ulp(s) Total: errors=539621602 (12.61%) errors2=2748 maxerr=1.78e+00 ulp(s) cos: Total: errors=209833072 (4.90%) errors2=6 maxerr=2.91e+00 ulp(s) Total: errors=28209648 (0.66%) errors2=0 maxerr=7.76e-01 ulp(s) cosh: Total: errors=23905668 (0.56%) errors2=7706 maxerr=2.51e+00 ulp(s) Total: errors=17868390 (0.42%) errors2=3558 maxerr=1.89e+00 ulp(s) erf: Total: errors=126741900 (2.96%) errors2=0 maxerr=9.68e-01 ulp(s) Total: errors=126734730 (2.96%) errors2=0 maxerr=9.68e-01 ulp(s) erfc: Total: errors=21247299 (0.50%) errors2=1131209 maxerr=6.39e+01 ulp(s) Total: errors=20982747 (0.49%) errors2=1067774 maxerr=6.39e+01 ulp(s) exp: Total: errors=17982847 (0.42%) errors2=0 maxerr=9.11e-01 ulp(s) Total: errors=170646 (0.00%) errors2=0 maxerr=5.02e-01 ulp(s) exp10: Total: errors=18423203 (0.43%) errors2=0 maxerr=1.06e+00 ulp(s) Total: errors=172143 (0.00%) errors2=0 maxerr=5.03e-01 ulp(s) exp2: Total: errors=18401203 (0.43%) errors2=0 maxerr=1.02e+00 ulp(s) Total: errors=168362 (0.00%) errors2=0 maxerr=5.02e-01 ulp(s) j0: Total: errors=1338235574 (31.28%) errors2=279528826 maxerr=6.18e+06 ulp(s) Total: errors=1334176546 (31.19%) errors2=269351612 maxerr=6.18e+06 ulp(s) j1: Total: errors=1818091384 (42.50%) errors2=1376362116 maxerr=1.68e+07 ulp(s) Total: errors=1816660580 (42.46%) errors2=1373004084 maxerr=1.68e+07 ulp(s) lgamma: Total: errors=510903809 (11.94%) errors2=13277834 maxerr=7.50e+06 ulp(s) Total: errors=506865167 (11.85%) errors2=13400241 maxerr=7.50e+06 ulp(s) log: Total: errors=13363494 (0.31%) errors2=0 maxerr=8.88e-01 ulp(s) Total: errors=416908 (0.01%) errors2=0 maxerr=8.18e-01 ulp(s) log10: Total: errors=30061115 (0.70%) errors2=91958 maxerr=2.10e+00 ulp(s) Total: errors=29787060 (0.70%) errors2=62225 maxerr=2.07e+00 ulp(s) log2: Total: errors=602745869 (14.09%) errors2=258 maxerr=1.65e+00 ulp(s) Total: errors=313550 (0.01%) errors2=0 maxerr=7.52e-01 ulp(s) sin: Total: errors=206155238 (4.82%) errors2=0 maxerr=1.37e+00 ulp(s) Total: errors=29362804 (0.69%) errors2=0 maxerr=5.61e-01 ulp(s) sinh: Total: errors=74587762 (1.74%) errors2=38924 maxerr=2.51e+00 ulp(s) Total: errors=71328304 (1.67%) errors2=34776 maxerr=1.89e+00 ulp(s) tgamma: Total: errors=2028164922 (47.41%) errors2=1833526367 maxerr=2.39e+02 ulp(s) Total: errors=2026865970 (47.38%) errors2=1832940352 maxerr=2.39e+02 ulp(s) y0: Total: errors=1306144386 (30.53%) errors2=191859954 maxerr=4.84e+06 ulp(s) Total: errors=1304302538 (30.49%) errors2=187031173 maxerr=4.84e+06 ulp(s) y1: Total: errors=1201178797 (28.08%) errors2=153321647 maxerr=6.18e+06 ulp(s) Total: errors=1199229206 (28.03%) errors2=148430893 maxerr=6.18e+06 ulp(s) pow: pow 0 -1 0x1.d55902p-1,-0x1.fe037ep+9 [1.69e+02] 168.527 168.5268728137016 pow 0 -1 0x1.025736p+0,0x1.309f94p+13 [0.817] 0.816736 0.816736102104187