From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/781 Path: news.gmane.org!not-for-mail From: Szabolcs Nagy Newsgroups: gmane.linux.lib.musl.general Subject: Re: math todo Date: Tue, 1 May 2012 11:14:58 +0200 Message-ID: <20120501091458.GJ16237@port70.net> References: <20120501000503.GI16237@port70.net> <20120501011921.GK14673@brightrain.aerifal.cx> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="zS7rBR6csb6tI2e1" X-Trace: dough.gmane.org 1335863713 8615 80.91.229.3 (1 May 2012 09:15:13 GMT) X-Complaints-To: usenet@dough.gmane.org NNTP-Posting-Date: Tue, 1 May 2012 09:15:13 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-782-gllmg-musl=m.gmane.org@lists.openwall.com Tue May 01 11:15:12 2012 Return-path: Envelope-to: gllmg-musl@plane.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1SP9At-0004jz-G2 for gllmg-musl@plane.gmane.org; Tue, 01 May 2012 11:15:11 +0200 Original-Received: (qmail 20066 invoked by uid 550); 1 May 2012 09:15:10 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 20058 invoked from network); 1 May 2012 09:15:10 -0000 Content-Disposition: inline In-Reply-To: <20120501011921.GK14673@brightrain.aerifal.cx> User-Agent: Mutt/1.5.21 (2010-09-15) Xref: news.gmane.org gmane.linux.lib.musl.general:781 Archived-At: --zS7rBR6csb6tI2e1 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline * Rich Felker [2012-04-30 21:19:21 -0400]: > > definition of NAN (0/0) raises invalid exception where it is used > > This is only used as a fallback on compilers that don't have > __builtin_nan, no? yes > > signbit >>63 vs !! > > Hm? This has been fixed I think. ok it seems to be fixed > > >1ulp error: > > tan(pi/2-eps) round tozero > > exp(-inf) round upward > > What's the issue here? exp(-inf) is an exact zero; there's no rounding > involved. Are you saying in round-upward mode the result is nonzero > with the current implementation? yes, actually fesetround(FE_UPWARD); exp(-inf) = 0x1p-1074; // smallest subnormal instead of 0, which is 1ulp depending on your definition of ulp :) i'll attach all the known problematic cases (i386 asm is used, no -ffloat-store, acos is not yet fixed) (i think acosh,asinh have problems as well but those are not tested) zero and sign errors are treated as infinite ulp errors errors >99ulp are printed as 99ulp > With yesterday's commit, I think all the x86_64 asm that's possible > with SSE2 is done. If we want asm for non-longdouble versions of > transcendental functions, I think it will just involve moving the > value from an SSE register to an FPU register and back... I have no > idea how this would compare in performance to the C versions using > SSE. ok so only some benchmarking is left > BTW under asm, we may also want to switch to the faster acos > implementation. ok i'll add it (for double it is known to work, but i havent tested it for the long double case) > > long double: > > drop ld128 support? and move ldshape union to arch/ > > What ld128 support? > I don't think we really want to "drop" it since it will probably be > needed later, ok in freebsd several functions are implemented in a way that they work on ld80 and ld128 as well but sometimes macro hacks and workarounds are needed grep for LDBP_MANT_DIG == 113 > > volatile fix: > > -ffloat-store or -fexcess-precision=standard should fix most > > volatile issues so some of the volatile hacks can be cleaned up > > I think it would be nice to try to ensure that the code still works > with just -ffloat-store for older gcc versions that don't have > -fexcess-precision=standard. ok > > scalbf: > > scalb is buggy, do we need the *f and *l version? > > How so? it's just non standard and i assume some code may use scalb instead of scalbn, but scalbf and scalbl is probably not used > > generic code fixes: > > int32_t -> uint32_t conversion (can be subtle, so testing is needed) > > += 1, -= 1 -> ++, -- > > TWO52, twom1000 vs tiny (renames where it makes sense) > > remove overflow thresholds (sinh, cosh) when result overflows anyway? > > sign bit checking convention (sqrt.c) > > missing: > > sqrtl > > Until we have a better one, couldn't we just use sqrt() as a first > approximation then use Newton's method or a binary-search for the > correct long double result? Or just return sqrt() since the only arch > that doesn't have sqrtl asm yet is the one where ld==double. yes that's a good idea > > tgamma, tgammaf > > Well we have these but they're inaccurate for some inputs. ah yes i added dummy versions, but they are not usable for serious work > > (long double bessel) > > nextafterf on ld64 > > Eh? actually it's nexttowardf(float x, long double y) it's not implemented when long double == double it cannot be just a simple wrapper around nextafter or nextafterf > > tgamma: > > lanczos approx as in boost/math/special_functions and python/Modules/mathmodule.c > > complex > > optimizable creal cimag (libm.h macro for internal code?) > > This was done a long time ago. good --zS7rBR6csb6tI2e1 Content-Type: text/plain; charset=us-ascii Content-Disposition: attachment; filename="matherr.txt" 99 ulp want: 0 got: 8000000000000000 round: m acos arg0: 0x1p+0 arg1: 0x0p+0 want: 0x0p+0 got: -0x0p+0 99 ulp want: 8000000000000000 got: 8000000000000001 round: p atan arg0: -0x1p-1074 arg1: 0x0p+0 want: -0x0p+0 got: -0x1p-1074 99 ulp want: 0 got: 1 round: m atan arg0: 0x1p-1074 arg1: 0x0p+0 want: 0x0p+0 got: 0x1p-1074 99 ulp want: 0 got: 1 round: z atan arg0: 0x1p-1074 arg1: 0x0p+0 want: 0x0p+0 got: 0x1p-1074 99 ulp want: 8000000000000000 got: 8000000000000001 round: z atan arg0: -0x1p-1074 arg1: 0x0p+0 want: -0x0p+0 got: -0x1p-1074 -99 ulp want: 3e92559dfa91a5e5 got: 3e92553ab0f98600 round: z cos arg0: 0x1.921fb0aedb52ep+0 arg1: 0x0p+0 want: 0x1.2559dfa91a5e5p-22 got: 0x1.2553ab0f986p-22 -99 ulp want: 3e8e6ec5d3a34c02 got: 3e8e6dff406bfe00 round: z cos arg0: 0x1.921fb1766a171p+0 arg1: 0x0p+0 want: 0x1.e6ec5d3a34c02p-23 got: 0x1.e6dff406bfep-23 -99 ulp want: 3e8cd4571d234c0e got: 3e8cd39089ea2c00 round: z cos arg0: 0x1.921fb1a9b7edep+0 arg1: 0x0p+0 want: 0x1.cd4571d234c0ep-23 got: 0x1.cd39089ea2cp-23 -99 ulp want: 3e6567b0ae8d3130 got: 3e656496613e6000 round: z cos arg0: 0x1.921fb499054c1p+0 arg1: 0x0p+0 want: 0x1.567b0ae8d313p-25 got: 0x1.56496613e6p-25 -99 ulp want: 3e692c3d7c8d312e got: 3e6929232f42a800 round: z cos arg0: 0x1.921fb47ae0e5ap+0 arg1: 0x0p+0 want: 0x1.92c3d7c8d312ep-25 got: 0x1.929232f42a8p-25 -16 ulp want: bfe14f348fed47b6 got: bfe14f348fed47a6 round: p cos arg0: -0x1.e2d0add5684ap+16 arg1: 0x0p+0 want: -0x1.14f348fed47b6p-1 got: -0x1.14f348fed47a6p-1 -99 ulp want: 3fc4c145814a7dd6 got: 3fc4c1458148e377 round: z cos arg0: 0x1.8174c6167647fp+14 arg1: 0x0p+0 want: 0x1.4c145814a7dd6p-3 got: 0x1.4c1458148e377p-3 -99 ulp want: 3fc4c145814a7dd6 got: 3fc4c1458148e377 round: m cos arg0: 0x1.8174c6167647fp+14 arg1: 0x0p+0 want: 0x1.4c145814a7dd6p-3 got: 0x1.4c1458148e377p-3 -99 ulp want: 3fddc6f9c12db1c9 got: 3fddc6f9c12db0cd round: z cos arg0: 0x1.e69f4157cad0cp+12 arg1: 0x0p+0 want: 0x1.dc6f9c12db1c9p-2 got: 0x1.dc6f9c12db0cdp-2 -99 ulp want: 3fddc6f9c12db1c9 got: 3fddc6f9c12db0cd round: m cos arg0: 0x1.e69f4157cad0cp+12 arg1: 0x0p+0 want: 0x1.dc6f9c12db1c9p-2 got: 0x1.dc6f9c12db0cdp-2 -99 ulp want: 3fcced65cabc55bf got: 3fcced65cabbb142 round: z cos arg0: 0x1.79dd7368775c3p+17 arg1: 0x0p+0 want: 0x1.ced65cabc55bfp-3 got: 0x1.ced65cabbb142p-3 -99 ulp want: 3fcced65cabc55bf got: 3fcced65cabbb142 round: m cos arg0: 0x1.79dd7368775c3p+17 arg1: 0x0p+0 want: 0x1.ced65cabc55bfp-3 got: 0x1.ced65cabbb142p-3 99 ulp want: 3fedda3163ed5d27 got: 3fedda3163eda382 round: z cos arg0: 0x1.25d58ebe0a3f9p+15 arg1: 0x0p+0 want: 0x1.dda3163ed5d27p-1 got: 0x1.dda3163eda382p-1 99 ulp want: 3fedda3163ed5d27 got: 3fedda3163eda382 round: m cos arg0: 0x1.25d58ebe0a3f9p+15 arg1: 0x0p+0 want: 0x1.dda3163ed5d27p-1 got: 0x1.dda3163eda382p-1 -99 ulp want: bfcb4f76409126f1 got: bfcb4f76409060a2 round: p cos arg0: -0x1.32171bd2fc39fp+8 arg1: 0x0p+0 want: -0x1.b4f76409126f1p-3 got: -0x1.b4f76409060a2p-3 -99 ulp want: bfd0d646ecbc5238 got: bfd0d646ecbc23a6 round: p cos arg0: 0x1.b77ba27615fd4p+17 arg1: 0x0p+0 want: -0x1.0d646ecbc5238p-2 got: -0x1.0d646ecbc23a6p-2 99 ulp want: 0 got: 1 round: p exp arg0: -inf arg1: 0x0p+0 want: 0x0p+0 got: 0x1p-1074 99 ulp want: 8000000000000000 got: 8000000000000001 round: p expm1 arg0: -0x1p-1074 arg1: 0x0p+0 want: -0x0p+0 got: -0x1p-1074 99 ulp want: 1 got: 0 round: m expm1 arg0: 0x1p-1074 arg1: 0x0p+0 want: 0x1p-1074 got: 0x0p+0 99 ulp want: 1 got: 0 round: z expm1 arg0: 0x1p-1074 arg1: 0x0p+0 want: 0x1p-1074 got: 0x0p+0 99 ulp want: 8000000000000001 got: 8000000000000000 round: z log1p arg0: -0x1p-1074 arg1: 0x0p+0 want: -0x1p-1074 got: -0x0p+0 99 ulp want: 8000000000000000 got: 8000000000000001 round: p sin arg0: -0x1p-1074 arg1: 0x0p+0 want: -0x0p+0 got: -0x1p-1074 99 ulp want: 0 got: 1 round: m sin arg0: 0x1p-1074 arg1: 0x0p+0 want: 0x0p+0 got: 0x1p-1074 99 ulp want: 0 got: 1 round: z sin arg0: 0x1p-1074 arg1: 0x0p+0 want: 0x0p+0 got: 0x1p-1074 99 ulp want: 8000000000000000 got: 8000000000000001 round: z sin arg0: -0x1p-1074 arg1: 0x0p+0 want: -0x0p+0 got: -0x1p-1074 99 ulp want: bfefffffffffffff got: bff000000011553b round: p sin arg0: 0x1.32ce90b32173ep+18 arg1: 0x0p+0 want: -0x1.fffffffffffffp-1 got: -0x1.000000011553bp+0 -2 ulp want: 3fefd1d7f1c8170c got: 3fefd1d7f1c8170a round: z sinh arg0: 0x1.c13876341b62ep-1 arg1: 0x0p+0 want: 0x1.fd1d7f1c8170cp-1 got: 0x1.fd1d7f1c8170ap-1 -2 ulp want: 3fe857954132083d got: 3fe857954132083b round: z sinh arg0: 0x1.67425fe575c88p-1 arg1: 0x0p+0 want: 0x1.857954132083dp-1 got: 0x1.857954132083bp-1 2 ulp want: 3fef1aef6e4181c7 got: 3fef1aef6e4181c9 round: p sinh arg0: 0x1.b911a09cbfdf4p-1 arg1: 0x0p+0 want: 0x1.f1aef6e4181c7p-1 got: 0x1.f1aef6e4181c9p-1 2 ulp want: 3fdac1e17d0da3f7 got: 3fdac1e17d0da3f9 round: p sinh arg0: 0x1.a089039d2a1adp-2 arg1: 0x0p+0 want: 0x1.ac1e17d0da3f7p-2 got: 0x1.ac1e17d0da3f9p-2 2 ulp want: bfeac252c29bb71a got: bfeac252c29bb71c round: p sinh arg0: -0x1.857add62fa2bp-1 arg1: 0x0p+0 want: -0x1.ac252c29bb71ap-1 got: -0x1.ac252c29bb71cp-1 -2 ulp want: 3fcd846ac730bb07 got: 3fcd846ac730bb05 round: m sinh arg0: 0x1.d42ff8f159a07p-3 arg1: 0x0p+0 want: 0x1.d846ac730bb07p-3 got: 0x1.d846ac730bb05p-3 -2 ulp want: 3fcd846ac730bb07 got: 3fcd846ac730bb05 round: z sinh arg0: 0x1.d42ff8f159a07p-3 arg1: 0x0p+0 want: 0x1.d846ac730bb07p-3 got: 0x1.d846ac730bb05p-3 -2 ulp want: bfcfc6f923054efc got: bfcfc6f923054efa round: m sinh arg0: -0x1.f75a54466a762p-3 arg1: 0x0p+0 want: -0x1.fc6f923054efcp-3 got: -0x1.fc6f923054efap-3 -2 ulp want: bfcfc6f923054efb got: bfcfc6f923054ef9 round: z sinh arg0: -0x1.f75a54466a762p-3 arg1: 0x0p+0 want: -0x1.fc6f923054efbp-3 got: -0x1.fc6f923054ef9p-3 2 ulp want: bfcef1a856ac1eee got: bfcef1a856ac1ef0 round: p sinh arg0: -0x1.ea675453c1528p-3 arg1: 0x0p+0 want: -0x1.ef1a856ac1eeep-3 got: -0x1.ef1a856ac1efp-3 -2 ulp want: 3fce6da42ddf35ea got: 3fce6da42ddf35e8 round: m sinh arg0: 0x1.e26145c02af1cp-3 arg1: 0x0p+0 want: 0x1.e6da42ddf35eap-3 got: 0x1.e6da42ddf35e8p-3 -2 ulp want: 3fce6da42ddf35ea got: 3fce6da42ddf35e8 round: z sinh arg0: 0x1.e26145c02af1cp-3 arg1: 0x0p+0 want: 0x1.e6da42ddf35eap-3 got: 0x1.e6da42ddf35e8p-3 -2 ulp want: bfee5dc452bdb7ad got: bfee5dc452bdb7ab round: m sinh arg0: -0x1.b08abbf2543e9p-1 arg1: 0x0p+0 want: -0x1.e5dc452bdb7adp-1 got: -0x1.e5dc452bdb7abp-1 -2 ulp want: bfee5dc452bdb7ac got: bfee5dc452bdb7aa round: z sinh arg0: -0x1.b08abbf2543e9p-1 arg1: 0x0p+0 want: -0x1.e5dc452bdb7acp-1 got: -0x1.e5dc452bdb7aap-1 -2 ulp want: 3fdba7c70c14e1c3 got: 3fdba7c70c14e1c1 round: m sinh arg0: 0x1.adc22d546c638p-2 arg1: 0x0p+0 want: 0x1.ba7c70c14e1c3p-2 got: 0x1.ba7c70c14e1c1p-2 -2 ulp want: 3fdba7c70c14e1c3 got: 3fdba7c70c14e1c1 round: z sinh arg0: 0x1.adc22d546c638p-2 arg1: 0x0p+0 want: 0x1.ba7c70c14e1c3p-2 got: 0x1.ba7c70c14e1c1p-2 -3 ulp want: bfcf1058b810c4ea got: bfcf1058b810c4e7 round: m sinh arg0: -0x1.ec448dacc4d3dp-3 arg1: 0x0p+0 want: -0x1.f1058b810c4eap-3 got: -0x1.f1058b810c4e7p-3 -3 ulp want: bfcf1058b810c4e9 got: bfcf1058b810c4e6 round: z sinh arg0: -0x1.ec448dacc4d3dp-3 arg1: 0x0p+0 want: -0x1.f1058b810c4e9p-3 got: -0x1.f1058b810c4e6p-3 -2 ulp want: 3fda9edcc93490ee got: 3fda9edcc93490ec round: m sinh arg0: 0x1.9e83e23cadd18p-2 arg1: 0x0p+0 want: 0x1.a9edcc93490eep-2 got: 0x1.a9edcc93490ecp-2 -2 ulp want: 3fda9edcc93490ee got: 3fda9edcc93490ec round: z sinh arg0: 0x1.9e83e23cadd18p-2 arg1: 0x0p+0 want: 0x1.a9edcc93490eep-2 got: 0x1.a9edcc93490ecp-2 -2 ulp want: bfdb77760e081cd9 got: bfdb77760e081cd7 round: m sinh arg0: -0x1.aafc2776377eep-2 arg1: 0x0p+0 want: -0x1.b77760e081cd9p-2 got: -0x1.b77760e081cd7p-2 -2 ulp want: bfdb77760e081cd8 got: bfdb77760e081cd6 round: z sinh arg0: -0x1.aafc2776377eep-2 arg1: 0x0p+0 want: -0x1.b77760e081cd8p-2 got: -0x1.b77760e081cd6p-2 -2 ulp want: bfe8ba8c2def4592 got: bfe8ba8c2def4590 round: m sinh arg0: -0x1.6c2af543de11ep-1 arg1: 0x0p+0 want: -0x1.8ba8c2def4592p-1 got: -0x1.8ba8c2def459p-1 -2 ulp want: bfe8ba8c2def4591 got: bfe8ba8c2def458f round: z sinh arg0: -0x1.6c2af543de11ep-1 arg1: 0x0p+0 want: -0x1.8ba8c2def4591p-1 got: -0x1.8ba8c2def458fp-1 2 ulp want: 4119e111386fe780 got: 4119e111386fe782 round: z tan arg0: 0x1.921f8db2b958dp+0 arg1: 0x0p+0 want: 0x1.9e111386fe78p+18 got: 0x1.9e111386fe782p+18 -99 ulp want: 41621225fabc950c got: 41621209abebecb6 round: z tan arg0: 0x1.921fb37eef6fap+0 arg1: 0x0p+0 want: 0x1.21225fabc950cp+23 got: 0x1.21209abebecb6p+23 -99 ulp want: 416a222735f505fd got: 416a21ec023cf830 round: z tan arg0: 0x1.921fb40acae4ap+0 arg1: 0x0p+0 want: 0x1.a222735f505fdp+23 got: 0x1.a21ec023cf83p+23 -99 ulp want: 417c35ac9ef2ad2d got: 417c3522a91e6ea2 round: z tan arg0: 0x1.921fb4b310032p+0 arg1: 0x0p+0 want: 0x1.c35ac9ef2ad2dp+24 got: 0x1.c3522a91e6ea2p+24 -99 ulp want: 418b8c161ee609d8 got: 418b8b0f06800f38 round: z tan arg0: 0x1.921fb4f9ea79bp+0 arg1: 0x0p+0 want: 0x1.b8c161ee609d8p+25 got: 0x1.b8b0f06800f38p+25 -99 ulp want: 418f0f30948c2833 got: 418f0de220c7b376 round: z tan arg0: 0x1.921fb502529c9p+0 arg1: 0x0p+0 want: 0x1.f0f30948c2833p+25 got: 0x1.f0de220c7b376p+25 -99 ulp want: 419cec9642faae58 got: 419cea523ecfdc3c round: z tan arg0: 0x1.921fb520dbabcp+0 arg1: 0x0p+0 want: 0x1.cec9642faae58p+26 got: 0x1.cea523ecfdc3cp+26 -99 ulp want: 41a5125600daedec got: 41a50fee6c9e4ac8 round: z tan arg0: 0x1.921fb52bf682ap+0 arg1: 0x0p+0 want: 0x1.5125600daedecp+27 got: 0x1.50fee6c9e4ac8p+27 -99 ulp want: 41bc21e3cad2dba8 got: 41bc1952f2d3037a round: z tan arg0: 0x1.921fb53b2942dp+0 arg1: 0x0p+0 want: 0x1.c21e3cad2dba8p+28 got: 0x1.c1952f2d3037ap+28 -99 ulp want: 41c21e8a2ab25a5c got: 41c2176f7a40708e round: z tan arg0: 0x1.921fb53d325c1p+0 arg1: 0x0p+0 want: 0x1.21e8a2ab25a5cp+29 got: 0x1.2176f7a40708ep+29 -99 ulp want: 41d153ba1e4c2daa got: 41d146c081651560 round: z tan arg0: 0x1.921fb540913edp+0 arg1: 0x0p+0 want: 0x1.153ba1e4c2daap+30 got: 0x1.146c08165156p+30 -99 ulp want: 420abbf97365a7d4 got: 4209cccd7b4aad92 round: z tan arg0: 0x1.921fb543f6367p+0 arg1: 0x0p+0 want: 0x1.abbf97365a7d4p+33 got: 0x1.9cccd7b4aad92p+33 -99 ulp want: 4220eb7222928f43 got: 421eff70160506b0 round: z tan arg0: 0x1.921fb544248edp+0 arg1: 0x0p+0 want: 0x1.0eb7222928f43p+35 got: 0x1.eff70160506bp+34 -99 ulp want: 422ca793c3e1bafd got: 4228cdc4227d9e22 round: z tan arg0: 0x1.921fb54430f35p+0 arg1: 0x0p+0 want: 0x1.ca793c3e1bafdp+35 got: 0x1.8cdc4227d9e22p+35 -99 ulp want: 42311ed08b4c3e84 got: 422ce1ed44606ca8 round: z tan arg0: 0x1.921fb54433dd9p+0 arg1: 0x0p+0 want: 0x1.11ed08b4c3e84p+36 got: 0x1.ce1ed44606ca8p+35 -99 ulp want: 4248d6d64b805173 got: 424025a0d6fa309c round: z tan arg0: 0x1.921fb5443daa5p+0 arg1: 0x0p+0 want: 0x1.8d6d64b805173p+37 got: 0x1.025a0d6fa309cp+37 -99 ulp want: 427394333b25d835 got: 4251d236ccb8fec8 round: z tan arg0: 0x1.921fb54442005p+0 arg1: 0x0p+0 want: 0x1.394333b25d835p+40 got: 0x1.1d236ccb8fec8p+38 -99 ulp want: 428cf0a054216e88 got: 4254fafafbcf00aa round: z tan arg0: 0x1.921fb544428acp+0 arg1: 0x0p+0 want: 0x1.cf0a054216e88p+41 got: 0x1.4fafafbcf00aap+38 -99 ulp want: 4287f7457f2246a3 got: 425497d3fece47b6 round: z tan arg0: 0x1.921fb544427c1p+0 arg1: 0x0p+0 want: 0x1.7f7457f2246a3p+41 got: 0x1.497d3fece47b6p+38 -99 ulp want: 429ffb97121c3896 got: 42561368abe1d361 round: z tan arg0: 0x1.921fb54442b18p+0 arg1: 0x0p+0 want: 0x1.ffb97121c3896p+42 got: 0x1.61368abe1d361p+38 -99 ulp want: 42a907e7aaaea9f3 got: 42566cd8ee4c1ef3 round: z tan arg0: 0x1.921fb54442bd1p+0 arg1: 0x0p+0 want: 0x1.907e7aaaea9f3p+43 got: 0x1.66cd8ee4c1ef3p+38 -99 ulp want: 42b1a25bb08e2211 got: 42569be266c9f694 round: z tan arg0: 0x1.921fb54442c3p+0 arg1: 0x0p+0 want: 0x1.1a25bb08e2211p+44 got: 0x1.69be266c9f694p+38 -99 ulp want: 42b0908339725fa3 got: 4256946803ed39a9 round: z tan arg0: 0x1.921fb54442c21p+0 arg1: 0x0p+0 want: 0x1.0908339725fa3p+44 got: 0x1.6946803ed39a9p+38 -99 ulp want: 42b7c69d0d4db53d got: 4256b9fdbc883eae round: z tan arg0: 0x1.921fb54442c6cp+0 arg1: 0x0p+0 want: 0x1.7c69d0d4db53dp+44 got: 0x1.6b9fdbc883eaep+38 -99 ulp want: 42b678b0ac797390 got: 4256b4f39e03488f round: z tan arg0: 0x1.921fb54442c62p+0 arg1: 0x0p+0 want: 0x1.678b0ac79739p+44 got: 0x1.6b4f39e03488fp+38 -99 ulp want: 42c0174eaf74279d got: 4256d0c7103a8d29 round: z tan arg0: 0x1.921fb54442c99p+0 arg1: 0x0p+0 want: 0x1.0174eaf74279dp+45 got: 0x1.6d0c7103a8d29p+38 -99 ulp want: 42ca80a300c5bcae got: 4256ea4e5ccffcc5 round: z tan arg0: 0x1.921fb54442ccbp+0 arg1: 0x0p+0 want: 0x1.a80a300c5bcaep+45 got: 0x1.6ea4e5ccffcc5p+38 -99 ulp want: 42c50db55110745c got: 4256e0116643b405 round: z tan arg0: 0x1.921fb54442cb7p+0 arg1: 0x0p+0 want: 0x1.50db55110745cp+45 got: 0x1.6e0116643b405p+38 -99 ulp want: 42c631c0768030fe got: 4256e29fc83e36f9 round: z tan arg0: 0x1.921fb54442cbcp+0 arg1: 0x0p+0 want: 0x1.631c0768030fep+45 got: 0x1.6e29fc83e36f9p+38 -99 ulp want: 42d5a8ff56a9370e got: 4256f9bb09213c9f round: z tan arg0: 0x1.921fb54442ce9p+0 arg1: 0x0p+0 want: 0x1.5a8ff56a9370ep+46 got: 0x1.6f9bb09213c9fp+38 -99 ulp want: 42db788ef1b787b6 got: 4256fee3e0e43221 round: z tan arg0: 0x1.921fb54442cf3p+0 arg1: 0x0p+0 want: 0x1.b788ef1b787b6p+46 got: 0x1.6fee3e0e43221p+38 -99 ulp want: 42d838cf6838a195 got: 4256fc4f2ae3809e round: z tan arg0: 0x1.921fb54442ceep+0 arg1: 0x0p+0 want: 0x1.838cf6838a195p+46 got: 0x1.6fc4f2ae3809ep+38 -99 ulp want: 42dfba01d10013e9 got: 425701792b554663 round: z tan arg0: 0x1.921fb54442cf8p+0 arg1: 0x0p+0 want: 0x1.fba01d10013e9p+46 got: 0x1.701792b554663p+38 -99 ulp want: 42e6fc1002ce31b7 got: 425706a57e50dc6a round: z tan arg0: 0x1.921fb54442d02p+0 arg1: 0x0p+0 want: 0x1.6fc1002ce31b7p+47 got: 0x1.706a57e50dc6ap+38 -99 ulp want: 42eda30b5171acf4 got: 4257093c873fb922 round: z tan arg0: 0x1.921fb54442d07p+0 arg1: 0x0p+0 want: 0x1.da30b5171acf4p+47 got: 0x1.7093c873fb922p+38 -2 ulp want: bfd13f1027a096d1 got: bfd13f1027a096cf round: m tan arg0: 0x1.75c63414b9f57p+19 arg1: 0x0p+0 want: -0x1.13f1027a096d1p-2 got: -0x1.13f1027a096cfp-2 3 ulp want: bfcbe4bb2d89518d got: bfcbe4bb2d895190 round: z tan arg0: -0x1.1551831ffe3eap+6 arg1: 0x0p+0 want: -0x1.be4bb2d89518dp-3 got: -0x1.be4bb2d89519p-3 79 ulp want: bfb54516fc029550 got: bfb54516fc02959f round: z tan arg0: -0x1.94c6c8d914b3dp+3 arg1: 0x0p+0 want: -0x1.54516fc02955p-4 got: -0x1.54516fc02959fp-4 71 ulp want: bfb54516fc029551 got: bfb54516fc029598 round: m tan arg0: -0x1.94c6c8d914b3dp+3 arg1: 0x0p+0 want: -0x1.54516fc029551p-4 got: -0x1.54516fc029598p-4 -99 ulp want: c0618d2afbac399a got: c0618d2afb9c1ea8 round: p tan arg0: 0x1.99fc268aa1543p+8 arg1: 0x0p+0 want: -0x1.18d2afbac399ap+7 got: -0x1.18d2afb9c1ea8p+7 4 ulp want: bfbd1753684282e8 got: bfbd1753684282ec round: z tan arg0: -0x1.ae746bc4ff77p+9 arg1: 0x0p+0 want: -0x1.d1753684282e8p-4 got: -0x1.d1753684282ecp-4 -4 ulp want: bfbd1753684282e9 got: bfbd1753684282e5 round: m tan arg0: -0x1.ae746bc4ff77p+9 arg1: 0x0p+0 want: -0x1.d1753684282e9p-4 got: -0x1.d1753684282e5p-4 99 ulp want: 0 got: 8000000000000000 round: m acos arg0: 0x1p+0 arg1: 0x0p+0 want: 0x0p+0 got: -0x0p+0 99 ulp want: 8000000000000001 got: 8000000000000000 round: p asin arg0: -0x1p-1074 arg1: 0x0p+0 want: -0x1p-1074 got: -0x0p+0 99 ulp want: 8000000000000000 got: 8000000000000001 round: m atan2 arg0: -0x1p-1022 arg1: 0x1.fffffffffffffp+1023 want: -0x0p+0 got: -0x1p-1074 99 ulp want: 8000000000000000 got: 8000000000000001 round: m atan2 arg0: -0x1p-1022 arg1: 0x1.fffffffffffffp+1023 want: -0x0p+0 got: -0x1p-1074 99 ulp want: 0 got: 1 round: p exp arg0: -inf arg1: 0x0p+0 want: 0x0p+0 got: 0x1p-1074 99 ulp want: 0 got: 1 round: p exp arg0: -0x1.75p+9 arg1: 0x0p+0 want: 0x0p+0 got: 0x1p-1074 99 ulp want: 0 got: 1 round: p exp arg0: -0x1.c9c8p+13 arg1: 0x0p+0 want: 0x0p+0 got: 0x1p-1074 -2 ulp want: 3e60000000000001 got: 3e5fffffffffffff round: m sinh arg0: 0x1p-25 arg1: 0x0p+0 want: 0x1.0000000000001p-25 got: 0x1.fffffffffffffp-26 -2 ulp want: 3e60000000000001 got: 3e5fffffffffffff round: z sinh arg0: 0x1p-25 arg1: 0x0p+0 want: 0x1.0000000000001p-25 got: 0x1.fffffffffffffp-26 -2 ulp want: be60000000000001 got: be5fffffffffffff round: z sinh arg0: -0x1p-25 arg1: 0x0p+0 want: -0x1.0000000000001p-25 got: -0x1.fffffffffffffp-26 all: 69734 fail: 12787 failbad: 107 failepic: 72 --zS7rBR6csb6tI2e1--