public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH 0/9] Improve hypot()
@ 2021-10-06 18:05 Adhemerval Zanella
  2021-10-06 18:05 ` [PATCH 1/9] benchtests: Make hypot input random Adhemerval Zanella
                   ` (9 more replies)
  0 siblings, 10 replies; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 18:05 UTC (permalink / raw)
  To: libc-alpha

This patchset uses a different algorithm for hypot()  based on the
'An Improved Algorithm for hypot(a,b)' by Carlos F. Borges [1].  This
method is also used by Julia language.  The motivation for this change
are:

  1. The new algorithm is more precise without large performance
     differences.
  2. It allows to consolidate the implementations, since it favor
     floating-point operations over integer ones (as done for powerpc).
     This might be a boost for some architectures as well.

The current hypot() implementation seems already to be bounded to a
maximum of 1 ulp of error, however the new proposed algorithm shows an
slight precision improvement by showing more correctly rounded results.

 With a random 1e9 inputs for different float format I see:

  - An improvement from 3427362 to 18457 results with 1 ulp of
    error for Binary64.
  - An improvement from 233442 to 1274 results with 1 ulp of
    error for Binary96 (x86_64).
  - An improvement from 453045 to 1294 results with 1 ulp of
    error for Binary96 (x86_64).

Along with the newer implementation, the last patch also optimizes the
call with similar work done for other math functions by removing the
POSIX error handling (which is a big performance boost in some cases
and architectures).

I have adapted the dbl-64, ldbl-96, and ldbl-128, the flt-32 is not
required since it calls the dbl-64 one.  I have not adapated ldbl-128ibm
since the format has a lot of caveats and IBM aims to move to ldbl-128.

[1] https://arxiv.org/pdf/1904.09481.pdf
[2] https://github.com/JuliaLang/julia/commit/4a046009a3362ab5e17d369641dbbc9657eb680c

Adhemerval Zanella (9):
  benchtests: Make hypot input random
  benchtests: Add hypotf
  math: Simplify hypotf implementation
  math: Use an improved algorithm for hypot (dbl-64)
  math: Use an improved algorithm for hypotl (ldbl-96)
  math: Use an improved algorithm for hypotl (ldbl-128)
  math: Remove powerpc e_hypot
  i386: Move hypot implementation to C
  math: Remove the error handling wrapper from hypot and hypotf

 benchtests/Makefile                           |    2 +-
 benchtests/hypot-inputs                       | 1014 ++++++++++++++++-
 benchtests/hypotf-inputs                      | 1006 ++++++++++++++++
 math/Versions                                 |    2 +
 math/w_hypot.c                                |    8 +
 math/w_hypot_compat.c                         |   13 +-
 math/w_hypotf.c                               |    8 +
 math/w_hypotf_compat.c                        |    6 +-
 sysdeps/i386/fpu/e_hypot.S                    |   75 --
 sysdeps/i386/fpu/e_hypot.c                    |   54 +
 sysdeps/i386/fpu/e_hypotf.S                   |   64 --
 sysdeps/ieee754/dbl-64/e_hypot.c              |  247 ++--
 sysdeps/ieee754/dbl-64/w_hypot.c              |    1 +
 sysdeps/ieee754/flt-32/e_hypotf.c             |   72 +-
 sysdeps/ieee754/flt-32/w_hypotf.c             |    1 +
 sysdeps/ieee754/ldbl-128/e_hypotl.c           |  222 ++--
 sysdeps/ieee754/ldbl-96/e_hypotl.c            |  227 ++--
 sysdeps/mach/hurd/i386/libm.abilist           |    2 +
 sysdeps/mach/hurd/libhurduser.abilist         |    0
 sysdeps/mach/libmachuser.abilist              |    0
 sysdeps/powerpc/fpu/e_hypot.c                 |   87 --
 sysdeps/powerpc/fpu/e_hypotf.c                |   78 --
 .../powerpc32/power4/fpu/multiarch/Makefile   |    5 +-
 .../power4/fpu/multiarch/e_hypot-power7.c     |   23 -
 .../power4/fpu/multiarch/e_hypot-ppc32.c      |   23 -
 .../powerpc32/power4/fpu/multiarch/e_hypot.c  |   33 -
 .../power4/fpu/multiarch/e_hypotf-power7.c    |   23 -
 .../power4/fpu/multiarch/e_hypotf-ppc32.c     |   23 -
 .../powerpc32/power4/fpu/multiarch/e_hypotf.c |   33 -
 sysdeps/unix/sysv/linux/aarch64/libm.abilist  |    2 +
 sysdeps/unix/sysv/linux/alpha/libm.abilist    |    2 +
 sysdeps/unix/sysv/linux/arm/be/libm.abilist   |    2 +
 sysdeps/unix/sysv/linux/arm/le/libm.abilist   |    2 +
 sysdeps/unix/sysv/linux/hppa/libm.abilist     |    2 +
 sysdeps/unix/sysv/linux/i386/libm.abilist     |    2 +
 .../sysv/linux/m68k/coldfire/libm.abilist     |    2 +
 .../unix/sysv/linux/m68k/m680x0/libm.abilist  |    2 +
 .../sysv/linux/microblaze/be/libm.abilist     |    2 +
 .../sysv/linux/microblaze/le/libm.abilist     |    2 +
 .../unix/sysv/linux/mips/mips32/libm.abilist  |    2 +
 .../unix/sysv/linux/mips/mips64/libm.abilist  |    2 +
 sysdeps/unix/sysv/linux/nios2/libm.abilist    |    2 +
 .../linux/powerpc/powerpc32/fpu/libm.abilist  |    2 +
 .../powerpc/powerpc32/nofpu/libm.abilist      |    2 +
 .../linux/powerpc/powerpc64/be/libm.abilist   |    2 +
 .../linux/powerpc/powerpc64/le/libm.abilist   |    2 +
 .../unix/sysv/linux/s390/s390-32/libm.abilist |    2 +
 .../unix/sysv/linux/s390/s390-64/libm.abilist |    2 +
 sysdeps/unix/sysv/linux/sh/be/libm.abilist    |    2 +
 sysdeps/unix/sysv/linux/sh/le/libm.abilist    |    2 +
 .../sysv/linux/sparc/sparc32/libm.abilist     |    2 +
 .../sysv/linux/sparc/sparc64/libm.abilist     |    2 +
 .../unix/sysv/linux/x86_64/64/libm.abilist    |    2 +
 .../unix/sysv/linux/x86_64/x32/libm.abilist   |    2 +
 54 files changed, 2483 insertions(+), 919 deletions(-)
 create mode 100644 benchtests/hypotf-inputs
 create mode 100644 math/w_hypot.c
 create mode 100644 math/w_hypotf.c
 delete mode 100644 sysdeps/i386/fpu/e_hypot.S
 create mode 100644 sysdeps/i386/fpu/e_hypot.c
 delete mode 100644 sysdeps/i386/fpu/e_hypotf.S
 create mode 100644 sysdeps/ieee754/dbl-64/w_hypot.c
 create mode 100644 sysdeps/ieee754/flt-32/w_hypotf.c
 delete mode 100644 sysdeps/mach/hurd/libhurduser.abilist
 delete mode 100644 sysdeps/mach/libmachuser.abilist
 delete mode 100644 sysdeps/powerpc/fpu/e_hypot.c
 delete mode 100644 sysdeps/powerpc/fpu/e_hypotf.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c

-- 
2.30.2


^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH 1/9] benchtests: Make hypot input random
  2021-10-06 18:05 [PATCH 0/9] Improve hypot() Adhemerval Zanella
@ 2021-10-06 18:05 ` Adhemerval Zanella
  2021-10-07  9:48   ` Paul Zimmermann
  2021-10-06 18:05 ` [PATCH 2/9] benchtests: Add hypotf Adhemerval Zanella
                   ` (8 subsequent siblings)
  9 siblings, 1 reply; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 18:05 UTC (permalink / raw)
  To: libc-alpha

Instead of inputs based on the algorithm implementation details.
---
 benchtests/hypot-inputs | 1014 ++++++++++++++++++++++++++++++++++++++-
 1 file changed, 1002 insertions(+), 12 deletions(-)

diff --git a/benchtests/hypot-inputs b/benchtests/hypot-inputs
index e987e5dd1b..b3c8762ef3 100644
--- a/benchtests/hypot-inputs
+++ b/benchtests/hypot-inputs
@@ -2,15 +2,1005 @@
 ## args: double:double
 ## ret: double
 
-## name: overflow
-0x3.ffffffffffffcp-1024, 0x8p-152
-## name: higher_two500
-0x1.000002027941dp+500,  0x1.0000000000001p+500
-## name: subnormal
-0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022
-## name: less_two500
-0x1.fffffffffffffp-501,  0x1.fffffffffffffp-501
-
-## name: default
-3.0                   , 4.0
-5.0                   , 4.0
+# Random inputs in [DBL_MIN, DBL_MAX]
+## name: workload-random
+-0x1.c9b9e4ccb538fp+526, 0x1.5a2839615dcc4p-90
+-0x1.b4686db8fbe07p-466, -0x1.ad5bab40e28b5p-705
+0x1.b67e9830d0742p+89, 0x1.712bed15ab242p-79
+0x1.2b0cf5dce789bp+94, 0x1.de2935e408821p+744
+-0x1.4b8bfab1fbe84p-696, 0x1.9400021b6864p-353
+-0x1.586240fa11ce1p+563, 0x1.d032a033d5883p-277
+0x1.d4ed8f4dad9a1p-577, 0x1.15cc3a3dfd1a8p+904
+0x1.ef56f125ff922p-961, -0x1.a081c8f4a8b54p-739
+-0x1.3ae85ca2a7a85p+634, 0x1.ab7f8908907b5p-616
+0x1.5689b747313f2p-288, -0x1.533e4d90ba16ep-617
+-0x1.14a5c88935df3p+330, 0x1.a5e5f87292686p-493
+-0x1.11e5466d30d72p-649, 0x1.252e4933a8dffp+83
+-0x1.42310106b5893p+507, 0x1.d7c96bb09f172p+7
+-0x1.9d8063c48f8bap-618, 0x1.34eb629467897p-660
+-0x1.d06c9facc6cb9p-957, 0x1.66eea10b76d25p-120
+-0x1.fd476b0696ea7p-217, -0x1.e05d14a0749aep+896
+0x1.cdd05ca691efp+455, -0x1.34157c01b4401p-862
+0x1.761da13f8f6e4p-659, -0x1.cd34b2b726c35p-73
+0x1.4b5e793152991p+1023, 0x1.b0e7c833bab6dp+265
+0x1.1fec80cb0cfbep+352, 0x1.fe7879323a307p+115
+0x1.ca13c6a7c361ep-1, 0x1.e7794b757984ap+20
+0x1.9d0b10c3259cap+328, 0x1.a6f6e01fa8308p+27
+0x1.359cb18c6be06p-1010, -0x1.5c9b8ea01c649p+243
+-0x1.d0dcb95e18854p-850, -0x1.692c34253f833p+897
+0x1.64a3e91246202p+194, -0x1.6a08b6e0c10fcp+869
+-0x1.09133c8b3ab46p-817, 0x1.5e33faa5f9609p+204
+-0x1.5d65411fca3e1p-883, -0x1.c49451e8ff7ffp+463
+-0x1.a49b5f87b5e33p-192, 0x1.4e346710769e6p-532
+-0x1.71e5eeb1af912p+233, -0x1.e0d9fc2c51f5ap+465
+-0x1.8b1153ccd5db1p+912, 0x1.8122f54133f1dp-636
+-0x1.6b2c289f6d0f8p+4, -0x1.0e020ad34ea5fp+184
+-0x1.910d7cab2fed5p-856, 0x1.f48192b625d76p-193
+0x1.cef0e34593e32p-697, -0x1.823fdb16ac5a8p+233
+0x1.9dbca687e11fcp+460, -0x1.064a7d8a035bdp-695
+0x1.c33f7ac0118fp-354, 0x1.25c6e97f8ee95p-727
+-0x1.ed77de8fe0b87p+1019, -0x1.4231d27d608d6p-569
+-0x1.13b5a2be4d59dp-5, -0x1.f74f34809e8cap+734
+0x1.29470976cb343p-794, -0x1.688e2134673eap-760
+-0x1.dbd669283a975p+950, 0x1.8bd4b47b19394p-972
+0x1.dcebfad589251p+584, 0x1.ab821c80883efp-745
+0x1.3d7898d9e10c8p-826, -0x1.2ea1591bcf713p-168
+-0x1.8062525376bbap-671, -0x1.1320518198246p-281
+0x1.aef3fad3f633fp+433, -0x1.033b6ebbde9eep-387
+-0x1.cedf0931fbcc3p+440, -0x1.c9b40671bbf62p-26
+-0x1.bf147c6ae1629p+644, -0x1.f10b967824ef3p+218
+-0x1.69b82f4508c9bp-1002, -0x1.1f52bdcf38bfcp-522
+-0x0.226af30ce6ba4p-1022, 0x1.956794128b9c7p-816
+0x1.269e8197b6197p-660, -0x1.9c08a23eb8cafp+408
+-0x1.067677cb27c65p-577, 0x1.54f85143ad106p-252
+-0x1.5c139666cc203p-678, -0x1.6fa4a26a23e3fp-500
+0x1.fb4bbc14ed566p-980, -0x1.64a2623385865p-105
+-0x1.0d9e75e4bc22dp-702, 0x1.0010bb11ef0ep+461
+0x1.b047105706bf1p+811, 0x1.294f1289e801fp-479
+-0x1.a1539b9498fcfp-219, 0x1.b8cfa27e5b9dbp-852
+0x1.60b580776e0dap-965, 0x1.86ca0301b862bp+64
+-0x1.de27a3092c282p+956, -0x1.d14da5110136dp-125
+0x1.216680bf7c046p-219, -0x1.672b73cc56298p-533
+0x1.7f964e1e6933ep+225, -0x1.b397a6addb416p-782
+0x1.5c5ac7088ad85p+67, 0x1.c5c1f54c8c464p+900
+0x1.b99bf2d232a67p+183, -0x1.3b6d8db73e9e7p+587
+0x1.efd8702ceea4bp+112, 0x1.27662ebd318d4p-736
+-0x1.d00020aa60799p-269, -0x1.4602aaefed288p+841
+-0x1.0ca653d3607p+843, 0x1.8165ec6a151f2p-245
+0x1.637d7faf2dcd3p+339, -0x1.5de8f895e0921p-311
+-0x1.0a54dcf5397dap-543, -0x1.cf69228868211p-922
+0x1.4239bcb2ff07fp+415, 0x1.37df12f9bff83p+518
+-0x1.c7fac16e63044p+219, 0x1.cd83114f41ff9p-161
+-0x1.b469af516da75p-714, 0x1.782837617acd9p-977
+0x1.564ee8746d24fp-635, -0x1.23be8b6551b5fp-104
+0x1.f6dd92d2c98fep-186, -0x1.dbd48c6dd0933p-563
+0x1.5415754086856p+692, -0x1.ade3a6fbe19c2p-636
+-0x1.3a86ff32e226ep+956, 0x1.f7bf282f8ec3fp+617
+0x1.5dabcedf6d038p-402, 0x1.3921fe12cbd16p+802
+-0x1.580f681d777d1p-649, 0x1.82ce0cd6261ccp+237
+0x1.4dbd038b40241p+742, 0x1.74a8ca5e0a9a8p-193
+-0x1.81fb7906a6e7ap+858, 0x1.060707422c742p+615
+-0x1.9f20a4e0fc9aep-50, 0x1.ce323011d922fp-93
+0x1.251c72200297bp+984, 0x1.00bd429a23dc8p+101
+0x1.4e68d50a30953p-570, 0x1.0f725b5d4ff05p-76
+-0x1.d47d5d42ff4bep+941, -0x1.4fd8f1971f601p+269
+-0x1.bd95a498e5246p+777, 0x1.27388108b2efep+422
+0x1.e734c9d1d015ep-712, -0x1.7cb5b0ff76b6ap+808
+-0x1.c50bbe662db65p-594, 0x1.a004f6eb37cc1p-116
+0x1.382b84973113ep-727, 0x1.9ea5b4ee35aa5p+834
+0x1.3a4b07f2f3d36p+189, -0x1.364bd57f1cd8bp-785
+-0x1.6faf61accf379p+489, -0x1.cb52b93ba68ecp-548
+-0x1.afd131d3d2b49p+236, 0x1.654017eaccba4p+78
+-0x1.afd3da3760269p-146, -0x1.f5fe580b9e7ep-934
+-0x1.8c4c67078936bp-12, -0x1.744e6736a7dffp+851
+-0x1.a90de8574d525p+518, 0x1.87fdedfd965bbp+461
+0x1.d8050ffe1f993p-989, -0x1.ca5bf9ea2f1d3p-358
+-0x1.b9fd456ba3825p-559, 0x1.df45fa0640fb2p-632
+0x1.27b3ef01957d9p-48, -0x1.4214dd3231529p+232
+-0x1.3348f5d5ae725p+242, -0x1.01fdc7c1a472fp-541
+-0x1.779cf98e86ffcp+324, 0x1.efa30985d4c9ep-865
+-0x1.daeab430fe19fp+904, -0x1.bf73667703487p-19
+-0x1.2337981a0ea42p+555, 0x1.72fc7523f3aa9p+699
+-0x1.c1f53cb9c4858p-877, -0x1.88c740da5c31ap-451
+0x1.4a7cc59577262p-58, -0x1.eaaf5c8bc91f6p+378
+-0x1.5ab543c3de40ap+379, -0x1.506c8ac72d8b5p+508
+0x1.87ee478dfb8aap+767, -0x1.6934d5063786dp+877
+0x1.a9658347666bbp+720, 0x1.9e9883550ae82p+119
+-0x1.f11cba04565bep+536, 0x1.a77c4d7de3901p-907
+-0x1.637aed92c164ap-773, 0x1.563a853915c42p+437
+0x1.0ac5623fe4d48p+245, 0x1.60f4ab95dbda6p-258
+-0x1.9f046bc061838p-149, 0x1.eed3c3dd7c7cdp+284
+0x1.bfe4663804caap-26, 0x1.ab9f1e111572fp+699
+0x1.34b033c032cc3p-701, 0x1.54eb3833df0cbp-621
+-0x1.d7992b5a800ecp+415, -0x1.658855a5caecep+714
+-0x1.4ec652825633ep+1023, 0x1.a4ffd3a40a26ep+31
+-0x1.5f664d7f22a9bp+150, 0x1.4efa7d597084p+719
+0x1.618ee42ae6009p+28, 0x1.db0e81473ab64p+191
+0x1.bce0aef1f1fap-326, -0x1.5ad80a5760518p-609
+0x1.93708072fdf0fp-591, 0x1.46d43d71768p+605
+-0x1.f28f62effec4fp+502, 0x1.897d978a0b593p+750
+-0x1.23ff24b59fb3bp+354, -0x1.27870d98e3026p-780
+0x1.462c222c9b216p-451, 0x1.a1389d9277e44p-229
+0x1.949a454cfc1f4p-296, -0x1.5989cd90df4f9p+634
+-0x1.c4a0554f11021p-985, -0x1.ebf8e73763f67p-990
+-0x1.a6d24b4d26f2p+616, 0x1.9398629961de3p+601
+-0x1.d6a7a620bcbd4p-205, 0x1.92937feb024b7p+335
+0x1.418684de16ec3p+486, 0x1.3006846754803p-426
+0x1.3256cab64df2cp-538, -0x1.55ab298d58395p+656
+-0x1.2ca0062a03c7fp-639, -0x1.8e46155170c63p+982
+-0x1.d86feb9f05e9bp+964, -0x1.218a8f3a16949p-282
+0x1.6a19114fa7321p+1015, 0x1.b754067c9e2d8p+636
+-0x1.0a8381ab06281p+909, 0x1.4a718f00e0a7p-361
+-0x1.ef571562e5ffcp-706, -0x1.3e40e8e8677e5p-712
+0x1.6024680e45bep-228, -0x1.c2c0877492ee3p-442
+0x1.0651afa5be1c4p+257, -0x1.70a2cce7668aep-112
+0x1.3273c5c3a2ef6p+436, -0x1.a5ba1669b0ee1p-32
+-0x1.be37878b94849p+720, 0x1.444659b28d49cp-635
+0x1.ec87a2a4bfdaap-322, 0x1.dbcdddd0214cp+146
+0x1.4438b217911d8p+134, 0x1.00efaddb1137cp-82
+-0x1.8252c0ca5d1a6p-875, 0x1.c6a8d7ca520cap-293
+-0x1.fb0e91dc80524p-86, -0x1.079abd8f02a8dp-807
+0x1.c2058b220be56p-82, 0x1.6cd250a6189e2p-144
+-0x1.9719b79d19e1bp+548, -0x1.a883e9e65f1e6p-890
+0x1.f596727c3a99fp+203, 0x1.8a224f1264e47p-491
+-0x1.1f7d9c69c0f18p+276, -0x1.c355418418a7cp-491
+0x1.ce61bba0004a6p+423, -0x1.d2eccb2c8f702p+114
+-0x1.68f9afab87fa2p+877, -0x1.61630090f07ffp+689
+-0x1.3b9af2b3d18dbp+351, 0x1.563ebfed3bfb9p+194
+-0x1.fd3d2b95b33e2p+607, -0x1.6ba06587fc088p-750
+-0x1.62697c2790ea6p-762, 0x1.940443c2bf806p+363
+0x1.82f9a7f79ab11p-398, 0x1.399d121c78ee7p+624
+-0x1.47a6905e12d29p+775, 0x1.5dbe293914a2p+297
+0x1.5388a26b37edfp-760, -0x1.2642bb599e25ep+186
+0x1.415d8a0ac5257p+876, 0x1.6aa66a01eaa79p+866
+0x1.6d9a658695dddp-222, -0x1.7b9856f12729fp-769
+0x1.159bb14a7af3dp+486, -0x1.06c00e97d6bd3p+747
+-0x1.e17bbdc8fae26p+417, -0x1.6733fdf758a97p-823
+-0x1.43048fd005312p+504, 0x1.3ec148f513b83p+905
+-0x1.50745c6aedbe5p-195, -0x1.a3b710c9b630cp+786
+0x1.59a9cc50449e8p+95, 0x1.b4ff697900ee2p+320
+-0x1.adfb919cb6ea5p-576, 0x1.005f12f94b659p-554
+-0x1.8f872bdfb906cp+99, -0x1.f589b72cf4fc6p-477
+0x1.17d258034c48fp-611, -0x1.1838e57f0a5eep+471
+-0x1.d01e0fe18253dp-109, 0x1.a083d4e940fe1p+432
+-0x1.51df04426df75p+859, 0x1.0c322348c5dcap-930
+0x1.ab9c906ce5019p+844, -0x1.b2255ef461be8p-517
+-0x1.54fb74bf1cad3p-774, -0x1.74b3abc36f7cep+552
+0x1.3267692663a7bp-572, -0x1.d16fcd4949779p-553
+-0x1.c965c71480f41p-447, 0x1.1f54d57f3d4adp-659
+0x1.38357cfa8ee7p-396, 0x1.9a97dcdfc45b2p-174
+-0x1.3f8f2c4694a3ep-860, -0x1.074af4a491069p-147
+0x1.be5b121361bcep-279, 0x1.a6271864c15e5p+54
+-0x1.571d524fb837fp-332, -0x1.6c8b85553ccdap+728
+-0x1.dae5da9458a36p-18, -0x1.af80fcafe421ep+869
+0x1.bdf5e14076194p+230, 0x1.5f3872155062cp-840
+-0x1.68736f0a701e5p-369, 0x1.63cb6b731e9bep+362
+0x1.0585505e94b3ap+132, -0x1.eee570790b35p-750
+-0x1.5612b0b696c64p-542, 0x1.41c9378f060b2p-1007
+0x1.b1e8265bbb6ep-227, -0x1.1c5e724be2b67p+92
+0x1.0ac13517bf64ep-246, 0x1.4a443e5081577p-420
+0x1.8039830b7dfa4p+965, 0x1.99086df83915ap-942
+-0x1.2d2988b255995p+429, 0x1.1d19bcdfa257ep+251
+0x1.4274e0e9c27e7p-943, -0x1.114ed04e2e4b4p-470
+0x1.6af9dddeb095bp+775, -0x1.ed9ca85c3aa46p-601
+0x1.631e4a1067d03p-781, 0x1.be6d46e30228ep+534
+-0x1.2ac10fa9a0893p+332, 0x1.1b2d4e33621f1p+29
+0x1.709f2137dab95p-445, -0x1.6fde48d966fc8p-25
+-0x1.f811f68aba1aap+535, -0x1.96004333260a6p-290
+-0x1.2c51ffe1fcf8ep+152, -0x1.17af9b031a485p-174
+0x1.f69275e5f29ap+756, -0x1.682105d44483dp+613
+0x1.7d13efce5f1a1p+707, -0x1.3858a4e669e3bp-752
+-0x1.6cd05a4c54144p+826, 0x1.7c42ac0d2886fp-866
+-0x1.f89ce04dfd27fp+410, 0x1.fe0de103ce1abp-573
+-0x1.43b5c66354397p+311, 0x1.5bd0c23718998p-967
+-0x1.2319f27f77d36p-663, -0x1.615950a57876dp+924
+-0x1.83385c49fbcebp+686, 0x1.010c2b151c788p+619
+-0x1.0d44261e94de8p-670, 0x1.17160af447683p+571
+0x1.3481f39ea088bp+25, -0x1.706d7cd9b1652p+781
+-0x1.f0039b20728b8p-542, -0x1.51e7fca7f6499p-80
+-0x1.06b7cc5a7aedp-775, -0x1.e8efd554e61fbp+375
+-0x1.d9473d1361ae7p+477, -0x1.86a9bfbf95f03p-415
+-0x1.3f932e5d162bp-31, -0x1.a96d172b0257bp-804
+0x1.b3172331d60d6p-173, 0x1.3a7a560866aa9p-266
+-0x1.0358cd79c7569p-173, -0x1.4705dd58b26a8p+515
+-0x1.18805746027a1p-741, -0x1.d05d211d42f13p-228
+-0x1.659e72e94f232p-821, 0x1.a674275ce4cbep-164
+0x1.e9029329f9a9bp+115, -0x1.c8b8788091017p+461
+0x1.070b4391204cfp-612, -0x1.c0b61ce1003ecp-369
+0x1.d9792e699e24cp-716, -0x1.da3503c8b2b43p-784
+-0x1.ce75906b2a612p+994, 0x1.1f17844d2ebbbp+306
+-0x1.b837832174a07p-235, -0x1.4deefd727a398p-999
+-0x1.d39e49f0c9e38p+607, -0x1.bbdbd223f6e0fp+527
+0x1.d475d8f7f9b1cp+574, -0x1.d084c3a952956p-930
+0x1.36367deff0d1ep-819, -0x1.c1840b9d5cd01p-169
+0x1.56c29271ff50bp+991, 0x1.3133db7e7f3d6p+492
+0x1.70949a147a538p-649, 0x1.015d59b9e641cp+604
+0x1.48acc2d1e59b3p+280, 0x1.e97d807eb23d6p+419
+-0x1.8b0fb0c961928p-415, 0x1.35e01b117c406p+868
+-0x1.e95698f9b36a5p-282, 0x1.2d1a96cf2b0e9p-90
+0x1.0f2cbb86d9dd8p+46, -0x1.09f47148e87d4p-583
+-0x1.84c4de82fa752p+827, -0x1.9d36bcf2289f2p-315
+-0x1.262e501cf4fe6p-484, -0x1.18cbf59d3c82bp-956
+-0x1.d6c5b75278e41p-126, -0x1.1e1a6117f2e03p-295
+0x1.53c7b4d94cb4p+277, 0x1.2131bcf644999p+306
+0x1.956d78a2e3bf5p+804, 0x1.1e43de7ae36c9p-707
+0x1.e8fc958c5b717p-443, -0x1.1a7d40b3f2739p-1012
+-0x1.126556bd1c7cbp-69, -0x1.fc96af8d1e8cap+76
+0x1.5f3db9f4f3b8ap-938, 0x1.fc2131e7568bep-209
+-0x1.c354c3873dde2p+694, -0x1.8cdeee290f152p+381
+0x1.5339563d3cb9bp-638, 0x1.131d7aa4d4e46p-619
+-0x1.db77aa4411622p+219, 0x1.38efddb4b014bp+15
+0x1.4782b8dc33f23p-989, 0x1.fdbc130d05fbdp+217
+0x1.1554b3faa9bc8p+663, 0x1.91b103ff68c84p+498
+-0x1.105a3b4f92febp-877, -0x1.3fe0c998823dfp+862
+0x1.4c4c1467e80b6p+403, -0x1.3b1826a3d91e3p+547
+0x1.15885c2cb065ep+525, -0x1.b9014a9051735p-662
+0x1.b55857117e40bp-1006, -0x1.4bde04447b4b4p+162
+0x1.770d8b9533efep-954, 0x1.8bd860f89e00ep-586
+0x1.4bf1ef8066d3ep+20, 0x1.5a3b04c8ecb31p-370
+-0x1.856affcdc7484p+105, 0x1.b2c2a3327b38fp+516
+-0x1.2043fbca121cap-986, 0x1.78067f50d8218p+973
+0x1.7a9b80611e082p-939, -0x1.4bc487d06fcc3p+321
+0x1.a7af5850d7e21p+837, -0x1.e4f86095eda51p-946
+-0x1.348c991495b18p+1012, -0x1.3fca47184df5ep+251
+-0x1.b30af77ac83e3p+734, -0x1.6ef2c081952cfp+912
+-0x1.bd05a684eefd2p-180, 0x1.689a61eb600d1p-717
+-0x1.eca4d31cbed39p+725, -0x1.e672808edfee1p-1012
+-0x1.af0c6f8066b2bp+160, 0x1.a0df9068424e9p+218
+-0x1.074cd85809a85p+123, 0x1.1167ddb731e5fp+901
+0x1.72eae8bda4c5bp-813, 0x1.4a5062248e4adp-71
+-0x1.9d63ecbed33bcp+265, 0x1.6cba2bbeebdbap-818
+0x1.41202ee7dd7ebp-231, 0x1.927d7db0b3ac1p-438
+-0x1.fae9b8015cc4cp+163, 0x1.c44783a48ed9dp+776
+0x1.114f5d056d1a9p-113, 0x1.3f716fc0860cfp+303
+0x1.8826271676367p-821, 0x1.b0caed69c32dp-325
+-0x1.6f71959e447d8p-502, 0x1.076175c1ea436p-527
+-0x1.05d90a1df2ca7p+382, -0x1.22b79fed8c6c5p-221
+0x1.0ab8360e63e2p+194, 0x1.d6508c089866fp+198
+0x1.8a6123459b2d2p+127, -0x1.02dbf496418a7p-615
+-0x1.eef719eabbaeep-726, -0x1.3dc0270cf8aacp-126
+0x1.67b96ab330527p+600, 0x1.bffd396c7e8acp-940
+0x1.988759e704db4p+861, -0x1.55b449b993732p+231
+0x1.815034668d89p-293, 0x1.47e31361c5b59p+330
+-0x1.f1d051ffebb52p+291, 0x1.6ba2fcb860761p+253
+0x1.086f2905624f3p+510, -0x1.b90f1a2ec5ee1p+181
+0x1.5b539bb7d553ap-330, -0x1.2892c14113004p-859
+-0x1.16b0a2af6d9f6p-896, 0x1.04b4cb13a7c09p+603
+0x1.ac408d54fcccap+424, 0x1.33a7b922bf9ebp-108
+0x1.9487a31a13b57p-398, 0x1.a0329ebf9d818p+610
+-0x1.5589c7698dd8p-444, 0x1.e4bbf4f028bc2p+467
+0x1.0209ebc01c62dp-15, -0x1.590c303f5c32ep-625
+0x1.0858928266e15p+793, 0x1.27572b171f4fap+526
+-0x1.19d225c27b15bp-167, 0x1.93d1c269a3023p-153
+-0x1.5e01f51a9409ep+927, -0x1.72ce2117da968p+411
+0x1.afdf52ba2f9a1p-164, 0x1.8518c5c3f9ae4p+65
+-0x1.1e4f218d1cf3dp-294, -0x1.af9948f24567bp-443
+0x1.49f8a32ff1489p+954, -0x1.c6f38622684e9p-252
+-0x1.b23af13e433e8p-459, -0x1.5538f4ac5ffefp+973
+0x1.145a167ea4ea3p+749, 0x1.e8e69e6ba34dp-718
+-0x1.17ad652e40944p+23, 0x1.66ddc1e172328p-450
+-0x1.ae48e33b39c31p+851, 0x1.03deb2a4c08d7p-198
+0x1.029657e93754p+23, 0x1.f089b6f3f4e12p+885
+-0x1.14a99baac9aacp-486, 0x1.3c54cf9ef9d37p+305
+-0x1.e433d50b1645ep-826, -0x1.f502d8dd83819p+243
+0x1.ea1bbab4a6f05p-63, -0x1.48dc68f196565p+344
+0x1.19b93fe281cep+182, 0x1.3cae06156bafep+245
+-0x1.eafc483d29c5ep-941, -0x1.757c7688daddbp+780
+-0x1.cfcd3060df71bp-599, -0x1.5574747016423p-122
+0x1.e2a08569c5146p-208, -0x1.6f93aad37bad3p+678
+-0x1.cfb545723ed6dp+574, -0x1.4e7218edc07e5p+548
+0x1.13e16abe51f46p+790, 0x1.fa484c70d4103p-280
+0x1.8db06dfb66124p+567, 0x1.53d01cb5b356p-700
+0x1.0ce4ef1e7236dp-554, -0x1.c1fc4d7a584bp-303
+0x1.89206dfc8616cp+15, -0x1.9e7478f5bec9cp+923
+0x1.6cc0ac296df5ap-147, -0x1.d739c6a80e0f3p+552
+-0x1.df37c2f72c6ccp+1005, -0x1.f4e6900023b7dp+547
+0x1.a51aa19b57427p+1001, 0x1.1f938280997e4p+987
+-0x1.44146720af4adp+997, -0x1.b1e854686ddffp-496
+-0x1.7d243089f275fp-330, -0x1.7d93a4d0485d4p-56
+-0x1.86c36110b814bp+100, -0x1.830d04b6994eap+904
+-0x1.025cb594ffd92p-612, -0x1.df97ee930ad24p+394
+0x1.ac3302e5f07e8p+532, -0x1.5ada3b5365c8bp-359
+-0x1.bf0774299faaep+454, 0x1.12f06f88c041dp-521
+-0x1.12db166bcf454p+810, -0x1.e7eccfd52033ep+102
+0x1.ded6a6913d792p+631, -0x1.484b2de8cf2b5p+966
+-0x1.114054988c55fp-878, 0x1.2057d26e3eb6ep-28
+0x1.18d0062268ac2p-329, -0x1.397bdc3aa0c52p-581
+0x1.c4b492b296653p+560, 0x1.83965be75df49p+915
+0x1.7c4b464475424p-258, 0x1.364b6b9ecc84p-86
+-0x1.932ee715ee9cp-820, 0x1.5d0acac046461p+11
+0x1.89f236108da3dp+719, -0x1.8f46421ff86dbp+619
+0x1.bab714dbc675cp-735, 0x1.9b8ea9c4a0afcp+990
+0x1.953f1c8fbb33ep+503, 0x1.4a9dbcd88b5a4p+105
+-0x1.6b04af0630912p-113, 0x1.834f7677b3ab9p+179
+-0x1.3888739dfb47ap-7, -0x1.00f6937bbf981p+352
+-0x1.26e31d1f6989ap+985, -0x1.4a62efd62f7d4p-676
+0x1.b1318ee7120ap-249, 0x1.31dff7b683cb8p-468
+-0x1.7eca922a0218ep+757, -0x1.5130bad36e8e6p-20
+-0x1.3ea820bf73af7p-99, 0x1.54891c667887bp-389
+-0x1.4173e13089454p+969, 0x1.c2270a9e17d99p-762
+0x1.e0f91f0c64208p-803, 0x1.2271e0e7f4f2ap+61
+-0x1.56d3f9037057ep-718, 0x1.3e223c3967763p+574
+-0x1.665faed24722fp-157, 0x1.40053a68f4211p+95
+0x1.2454b75a6cab2p+745, -0x1.a7f2287049bc5p+395
+-0x1.9d2154ed6469cp-968, -0x1.d3ac769e77edap-963
+-0x1.afc4aa9627a8dp-971, -0x1.079013d73e044p+288
+0x1.66924e10ea983p-696, -0x1.8d1e7efdf17b4p-414
+0x1.482a8a82a858fp-147, 0x1.5765012556a53p-280
+-0x1.a3e22d6b16af4p-951, -0x1.71c1d60485311p+51
+0x1.f7ffee28ce83fp-929, 0x1.3d8b9f1309ba1p-733
+-0x1.ce4e32e5bae99p-11, -0x1.0322d6f0db1b3p-686
+-0x1.c5b3a9093463fp-626, 0x1.7512d37db67ebp-618
+-0x1.e4467d3b1c326p+196, -0x1.3e29526da8062p-356
+-0x1.254a46a8edfd4p+315, -0x1.ee95ab5cc02dp-871
+0x1.432a8d8a87f6ap-670, 0x1.616525e862d08p-421
+0x1.aba7daefcca05p+646, 0x1.4c73556be56acp-236
+-0x1.865f26dc229cdp+440, 0x1.7f2892578881fp+29
+0x1.8ba56472f51efp+525, 0x1.95e1a93ac3379p-262
+0x1.11a5f934f0679p+98, 0x1.d42d0edd0f56p-756
+0x1.0503e708de3ffp+263, -0x1.8272e0f532f82p+444
+-0x1.30fa73e805392p+379, -0x1.9ec42fc6c86b7p-916
+0x1.039c6350d048dp+189, -0x1.e27d363f4dc48p+759
+-0x1.b2f5f5a32cf93p+162, -0x1.089b0581a89b5p-554
+0x1.d6dea1404a5ebp-386, 0x1.d1e7427d8fd74p-585
+-0x1.138943e1ba00bp+260, -0x1.55a8357860ff4p-633
+-0x1.cb0585a69ec8p-771, -0x1.b30b34fb4849bp+1019
+0x1.15b8d33e57b5dp+613, -0x1.16d8525dd808ep+819
+0x1.089a11b10202p+860, -0x1.661b937862d88p+985
+0x1.ecd24009cb22bp+611, 0x1.e8fd804b52191p+722
+0x1.bdeed16ee9071p-21, 0x1.c18770cf15d94p+893
+-0x1.7e246229c7479p+11, 0x1.8c0a023da75bp+22
+-0x1.2696479517f63p-873, 0x1.61472367b790cp-273
+-0x1.dff31fa2945e4p+879, -0x1.788f359366c3dp-999
+-0x1.204a18b87c646p+526, 0x1.c3906c3b0745fp+318
+-0x1.8ebbfa9bfd865p-570, 0x1.df27bbba13fabp-1005
+-0x1.f0bce56e90b36p-906, -0x1.621a7b0077f98p+74
+0x1.f1d65127c0b6dp+121, 0x1.62c01ad0396afp-792
+0x1.83edee737ce55p-183, -0x1.b76cec6de8a28p-810
+-0x1.00fd8f4b7eaeap+798, -0x1.d10dc39b5cb6ep+202
+-0x1.badde0405e759p+324, 0x1.77dc6d3ea132ap+823
+0x1.da1baea3c16fap+333, 0x1.2cc0c40bc671dp-339
+-0x1.ac7789c6b4cf2p+51, 0x1.51e3dc935590bp+316
+0x1.13cd66f9c9a41p+110, -0x1.73044e1701d54p+955
+0x1.aa206d92df49ap-539, 0x1.787369e33123p+338
+-0x1.5e085883313c7p-698, -0x1.c5c7fcaff2a8dp-417
+0x1.b3333de61b2c9p-380, -0x1.544afdd14d54ap+393
+0x1.7bcdabfd53ac9p+141, 0x1.f0b76e9704968p+408
+-0x1.7369c072cb16bp-29, -0x1.68971ae967238p+320
+0x1.ef8c843fd5689p+161, -0x1.ff0d6afd40d0cp-31
+0x1.f6a910bfe476ap-159, 0x1.b96aa192e68b6p-538
+0x1.5374abf201ef3p+838, 0x1.ac2785d030c44p-616
+0x1.26eb33cd00e9dp-509, -0x1.f3d66906ee76bp+707
+-0x1.a26c06a38e4a1p-730, -0x1.dc673bdc267bep-999
+0x1.3216151975fc7p-457, 0x1.4d50afe1e7304p-449
+0x1.1e099367bca38p+255, 0x1.6b58cf3af69a3p+884
+0x1.236e0a09b95e9p+567, 0x1.e8ee1eb0da59fp+100
+0x1.64fe680eddb96p-513, -0x1.71722a535e8f7p+787
+-0x1.abd443466d6f8p-274, 0x1.bce5c9e6e1067p-455
+0x1.ef4dcfd4ecd88p-210, 0x1.454b0894b629bp-731
+0x1.7e4055d580af4p-265, -0x1.af992ca040efap+635
+0x1.3aff343aeab8ap-692, -0x1.b7f34b4c1770bp+736
+0x1.a825e573089fbp+267, -0x1.ff89356fd5dcap+324
+-0x1.4c74bd94c23e9p-699, -0x1.6f8f0f40c819p+688
+0x1.ed672b96b7d2p+244, 0x1.67398b6a9639ep+499
+-0x1.896f4f1a0af8dp-348, 0x1.247df7c6665d9p-635
+0x1.64a8ad593015fp+173, -0x1.1ff42760e7babp-37
+-0x1.066ca4e6a26b9p-144, -0x1.f228ff9fd4b29p-50
+0x1.1c297a31d8e09p+496, -0x1.2ec016ced5d6ep-581
+-0x1.e2f48ee5963dep+554, 0x1.67b03a7908837p-32
+0x1.a6d1a3a6ff54bp-816, 0x1.fc81e2ef3f55p+385
+-0x1.14ed4b5053f69p+570, -0x1.39990faca1affp+17
+-0x1.4e49d59528292p+768, 0x1.5fbc8a55f23eap-68
+-0x1.2fb3935152a42p-868, -0x1.b74743ff80cfcp+699
+0x1.0a9e69428019ap+297, -0x1.b569c64ba1cbbp+155
+0x1.8035305a8c434p-646, -0x1.6ee5d92a20efep+559
+0x1.7d0489a9409ddp+893, -0x1.ce88b5a1086e9p-787
+0x1.b0fe00e7f1ddap-495, 0x1.4b9baf802f094p-901
+-0x1.962ffbd66b12bp+806, 0x1.75e05396da57fp+195
+0x1.a29aea6168e29p-279, -0x1.192abc8197e6ap+37
+0x1.8c133db90b85ap-466, 0x1.946563959c2bap+456
+0x1.c9789ef809b8ap+341, 0x1.2a49d0ca369a3p-962
+-0x1.5f2f72d0eded7p-840, -0x1.4bd4f1980ab3dp+54
+0x1.6d67321d91dap+304, 0x1.a328296f03117p-867
+-0x1.839cca5c3f88bp+36, -0x1.e5d66a7c3bfa9p+310
+0x1.bcb853a989cf4p-637, 0x1.3da4a58536c7ap+227
+0x1.1d678d30a3afep-335, -0x1.632ed31c4ef7p+188
+0x1.7cdc8685ea2abp-463, 0x1.4be25b058c5dap+1006
+-0x1.b3cac7cf3ca82p+769, -0x1.bc8931922cb8ap+38
+-0x1.4009d3f1e9232p+184, 0x1.e0157784e700dp+708
+0x1.5398945cf4022p-488, -0x1.d2121ac926aaep-665
+-0x1.12c11e3852e9dp-495, -0x1.0a8b5d5667b46p+926
+-0x1.0d88d03448ba2p-159, -0x1.d365262040e95p+660
+0x1.a6ad97b6322e8p-976, 0x1.dc3fbb8a5734bp+579
+-0x1.548081a3d1873p+709, -0x1.321c60171f77ap+679
+-0x1.e9c6f424313ebp+877, -0x1.e83d59a949f5dp+212
+0x1.ddd8f91b00853p-270, 0x1.aee61ef9a4dd9p-108
+-0x1.3d0042532b7fbp+688, -0x1.fd8aab6dac0c3p-681
+0x1.d0c862fb02403p+754, 0x1.7c3ad6097438ap-242
+0x1.78d852eac428cp+964, -0x1.4328c93b56089p-303
+-0x1.1ee22e52fe9e7p-628, 0x1.2a3bc85a3db6cp-502
+0x1.d8f1bd1a041d3p-344, -0x1.2833cf7e22b7fp-434
+0x1.10e2c2bd2fb45p+129, -0x1.ed7dccc0e350ep+358
+0x1.b578dea09879ep+893, 0x1.abca8d47f2e38p+942
+0x1.54266fb6dfc3fp-377, 0x1.a98189e9ed367p+490
+-0x1.3dffa7105fecbp+314, 0x1.9277eb5ee3b9p-689
+-0x1.4df79e9addeddp+805, 0x1.b2b8f2bf5b352p-244
+-0x1.d64da0b70510dp+527, -0x1.8565e650f15c3p+778
+-0x1.2aad5abf7d92ap+353, -0x1.a9d6977598aa3p+570
+-0x1.d0565b035198p+268, -0x1.555e91b7ac1d2p+464
+0x1.ccabdaa29e061p+627, 0x1.fb9beaf2413a9p-534
+0x1.7c68d90e0552cp-410, 0x1.35f296bf50fd2p-472
+-0x1.8e7677094d102p-760, -0x1.f7607d5e95586p-234
+-0x1.6f989baeb0008p+522, 0x1.440db29d598e7p+131
+0x1.5e05478ad697ap+187, -0x1.4cde3bc245dbdp-493
+0x1.205c69372380cp+949, -0x1.246c125149301p-385
+-0x1.28a4a30c67eadp-750, -0x1.7586a35e654c2p+705
+0x1.9c57811360249p+997, 0x1.cb5374777df29p+466
+-0x1.e71629b1d2e24p+0, -0x1.7c32976051278p-85
+-0x1.4555929e65b69p-437, -0x1.08f901cbff6e7p+534
+-0x1.d482302130b9cp-351, -0x1.d87c620a546c5p-806
+0x1.61f8ae086e3a7p-744, -0x1.addecbec35731p+80
+-0x1.15171f44c3508p-25, -0x1.6f8401e5340f5p+599
+-0x1.bb5e0f6e722a8p-266, -0x1.3d1393d8f644ap-686
+-0x1.c44dac2e882efp-117, -0x1.1b4eabd97a3eep-890
+-0x1.5de17111873bbp-523, 0x1.441cddd48e282p-273
+0x1.8ceab10eed252p-150, -0x1.5cf44e4f50a92p-931
+-0x1.3e6926fcd302ep+680, 0x1.67081048ebe9cp+383
+0x1.f609787820c22p+467, -0x1.0f0e3dc10b434p-706
+-0x1.6281a8dc9a637p-862, -0x1.3d66a75dd6459p-515
+-0x1.12756c0b8a7e5p+553, -0x1.20557c4c9df55p-618
+-0x1.7165a5f004259p-328, -0x1.1bc31035b0cccp+488
+-0x1.bd7bc111885bbp+635, 0x1.78f6031426ab5p-383
+-0x1.da9337b21ff9bp-664, 0x1.a983594eb464cp-472
+-0x1.4463e633452b5p+94, -0x1.eba53c2d63cfep+113
+0x1.41f53747cdap-110, -0x1.a6420ec80a717p-387
+-0x1.30979d9547db3p-741, 0x1.04f47f562677cp-455
+0x1.3026666a06f7dp-919, 0x1.4488c08c8dd38p+594
+0x1.b86e0629db653p+869, 0x1.7009f8525f842p+977
+-0x1.45ba8f33c5bbdp-646, 0x1.bd14e056f875dp-989
+0x1.42b7e9c042083p+836, 0x1.22d1039d0e6fbp+37
+-0x1.69bc336ab616dp+478, -0x1.ea8689ce6f8b2p-589
+-0x1.0a059370ba169p+734, 0x1.40172539857e3p+457
+0x1.7d1abd28728fap+951, 0x1.95be8f48dd74ap+125
+-0x1.4c29760bc909cp-966, 0x1.4d0c39ea994p+194
+0x1.807ee47258958p-134, -0x1.9ab6b2b3c6b47p-86
+0x1.df2343ac77142p-596, -0x1.65aaefd7164cdp-397
+-0x1.0d55066ffb4e1p-418, -0x1.f498b0b57eabfp-985
+0x1.92487706239e7p+839, 0x1.a861c4e6cd56bp+858
+-0x1.90e289ce03823p+266, -0x1.9b7324b04fbe9p+534
+0x1.7a89e24f4dd4ep+202, 0x1.e17b0d5028495p+147
+0x1.c76ef2787661fp+312, -0x1.d11873afe7043p+750
+-0x1.9475f232679bbp-492, -0x1.ec5d349eeb8fcp-83
+-0x1.46ff6c6d01bfdp+133, 0x1.15f45a6ce5d07p+819
+-0x1.e865ac432e475p+864, 0x1.5b688316a6f35p-335
+-0x1.ff1b174fc083ap+447, 0x1.0cda1c8c6e17dp-636
+-0x1.93be66e12ab6cp-785, -0x1.52c017a7eeb1ep+528
+0x1.5a81cae2bf074p+633, 0x1.1e7c44e3f7147p+412
+-0x1.ea37520cc4c73p+747, 0x1.56938541747cfp-1010
+0x1.e07f64df0472bp+499, -0x1.da4ea4d50f099p-330
+-0x1.3b46a22b4d1a5p-484, -0x1.3c9652a1b38e4p+735
+0x1.99f8988c9a29ep+406, -0x1.267efe22b4d6ap-507
+-0x1.e6900f34f0e89p+201, 0x1.6808d8175449fp-781
+0x1.281e7cd9e6f8ep+755, 0x1.91878892830e6p-760
+0x1.c11d41d32e7a9p-836, -0x1.b13f6e505e542p-517
+-0x1.763242a88a435p+575, -0x1.c735b86af8c0ap+164
+-0x1.68d2d31ef5a0fp-822, 0x1.fe73b669121e6p-530
+-0x1.e2ec1e484b467p-246, -0x1.517674118ece2p-510
+-0x1.d476c1bc1a52fp+376, -0x1.c8436ee6291bep+818
+-0x1.2ffdeebbaab96p+144, -0x1.cbd166199ba51p-734
+-0x1.fcbed2f5373aap+669, 0x1.435d769199dbfp-805
+0x1.bca15435f5c05p+45, 0x1.e294e729b665dp+549
+-0x1.392bf94af616ap+455, -0x1.b37cc138ca3cep+102
+0x1.56ff2da161de6p-919, 0x1.16d11c53a7cf5p+303
+-0x1.204990fc84f77p+684, -0x1.2628043f0fe08p-417
+-0x1.50360f8a8f455p-818, -0x1.0ede3efc906b7p-573
+-0x1.13dd476a38f43p-92, -0x1.3f243a6caf87bp-214
+-0x1.bb3685b58bd14p+889, 0x1.262e682291e64p+813
+0x1.f7b34af8b1b6ep+818, -0x1.1f6557d369c25p+648
+0x1.90c2babca2f1fp+131, 0x1.70a7107f832fap+558
+-0x1.56c85887bc5ebp-896, -0x1.2d706f8f20cc1p-585
+0x1.f446545972c8cp-832, 0x1.cd4b4070c8996p+393
+0x1.52b20cf35c687p+466, -0x1.2e658b97fc69bp+381
+-0x1.69ef69848858ep-925, 0x1.c49c1fb4ff3a2p+677
+-0x1.4faa81b6c6265p-361, -0x1.be626569dccccp-503
+-0x1.8d2a9a383d506p-467, -0x1.c9f284d06c576p+434
+-0x1.9a293ce2c81cfp-447, -0x1.841977b795897p-63
+0x1.3ec878f68f40cp-806, 0x1.f348321912e5cp-550
+-0x1.6f7bbd10c82ddp-439, 0x1.877dcff25c497p-577
+-0x1.9c2f7ea3b6878p+408, -0x1.83fa86483766bp-325
+0x1.70f578bb9533bp-712, 0x1.a1a74a80f45c7p-295
+0x1.cca7cf2817ba7p-860, -0x1.2be524a6f3e33p-221
+0x1.20bc24c8a126p+842, 0x1.8cffe6532802fp-854
+0x1.6f1a523e6e92ap-640, 0x1.acac10f26818p-868
+-0x1.efb2bf99c041ap-49, 0x1.59bbe4d1e01bfp-68
+0x1.1a003438903f4p+864, 0x1.4a656551d94fcp+976
+0x1.472679d7418eap+697, 0x1.63d3e008371fdp+72
+-0x1.a56bf5b0a35fap-221, 0x1.5bc6dec8df722p+153
+0x1.2e6bf50077ac8p+472, -0x1.092db085783cdp+604
+0x1.828468bbcee93p+170, 0x1.5cdd84670e071p-646
+-0x1.2b6e8dd80a229p-702, -0x1.897b1e2bab355p+656
+-0x1.09f81069fbaa4p+514, -0x1.645850022d112p-871
+-0x1.61141fb352a63p-622, 0x1.a25bfcd7039dbp+705
+0x1.38f128a15e6p-780, 0x1.fdcacd1866dbbp-740
+0x1.4a816e68d12ap+938, -0x1.4d4f5e8beb119p-137
+-0x1.79743984c7c4bp-432, 0x1.6b360061cb6ebp+341
+0x1.4085f9860efc7p-578, 0x1.3b1a52f7735a2p+821
+-0x1.fdd6f1f21f4cbp+600, 0x1.63b1cf27c3d71p-861
+0x1.d6d5636d9b52bp+747, 0x1.f74138528a4edp+205
+-0x1.d889d11cc04e3p+124, -0x1.727a5b11ea9c9p-194
+-0x1.b14cb39070498p-870, 0x1.adc43b3db4d59p-913
+-0x1.8f9a4c8709cfcp-683, 0x1.c167543c4f8dp+484
+-0x1.8c8f198f83d25p+389, -0x1.2acd43dc601c7p-925
+0x1.00dc21201dd3fp-363, 0x1.12bd881160a0fp-611
+0x1.3b8d0b7b496d8p+741, 0x1.d9791df33fac1p+718
+-0x1.c57a262ffca6fp-299, 0x1.67ca7d276fe05p+842
+-0x1.398bf03135e64p+180, -0x1.6f63b6716c7d6p-553
+-0x1.577ed8a9668c7p-435, 0x1.b158b8ef66da7p+773
+0x1.a925ddd73d122p+239, 0x1.75da7381ba36bp-554
+0x1.aa55abf852967p-865, -0x1.a5ba61af0e1b9p-640
+0x1.8da7a6d44fc61p-994, -0x1.c9b1584f1107bp-197
+0x1.01211a48a51e9p-122, 0x1.8b7492103e65dp+734
+-0x1.1537e473f5c65p-757, 0x1.79effd1669aa8p-38
+0x1.8baaeb1ebf6e6p+233, 0x1.33088baff4c6p+241
+-0x1.f9a6d8e0975e6p+236, 0x1.ff9f0020e9048p+8
+0x1.ef67be55e650ep-305, 0x1.79e2e6ecdcb89p-469
+0x1.616acbc7b7fcfp-953, -0x1.f9c43c9a4997p-779
+0x1.d4f001ee489fcp+991, 0x1.b6659362bd8e7p-976
+-0x1.38635f22ae1e9p-721, 0x1.e0f0a6a27ec05p-950
+0x1.37a00d97d5439p-647, -0x1.73d96401d733ep-381
+-0x1.ef42af5cde108p-734, -0x1.a1111a85d88dcp+368
+-0x1.f9356336eb04bp+425, 0x1.c73595538494ep-266
+-0x1.7d4616d0d4ab9p+867, 0x1.803c102f32713p+396
+-0x1.c1a231aaa532ep+984, -0x1.70d03a3853fa4p-473
+-0x1.329e89377c4ffp-717, -0x1.0e9a006387ac5p-46
+0x1.754af9e855c0cp+205, 0x1.a966e0f892021p-644
+0x1.afb4d264dbdfap+411, -0x1.ee31ecc37a5f1p+1021
+0x1.9ee00bbf52557p+345, 0x1.f31c8a31ab158p+274
+-0x1.c6e1644d8c4e4p+262, -0x1.45c50029dd117p-428
+0x1.bd12397eb841p+540, 0x1.7057b7f788553p+732
+0x1.e7b4d0d26f2b3p+892, 0x1.b57ddd846a188p+193
+-0x1.2b5a9c0241dc8p-518, -0x1.915b7e9526228p-320
+0x1.bc804abeaca35p-596, -0x1.4420836242beep-59
+-0x1.cba822633ff8fp-214, -0x1.6161c6719a7c3p-753
+0x1.654df6c52a9fbp-309, -0x1.06074a07ee34bp-277
+0x1.71a2fde5038b3p+214, 0x1.d7203b3a1411dp-446
+0x1.864163a41ac0fp-700, 0x1.fc3e0d3881296p-468
+-0x1.a0fe0638a13d6p-1019, 0x1.3ccfd97d04ac3p-883
+-0x1.ea2d6341264f9p+967, 0x1.74c85a744a30dp-895
+-0x1.7b229dd4fad83p+574, -0x1.f5b6ff060e14bp-311
+0x1.0847e35317b2ap+872, 0x1.263cc7008eda6p+786
+0x1.836d9cba61135p-822, 0x1.42cadefcbe54fp-881
+-0x1.f3160f0fabd52p-679, -0x1.b422bf6a06284p+226
+0x1.6d53a76310183p+137, -0x1.5990d03d7fc06p-807
+-0x1.f2707b38430cep+819, 0x1.197b70fe7abf1p-289
+0x1.3d089bf57d8a6p+761, -0x1.edd136b9f96a4p-439
+0x1.0709c83a75b8ap-433, -0x1.b903f3b7d4615p-260
+0x1.6ef476cc3b04ep-609, -0x1.26049c2f1c352p-433
+0x1.df370d82f900ap+43, 0x1.e0a3ff4d4a3cdp+893
+-0x1.c0fd6da7e0c1ap-1003, -0x1.988ba00743d67p+549
+0x1.84206fe9d4f58p+648, 0x1.d8b8d3e0b4e46p-869
+0x1.ff96130f95774p-173, -0x1.edecc6c42567bp-330
+0x1.eb2ef215c55b2p+34, 0x1.27e6b07cf8c7dp-692
+0x1.4b40312a220abp-516, 0x1.d8f1cecf8b454p-996
+-0x1.b78cb61a1150ap-207, 0x1.45720db95266fp-963
+0x1.927136ec86accp-764, 0x1.251099daf16a4p+857
+-0x1.880f868994f9cp-558, -0x1.f986798188bcap-918
+-0x1.ad4f15fc5b3ccp-496, 0x1.54f2a9c040b1ap+752
+0x1.345a08e466479p+754, 0x1.eba2a4ba16953p-593
+0x1.ca715be6a7cc6p-136, 0x1.a8877bf600824p+837
+-0x1.a2f91d66f1b86p+263, -0x1.82b1b34a211aep-605
+-0x1.ab9e91db764bp+110, -0x1.7eee5611dd3fep-860
+-0x1.1fcaa151dcf23p-1004, -0x1.32d025c752388p+787
+-0x1.328464f3c8726p-973, 0x1.cc2b39aeb9a6p-416
+0x1.007f3d7f0e16bp+98, -0x1.a2d87e3b81475p+963
+-0x1.46589bf40603ep-492, -0x1.e2e2ff99c103ap+287
+0x1.b0e96c5eb7685p+386, -0x1.d824f6f0c309cp+294
+0x1.9d19ef3e2ffa9p+359, -0x1.143b522ff344fp+68
+-0x1.c5a997bdc73ebp-803, 0x1.c22d771e1e0bcp-443
+-0x1.ad43d4178df7bp+545, -0x1.0476bd7e6a54bp-134
+-0x1.3dec26382e421p+433, -0x1.94fe1637a388bp-222
+0x1.e3e8bd564a2a6p-55, 0x1.49c70d3334283p+481
+-0x1.a12efcac0fa89p-15, -0x1.36f0d6dd3c26bp+3
+0x1.fd73824406e7fp-173, 0x1.78219dd6bbcfbp-237
+-0x1.418ec59bb4e29p-858, -0x1.d4318757b4b8bp-409
+0x1.0310c4fa29ee9p+815, -0x1.561374f4c43d6p-589
+0x1.841880334fe9dp-236, -0x1.4848b24d0472dp+866
+0x1.5d6949de4154dp-829, 0x1.2091c1d9b73d3p-1021
+-0x1.2ac8017ab5892p+228, -0x1.2be11eb3cbb2p-62
+-0x1.79ae0adf95f2bp+469, -0x1.5d03f72741e28p+261
+0x1.0b6cc6755cf4fp+1004, -0x1.657df8cd3ad36p+969
+0x1.6ac7dc7cbd9a2p+844, -0x1.295186fd5a461p+583
+-0x1.7ff3241662b9cp-407, -0x1.5fd7fbbaf3a9dp-813
+-0x1.c58ee93c33266p+753, 0x1.a1ab883ce5434p-36
+-0x1.96f5f04c2f464p-168, 0x1.0b461ecc4b7d6p-922
+0x1.ba604f170f7c9p-149, 0x1.a99217bf2d0a7p-778
+-0x1.4835d1f469224p+841, 0x1.1937793755eabp-182
+0x1.fe78881af7febp-134, 0x1.630169576e036p+539
+-0x1.6698ba5c20ddp-115, -0x1.ff068e5836595p-939
+0x1.17b49e9681a82p+898, -0x1.364fb710eab17p+964
+0x1.899cb4a8030bcp+731, 0x1.a6e18b4844a54p+814
+0x1.5d249524d7c1cp-916, -0x1.4df4912c71364p-528
+-0x1.b483741db72fep-896, 0x1.5e38500a41ef6p-353
+-0x1.c649b634c49f3p+462, 0x1.e10d690e21746p-588
+0x1.c0243af36ae07p-56, 0x1.98efe19e31d0bp-745
+0x1.3e9375f1fdfc4p+610, 0x1.98981c3a04c1dp+852
+-0x1.22b057aaf9d81p-895, 0x1.2a52d36701ff1p+180
+-0x1.1a43b134b404ep+758, 0x1.2dde4e536602dp+803
+-0x1.4a8ec71fbaae9p+86, 0x1.5af682eb54995p+803
+-0x1.4ea2023486202p-955, 0x1.fbd200f967ad7p-364
+0x1.653e2e58fee69p+731, -0x1.73a474aa28ab7p+247
+0x1.91c372ed7dba9p-866, 0x1.7434b02c10f8fp-217
+0x1.dc09c5407e20ep-350, 0x1.638ce6ffc4f74p+660
+-0x1.bfffd339062c2p-935, -0x1.9561d60fc0379p+779
+-0x1.1c84fae104859p+350, -0x1.c29f23ab083b5p+980
+-0x1.d76aa28c3b123p-380, -0x1.0e9739accda04p+981
+-0x1.c8eba56da773p-568, 0x1.20334ccf0ad5cp+754
+0x1.70248ce177e39p+65, -0x1.59e7dd27a32c1p-295
+0x1.15f0c7a31a514p+415, -0x1.a13e1be0eff11p-722
+-0x1.9b29bdc200f9cp+895, 0x1.640b44f368a39p-108
+-0x1.f3ce00a4d660dp-974, -0x1.7da4c6c6c4058p-45
+0x1.96d47ff47e46p-836, -0x1.4073d7c22860bp+965
+0x1.525621ff5063fp+147, 0x1.f692f37cdd382p+291
+0x1.c98c9fb3c856dp-505, -0x1.ae059226c76d4p-628
+0x1.6ff383d1ade7dp-797, 0x1.2faff9f1e05f4p-894
+0x1.33d332690fc6cp-472, -0x1.0596916b71093p-66
+0x1.6ac0e441c0b8fp+19, 0x1.f462c3703ff57p+640
+0x1.5d6b56ec43c82p+554, -0x1.4b5893c3c2a93p-814
+0x1.eb41fc0afbae8p-941, 0x1.4ab53f214d8c6p-791
+0x1.b2d45d736a02ep+207, -0x1.1f95f822d7799p+783
+-0x1.f5e88da9ba61fp-191, 0x1.44cbede96ea5p-513
+0x1.aa22ecc174b97p+140, -0x1.34d368e46663fp-750
+-0x1.afb895fc2d5a9p-391, 0x1.cd058e2ce6a5cp-594
+-0x1.fdfe414690a48p+219, 0x1.0c62089ea1a26p-564
+-0x1.b7f139f27d1a9p-958, 0x1.08497b0e149p+609
+0x1.cbdd9d00ec53fp-889, -0x1.8a0df224eeb41p+180
+-0x1.2c4f61a61e2f3p-925, -0x1.bb4584ce4583bp-89
+0x1.398a21ff40d2p-525, 0x1.1ea6dc8faf463p+764
+-0x1.e053dded237e3p+448, 0x1.d9a4fbf891117p+897
+-0x1.6970debd68939p-181, -0x1.c321b67b5d8ffp-799
+0x1.c9173f9d2256cp-94, 0x1.0300654420afbp+132
+0x1.fd8af1d806cfep+703, 0x1.6f346ed47986cp-725
+0x1.7359d99eec8bep-377, -0x1.308e8f9dd340ap+22
+0x1.b69ed445c0fecp-642, 0x1.40fe9856c9524p+830
+0x1.3c9963a22f88cp+179, -0x1.c1a338d49d771p-153
+-0x1.3c628bb3a16b4p+943, 0x1.0bd79855c2a15p+892
+0x1.a2956df189feap+862, -0x1.430a09d3c48e8p-382
+-0x1.c58a4f88b051dp-818, -0x1.749b08cb7267ep+46
+-0x1.47424874956c4p-472, 0x1.5d53f92d872b2p+360
+0x1.3ac3c45e5b085p-583, -0x1.8b888ebd96778p-489
+-0x1.a3cce9a7875e4p+848, -0x1.4a0288f77b2p+83
+0x1.04c053055e26p+116, -0x1.adeacc9b7efe9p+748
+0x1.3a545fad070b5p+736, -0x1.b971a19a23ba7p-204
+-0x1.4b06d12f140d4p-352, 0x1.4f1f7ca3a5aa4p-97
+-0x1.4b34797ec8e3bp+1012, -0x1.ec9fedf87d0b5p-708
+-0x1.9a123ad73fafcp+101, 0x1.424981d6598a6p+351
+0x1.5b353c0b6aec5p-3, -0x1.c58a64ab63a0ap+1019
+0x1.c4d6a8aa200d6p-608, -0x1.897f2effad50ap+68
+0x1.2473892e0d653p-119, -0x1.e8ee7fcff6d67p+818
+0x0.ca3b996c8f9b6p-1022, 0x1.5fdc12e3b5f85p+216
+-0x1.b792edef53c35p+416, 0x1.d3ffb3d8fc4dap-674
+0x1.85cc482bb6e48p+515, 0x1.9282863ea931dp-422
+-0x1.d56d55f88eeb4p+791, -0x1.14be64f69ce5bp-595
+0x1.b035c2b7bc0cap+626, -0x1.d0534fb3ab003p+693
+-0x1.da47e70b4e0c4p-797, 0x1.13bfb01fb078p+197
+0x1.fc23bbdeffedbp+575, -0x1.4ad27c9e72337p+779
+-0x1.ed2f41b68412p-85, -0x1.89a6ac24742a1p+162
+0x1.538f9175bad3ap+969, -0x1.1bb4c19af5595p-493
+0x1.5548ced19b007p+212, -0x1.0af485176f217p-590
+-0x1.12f5f81cb1638p-613, 0x1.a9855b7297d3cp-639
+-0x1.ede28c82a1cecp+653, 0x1.72ace7dd05ae1p-345
+-0x1.ce0ef9b0c1a58p-927, -0x1.0933e76eb202fp+107
+0x1.7c5f6f78950d3p+828, -0x1.43b30032f092ap-328
+-0x1.a91c26be6ec6ep+83, 0x1.d386e9e104b4ap+416
+0x1.b4b3228d3e8b2p+830, -0x1.9ae727179a915p+165
+-0x1.b632258d91d4p+754, -0x1.305f94b7a57c4p-87
+0x1.326690d491cafp+479, -0x1.539cf1f3237bcp+600
+-0x1.e3510c8015c3ap+867, 0x1.399de732fdb91p-1001
+-0x1.e71dbbc3bd5d5p+132, 0x1.ff0a5b0c9494bp-201
+-0x1.714145d97709cp-968, -0x1.20bd66be71137p-147
+0x1.ca1f25e85fa53p-609, 0x1.54dcf288294d9p-883
+-0x1.b2daace6045bfp-457, -0x1.bf71fc4c48eb3p-777
+-0x1.e0bd0b3ee6975p-498, 0x1.a44a68ebd64fdp+926
+-0x1.91a9040bb5f4dp-374, 0x1.21c03f17a12e3p+494
+-0x1.52c8e516058cep-605, 0x1.6c773943b6575p-221
+0x1.0b36199ce6fdcp-402, 0x1.f4fa5dcc66238p-424
+0x1.7b68fbcc9a7b1p+737, 0x1.00d589aeb9d14p+838
+0x1.762015597525p-707, 0x1.91c0a96e3e2f3p+69
+-0x1.9c1c91a01e7f4p+561, -0x1.2b5afc756381p-86
+0x1.168db8b195388p+77, 0x1.5941ac902b8adp-322
+-0x1.5fd7fc44221f6p-175, 0x1.8ec12c1b5db9dp+821
+0x1.afc39485b60e5p+365, 0x1.ca8524e92647ap-889
+0x1.6d6fb6ff7d88bp+1007, -0x1.1f98ec264f97bp+818
+-0x1.aabed7cb278bfp-531, -0x1.7d50961792ae2p+646
+-0x1.54c1810ef8546p-863, 0x1.8494c04338cffp-933
+0x1.4a53f9d493286p+13, -0x1.7d5f45cf88817p-561
+0x1.9202115764e33p-762, 0x1.3aeeb538484ffp+632
+-0x1.fd3120017ba15p-171, -0x1.8e7297b901883p+175
+0x1.5432ceb2d540bp+204, 0x1.e2fb29d69d5b4p+868
+0x1.fade56777205ep-441, 0x1.7008842efa71bp-836
+-0x1.c56cf93119487p-697, 0x1.80b8c8746f3a1p+746
+0x1.5981929daf7f5p-827, -0x1.ed02906ddcb2fp-906
+-0x1.a41b88e2c5debp+342, -0x1.2b2469d0471d3p+404
+0x1.01599e94c69cbp+466, 0x1.01993baa28dfcp+818
+-0x1.dd239f1b51226p-511, -0x1.16789d43ac97dp+565
+0x1.0ded21786afbap-262, -0x1.a54ddc4e86bcap+659
+-0x1.23f4f983b875dp-750, 0x1.dd4aadb8840cbp-633
+-0x1.fc421b593967cp-517, 0x1.f0ed46dfb4ffep+713
+0x1.dfb22ec4cf72cp-1004, -0x1.73173dd7aab6p+326
+0x1.2db5f7b524b72p-919, -0x1.589675c47344fp+378
+0x1.56d3d3502df3cp-952, 0x1.db00e5c4e0213p-311
+0x1.50edf7242bddp+559, 0x1.4613f677cbad5p-40
+-0x1.f7d9ec2938ee2p+220, 0x1.0be59f2cce9a5p-382
+-0x1.9c9a552de56dfp-57, -0x1.b4f304bdc8ab6p-937
+0x1.f02142c026defp-961, -0x1.eb3716d2031bfp+195
+0x1.527b93ca647cep-866, 0x1.a88a9f3833375p+1002
+-0x1.a74019c62e26p+399, 0x1.faee3010ed0c4p+801
+-0x1.7ca550710140ep-101, 0x1.eb52be9e679fp+571
+0x1.12171f8729216p-519, -0x1.004f792d5a268p-63
+0x1.d65bfd4c30839p-746, -0x1.4daba43409641p+204
+-0x1.21cd83e498516p-450, 0x1.4609b19e9ef53p-403
+0x1.ebb5fa387c927p+248, 0x1.4ecab9624ec62p-92
+0x1.45b55f65ff1e7p+813, -0x1.f707e3c8b5239p-138
+-0x1.1da001fda482bp+974, 0x1.edec501a36b24p-724
+0x1.97315ecb8425cp-123, 0x1.612592215f3fdp-132
+0x1.8d5b1b3846284p-425, -0x1.3ce5fa09132cbp+436
+0x1.d1d47524c44a4p-812, -0x1.bf891b93dde8ap+744
+0x1.92a7bf9242684p-73, -0x1.aa82bb891be0cp+89
+-0x1.e6810b9a1bf0ap-168, 0x1.c5398195ccdc3p+956
+0x1.7e96a89da165fp-109, 0x1.f329f2304d644p-49
+0x1.34bd8b31ce5c4p-282, 0x1.abae1a040636p+948
+0x1.996f4e63d4f6cp+525, -0x1.cc3c2ee836653p+88
+-0x1.02c3adb3be10fp+415, 0x1.9b4364f0bdae8p+443
+0x1.b9b92f18fd558p+252, 0x1.016c8f344aa47p+650
+0x1.c4c4bb137d3b3p-872, 0x1.f8f7156fde005p+743
+0x1.a8de0feae63afp+656, -0x1.be0f16040e274p+567
+0x1.dbfd2ff985308p-669, -0x1.44af235aa6586p+1020
+-0x1.a0078fbaaab42p-479, 0x1.9dd2d4b16edecp-982
+-0x1.e5ecc39229163p-774, 0x1.76f56f40cf5fep-657
+-0x1.50b0162168c61p+75, -0x1.57cd096ae8ceep+687
+-0x1.a462268708eaep-588, -0x1.0d36bcb0b2543p-466
+-0x1.9d5d462d78a6bp-722, 0x1.991f65583703p-302
+0x1.0bc631281acb7p+773, -0x1.94de5221c9b09p+933
+-0x1.883db5e32c18ep-926, 0x1.e909063938ef8p-786
+-0x1.c19dc126e2edp-216, 0x1.b69af7ca5d054p-418
+-0x1.71c3328325a06p-201, 0x1.47b59a7ef826p-85
+0x1.a4c106321fba5p-905, 0x1.d662dbd1e9c91p+254
+0x1.c5b5de0aca697p-258, -0x1.f7d22c841742dp-581
+-0x1.023ca584137cbp-748, 0x1.ca5f548413f7dp-208
+0x1.22e3284776858p+995, -0x1.17ae2e18def95p-26
+0x1.ea4795d44137dp+675, 0x1.46f251013b56ap-288
+0x1.1884e3956d27fp-761, -0x1.e674a4e761f5fp-739
+0x1.6204d355c8abfp+1015, -0x1.21daf1f59bedap-270
+0x1.1fc66d71e1062p-964, -0x1.ab81995abffc2p-254
+-0x1.ac284515546c2p-721, 0x1.1dd5d567a1a71p-396
+0x1.241d5888f647ep-200, 0x1.73d9a9c9d9b67p-251
+0x1.cb9669c0b22a4p+218, 0x1.7e5907e439ba7p-72
+0x1.3ac7220650da3p-269, 0x1.63d95519da5d1p+241
+0x1.8eb6d46d9a348p+330, 0x1.5ab0857c44654p-861
+0x1.fe103724110ap+293, -0x1.6f2313c4854bep+856
+-0x1.c876b78ed48ep+47, 0x1.c364b45c86731p+410
+0x1.20bc075971705p-179, -0x1.4623e2dba0225p-950
+-0x1.bab2368e68d6fp-806, -0x1.1bf2a7f5955p+283
+-0x1.e2a7f07af1ba8p+225, -0x1.2d8a8fa4019fep-360
+-0x1.7c24cad3c9107p-793, -0x1.7c8df00527f77p+374
+0x1.4c4257d85d97cp+868, 0x1.d95fb6727b064p+495
+0x1.883a5e7f0489bp-256, -0x1.c435375952c0fp+27
+0x1.fc5a906c4aea2p-390, -0x1.057b91c5f31ccp+351
+0x1.86b1e5feb630ap-212, 0x1.c9317e723e87p-782
+0x1.fd784a7a3492p-310, 0x1.13394a2dbec98p-79
+0x1.7fe2769664081p+435, 0x1.10e2b5c4b6481p+145
+0x1.e03f7bf6e87c2p-470, -0x1.ee5649f4bf6fp+276
+0x1.4ab32bae3801dp-330, -0x1.cc6cfb5febdfcp-170
+0x1.d06c7fe7c6b0dp-376, 0x1.cbde7bcaca351p+735
+0x1.008c2aab04dabp+859, -0x1.285fe5dd7d39ep-855
+-0x1.8695662e78418p-630, -0x1.4ebb1cd711234p+272
+0x1.1c7560a0d2df2p+702, 0x1.10fd7629c58a7p+236
+0x1.e92cd9e803aecp-636, 0x1.2a0d010fccd2cp-157
+0x1.08913e8bcd565p-224, 0x1.84d49084f3544p-991
+-0x1.807cc09113d47p+358, -0x1.e984309dbe045p+169
+-0x1.f83619b15175ap-889, -0x1.9a2cf661dbcbp-663
+0x1.5fd0dddd8c329p+331, -0x1.f5cad18245203p-325
+-0x1.af7f725a79dbp+979, 0x1.0569c82eaba96p-1010
+0x1.cad6d7736af6ap+804, 0x1.68a9d7048d8dfp+16
+0x1.b06e4f6e05c74p+675, -0x1.82e414b8b1f3cp-981
+-0x1.0c17284003246p+437, 0x1.a98a01fd5ea0dp+593
+0x1.0a9276374f493p-364, 0x1.9abc279b0f173p-753
+0x1.e67c66ea3297cp+799, 0x1.7862e7b7e2378p-324
+0x1.99f36820e47adp-891, -0x1.74fae8b0b3fa1p-548
+0x1.5727b90bacc54p+42, 0x1.f8a955c63b79p+439
+0x1.bc630f9589dep+939, 0x1.00a0432666a59p+370
+-0x1.a0a05f9ad91dfp+852, 0x1.0400649151163p+262
+0x1.916ce547832f6p+702, 0x1.1cdde7fed53p+885
+-0x1.4a809e3e8738ap-1003, -0x1.6e1ebe4d7d35dp-508
+0x1.d4ede50b0f8fcp+959, 0x1.d723c8d23e883p+736
+0x1.c2acda5cceb57p+381, 0x1.ccf15447659bfp-45
+-0x1.a030113512cb1p+746, 0x1.c0f08c56a8681p+756
+-0x1.87cbeda5c080bp-968, 0x1.37316dba763f4p+1023
+0x1.2141e5f6943ccp-981, 0x1.894b6684f4d0ep+768
+-0x1.ee4b5798a9cffp-516, -0x1.a3c3ef4d63759p-176
+-0x1.28fa20f216b59p+898, 0x1.e0c9b5cabe6ep-154
+-0x1.045cc99bc9b41p-547, 0x1.ea693bae2df0fp-1018
+0x1.603305c877b17p+509, -0x1.ae79d5792d458p-499
+0x1.bd2500f96ac17p+1023, 0x1.1756ccd297817p-134
+-0x1.2a8372b2c5fa8p-815, 0x1.5acea1671ec1ap+916
+0x1.a1b0e306ac99p-292, 0x1.8a62c83277e19p+299
+-0x1.936570229e706p-836, -0x1.32f83f64d9642p+995
+0x1.57a4e8244e595p-939, -0x1.80e476dda7192p-806
+0x1.484d7640f541fp+983, -0x1.07a37b1528d44p-182
+0x1.1254176e87c6ap+392, -0x1.b0001af186addp-981
+0x1.ede3fc3a5ca1bp+578, 0x1.95031dd4bdd3ep-959
+0x1.a2eb5cbb6ba73p+1010, 0x1.efcb4205e5ec7p+854
+0x1.b2c24a0226e26p+526, -0x1.45198a7a92467p-113
+0x1.3050e85788d06p-665, 0x1.a04395bb35bbfp-990
+0x1.a4419ac76552dp+299, -0x1.ac156732cef0ap+442
+-0x0.c9c2ac71cf416p-1022, -0x1.43c79d7592e3bp+662
+-0x1.61be60c492702p+53, -0x1.04995d2d2f4afp+833
+-0x1.ec6a831ec4f3ep+814, -0x1.c085bfb8b0802p-312
+-0x1.459bb6e803835p-368, 0x1.3dc58d44ec162p-469
+0x1.1d79a7c416909p+813, -0x1.46b62b0a3ac1bp+613
+0x1.9d1387fc05612p+868, 0x1.adacb571845afp-638
+0x1.e55125c4369a4p+268, 0x1.8c6b089764121p+17
+0x1.db29703a69ed2p-72, -0x1.b6011d91ad9e9p+907
+0x1.9ebd63b002a6p-697, -0x1.cc3c55854c2ecp+239
+0x1.b45f659d66846p-656, -0x1.ba09fb67b05d2p+186
+-0x1.c65ba7ae75451p+853, 0x1.844fe2c65f941p-630
+0x1.738a17a1a0746p+938, 0x1.6bda1a8a04583p-226
+-0x1.d74d85d4d1f4fp-638, -0x1.8dd6a9ce6cdc3p+876
+-0x1.ac1dbf8e05e35p+779, 0x1.a6418bed4b62bp+262
+-0x1.6ea1fa5253bedp+26, -0x1.601895f61ee3cp+697
+-0x1.a95b0ff128d5ap+633, -0x1.ed2d83198618p+666
+0x1.8bff8243f7b3dp+278, 0x1.c2a77096bbdb2p+85
+0x1.eec96511d93b4p-140, 0x1.623a468ac3d94p+183
+0x1.c4eabfa35fddfp+889, -0x1.33f439b51bc35p-222
+0x1.949f1b5ce5dbp+302, 0x1.f8f0932a9d195p+710
+0x1.0aa20a24bcef5p-183, 0x1.5c0292e4e2975p-513
+0x1.9ef93307c3522p-831, -0x1.4250a65b9d124p+950
+0x1.d6262800d007cp-587, -0x1.289e6162488a5p-395
+0x1.9b9c2759b9d6cp+348, -0x1.70f9a73f8de5p+72
+-0x1.fdb00afbe1e01p-383, -0x1.2a155917930f9p-583
+0x1.061bdc95f343cp+443, -0x1.fcc2fa73ffe7fp-389
+0x1.0ecd81dee3403p+1020, -0x1.2b8cab98346e3p+217
+-0x1.a7d9c01150eeep+145, 0x1.c99503b3fab8ep+79
+0x1.115849bd4355fp-889, -0x1.584be874ef866p+895
+0x1.79bdc0480d5f6p+835, -0x1.5137a69c83238p-537
+0x1.34fcbb895c593p+202, 0x1.3b95fbd9eae2fp-367
+-0x1.dcc539c5674e9p-497, -0x1.65e85d7fddd54p+973
+0x1.04c41aef220abp+354, 0x1.f25bfa410cd1ap-637
+-0x1.21a2f3fa109b3p-176, 0x1.464134cab10a4p+649
+-0x1.aa97f9df3d02ap+320, 0x1.270a06e1ed625p+393
+0x1.0757de7784636p-803, -0x1.1078a50df2d9bp+926
+-0x1.db116067d1e52p+508, -0x1.2094021453f7ap+881
+-0x1.3e5acfc0a9699p+299, -0x1.a1ac083116c75p+756
+-0x1.1762f192cc412p+98, 0x1.b34a206142782p+618
+0x1.380460b387bf9p+261, 0x1.27a285767a5b9p+365
+0x1.63b3b9db0d83bp+236, -0x1.54964f2e283d3p-291
+0x1.f9a6d9e3eeffap-811, -0x1.03b06a9b79d63p+832
+0x1.a25365aaf555bp-114, 0x1.49f4416582a9ap-117
+0x1.b5d022e408eacp+118, 0x1.6f736ab12a72ep+815
+0x1.3e8d033a37c35p+669, 0x1.d0b510d024ed8p+163
+-0x1.753ffb7cf35b6p-308, -0x1.14995499cb3f7p-972
+-0x1.dc454c6dc2fe4p+93, 0x1.4b543400eae43p+825
+0x1.ac1f6e3d41783p-173, 0x1.a65dc47c15194p+723
+-0x1.6c820c125474ap+607, 0x1.5c3f5183eddc3p+920
+-0x1.78f8b437b9422p-106, 0x1.9b7b5b05b74e6p-982
+0x1.259163f137d33p+776, 0x1.dc9c19787d832p+960
+0x1.a21d9506336d1p-607, 0x1.89f563dcefe07p+438
+0x1.89c77505177efp-232, 0x1.efb52e5b60e65p+459
+0x1.7aa6fd4ab981bp+488, 0x1.105128296785dp+420
+-0x1.d90e261c068cp+852, -0x1.2703ac5312c28p+243
+-0x1.cf492b17bb3f6p+948, 0x1.8c5d493a58a31p+847
+-0x1.18c29aa390d1cp-212, 0x1.cf0383e46dcc6p+376
+-0x1.8b85915e13a71p-64, 0x1.d817b0af92102p-944
+0x1.0ee2196ee8a76p-429, -0x1.739d2fff9fe55p+947
+-0x1.f367f086e9beep+387, 0x1.7132680938113p+908
+-0x1.095390367d552p-999, -0x1.09ee53b68a11p-674
+-0x1.c2bfbd47f1fcp-381, -0x1.90bd759d89c95p-682
+-0x1.5070732f1b6f6p-574, 0x1.5e1e18a89d10ep+910
+0x1.b08151a83f7acp+1018, -0x1.b7449856e98b6p+518
+0x1.9aaeaef8da936p+905, -0x1.f028be9fccdaap+819
+0x1.e80b1f70df1e6p-274, -0x1.31af0033ae172p+471
+-0x1.974eb9ea4776fp+769, 0x1.7bc9fb64cf9b6p+671
+-0x1.42d902d4ac967p+39, 0x1.59fbc371e060ep+915
+0x1.da244995ea5d9p+923, -0x1.d1f898dea5887p-140
+0x1.228096ac90886p-475, 0x1.e89d6a356788cp+490
+0x1.754733aabb8fp+615, -0x1.5ec7f36ef0645p+237
+-0x1.c28a759014522p-368, 0x1.e06c3c72f1147p+674
+-0x1.9359e4e2ab8dcp+39, -0x1.49e7e7eb7286p-432
+-0x1.4205f02739704p-416, 0x1.8590b07658eefp+292
+0x1.50dc9c70c62d2p+756, -0x1.7e05375a7ab59p-936
+0x1.692682fbda19dp+135, -0x1.2c1424531f5e8p-57
+-0x1.533e6e861a0dbp+776, 0x1.30569319da867p-1018
+-0x1.230a5fd77b2b9p+595, -0x1.aed54652fdfa7p-29
+0x1.ffb43cc18a59ap-332, 0x1.6541e1db4f3dfp+379
+0x1.741695d36e2dp-235, 0x1.b2481aa788cc8p+234
+-0x1.adae686004adcp-287, 0x1.33b21ad23690cp+419
+0x1.bb009ab42f26fp-247, -0x1.42324ad2b8a68p-43
+0x1.48d0967c5f305p-409, 0x1.a4e19caa8c9c3p+470
+-0x1.9ca27f566a9a4p-944, 0x1.cabd95ac29be5p-809
+0x1.ed59dd38faf7p+525, -0x1.ebc3480df97e3p-355
+0x1.daf52cf4b4cf9p+37, 0x1.90a3a6c0923b6p-572
+0x1.17d9f720c2817p-988, 0x1.fcc786fc17e44p-35
+-0x1.922db9d580176p+647, 0x1.a49c619f10944p-180
+-0x1.88d69d63ca7b9p+1001, 0x1.aaa0924175993p+233
+0x1.9fd1c3e8a149p+17, -0x1.0e5dabd650042p+490
+-0x1.7ee7727afa707p+117, -0x1.f28ff43a60bfbp+41
+-0x1.c654c5b561eb4p+799, -0x1.d83d996dafdf6p+792
+0x1.cfce439e8f42bp-782, 0x1.c58c8a15f8b97p+593
+0x1.6681925e58ac9p-861, 0x1.2768402ced7efp-987
+-0x1.fcc75df07481ap+978, -0x1.912cd806dd07fp-487
+-0x1.d71f87c76b1d8p+873, -0x1.f5c64d1a7da78p-20
+0x1.4cce0cf3c3185p+829, -0x1.cb56ef1a03f52p+87
+-0x1.bda1a9c5ff5dp+169, 0x1.c66b9959e7f95p+137
+-0x1.b82e694e7764dp+743, -0x1.c6bd0bdc6648ap+970
+0x1.18361594258a5p-639, 0x1.2171c4a28c0eep-509
+0x1.89b8d64277c87p-575, 0x1.b5f836264ff06p+439
+-0x1.0d83cd1af1e99p+45, -0x1.47be13c8b3911p+751
+0x1.0c3780fcb3604p+643, -0x1.57a797edd61b1p+754
+-0x1.7745a041426aap-969, 0x1.4db400b96d65ap+421
+-0x1.16810be69914dp-120, 0x1.359633ae39259p-436
+0x1.194c052752cb8p-954, 0x1.01815af1c2c2cp-55
+0x1.22d8cab5f845bp+652, -0x1.fbb57fa2642cep-510
+0x1.1857f3606057ep-96, -0x1.6958bf8167258p+926
+-0x1.275cced907a1fp+691, -0x1.daa610958c4b9p-589
+-0x1.50962537ad40ap-613, 0x1.9484de2fb6c05p-789
+0x1.72ec630989c6dp+590, 0x1.fc2ec584faadap+771
+0x1.ff67d9efd9a7bp-437, 0x1.a342fe8ac841ap+36
+-0x1.fa6a77ba49436p+594, -0x1.f40dab00e930bp-590
+-0x1.459843f7583aep+540, 0x1.bb7bc32501f52p+464
+0x1.3093dbe01bff4p+570, -0x1.38b026fd38248p+295
+0x1.3f351b55e473ap+695, -0x1.2e9e6547857ccp+697
+0x1.0ef002c6e5163p-299, 0x1.d467c08cf75a3p-343
+-0x1.cfff22b862868p-150, -0x1.dd99a1e648e7ap-9
+-0x1.a6f1972aff101p+317, 0x1.69e2d38ca4cfp-319
+-0x1.7baeedc009edcp+858, -0x1.3ea62df373ca1p-241
+-0x1.a91ffa89c5633p-734, 0x1.938cb7ffdb644p-239
+0x1.2c288ad276a45p-665, 0x1.269c7f16bb183p-181
+-0x1.76ab172388c82p-615, 0x1.1972be7709aecp+615
+-0x1.7db418283e85ep-421, -0x1.fae14268866a3p+59
+-0x1.cb48b2f68de38p-257, 0x1.4c3239a1ab421p+808
+-0x1.6d20620b488fdp-909, 0x1.58b35285c1115p+501
+-0x1.9bee720266f0ep-704, 0x1.7e32ae5746303p+863
+-0x1.1a201780dd7aep-949, -0x0.c1957598624f4p-1022
+-0x1.f0cf664d8d70ap-826, -0x1.89d0cc2a06bp+136
+0x1.67059fe254eb2p-9, 0x1.984f78a7fa679p-576
+-0x1.ea8a9cd8cb5a7p-577, 0x1.83eac1df0b8d1p+728
+0x1.98ee1b3b19987p+193, -0x1.6cd21f3ec717cp-137
+-0x1.fefcf1bb6a922p-18, 0x1.9ed2427a5900ap+858
+0x1.e6ae7e7578defp-633, 0x1.ba06af17eae86p+476
+0x1.71e69842d986fp-965, 0x1.2c3fdc4684bdp+422
+0x1.b038cd5ae9e4fp+841, -0x1.95b00ece687efp+21
+0x1.55a312d2bf3c2p-605, 0x1.f3d2c56e0dca7p-963
+-0x1.13fce5f27a7a7p-458, -0x1.98c23d246fa2fp-572
+-0x1.36fb53aa8e38cp-127, -0x1.154bab93c8eb8p-590
+-0x1.f73f174bb837dp-77, -0x1.67054ecc9f64ep-762
+0x1.e8df068ba3d27p+550, -0x1.903f587384614p+334
+-0x1.208e3a22be12bp-545, -0x1.7c50e9315c046p-224
+-0x1.733bbf66e524bp-167, 0x1.3292c65fc09dfp-602
+0x1.4461130c1f39ep+95, -0x1.a2de85d48cfecp-345
+0x1.5bbf44944b906p-224, 0x1.17b902b02851p+22
+0x1.b55c7423964bcp+84, -0x1.6f05ad0402f98p-402
+-0x1.3b7550ac640cbp-376, 0x1.b6843aa267502p-861
+-0x1.bd4d0ffa60298p+962, 0x1.d39028ecd025ap-537
+-0x1.d539bfb12f853p+533, 0x1.6fd6dcc76b594p-818
+-0x1.7545b6cc7dab5p-989, 0x1.bfe53e64af279p+595
+0x1.55d86841fd23p-1004, 0x1.d9c209c1b0068p-514
+0x1.71d66d7b86f5bp+826, 0x1.80c9e49887e21p-832
+0x1.a4ba3a825eaf4p-172, -0x1.7dcb9539bc991p-886
+0x1.90bc135879ee1p+498, -0x1.d6593af2b9d7bp+493
+-0x1.e3ca7439f0777p-52, 0x1.75cbcb66dc7efp+241
+0x1.07f6872a92fe5p-607, -0x1.881e8574eaedcp-600
+-0x1.78ad66194bdap+976, -0x1.763bf4157053fp+882
+-0x1.ede5ec3f2f167p-439, -0x1.0beb082f89a82p-463
+-0x1.72acd7228f9ffp-916, -0x1.ce0930cb50203p-755
+-0x1.42e0f9c1c4b0dp-779, 0x1.08a5ee82c2212p+859
+0x1.5eba5f7fe5f69p+980, -0x1.3d553ed90e14p-518
+-0x1.a3a8484f043d4p-207, -0x1.2c3d8c0a90616p-419
+-0x1.bdbfb2ad17291p-293, 0x1.ada0e6c75e1b8p-1005
+0x1.dbd467dab06bcp+791, 0x1.344edbf4006aap-638
+-0x1.8d948c07d8843p-948, -0x1.0f19d92ad5f81p+198
+0x1.4fd4d0019912fp-940, 0x1.a06753a54d04p+931
+0x1.1a58041a552efp+775, 0x1.8e950df4ff8aap+428
+0x1.086dabe1d9b6bp-488, -0x1.f8e2cb6387fe2p+62
+-0x1.8bbc34c5c76a5p-945, -0x1.27441a8578b44p+860
+0x1.478d786c0b936p+153, -0x1.29257807aa044p-729
+-0x1.7c39fb95aaf5cp+150, 0x1.aedeb637a197fp-963
-- 
2.30.2


^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH 2/9] benchtests: Add hypotf
  2021-10-06 18:05 [PATCH 0/9] Improve hypot() Adhemerval Zanella
  2021-10-06 18:05 ` [PATCH 1/9] benchtests: Make hypot input random Adhemerval Zanella
@ 2021-10-06 18:05 ` Adhemerval Zanella
  2021-10-07 10:40   ` Paul Zimmermann
  2021-10-06 18:05 ` [PATCH 3/9] math: Simplify hypotf implementation Adhemerval Zanella
                   ` (7 subsequent siblings)
  9 siblings, 1 reply; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 18:05 UTC (permalink / raw)
  To: libc-alpha

Based on random input arguments.
---
 benchtests/Makefile      |    2 +-
 benchtests/hypotf-inputs | 1006 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 1007 insertions(+), 1 deletion(-)
 create mode 100644 benchtests/hypotf-inputs

diff --git a/benchtests/Makefile b/benchtests/Makefile
index 4fcd73131a..ad4bbf2912 100644
--- a/benchtests/Makefile
+++ b/benchtests/Makefile
@@ -26,7 +26,7 @@ bench-math := acos acosh asin asinh atan atanh cos cosh exp exp2 log log2   \
 	      fmaxf powf trunc truncf roundeven roundevenf expf exp2f logf  \
 	      log2f sincosf sinf cosf isnan isinf isfinite hypot logb logbf \
 	      exp10f ilogb ilogbf cbrt erf erfc exp10 expm1 j0 j1 lgamma    \
-	      log10 log1p tgamma y0 y1 atan2
+	      log10 log1p tgamma y0 y1 atan2 hypotf
 
 ifneq (,$(filter yes,$(float96-fcts)))
 bench-math += cbrtl
diff --git a/benchtests/hypotf-inputs b/benchtests/hypotf-inputs
new file mode 100644
index 0000000000..25b28c71b0
--- /dev/null
+++ b/benchtests/hypotf-inputs
@@ -0,0 +1,1006 @@
+## includes: math.h
+## args: float:float
+## ret: float
+
+# Random inputs in [FLT_MIN, FTL_MAX]
+## name: workload-random
+-0x1.edae52p-59, 0x1.504a8p+125
+0x1.250844p-37, 0x1.e1122ap+3
+-0x1.5b7a7ep-93, -0x1.21477ap-39
+-0x1.e5af9ep-81, -0x1.7ed6eap+105
+0x1.7ef9b6p-75, -0x1.b25f9ap+41
+-0x1.feef0ep+11, -0x1.d68b4ap+73
+-0x1.c0907p-53, -0x1.e80e5cp-37
+-0x1.d7d9ecp+91, -0x1.0768d8p+113
+0x1.cd0fap-47, 0x1.3e3328p+111
+0x1.3fcb82p-83, -0x1.b2d3a8p-107
+0x1.d3df2ep-33, -0x1.3c0398p-89
+-0x1.a9bc14p+33, -0x1.7f96ecp+5
+0x1.746f48p-21, -0x1.275848p+33
+-0x1.3eb37cp-39, 0x1.87d12cp+121
+0x1.8c853ap-27, 0x1.d92daep-7
+0x1.45f826p-35, 0x1.7d8a04p+73
+0x1.682b8ap-29, -0x1.9d9982p-95
+-0x1.f0c9c2p-23, 0x1.e20deap-49
+-0x1.4f58ccp-1, 0x1.3a8bb4p+111
+0x1.9aab7cp-81, -0x1.cadf0ep-123
+-0x1.59ef08p-113, 0x1.5ba2dp-31
+0x1.37ff4cp+75, 0x1.d601d2p+85
+0x1.beb4a4p-119, 0x1.b26a4p+59
+-0x1.e7bb62p-9, -0x1.17ed62p-69
+0x1.850c9ap-77, -0x1.db0ad6p-15
+0x1.3b09e6p-117, 0x1.8d1394p-47
+-0x1.b6057p+85, 0x1.6db2a6p+41
+0x1.9b441ep+117, 0x1.1b9d3ap+27
+0x1.4fb1e4p+79, -0x1.15174ap+3
+0x1.fa279p+45, -0x1.3164c6p+43
+-0x1.a0dc4ep-41, 0x1.af8a1ep-123
+0x1.a87ceap+3, -0x1.3b1402p+1
+-0x1.2bfa7ep+125, -0x1.d42942p+9
+0x1.c20decp+45, 0x1.1ac07p-87
+0x1.320192p+111, 0x1.88bdcp-111
+0x1.c6ac0ap-13, 0x1.78289ap-125
+0x1.c04d3ep-97, -0x1.cd2b0ep+119
+-0x1.f321dap-43, -0x1.f3a8a2p+75
+-0x1.38618ep+55, 0x1.af4a5cp+95
+-0x1.262efep-3, -0x1.d641cp-49
+-0x1.e4a1bep+123, 0x1.fdeefep+109
+-0x1.b1b03cp-51, 0x1.c89384p+71
+-0x1.c8bdb6p-29, -0x1.34ee3p+47
+0x1.d19c0ep-101, -0x1.a3a902p-49
+0x1.c0e9fcp-113, -0x1.81bc52p-1
+-0x1.00eaeep-71, -0x1.10cfc4p+91
+0x1.b0867p+47, 0x1.838426p+65
+0x1.fa2bb2p+111, 0x1.98b2e2p-35
+0x1.63215ap+57, -0x1.665636p-71
+-0x1.f4be8cp+5, -0x1.3308a2p+19
+0x1.0cea5cp-41, 0x1.c67682p+19
+0x1.24ff42p-71, 0x1.aadf16p-45
+-0x1.83714ep+35, -0x1.2144c2p-43
+0x1.94339ap+9, 0x1.95bf3p+11
+0x1.cc573cp-7, -0x1.aec4cap-91
+0x1.679136p-99, -0x1.17589p-19
+-0x1.369edp-97, 0x1.211da2p-5
+0x1.1483bep-47, 0x1.cee72ap-15
+0x1.74c8f4p+57, 0x1.d5bc5cp-49
+-0x1.a5cc94p-95, -0x1.180822p-37
+-0x1.6ff11ep+33, 0x1.76a6c2p-35
+0x1.057fep+29, -0x1.894db4p+13
+-0x1.1ffe8p-97, -0x1.ea0204p-127
+0x1.c37c2cp+93, 0x1.d4d0f4p-107
+-0x1.34dae2p+103, 0x1.944a9ep+5
+0x1.03da1ep+21, -0x1.85d212p-121
+0x1.810f02p-91, -0x1.f8fb2cp-111
+0x1.5c3638p+91, 0x1.2289c8p-77
+0x1.17a252p+73, -0x1.56add2p-7
+0x1.c6ff9ap-125, 0x1.7fbcc6p+9
+0x1.13bdbcp+95, -0x1.e8141p+85
+0x1.7b0118p+43, -0x1.6353c2p-19
+0x1.5f8cf6p-79, -0x1.ca90a2p-57
+0x1.9d465ep-55, 0x1.0487bp-99
+-0x1.246f1ap+107, 0x1.e1044p-75
+0x1.b28f2cp+89, 0x1.e33354p+95
+0x1.bbacecp-35, -0x1.c17d98p-75
+0x1.2d5ddcp+47, -0x1.aa7e06p+101
+0x1.a419cap-97, -0x1.e49d0cp+93
+-0x1.0af2fap+47, -0x1.f8811ap+77
+0x1.7ecae4p-37, 0x1.f206c6p-57
+0x1.f52c94p+105, 0x1.3ce9a4p+103
+-0x1.b51c58p-41, -0x1.e3fcf8p-59
+0x1.345e16p-55, 0x1.4799e4p-71
+-0x1.3b3a64p-43, 0x1.19f382p-21
+-0x1.a8212ap+123, 0x1.7bae1cp+87
+0x1.c750f8p-91, 0x1.30ef74p+81
+0x1.f6c2c2p-91, 0x1.2201f2p-109
+0x1.ca33cep-125, -0x1.97bb84p-27
+-0x1.d32aaap-21, 0x1.cadeecp+95
+0x1.93ce2cp+71, -0x1.83f13p+63
+0x1.481adep-117, -0x1.db71e4p-41
+0x1.33e14ep-85, -0x1.c81b7ap+29
+-0x1.ec18e2p+45, -0x1.7e5466p-115
+0x1.cdb63ep+31, 0x1.fd7ca6p-73
+-0x1.42db3ep+75, 0x1.a4dff4p-115
+0x1.a2717cp-99, 0x1.1c7738p-5
+0x1.d2d31ap-71, -0x1.c1e7a4p-45
+-0x1.e5567ap+75, 0x1.f4491p+47
+0x1.67797cp+77, -0x1.1765c8p+107
+-0x1.b56f7p-77, 0x1.0a4f1cp+15
+-0x1.ddd08p-93, 0x1.fa8c64p-115
+0x1.17233ep-3, 0x1.1e184p-31
+0x1.ed1e3ep+69, 0x1.d4537cp-127
+-0x1.74d8ep+115, -0x1.ea76c2p+77
+0x1.c01b0ap+69, -0x1.f0357cp-85
+-0x1.c93fa6p+91, -0x1.3b143cp+67
+-0x1.207008p+67, -0x1.940b52p-101
+0x1.3cab04p-85, 0x1.8d92f2p+15
+-0x1.bf92e6p+7, -0x1.088e98p-61
+-0x1.ffd83cp+37, -0x1.66afa8p+61
+-0x1.193c1p-105, -0x1.d68ef6p+13
+0x1.2190dp+59, -0x1.739642p-123
+-0x1.ccd4d4p-65, 0x1.cde8fcp-39
+0x1.4dc6b8p-111, 0x1.5fd7aep-59
+-0x1.178cf8p-51, -0x1.2ea798p+25
+-0x1.8a425p-129, -0x1.fe5ff2p+7
+0x1.5f9fdp+23, -0x1.692006p+117
+-0x1.18c246p-101, 0x1.c1df02p-125
+0x1.13aadcp+59, -0x1.bf3adp+117
+0x1.bd550ep+63, 0x1.85e3aep-59
+0x1.173c22p+87, 0x1.c85bcap+53
+0x1.0f97bcp-69, -0x1.bfc67p-121
+0x1.8083bep-31, -0x1.952954p-105
+-0x1.64211p-101, 0x1.b6d996p-77
+-0x1.b36608p+25, -0x1.1724c2p+57
+-0x1.66a052p-69, 0x1.bbe4c8p-121
+-0x1.533d1ap-67, 0x1.cebbaap+61
+-0x1.aec6a2p+3, -0x1.cdac1ap+119
+0x1.02a65p+1, 0x1.f033dp-93
+-0x1.35c59p-15, -0x1.d28adcp-115
+-0x1.dc584p+119, -0x1.04d12p+97
+0x1.d1af1p+33, 0x1.9797ap-47
+0x1.39bcf4p-43, 0x1.20fbp+63
+-0x1.1e097ap-103, 0x1.48cca4p-35
+0x1.04990cp-69, 0x1.95c012p-101
+0x1.321a94p-69, -0x1.7aebe8p-103
+0x1.f9b85ep+13, 0x1.3ed8a2p-21
+-0x1.4779c8p-97, -0x1.21c1ap-93
+0x1.dd15p-89, -0x1.12d19p+35
+0x1.fbc36p-57, 0x1.bcb044p-91
+-0x1.9c54f2p+61, 0x1.9b327ep-69
+0x1.589dbep-47, 0x1.653cc4p-35
+-0x1.66181p-109, 0x1.c2dc02p-125
+0x1.3969fp+105, -0x1.997302p+51
+-0x1.a635dep-7, -0x1.97a04ap-109
+0x1.15bf3cp+95, 0x1.b0aabcp-77
+0x1.e04466p-33, -0x1.f19c08p+119
+-0x1.c1d9d6p-21, -0x1.97d458p-73
+-0x1.755cfep+57, -0x1.aa0bd6p-105
+0x1.152f58p-128, 0x1.bf3f96p-25
+0x1.f777a4p-41, -0x1.d036ap-81
+-0x1.8c8454p+5, 0x1.96d57p-25
+0x1.0984c4p+109, 0x1.1667e4p-79
+-0x1.5a00b4p+57, 0x1.e1c622p+9
+-0x1.556f9ep-87, -0x1.982f9cp+87
+-0x1.681d8ep+117, -0x1.050dfep+49
+-0x1.f78944p-19, -0x1.117ff8p+35
+-0x1.81c334p+49, 0x1.28c88ep+19
+0x1.71ddf2p+55, 0x1.fc46ap+37
+-0x1.8b7bbp-57, -0x1.b14a0ap+47
+-0x1.4ed274p+21, -0x1.21e6eap+51
+-0x1.e296cep+101, 0x1.3c1252p+109
+0x1.0579b8p-71, -0x1.7acbfcp-121
+-0x1.74b06ep-85, -0x1.786962p-47
+-0x1.d0be4cp+21, -0x1.07058p+91
+0x1.f93136p-87, -0x1.a668e6p-63
+0x1.601a22p+41, 0x1.5e494p-111
+0x1.ce991p-81, 0x1.175b82p-39
+0x1.d5a112p-101, -0x1.1d4994p+113
+0x1.75ba68p+103, -0x1.cc2da4p-31
+0x1.08016p+3, -0x1.7bdd5p+105
+0x1.aaf7cep-45, 0x1.d52d2cp+55
+0x1.ab182ap-71, -0x1.0d7b0ap-23
+-0x1.a8259ep-41, 0x1.17cdaep-33
+0x1.2cd59cp+37, -0x1.86326ep+19
+-0x1.3284e8p+79, 0x1.7841f4p-65
+-0x1.056f38p-9, 0x1.cf50ccp+101
+0x1.4e0b02p+109, 0x1.73f5acp+63
+0x1.ed794p-51, 0x1.3ccc28p+115
+0x1.bb305ap+11, 0x1.8a2accp+61
+-0x1.c76cf2p+55, -0x1.24185cp+105
+-0x1.5825e2p-95, -0x1.7b334ep-59
+-0x1.0870c2p+65, 0x1.119b16p+115
+0x1.7bd208p-93, -0x1.1ee962p-25
+0x1.36cc8ep-57, 0x1.b3b4bcp-1
+0x1.54bc5ep-95, -0x1.ca7408p-49
+-0x1.c785b4p+33, 0x1.3ee46ap-85
+0x1.9a093ep+97, 0x1.b313f4p-17
+0x1.e2490ep-45, -0x1.d3b4f4p-3
+-0x1.117022p-125, -0x1.09b56p+19
+-0x1.2646f2p+77, 0x1.03daf6p-93
+-0x1.4e15a8p+55, -0x1.19cd9ep+63
+0x1.87d54ep+55, 0x1.1707dp-81
+-0x1.530f68p+45, -0x1.f65a18p-61
+0x1.d976a8p-101, -0x1.75fe4cp+85
+0x1.2da742p+123, 0x1.2cf722p+33
+-0x1.20ed2ap+43, 0x1.e2b14p+39
+0x1.d7c882p-119, 0x1.099654p+51
+0x1.45529cp-47, -0x1.41eb1ep+17
+0x1.e7ea3ap-27, 0x1.0c46fep-47
+0x1.b17efap+1, -0x1.a9e0d4p+125
+-0x1.4eb16cp-97, -0x1.d6c682p-75
+-0x1.d7d9cp-87, 0x1.1d453cp-103
+-0x1.cd905p+43, 0x1.0baa3ep+127
+-0x1.1f7dd2p-101, 0x1.522d96p+29
+0x1.0786fap-119, -0x1.013546p+17
+0x1.67f4dcp+49, 0x1.a49d4p+107
+-0x1.9e6568p+3, -0x1.e112ccp-115
+0x1.c5e73ep+113, -0x1.8ed2b2p+121
+-0x1.14dd8ap+53, 0x1.fc8136p+51
+0x1.4a05cp-61, -0x1.dc4874p-75
+0x1.f7356ep+111, 0x1.60014ap+13
+0x1.71bdf6p+41, 0x1.544ddap+33
+-0x1.032c3ap-53, 0x1.b72432p-61
+0x1.e25b44p-19, 0x1.0ea43cp+29
+0x1.418c5ap-121, -0x1.034ffcp-27
+-0x1.87294cp+15, 0x1.2a9fc2p+103
+0x1.7b0666p+69, -0x1.41570ep-47
+-0x1.4f89e6p+53, 0x1.d6cd3ap+107
+0x1.584532p-97, -0x1.2c93ecp-29
+-0x1.53fd5ep-41, 0x1.0b5788p+45
+0x1.fac676p-17, 0x1.0cac18p-13
+-0x1.f0eb58p-43, -0x1.07029p-49
+-0x1.a7c832p+109, 0x1.84987ap+83
+-0x1.8647dp-117, -0x1.52ef5cp-105
+0x1.ce399ap+55, -0x1.fd4e0ep-111
+0x1.55d266p-75, -0x1.bc1d7cp+61
+-0x1.a28654p-31, 0x1.a9c51p+99
+0x1.4a1ab8p+5, 0x1.0efa68p-23
+-0x1.3b4638p+19, 0x1.5dbb58p+57
+0x1.33fae6p-3, -0x1.e7d4f8p+75
+-0x1.7b482ap+109, 0x1.05bbc8p-105
+-0x1.cb961ap+65, -0x1.14130cp-19
+-0x1.4eec14p+15, -0x1.204db4p+47
+0x1.e17406p-125, -0x1.4e3086p-7
+-0x1.c50858p+121, -0x1.cabfaap+1
+-0x1.52cb0cp+125, -0x1.a7b09ap+69
+0x1.36075ep+119, 0x1.6892bap+21
+-0x1.1d7288p+81, -0x1.802e16p+119
+0x1.b0b4b4p+123, -0x1.0b0e4ep+17
+0x1.93dc68p-41, -0x1.e6794ap-93
+0x1.d74842p+103, 0x1.9d5654p+25
+-0x1.faf37ap-25, -0x1.3c6b2cp+41
+-0x1.9178e2p-121, -0x1.38c79p+71
+0x1.a6c92ep+93, 0x1.451e26p+49
+0x1.615abep+115, 0x1.11d95ap-113
+-0x1.1a464ep-19, -0x1.d4d388p+103
+-0x1.139ecap-11, 0x1.6f9988p+99
+0x1.b23abap+21, 0x1.9a2a76p+59
+0x1.0c9b7cp+97, -0x1.ac3c9ap-111
+0x1.fbb1dep-49, 0x1.a393bcp-95
+-0x1.db70cap-15, -0x1.77ba22p-67
+-0x1.127bcap+23, -0x1.265d4ep+51
+0x1.b10c8ap+125, -0x1.64283ap+91
+0x1.07778p+83, 0x1.9b2a12p-115
+-0x1.c8b63ep-81, -0x1.9260ccp-97
+-0x1.1a90ecp-61, 0x1.80e3ep-97
+-0x1.9ac0fep-19, -0x1.f1650ep-53
+0x1.25816p+77, -0x1.d71a68p+113
+0x1.2a7fdp-117, -0x1.b689c8p+23
+-0x1.5b6556p+65, -0x1.618b9ep+67
+-0x1.f1bb86p+51, 0x1.47443p-115
+-0x1.b7b824p-33, 0x1.dc3972p+119
+-0x1.7442ap-11, 0x1.75a524p+127
+-0x1.6ecbdcp-21, -0x1.e39962p-49
+-0x1.97ec52p+107, 0x1.50349cp+17
+-0x1.ec931ep+61, -0x1.5709a8p-105
+-0x1.d06e5ap-27, 0x1.e2e274p+21
+-0x1.ab724cp-39, 0x1.11f774p+51
+-0x1.12c154p-107, -0x1.0e0b94p-65
+-0x1.afb4dcp+37, -0x1.1a984ep-81
+-0x1.da4c16p+1, 0x1.6ff384p-105
+0x1.59f5aap+95, 0x1.b3f804p-21
+-0x1.cf49aep+69, 0x1.63246ep-57
+0x1.55dccep-95, -0x1.37434ep-97
+-0x1.f42e24p+31, -0x1.c08dcap-79
+0x1.fa56cep+85, 0x1.d1485ep+111
+-0x1.02db4cp-17, -0x1.f8298p+5
+0x1.88f4bep+55, 0x1.856c98p+113
+-0x1.588882p+83, -0x1.90014cp-127
+-0x1.bbdfb4p-51, 0x1.055378p-107
+0x1.b6d108p-31, -0x1.369af6p+119
+-0x1.81989cp-119, 0x1.adcec4p+127
+-0x1.3ede92p-125, 0x1.918a96p-91
+0x1.e2ed6cp-23, -0x1.0c2058p-113
+0x1.114da6p+37, 0x1.7647ap+101
+-0x1.82b366p-27, -0x1.1098ccp-75
+-0x1.8c5e84p-13, -0x1.44d514p+85
+0x1.8cb0d6p+113, -0x1.aa3aa4p-107
+-0x1.389ffap+9, -0x1.8e7c08p+109
+-0x1.621616p+13, 0x1.58b64ep+29
+-0x1.291d14p-101, 0x1.dacf74p-55
+0x1.343f14p-5, -0x1.93dda2p+43
+-0x1.4fbd74p+85, 0x1.de0278p+127
+-0x1.c84b3cp+49, 0x1.a32546p+53
+0x1.9fe3f6p+101, -0x1.5e0dp-73
+0x1.a3afecp-121, -0x1.33a39p+111
+0x1.ace3b4p+91, 0x1.259e7p-5
+-0x1.ddd3p-97, 0x1.ce1a84p+45
+-0x1.8e4464p-7, -0x1.9c72cap-107
+0x1.11ab9cp-65, -0x1.d39c4cp+99
+-0x1.8c938cp-9, -0x1.84d616p-113
+-0x1.66d698p+51, 0x1.bf77b2p+103
+-0x1.20fd9cp-61, -0x1.7a803ep+67
+0x1.c3f63cp+87, -0x1.648e4cp-73
+0x1.a288bap+47, -0x1.9b30ep+69
+0x1.1d4794p+29, -0x1.5f5402p-113
+-0x1.cbfa4cp-3, 0x1.07d076p+21
+-0x1.ab7c5ep-49, -0x1.98f856p+111
+-0x1.6c4c72p-77, -0x1.976118p+93
+0x1.7f5b8cp+55, 0x1.296fep+31
+0x1.4d0d7cp+15, -0x1.62c564p-33
+-0x1.2c6ea4p+123, 0x1.8c63e2p-59
+0x1.ba80fp+19, 0x1.e4bcc8p+41
+-0x1.6145eap+121, 0x1.387e7ep-99
+0x1.b5bfaep-89, 0x1.3bee24p-127
+0x1.e794e2p-1, -0x1.7d9fdap+125
+-0x1.447462p-123, 0x1.7ad05cp+23
+-0x1.a64f54p-113, -0x1.ba7aa8p-1
+-0x1.26ac88p-23, -0x1.6259d6p-79
+0x1.29126p-9, 0x1.dd1db2p-37
+0x1.f913e8p+37, -0x1.7b1816p-3
+-0x1.f42a28p+85, -0x1.73c352p-31
+-0x1.6b090ep-19, 0x1.fcbec8p-19
+0x1.a05944p+5, -0x1.71ab2cp+37
+0x1.89b4e4p-111, -0x1.0a243cp+19
+-0x1.a98a28p+43, -0x1.2c7d9cp+125
+0x1.cff6cp+11, -0x1.ba7e1cp+11
+-0x1.6a55ep+17, 0x1.6c998cp-17
+-0x1.62c776p-99, -0x1.3768e6p-83
+0x1.495488p-17, -0x1.ea9f72p-125
+-0x1.9a3e84p-97, 0x1.34cb9ap+53
+0x1.edcb1cp-21, 0x1.88cp-19
+-0x1.bb510ep+83, -0x1.3d185p+49
+-0x1.96e248p+29, -0x1.471e44p-127
+0x1.51f19ep-101, -0x1.173da4p-119
+-0x1.b8772ap-83, -0x1.a4ba34p+17
+-0x1.2da902p-121, -0x1.d3aa84p-41
+-0x1.9e0db2p-27, -0x1.95454ap+69
+0x1.b44664p+97, 0x1.dd2b58p-21
+-0x1.c7eb1cp-79, 0x1.ce6978p-65
+0x1.46fb8p-33, 0x1.1ad46ap+41
+0x1.58dcd2p-49, 0x1.f0a34ap+109
+0x1.7af9bep-45, -0x1.ce931ep-97
+0x1.55f97p-97, 0x1.bd903cp-41
+0x1.58d332p+79, -0x1.b8916cp+51
+0x1.a68326p+113, 0x1.8136fap+37
+0x1.9edb84p+99, -0x1.a8f788p+63
+-0x1.64b696p+83, 0x1.da429cp+45
+0x1.6c0a06p-7, -0x1.5d50b2p+91
+-0x1.8e56bcp-103, -0x1.0e44dap+15
+0x1.59a906p+73, 0x1.78d4d6p+83
+0x1.b80fa2p+47, 0x1.2cff76p+71
+-0x1.03978ep-37, 0x1.07ae9ap+115
+0x1.75e992p+99, -0x1.b73b7p-127
+0x1.fc088ep-65, 0x1.e76328p+63
+-0x1.474a2ep-67, 0x1.312d9ep-79
+-0x1.4d6696p+97, -0x1.3a1ef8p+101
+0x1.4be1aep+15, 0x1.71d37p+77
+0x1.95871p-63, 0x1.b7db36p-99
+-0x1.884df8p+77, -0x1.5a3274p-123
+-0x1.f29684p-125, -0x1.a2a2a2p+33
+0x1.05a6b8p-89, -0x1.6aa302p+103
+-0x1.b45d8ap+101, -0x1.92353cp+1
+-0x1.6e44dp-97, -0x1.b4a108p+57
+-0x1.a85398p-121, 0x1.15d378p+103
+0x1.cc4f62p+125, -0x1.55e58p-132
+-0x1.182f92p+69, 0x1.fd4d16p-79
+-0x1.417dbep-67, 0x1.a5dddp-103
+0x1.96040ep+49, 0x1.52864ep+69
+-0x1.286cbap+117, -0x1.aa16cep+1
+0x1.53d6aap+67, -0x1.dde9e6p+95
+-0x1.4b9914p-125, -0x1.f088ecp+89
+0x1.99f90cp+55, -0x1.1d261cp+119
+0x1.e3917p-91, 0x1.3ab736p+23
+0x1.f8aa64p-125, -0x1.22987p-17
+-0x1.ddddbcp+119, -0x1.4263f6p-65
+0x1.ba65dp+13, 0x1.00013p-77
+-0x1.d9d524p+37, -0x1.4303eap-35
+0x1.ded8c8p+15, -0x1.fb3f36p+99
+-0x1.24d3b4p+91, 0x1.fc2396p-105
+-0x1.c9c8f8p+7, -0x1.6fb67ep+21
+0x1.9da584p-27, 0x1.732e62p+73
+0x1.25be08p+37, 0x1.ca14d2p-3
+0x1.d5313p-49, -0x1.fed8bep-43
+0x1.2837a4p-101, -0x1.35fbbp-97
+0x1.76c682p+91, 0x1.16a0dep-75
+0x1.cf0af8p+81, -0x1.109184p+115
+-0x1.c2530cp-1, -0x1.501a3ap-3
+-0x1.622172p-61, -0x1.a59ae8p+39
+-0x1.fd7e7cp-95, -0x1.cdc5fap+91
+0x1.052b02p+81, 0x1.c05d96p-105
+-0x1.50409cp-41, 0x1.dd8c6ep+79
+-0x1.e340cp+99, 0x1.9e6d68p+35
+0x1.a5a324p+3, 0x1.81988ep-115
+0x1.78e2c2p+121, -0x1.70d938p+75
+-0x1.facc84p-109, 0x1.3a729ap-35
+-0x1.7c5ad8p-7, -0x1.08416ap+99
+0x1.0c44e4p-37, 0x1.21a94p+23
+0x1.f47bcp+25, -0x1.9f9eb8p+111
+0x1.a78abep+41, 0x1.7218p+105
+0x1.975cfp-103, -0x1.b544b2p-95
+0x1.52644ep-47, -0x1.af93a4p+105
+0x1.da63f2p+75, 0x1.19eae4p+63
+0x1.ab1e98p-111, -0x1.8037dep-27
+-0x1.0893fp+119, 0x1.7dd9b6p-45
+0x1.264e1ep+67, 0x1.ce5aap+97
+0x1.8ebf62p-53, 0x1.2bcde4p+53
+-0x1.40155ep-11, 0x1.e9a48ap+103
+0x1.03ace6p+99, -0x1.512956p+39
+0x1.84dcc2p+113, -0x1.f3aa5ep-121
+0x1.a8889ep+81, -0x1.b995cp-125
+0x1.38009ap+1, 0x1.7c59b8p+97
+-0x1.b9794p+11, 0x1.4bb492p+95
+0x1.4f7a76p-61, 0x1.731636p+39
+0x1.b66abap-33, 0x1.df8912p+17
+-0x1.b7d05cp-17, -0x1.bec0f2p+105
+0x1.f7c87cp+59, -0x1.fcb0f4p-19
+0x1.8f7ae2p-75, 0x1.1b1044p-69
+0x1.cbcee8p-21, 0x1.75ef96p+99
+0x1.1646fp-93, -0x1.414296p-109
+0x1.eb9b66p+79, 0x1.f9ea38p-65
+0x1.f49076p+125, -0x1.8dab26p+105
+0x1.41ee7cp+111, 0x1.fef55ep+113
+0x1.1fab94p+5, 0x1.447bb8p+57
+-0x1.52cb48p+77, -0x1.69d216p+55
+-0x1.0e5cb2p-121, -0x1.9ea1f6p-109
+-0x1.f08432p-107, 0x1.3df8d8p-79
+-0x1.41001cp-53, 0x1.31936ep-83
+-0x1.cca2c4p-79, -0x1.8c32c6p-115
+0x1.49101p+117, -0x1.5d9558p-67
+-0x1.669d38p-1, 0x1.24c8a8p+123
+-0x1.d7e162p+65, -0x1.6d44p+51
+-0x1.10bdc6p+81, -0x1.107aa2p-17
+-0x1.60773ap+125, -0x1.895e88p-61
+-0x1.804694p+111, -0x1.e71dd6p-81
+0x1.46f6cap+41, 0x1.f28ff6p-59
+0x1.ac97b4p+35, -0x1.a88b7cp-89
+0x1.4dafa6p-121, 0x1.332728p-45
+0x1.a3f4cp-119, -0x1.b38fe6p-45
+-0x1.8ea278p-67, 0x1.529cc6p-113
+0x1.d68898p-115, -0x1.2b76d6p+119
+0x1.0a8c26p-79, -0x1.1f395cp+75
+0x1.278146p-25, -0x1.eda13p-71
+0x1.f675aep+11, 0x1.36e01ap-125
+-0x1.c0b868p-127, -0x1.6bd0e6p-93
+-0x1.f9d568p+19, 0x1.916762p+59
+-0x1.4a156ap-15, -0x1.d48cfp-77
+0x1.3ece54p-1, 0x1.d23a1ep-107
+-0x1.e1c66ep-31, 0x1.a974a6p+33
+0x1.69255ap-11, 0x1.ceddaep+91
+-0x1.e8e00ep+9, 0x1.1303ep+3
+0x1.d8750cp-69, 0x1.749ae4p+95
+0x1.f9695p+7, 0x1.4f7c7ap+17
+-0x1.e497c6p-119, 0x1.63911p+49
+-0x1.40f398p-29, 0x1.cceb62p-21
+0x1.ff45fap-119, 0x1.cf243ep+67
+-0x1.43b94ap+19, -0x1.853738p-5
+0x1.dacb1ap-85, 0x1.618b02p+19
+0x1.7bca08p-33, 0x1.119a1p+69
+0x1.3d6556p+37, -0x1.9a26b6p+73
+-0x1.bda44cp+49, 0x1.dff0ap+57
+-0x1.79251p-109, -0x1.df0798p-109
+-0x1.bb3162p+1, 0x1.a4545ep-49
+0x1.6975f2p-9, 0x1.f5d67p-5
+0x1.c8e30ap+99, 0x1.e341bep-19
+-0x1.b9452p+71, 0x1.857e08p+61
+0x1.13cff6p-43, -0x1.370f6ap-37
+0x1.a5ceap+81, 0x1.e25932p-35
+-0x1.65a9eap-97, -0x1.e99p-33
+-0x1.677e16p+79, -0x1.cec76ep+69
+-0x1.59790cp-29, -0x1.d09608p-65
+-0x1.7e2c7ep+79, -0x1.24b45cp+67
+-0x1.2d1a8ep+21, -0x1.0235aep+57
+-0x1.c693fp-69, 0x1.17651p-83
+-0x1.db6356p+105, 0x1.b5111p+11
+-0x1.4c17bep+41, 0x1.e50ba6p-83
+-0x1.2c8caap+43, -0x1.af6288p+33
+0x1.0cf9aap-37, 0x1.2b96ccp+29
+0x1.cc0c36p-43, 0x1.f8aecep+85
+0x1.43357ap-79, 0x1.a39c1p+53
+-0x1.885af8p-59, -0x1.174f4ap+9
+-0x1.3f907cp-29, 0x1.6eefd8p-35
+-0x1.163b3p-95, -0x1.aab788p+89
+-0x1.efe05cp-43, 0x1.03e2a4p+5
+-0x1.378f9cp-93, -0x1.3abd18p+91
+0x1.04f762p+33, 0x1.19a152p-91
+-0x1.d4aeeep-111, -0x1.9abd2p+31
+0x1.c710fep-71, 0x1.80c6d6p+45
+0x1.d74a16p-111, 0x1.780118p+121
+-0x1.4c9806p+47, 0x1.21ae0cp-59
+0x1.da2826p+57, 0x1.fa51d4p-95
+0x1.c4c11ep-47, -0x1.ca7f62p-85
+-0x1.7433f4p+33, -0x1.e4a76cp-61
+0x1.72e95cp-77, 0x1.d5b466p+57
+-0x1.39ef7ep+63, 0x1.5cd13ep-95
+0x1.b0d9a6p+91, 0x1.83bb94p+107
+-0x1.d1d226p+113, 0x1.3f131p+67
+0x1.956998p+41, 0x1.a4919p-85
+0x1.0f4a6ep+127, 0x1.5a4b78p+103
+-0x1.732994p-7, 0x1.e6526p+11
+-0x1.db0038p-17, -0x1.fe34b8p-35
+0x1.b24ec4p+5, -0x1.b2b2cp-117
+0x1.1cec56p+113, -0x1.e59ab2p-43
+-0x1.cd894p-91, -0x1.1df7d4p-89
+0x1.a70f02p+11, 0x1.72ee9cp+41
+-0x1.b79d84p+17, 0x1.1324dcp+87
+0x1.8f2c34p-23, 0x1.1b1f9cp-29
+0x1.b37ecap-89, 0x1.bf4cfap+15
+0x1.ebadcap+121, -0x1.5cb82cp-53
+-0x1.784b1ap+9, -0x1.f4ff2ap-51
+-0x1.ff8126p-13, -0x1.789108p-55
+-0x1.7aff56p+23, -0x1.5b8d1ep+15
+0x1.2f8be6p+109, 0x1.4c4284p+115
+0x1.508b94p+101, 0x1.30a78p-11
+0x1.001e9ep-23, -0x1.da111ep-21
+0x1.dfdf02p+73, 0x1.ec4538p+39
+-0x1.83cb52p-31, -0x1.5e784ap-115
+0x1.2f85eap+23, -0x1.a708f8p-87
+0x1.46fc1cp-49, 0x1.cdfc56p-87
+0x1.8fe0e6p-3, -0x1.8db9fcp+57
+-0x1.f80dp-115, 0x1.6494f4p-13
+-0x1.7cffe4p+23, -0x1.995b46p-81
+-0x1.06730ap+43, -0x1.d7b764p+55
+-0x1.556484p-111, -0x1.858cecp-23
+0x1.a3c536p+111, -0x1.ade8e4p+97
+-0x1.556a14p+61, -0x1.4525a8p+77
+0x1.092f68p+57, -0x1.0a758cp+7
+0x1.2308b4p-15, 0x1.9ad1b8p+127
+0x1.37fe7p-27, -0x1.61d1dp+59
+-0x1.417114p+105, -0x1.6e88cp-87
+-0x1.a255dcp-103, 0x1.aaa368p-95
+0x1.f54928p+81, 0x1.a0dc82p-85
+0x1.f14a8ap-71, -0x1.47712ep-83
+-0x1.a078p+107, 0x1.548e5cp-105
+0x1.905b12p+55, 0x1.39fd52p+31
+0x1.62de8p+53, -0x1.91ad06p+15
+-0x1.31d756p+55, -0x1.bfb3fap+45
+0x1.6489a2p-31, -0x1.449558p+15
+-0x1.84348ep+29, 0x1.bbb018p-75
+-0x1.d7b856p-5, 0x1.39947ep+31
+-0x1.a6de0ap+19, -0x1.5ffd76p-123
+-0x1.f6a908p-7, -0x1.73c1e6p+115
+0x1.b4acd4p-83, 0x1.30f88ep-115
+-0x1.89e074p-109, 0x1.515b76p+77
+-0x1.ed59c8p+51, 0x1.35375p-7
+-0x1.8cf928p-83, 0x1.0075eap-113
+-0x1.5fa8dcp+107, 0x1.5bbc32p+51
+0x1.71c338p-29, 0x1.9f90bap-59
+0x1.05a45cp+91, -0x1.c0e9c4p-127
+-0x1.2a6ed6p+15, -0x1.237f46p+9
+0x1.1625a4p+93, 0x1.2bf54p-113
+-0x1.e7d0eep-77, 0x1.1b3834p-33
+0x1.a7098p-77, -0x1.404ea8p-101
+0x1.ca3028p-99, -0x1.150312p+101
+-0x1.bf2f14p+73, -0x1.e25b66p-11
+0x1.8fc53p+61, 0x1.817f2cp+63
+0x1.59ec72p+85, -0x1.a4e64cp+75
+-0x1.042a06p-83, 0x1.bf1decp+97
+0x1.41c616p+107, 0x1.0f41f2p+109
+0x1.369708p-45, 0x1.c2e258p+85
+-0x1.6f100ap-3, -0x1.f7fcc4p-123
+-0x1.85a6e6p-35, 0x1.3520c2p+123
+-0x1.903fe4p-81, -0x1.f96bd8p-103
+-0x1.8b67a2p+113, 0x1.a7662cp-75
+0x1.108868p+77, -0x1.fce106p+59
+-0x1.a0a34ap+17, 0x1.e916cep-79
+-0x1.4479f6p-107, -0x1.6abc6cp-127
+-0x1.d32226p+45, 0x1.f6fd58p-55
+-0x1.1bede2p+107, -0x1.6ae71p-103
+-0x1.c56ac2p+123, -0x1.2d2fb4p+45
+0x1.8a3798p+41, 0x1.72cf3cp+3
+0x1.d5d736p+19, 0x1.d11aa4p+101
+0x1.28a0c2p-117, 0x1.4e492ep+47
+0x1.569b88p-127, -0x1.31925cp+7
+-0x1.7b0528p+61, -0x1.55b908p-23
+0x1.7e78a6p-13, -0x1.ac6a34p-27
+0x1.a38468p+89, -0x1.89bd2ap-83
+-0x1.b48f4cp-25, -0x1.8d150ep+89
+-0x1.6a4652p+67, -0x1.9baf46p+43
+0x1.4917d6p-33, -0x1.af0164p+39
+0x1.051528p-89, 0x1.dbfbb6p+101
+0x1.cc9a74p+81, -0x1.06410ap-25
+0x1.2386ccp+1, 0x1.79aa68p+45
+-0x1.2f085ap+31, -0x1.3b23aep+75
+0x1.a8fba4p-75, 0x1.d10b2cp-115
+0x1.61b196p+1, 0x1.7f596ep+67
+0x1.22eb8ap+35, 0x1.5cf9f6p-19
+-0x1.98e53cp-13, -0x1.b775aep+85
+0x1.3b0b86p-115, 0x1.d01da6p+73
+-0x1.02a8fep+11, 0x1.a65ec6p-37
+0x1.1174ep-91, -0x1.30ce22p+63
+-0x1.e8f3acp+17, -0x1.95fa36p-5
+0x1.d5f9dcp-101, 0x1.7632bcp-1
+-0x1.8f0ddep+103, -0x1.6acd4ep+53
+-0x1.93d702p-3, 0x1.af129ep+29
+0x1.e69a86p-83, 0x1.c12676p+121
+0x1.8b4354p+39, 0x1.323796p-15
+-0x1.7cb89cp+3, -0x1.39bde4p-91
+-0x1.85b08ep-71, 0x1.b7258p+75
+0x1.faf7c8p+29, -0x1.b9b7e6p-13
+0x1.aa2672p+59, -0x1.ea361ep+89
+-0x1.23fd1cp+83, -0x1.867982p+37
+-0x1.4fcf5ap-69, -0x1.406216p+17
+0x1.f4bdd6p-41, 0x1.74eb8p-123
+0x1.4a2138p-41, -0x1.2821b6p-75
+-0x1.f519b4p-87, -0x1.b6b50ep+97
+0x1.ce28e2p+121, -0x1.7cb6eap-49
+-0x1.2a4c98p+125, 0x1.72cfb4p-117
+0x1.00d212p+29, 0x1.1218b2p-35
+0x1.4eea78p-39, 0x1.40ed4ap+91
+0x1.ca52fcp+105, 0x1.99308ap-51
+-0x1.6e753p-17, 0x1.795edap+97
+0x1.6f4bf4p+87, 0x1.da0576p-45
+0x1.dd95e8p+63, -0x1.c01f4ap-105
+0x1.48393p-29, -0x1.4b646p-9
+-0x1.20b24ap+115, 0x1.b6c31ep-79
+-0x1.bf9442p+59, -0x1.e54f92p+103
+0x1.ef131ap-57, -0x1.eef68ap+97
+0x1.f5772p+123, 0x1.9ac2dap-95
+-0x1.7ad1c8p-5, 0x1.f5a0c6p-29
+0x1.453de4p-29, -0x1.c3f9dcp+79
+0x1.95bb26p-49, 0x1.d615fep+81
+0x1.7a3052p-69, -0x1.88392p+85
+0x1.74f878p+45, 0x1.0d4c08p-77
+0x1.b4d184p-35, -0x1.0a613ep+59
+-0x1.1347d8p+97, 0x1.72c754p+57
+-0x1.902858p-41, -0x1.3a5b96p-27
+-0x1.8a5774p+99, -0x1.c09be8p+77
+-0x1.46e594p+73, 0x1.cbb668p+67
+-0x1.a0fce4p-27, -0x1.8c288cp-125
+0x1.152d4p-35, 0x1.6b00bep-105
+-0x1.5344f4p+111, -0x1.3505bap-105
+0x1.4444e8p+9, -0x1.0b7abcp+115
+0x1.f47f92p+111, -0x1.c955e2p+97
+0x1.8913f6p-123, -0x1.185d6cp+49
+0x1.dc1f12p-21, 0x1.53771ap-23
+-0x1.502dd2p+39, 0x1.b6d9dap-121
+-0x1.7900cap-39, -0x1.06bc36p+13
+0x1.81b5a2p-61, -0x1.aad6ep-77
+0x1.6b8c34p-97, -0x1.65a68p-17
+0x1.f56598p+25, 0x1.7b9886p+107
+-0x1.66fc52p+49, 0x1.7c2b54p+85
+-0x1.d865fcp+103, 0x1.ae157ap+3
+-0x1.869a84p-115, 0x1.df88aep+121
+-0x1.204d96p+105, -0x1.98615ap-3
+0x1.99c632p+83, -0x1.356ff2p-3
+-0x1.942766p+21, -0x1.c9c3dap-59
+-0x1.8f4cbap-25, -0x1.1ac256p+91
+0x1.2e3818p+71, 0x1.c46da6p-113
+-0x1.d49f5p-15, 0x1.6b14aep+95
+0x1.cb54a2p+15, 0x1.7eff3ap-79
+0x1.6121fap+7, -0x1.678eccp+31
+0x1.60e6b6p+41, -0x1.03e69cp-43
+0x1.c0ffd6p-121, 0x1.1bf6cap-35
+-0x1.4761cp-17, -0x1.8b110ep+53
+-0x1.22cf08p+83, -0x1.f44ae8p+73
+-0x1.72da22p-101, 0x1.ba090ap+37
+0x1.8d9544p+71, -0x1.fc81bcp+103
+0x1.a3d01ap+35, -0x1.d9a1ecp-27
+0x1.7b045ap+105, 0x1.4284fap+67
+0x1.602dfep+35, 0x1.975a5p-3
+-0x1.63f9f4p-83, 0x1.8680fep+113
+-0x1.449876p-49, 0x1.cbdb7p-23
+-0x1.23ed8ap+61, -0x1.598c22p+3
+-0x1.be1436p-93, 0x1.8daecep-107
+0x1.72ef3ap+13, 0x1.673e5p+73
+-0x1.cfbb2ap-17, -0x1.6b4816p-49
+-0x1.fb09e6p-57, -0x1.d8c9cp+5
+0x1.17414ap-77, -0x1.e92a6cp-11
+0x1.7920aep+105, 0x1.76d182p+111
+-0x1.a13e56p+113, -0x1.406fep+11
+-0x1.e50abp-33, -0x1.7b1848p-105
+-0x1.1f51f6p-17, 0x1.041c08p+117
+-0x1.6a11c6p-45, -0x1.83026p-87
+0x1.666086p-97, 0x1.8cbd5p-79
+-0x1.aa3498p+13, -0x1.402e66p-49
+-0x1.e2fad8p+37, 0x1.d34ab6p+33
+-0x1.418994p+27, 0x1.c51a9p-65
+0x1.5c8fc8p-27, -0x1.94c6b2p-67
+0x1.f1e8f2p+7, 0x1.a3b4acp-109
+-0x1.1acfdp-121, -0x1.ce6602p-113
+0x1.3f5ca6p-55, 0x1.adc242p+3
+0x1.2458e6p+53, -0x1.0fa1p-131
+-0x1.c388ap+105, -0x1.b6c36p-71
+-0x1.6093dap+61, -0x1.376b5p+21
+0x1.29257p-31, -0x1.aee0f6p+93
+-0x1.272ecep+105, -0x1.6dafd2p-107
+0x1.f43e0cp-5, 0x1.6cd27cp-43
+0x1.8042a4p-55, -0x1.6da866p-41
+-0x1.7159fp-123, 0x1.df4f3ap+107
+-0x1.4f362ap-39, 0x1.2674dap-93
+0x1.1f13eep+1, 0x1.5ece9ep-47
+0x1.4d3446p+89, 0x1.23b582p-111
+0x1.58c272p+105, -0x1.64741cp-23
+-0x1.4fe306p-49, -0x1.835d2p-7
+0x1.5938f6p-109, 0x1.061fdcp+49
+-0x1.b11c38p+19, -0x1.0d83fp-79
+-0x1.566824p-107, 0x1.edb3a2p-123
+0x1.ebfbc6p-109, 0x1.a2a774p-75
+-0x1.100f22p-117, 0x1.8d3e8ep+9
+0x1.af1b94p+93, 0x1.fce9b2p-69
+-0x1.8ea8dap+31, 0x1.9dc148p-105
+0x1.8bab62p-85, -0x1.29cc3cp+39
+-0x1.c8cd4cp+9, 0x1.5c72aep-105
+0x1.e93a32p+77, -0x1.5ab5cp-97
+-0x1.44406cp-35, -0x1.e5bb92p-35
+-0x1.c1d34p-111, -0x1.27795ep-59
+-0x1.4d308ep+77, -0x1.14561p+115
+0x1.4b6ce2p+79, 0x1.ba72d4p-65
+-0x1.ef5848p-39, -0x1.20068p+65
+-0x1.71d6bap-117, -0x1.b17c14p-81
+0x1.c36762p-41, -0x1.d62752p+3
+-0x1.d31984p-7, 0x1.475858p+13
+-0x1.f331d4p-67, 0x1.d93012p-95
+-0x1.99ef64p+71, 0x1.e4b4ap+85
+-0x1.2fe67ap-13, -0x1.708084p-77
+-0x1.37830ap-27, -0x1.321c9ap+75
+0x1.87940cp+31, -0x1.05f03ep-43
+0x1.0d57c4p+3, 0x1.ecd0bap-119
+-0x1.0213cep-33, -0x1.2b1644p-91
+0x1.b4a67p-77, 0x1.678712p-39
+0x1.b5f7d6p-61, -0x1.cfc79ap+23
+-0x1.3e56dep+75, -0x1.3ac524p+73
+-0x1.9ed65ep+1, 0x1.464796p-125
+-0x1.c1e02ep-123, 0x1.13db4ep+41
+0x1.ce3fb8p+53, -0x1.9490acp-31
+0x1.c778c2p-95, 0x1.05edeep-31
+0x1.b38b74p-11, 0x1.65c87ep-71
+-0x1.bd1d3cp-103, 0x1.5b1652p-125
+0x1.6328ccp+53, 0x1.a60028p-33
+-0x1.9fd63cp-57, 0x1.e46198p+67
+0x1.83f1aep+43, 0x1.d2a79p-123
+-0x1.fe615p-17, 0x1.9fcc74p-53
+-0x1.d1bf5ep-121, -0x1.815becp+65
+0x1.a5ee1p-101, 0x1.7985f2p-89
+-0x1.2ea18cp-111, -0x1.89e4fap-3
+0x1.bd543p-109, 0x1.17feb6p+79
+-0x1.6521ap+115, -0x1.5c66cap-47
+-0x1.1fe92ap+89, 0x1.23c9fep+87
+-0x1.6e6c22p-17, 0x1.eb8bd4p-75
+0x1.e27734p+17, 0x1.8ce362p+65
+-0x1.0a721ep-121, -0x1.2f2828p+61
+0x1.04d5fp+21, -0x1.012dfcp+111
+0x1.3369cap+127, 0x1.0c9d7p-91
+0x1.790e34p-79, 0x1.4346d6p+27
+-0x1.d18cbcp+85, 0x1.712288p-33
+-0x1.b93b3ap-99, -0x1.a7075cp-89
+0x1.09abfcp+85, 0x1.dce29cp+17
+-0x1.eabefep-7, -0x1.941f08p-103
+0x1.f3dee6p+13, 0x1.fc996ep+35
+0x1.f4e5fep-29, 0x1.db6f58p+57
+0x1.0a0dfep+59, -0x1.10773ap+27
+0x1.60f24ep+71, -0x1.61094p+9
+0x1.e2910ep-81, 0x1.ef33c4p+33
+0x1.04d916p+75, -0x1.7ba58ep-29
+0x1.e3f162p+15, 0x1.a82c06p+95
+-0x1.8a1fd6p+27, 0x1.a3416ap-25
+0x1.b52486p-15, -0x1.b90882p+109
+0x1.2866fep+15, -0x1.0ed1bap-13
+-0x1.900a3cp-115, -0x1.560702p+109
+-0x1.c085c2p+77, -0x1.9241aap+77
+-0x1.af9834p-81, 0x1.df2384p+113
+0x1.e76b4ap+105, -0x1.d879a8p-39
+0x1.d4afd2p+83, -0x1.3c1326p+43
+-0x1.badafp+71, -0x1.32ede4p+33
+0x1.b0c35ep+71, 0x1.4713f8p+59
+-0x1.483cbep+97, -0x1.ebdc86p-35
+0x1.3ca30ep+43, -0x1.0b17f8p-23
+-0x1.daf4aep+101, -0x1.75bbfep-23
+0x1.4a974p-129, 0x1.970dccp-31
+-0x1.8e530ap+43, -0x1.d347aep-83
+0x1.d7a9bcp+19, 0x1.8ca676p-103
+-0x1.b29a1ep+79, 0x1.506d6cp+111
+-0x1.35106ap-71, -0x1.f1121ap+1
+-0x1.f3a346p+125, -0x1.33c34ep+123
+0x1.9ffacap-79, -0x1.dd3e06p+31
+-0x1.231e7p+11, 0x1.44fe6p-33
+-0x1.f5ddd6p+11, -0x1.561922p+43
+-0x1.37f04p+95, 0x1.c1976ep+69
+-0x1.f1863ep-73, -0x1.df437ep+5
+0x1.2ef32ap-5, -0x1.256c1ap+115
+0x1.d4f998p-65, -0x1.76929p+113
+-0x1.08b9b2p+15, -0x1.f365a6p+3
+-0x1.5bdf8ep-125, -0x1.5dbfd4p+81
+0x1.0f3836p+45, 0x1.29aff2p-47
+-0x1.4e7f2cp+125, 0x1.cfe3f6p+27
+0x1.9033d6p+39, -0x1.e2115p-95
+-0x1.032ed4p+49, -0x1.94b94cp-111
+-0x1.352ec4p+117, 0x1.917fap-71
+-0x1.1c252p-43, 0x1.cb9bf6p-121
+0x1.9dc1dap-53, -0x1.bd2de2p+21
+-0x1.657a4p-107, -0x1.c14c22p-19
+-0x1.de162ep+117, 0x1.bf60f8p-87
+-0x1.c9fe4ap-101, 0x1.6f7338p+81
+0x1.defa7cp+43, -0x1.e7b40ap+83
+-0x1.964ae6p+61, 0x1.ac578cp-93
+-0x1.f971eep+21, 0x1.f83814p+45
+0x1.f3aafep-51, -0x1.80fba4p-53
+0x1.2f1188p-107, -0x1.dca372p-29
+0x1.58757ep+87, -0x1.e7643ap-93
+0x1.f491p-69, -0x1.fd7ebap-67
+0x1.3534d2p+69, -0x1.120c8ep-119
+0x1.12fcb4p-13, -0x1.e93c22p-61
+0x1.15662ap-111, 0x1.094fc4p+53
+0x1.0bbdf2p+127, -0x1.0d556p+5
+0x1.4829e8p+49, -0x1.963766p+125
+0x1.81de1p-5, -0x1.9b3b5ap-59
+-0x1.4856aep-69, 0x1.d281p+19
+0x1.f3a778p-89, 0x1.893f86p+107
+-0x1.b6bf1ep+81, 0x1.6515c8p-33
+-0x1.62d04p-79, 0x1.1d9148p-95
+-0x1.92aeeep-39, 0x1.c70a94p-13
+0x1.46af7p-79, 0x1.18c2d4p+69
+0x1.b51e6p-35, 0x1.985aep+57
+0x1.9b2884p-15, -0x1.ca315ep+89
+0x1.28094p-37, 0x1.8a6cf2p-17
+0x1.f2ee5cp-29, 0x1.ebccdp+5
+-0x1.ac937cp+115, -0x1.5af87cp+31
+0x1.722b94p-123, -0x1.f3d534p-125
+0x1.6a648ep+91, 0x1.c62fb8p+103
+-0x1.c554ecp-83, 0x1.24310cp-45
+-0x1.1c6082p-115, 0x1.30656p-47
+-0x1.f65e24p+49, 0x1.858c5cp+19
+-0x1.a5324ap+81, 0x1.4d296p-93
+-0x1.c1d6c4p-9, 0x1.a4c4c6p-117
+0x1.c254eep+7, -0x1.85958ap+119
+-0x1.1bcbf6p-9, -0x1.5561bcp+73
+0x1.641de6p-21, -0x1.382bf4p+13
+-0x1.3f47eep-71, -0x1.0df502p+17
+-0x1.590604p-95, 0x1.8937d2p-93
+-0x1.8abfbap-15, -0x1.7c186ep+21
+-0x1.9a413ep-31, 0x1.224c28p-119
+-0x1.b2bc96p-97, 0x1.b59c58p-11
+0x1.8e221p+83, -0x1.80a652p+81
+0x1.f518e4p+117, -0x1.25995ep+75
+0x1.20695ep+59, 0x1.eb49bep+121
+0x1.e3f242p+61, 0x1.143006p-53
+0x1.124e78p-63, -0x1.0da3f6p+41
+0x1.6826e2p-27, -0x1.deb7p-17
+-0x1.4de7f6p-11, -0x1.789f5p-25
+-0x1.a2c5b8p-41, 0x1.75a1ep-1
+-0x1.c47a1p+79, -0x1.931ac6p+77
+0x1.04047ep+5, -0x1.a9a5bp+79
+0x1.e64c68p-57, 0x1.69777ap+97
+-0x1.9e4d9ap-115, -0x1.71d8dp+59
+-0x1.184612p-117, -0x1.11842ap-109
+-0x1.c7e90ep-47, 0x1.652c38p-95
+-0x1.c8eb98p+81, 0x1.81445cp+61
+0x1.824782p+7, -0x1.76564p+25
+0x1.59d554p-73, 0x1.55b028p-13
+0x1.cc07dap-115, 0x1.e77516p-59
+-0x1.e78ca2p+107, 0x1.dfb3bp+51
+-0x1.102296p+41, -0x1.287cbcp-119
+0x1.6c016ep+13, -0x1.04513cp+43
+0x1.c210f8p-19, -0x1.3ecbfep-67
+-0x1.bf407ep+87, -0x1.04050ap+49
+-0x1.8d1c7ap+79, 0x1.727708p+7
+0x1.ca3058p-95, 0x1.add62ep+121
+0x1.220162p-51, -0x1.9830f2p+71
+-0x1.0563ecp-103, 0x1.3ee13cp-105
+-0x1.3522e2p+9, 0x1.10ffc8p+53
+0x1.8fbc92p+17, 0x1.b0d97cp-81
+-0x1.fb808ep-75, -0x1.8c68d8p-115
+0x1.b46728p+33, 0x1.025168p+127
+-0x1.7fcdc2p-87, 0x1.583c3ep+115
+0x1.3c3e9ep+49, -0x1.740244p+67
+0x1.f1a56ap-69, 0x1.5a34aep+15
+0x1.e28902p-101, 0x1.7ce36cp-89
+-0x1.7ffb88p+105, 0x1.a60e8cp-43
+0x1.d250c8p-127, -0x1.10f99cp-75
+-0x1.cfab7cp+119, -0x1.db9d4cp+83
+0x1.185b1ap-35, -0x1.ca048p+7
+-0x1.da6032p+73, 0x1.df716cp-1
+0x1.88c95ap+1, 0x1.fa5506p+5
+-0x1.0d327ep-113, -0x1.ce01b2p+41
+0x1.ab6032p-55, 0x1.2eb6e4p+107
+-0x1.62c7bcp-37, -0x1.03f2e6p+9
+0x1.c88eaap-113, -0x1.e0db88p+43
+-0x1.cdb8ep-107, 0x1.9474b6p-69
+-0x1.d564e4p-87, 0x1.c7105ap+19
+-0x1.dfebe8p-35, 0x1.6c32fp+41
+0x1.0d0e82p-19, -0x1.de610cp-39
+0x1.af637ap+43, -0x1.8b5f6ep-7
+-0x1.fb3944p+13, -0x1.87b74cp+49
+-0x1.75c644p+59, 0x1.95bbc6p-81
+-0x1.cf341p-39, -0x1.85e31cp+15
+0x1.acc342p-93, 0x1.545fdap+85
+-0x1.5296e2p+25, -0x1.84f9eap+113
+-0x1.fc305p+107, 0x1.d22fd4p-43
+-0x1.d1401p+59, 0x1.d5e566p+31
+-0x1.8b35a4p-31, -0x1.6ee6d8p-97
+-0x1.a3110ep-117, -0x1.178354p-119
+0x1.31dc1ep-59, -0x1.2006a8p-59
+0x1.c76718p-25, 0x1.43003p+39
+0x1.78c26ep-11, 0x1.ed928ap-51
+0x1.7c326cp-55, -0x1.b47e52p+61
+0x1.abc998p+51, 0x1.2f5b4cp+13
+0x1.50a2d6p+63, -0x1.c3d728p+27
+0x1.139cdp+37, -0x1.978fdap-27
+-0x1.952d6ep+123, 0x1.9b34cp-117
+-0x1.9f0012p+1, -0x1.029e14p-115
+-0x1.ca0838p-39, -0x1.a321e4p+89
+0x1.381c48p+25, -0x1.adec28p-23
+0x1.0cd4ecp+1, 0x1.1315ccp+55
+0x1.09685ep+61, -0x1.1a2b8ep-61
+0x1.cba66cp-103, 0x1.804acp+47
+-0x1.1c716p+91, -0x1.bc6c68p+95
+-0x1.471a44p-43, 0x1.fbf18cp-57
+0x1.f0fc7p-93, -0x1.6442e6p-29
+0x1.971db4p-83, 0x1.940b9p+7
+0x1.ac1126p+61, 0x1.8bcbdcp+105
+0x1.269932p+43, 0x1.4475c2p+97
+0x1.e2cb16p+117, 0x1.cf977p-103
+0x1.762b06p+113, 0x1.1ca6eep+69
+-0x1.0017fp-81, 0x1.823d88p-43
+-0x1.bdaae6p-61, 0x1.f1ef72p-63
+-0x1.fe198ap+111, 0x1.85d9ccp-67
+-0x1.11bfa4p-65, 0x1.8d22d4p+25
+-0x1.e7bb16p+43, 0x1.43602p+49
+-0x1.d686e8p-93, 0x1.45a892p-49
+0x1.ed541p-1, -0x1.cc85a6p-39
+-0x1.2f03fcp-71, -0x1.6b351ep-31
+-0x1.71b314p-29, -0x1.e2b898p-17
+-0x1.ebd5f8p-85, -0x1.8db56ap+57
+-0x1.e3d15ap+71, -0x1.020b74p+39
+0x1.d8f59ep-9, -0x1.267c8ep-91
+0x1.38d794p+11, 0x1.4d4e5cp+103
+0x1.7dd7a2p-31, 0x1.be6a9cp+73
+-0x1.1408d8p-121, 0x1.10f37p+99
+-0x1.ef03dp-125, 0x1.70a31ap-99
+-0x1.8dff72p-67, 0x1.ba6d14p+97
+-0x1.c424a8p+105, 0x1.b6575ap+51
+-0x1.26bb2p+35, -0x1.6c4f48p-37
+-0x1.d7331p-101, -0x1.cfc016p-65
+-0x1.804164p-103, 0x1.aa1dep+107
+0x1.03e6d6p+63, 0x1.a822e6p-27
+0x1.e3352cp-35, 0x1.257ed8p-109
+-0x1.f50ca6p+13, -0x1.c72accp-63
+0x1.c33f4cp+21, -0x1.d90b22p-57
+0x1.6b0642p-85, 0x1.ba928ap-123
+0x1.7ec6ap-119, 0x1.3dca8p-9
+0x1.661fc2p+53, -0x1.9075c4p+27
+-0x1.2ab95ap-31, 0x1.6bcd72p+65
+0x1.95ba5cp+11, -0x1.63a46p-85
+-0x1.00709ap-91, 0x1.1c759p-21
+0x1.9c04c2p+121, 0x1.5608ccp+95
+-0x1.9db026p+93, -0x1.684d46p-51
+0x1.082ed2p+21, 0x1.5f2adap+63
+-0x1.efbff8p-117, -0x1.15cb7ep-77
+0x1.748f3p-37, -0x1.af1c74p-65
+-0x1.e13dc4p-85, 0x1.37f1cp+21
+-0x1.7b50b8p-128, -0x1.c5a7d4p+61
+0x1.f9cfecp-51, 0x1.a0a80ap-93
+0x1.87b578p-41, 0x1.b17798p+93
+-0x1.fde6fp-81, -0x1.968196p+43
+0x1.5e5faep+33, -0x1.073b8cp-19
+0x1.e74636p+55, 0x1.e44c24p-69
+-0x1.b92de2p+75, 0x1.f1854ep-89
+0x1.e3e554p-43, 0x1.7e0164p-7
+0x1.18d6c8p+115, 0x1.ce9cf4p+23
+0x1.00de28p-107, 0x1.4371a8p-61
+-0x1.a29ab2p-45, -0x1.d0c916p+89
+-0x1.d2543ap+67, 0x1.1aa5acp-27
+-0x1.bcf608p-57, 0x1.fcaa06p+45
+0x1.a97ea6p-11, 0x1.40f9cap-93
+-0x1.6f3bfcp+123, 0x1.fcb72ap+105
+0x1.583b2cp-49, -0x1.8b86a2p+19
+-0x1.7a2d5ep+109, -0x1.27ed68p+87
+-0x1.512144p+51, 0x1.7a2b24p-93
+-0x1.740cc4p+67, 0x1.5c58bcp+51
+-0x1.9c60dap+101, -0x1.b07f2ep-65
+-0x1.d7162p-91, 0x1.0608a4p+61
+-0x1.971bap-55, 0x1.79c728p-123
+0x1.e04514p+103, -0x1.c5711cp-31
+0x1.5d4f7ep-87, 0x1.65e0aep+27
+0x1.ec298cp-49, 0x1.9685d2p-123
+0x1.b79deep-37, -0x1.87a16ap+1
+-0x1.af9c1p+119, -0x1.cdff8cp-127
+-0x1.c102f4p+103, 0x1.3f8e74p+87
+0x1.99ba8p-63, -0x1.9a0d3ep+75
+-0x1.77941ep-79, 0x1.10c348p+11
+0x1.4ffa9p+121, 0x1.de8f58p+41
+-0x1.793116p+119, -0x1.c1461ep-85
+-0x1.2e3156p-49, -0x1.e75af4p-61
+0x1.95aa7ap-117, -0x1.77fa6cp+43
+-0x1.6be95ep-95, -0x1.946cfp-37
+0x1.f710eep-51, 0x1.d66fd6p-97
+0x1.5883dap+125, -0x1.8ceb64p-107
+0x1.22e6b8p-47, -0x1.884312p+35
+0x1.c6b7c4p+97, -0x1.077fcap+93
+0x1.db1bd2p-1, 0x1.b58a9ep+49
+0x1.77ae1ep-27, 0x1.69b66ep+115
+-0x1.836058p+123, 0x1.230e6cp+121
+-0x1.400382p-39, 0x1.dff776p-95
+-0x1.3b109cp-17, -0x1.78eddep-101
+0x1.f4c808p+83, 0x1.5226dep-89
+0x1.a49f02p+9, -0x1.83dd7cp+55
+-0x1.59d4c4p+59, -0x1.5a23bcp-15
-- 
2.30.2


^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH 3/9] math: Simplify hypotf implementation
  2021-10-06 18:05 [PATCH 0/9] Improve hypot() Adhemerval Zanella
  2021-10-06 18:05 ` [PATCH 1/9] benchtests: Make hypot input random Adhemerval Zanella
  2021-10-06 18:05 ` [PATCH 2/9] benchtests: Add hypotf Adhemerval Zanella
@ 2021-10-06 18:05 ` Adhemerval Zanella
  2021-10-07  9:44   ` Paul Zimmermann
  2021-10-06 18:05 ` [PATCH 4/9] math: Use an improved algorithm for hypot (dbl-64) Adhemerval Zanella
                   ` (6 subsequent siblings)
  9 siblings, 1 reply; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 18:05 UTC (permalink / raw)
  To: libc-alpha

Use isnan()/isinf() instead of GET_FLOAT_WORD and interger operations.
There is also no need to check for 0.0.

The file Copyright is also change to use  GPL, the implementation was
complete change by 7c10fd3515f to use double precision instead of
scaling and this change removes all the GET_FLOAT_WORD usage.

Checked on x86_64-linux-gnu.
---
 sysdeps/ieee754/flt-32/e_hypotf.c | 57 +++++++++++++------------------
 1 file changed, 23 insertions(+), 34 deletions(-)

diff --git a/sysdeps/ieee754/flt-32/e_hypotf.c b/sysdeps/ieee754/flt-32/e_hypotf.c
index e770947dc1..6495a91cd4 100644
--- a/sysdeps/ieee754/flt-32/e_hypotf.c
+++ b/sysdeps/ieee754/flt-32/e_hypotf.c
@@ -1,46 +1,35 @@
-/* e_hypotf.c -- float version of e_hypot.c.
- */
+/* Euclidean distance function.  Float/Binary32 version.
+   Copyright (C) 2012-2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
 
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
 
 #include <math.h>
 #include <math_private.h>
 #include <libm-alias-finite.h>
 
 float
-__ieee754_hypotf(float x, float y)
+__ieee754_hypotf (float x, float y)
 {
-	double d_x, d_y;
-	int32_t ha, hb;
-
-	GET_FLOAT_WORD(ha,x);
-	ha &= 0x7fffffff;
-	GET_FLOAT_WORD(hb,y);
-	hb &= 0x7fffffff;
-	if (ha == 0x7f800000 && !issignaling (y))
-	  return fabsf(x);
-	else if (hb == 0x7f800000 && !issignaling (x))
-	  return fabsf(y);
-	else if (ha > 0x7f800000 || hb > 0x7f800000)
-	  return fabsf(x) * fabsf(y);
-	else if (ha == 0)
-	  return fabsf(y);
-	else if (hb == 0)
-	  return fabsf(x);
-
-	d_x = (double) x;
-	d_y = (double) y;
+  if ((isinf (x) || isinf (y))
+      && !issignaling (x) && !issignaling (y))
+    return INFINITY;
+  if (isnan (x) || isnan (y))
+    return x + y;
 
-	return (float) sqrt(d_x * d_x + d_y * d_y);
+  return sqrt ((double) x * (double) x + (double) y * (double) y);
 }
 #ifndef __ieee754_hypotf
 libm_alias_finite (__ieee754_hypotf, __hypotf)
-- 
2.30.2


^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH 4/9] math: Use an improved algorithm for hypot (dbl-64)
  2021-10-06 18:05 [PATCH 0/9] Improve hypot() Adhemerval Zanella
                   ` (2 preceding siblings ...)
  2021-10-06 18:05 ` [PATCH 3/9] math: Simplify hypotf implementation Adhemerval Zanella
@ 2021-10-06 18:05 ` Adhemerval Zanella
  2021-10-06 18:05 ` [PATCH 5/9] math: Use an improved algorithm for hypotl (ldbl-96) Adhemerval Zanella
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 18:05 UTC (permalink / raw)
  To: libc-alpha

This implementation is based on the 'An Improved Algorithm for
hypot(a,b)' by Carlos F. Borges [1] using the MyHypot3 with the
following changes:

 - Handle qNaN and sNaN.
 - Tune the 'widely varying operands' to avoid spurious underflow
   due the multiplication and fix the return value for upwards
   rounding mode.
 - Handle required underflow exception for denormal results.

The main advantage of the new algorithm is its precision: with a
random 1e9 input pairs in the range of [DBL_MIN, DBL_MAX], glibc
current implementation shows around 0.34% results with an error of
1 ulp (3424869 results) while the new implementation only shows
0.002% of total (18851).

The performance result are also only slight worse than current
implementation.  On x86_64 (Ryzen 5900X) with gcc 10.3.1:

Before:

  "hypot": {
   "workload-random": {
    "duration": 3.71687e+09,
    "iterations": 2.08e+08,
    "reciprocal-throughput": 15.0308,
    "latency": 20.7083,
    "max-throughput": 6.65299e+07,
    "min-throughput": 4.82897e+07
   }

After:

  "hypot": {
   "workload-random": {
    "duration": 3.70911e+09,
    "iterations": 2.44e+08,
    "reciprocal-throughput": 15.0929,
    "latency": 15.3097,
    "max-throughput": 6.62565e+07,
    "min-throughput": 6.53181e+07
   }
  }

Co-Authored-By: Paul Zimmermann <Paul.Zimmermann@inria.fr>

Checked on x86_64-linux-gnu and aarch64-linux-gnu.

[1] https://arxiv.org/pdf/1904.09481.pdf
---
 sysdeps/ieee754/dbl-64/e_hypot.c | 225 ++++++++++++-------------------
 1 file changed, 86 insertions(+), 139 deletions(-)

diff --git a/sysdeps/ieee754/dbl-64/e_hypot.c b/sysdeps/ieee754/dbl-64/e_hypot.c
index 9ec4c1ced0..231fb0d70f 100644
--- a/sysdeps/ieee754/dbl-64/e_hypot.c
+++ b/sysdeps/ieee754/dbl-64/e_hypot.c
@@ -1,164 +1,111 @@
-/* @(#)e_hypot.c 5.1 93/09/24 */
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
+/* Euclidean distance function.  Double/Binary64 version.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
 
-/* __ieee754_hypot(x,y)
- *
- * Method :
- *	If (assume round-to-nearest) z=x*x+y*y
- *	has error less than sqrt(2)/2 ulp, than
- *	sqrt(z) has error less than 1 ulp (exercise).
- *
- *	So, compute sqrt(x*x+y*y) with some care as
- *	follows to get the error below 1 ulp:
- *
- *	Assume x>y>0;
- *	(if possible, set rounding to round-to-nearest)
- *	1. if x > 2y  use
- *		x1*x1+(y*y+(x2*(x+x1))) for x*x+y*y
- *	where x1 = x with lower 32 bits cleared, x2 = x-x1; else
- *	2. if x <= 2y use
- *		t1*y1+((x-y)*(x-y)+(t1*y2+t2*y))
- *	where t1 = 2x with lower 32 bits cleared, t2 = 2x-t1,
- *	y1= y with lower 32 bits chopped, y2 = y-y1.
- *
- *	NOTE: scaling may be necessary if some argument is too
- *	      large or too tiny
- *
- * Special cases:
- *	hypot(x,y) is INF if x or y is +INF or -INF; else
- *	hypot(x,y) is NAN if x or y is NAN.
- *
- * Accuracy:
- *	hypot(x,y) returns sqrt(x^2+y^2) with error less
- *	than 1 ulps (units in the last place)
- */
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+/* This implementation is based on 'An Improved Algorithm for hypot(a,b)' by
+   Carlos F. Borges [1] using the MyHypot3 with the following changes:
+
+   - Handle qNaN and sNaN.
+   - Tune the 'widely varying operands' to avoid spurious underflow
+     due the multiplication and fix the return value for upwards
+     rounding mode.
+   - Handle required underflow exception for subnormal results.
+
+   [1] https://arxiv.org/pdf/1904.09481.pdf  */
 
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
+#include <math-narrow-eval.h>
 #include <libm-alias-finite.h>
+#include <math_config.h>
+
+/* sqrt (DBL_EPSILON / 2.0)  */
+#define SQRT_EPS_DIV_2     0x1.6a09e667f3bcdp-27
+/* DBL_MIN / (sqrt (DBL_EPSILON / 2.0))   */
+#define DBL_MIN_THRESHOLD  0x1.6a09e667f3bcdp-996
+/* eps (double) * sqrt (DBL_MIN))  */
+#define SCALE              0x1p-563
+/* 1 / eps (sqrt (DBL_MIN)  */
+#define INV_SCALE          0x1p+563
+/* sqrt (DBL_MAX)  */
+#define SQRT_DBL_MAX       0x1.6a09e667f3bccp+511
+/* sqrt (DBL_MIN)  */
+#define SQRT_DBL_MIN       0x1p-511
 
 double
 __ieee754_hypot (double x, double y)
 {
-  double a, b, t1, t2, y1, y2, w;
-  int32_t j, k, ha, hb;
+  if ((isinf (x) || isinf (y))
+      && !issignaling (x) && !issignaling (y))
+    return INFINITY;
+  if (isnan (x) || isnan (y))
+    return x + y;
 
-  GET_HIGH_WORD (ha, x);
-  ha &= 0x7fffffff;
-  GET_HIGH_WORD (hb, y);
-  hb &= 0x7fffffff;
-  if (hb > ha)
-    {
-      a = y; b = x; j = ha; ha = hb; hb = j;
-    }
-  else
+  double ax = fabs (x);
+  double ay = fabs (y);
+  if (ay > ax)
     {
-      a = x; b = y;
+      double tmp = ax;
+      ax = ay;
+      ay = tmp;
     }
-  SET_HIGH_WORD (a, ha);        /* a <- |a| */
-  SET_HIGH_WORD (b, hb);        /* b <- |b| */
-  if ((ha - hb) > 0x3c00000)
-    {
-      return a + b;
-    }                                       /* x/y > 2**60 */
-  k = 0;
-  if (__glibc_unlikely (ha > 0x5f300000))                  /* a>2**500 */
-    {
-      if (ha >= 0x7ff00000)             /* Inf or NaN */
-	{
-	  uint32_t low;
-	  w = a + b;                    /* for sNaN */
-	  if (issignaling (a) || issignaling (b))
-	    return w;
-	  GET_LOW_WORD (low, a);
-	  if (((ha & 0xfffff) | low) == 0)
-	    w = a;
-	  GET_LOW_WORD (low, b);
-	  if (((hb ^ 0x7ff00000) | low) == 0)
-	    w = b;
-	  return w;
-	}
-      /* scale a and b by 2**-600 */
-      ha -= 0x25800000; hb -= 0x25800000;  k += 600;
-      SET_HIGH_WORD (a, ha);
-      SET_HIGH_WORD (b, hb);
-    }
-  if (__builtin_expect (hb < 0x23d00000, 0))            /* b < 2**-450 */
+
+  /* Widely varying operands.  The DBL_MIN_THRESHOLD check is used to avoid
+     a spurious underflow from the multiplication.  */
+  if (ax >= DBL_MIN_THRESHOLD && ay <= ax * SQRT_EPS_DIV_2)
+    return (ay == 0.0) ? ax : math_narrow_eval (ax + DBL_TRUE_MIN);
+
+  double scale = SCALE;
+  if (ax > SQRT_DBL_MAX)
     {
-      if (hb <= 0x000fffff)             /* subnormal b or 0 */
-	{
-	  uint32_t low;
-	  GET_LOW_WORD (low, b);
-	  if ((hb | low) == 0)
-	    return a;
-	  t1 = 0;
-	  SET_HIGH_WORD (t1, 0x7fd00000);       /* t1=2^1022 */
-	  b *= t1;
-	  a *= t1;
-	  k -= 1022;
-	  GET_HIGH_WORD (ha, a);
-	  GET_HIGH_WORD (hb, b);
-	  if (hb > ha)
-	    {
-	      t1 = a;
-	      a = b;
-	      b = t1;
-	      j = ha;
-	      ha = hb;
-	      hb = j;
-	    }
-	}
-      else                      /* scale a and b by 2^600 */
-	{
-	  ha += 0x25800000;             /* a *= 2^600 */
-	  hb += 0x25800000;             /* b *= 2^600 */
-	  k -= 600;
-	  SET_HIGH_WORD (a, ha);
-	  SET_HIGH_WORD (b, hb);
-	}
+      ax *= scale;
+      ay *= scale;
+      scale = INV_SCALE;
     }
-  /* medium size a and b */
-  w = a - b;
-  if (w > b)
+  else if (ay < SQRT_DBL_MIN)
     {
-      t1 = 0;
-      SET_HIGH_WORD (t1, ha);
-      t2 = a - t1;
-      w = sqrt (t1 * t1 - (b * (-b) - t2 * (a + t1)));
+      ax /= scale;
+      ay /= scale;
     }
   else
+    scale = 1.0;
+
+  double h = sqrt (ax * ax + ay * ay);
+
+  double t1, t2;
+  if (h == 0.0)
+    return h;
+  else if (h <= 2.0 * ay)
     {
-      a = a + a;
-      y1 = 0;
-      SET_HIGH_WORD (y1, hb);
-      y2 = b - y1;
-      t1 = 0;
-      SET_HIGH_WORD (t1, ha + 0x00100000);
-      t2 = a - t1;
-      w = sqrt (t1 * y1 - (w * (-w) - (t1 * y2 + t2 * b)));
+      double delta = h - ay;
+      t1 = ax * (2.0 * delta - ax);
+      t2 = (delta - 2.0 * (ax - ay)) * delta;
     }
-  if (k != 0)
+  else
     {
-      uint32_t high;
-      t1 = 1.0;
-      GET_HIGH_WORD (high, t1);
-      SET_HIGH_WORD (t1, high + (k << 20));
-      w *= t1;
-      math_check_force_underflow_nonneg (w);
-      return w;
+      double delta = h - ax;
+      t1 = 2.0 * delta * (ax - 2 * ay);
+      t2 = (4.0 * delta - ay) * ay + delta * delta;
     }
-  else
-    return w;
+  h -= (t1 + t2) / (2.0 * h);
+  h = math_narrow_eval (h * scale);
+  math_check_force_underflow_nonneg (h);
+  return h;
 }
 #ifndef __ieee754_hypot
 libm_alias_finite (__ieee754_hypot, __hypot)
-- 
2.30.2


^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH 5/9] math: Use an improved algorithm for hypotl (ldbl-96)
  2021-10-06 18:05 [PATCH 0/9] Improve hypot() Adhemerval Zanella
                   ` (3 preceding siblings ...)
  2021-10-06 18:05 ` [PATCH 4/9] math: Use an improved algorithm for hypot (dbl-64) Adhemerval Zanella
@ 2021-10-06 18:05 ` Adhemerval Zanella
  2021-10-06 18:05 ` [PATCH 6/9] math: Use an improved algorithm for hypotl (ldbl-128) Adhemerval Zanella
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 18:05 UTC (permalink / raw)
  To: libc-alpha

This implementation is based on 'An Improved Algorithm for hypot(a,b)'
by Carlos F. Borges [1] using the MyHypot3 with the following changes:

 - Handle qNaN and sNaN.
 - Tune the 'widely varying operands' to avoid spurious underflow
   due the multiplication and fix the return value for upwards
   rounding mode.
 - Handle required underflow exception for subnormal results.

The main advantage of the new algorithm is its precision.  With a
random 1e8 input pairs in the range of [LDBL_MIN, LDBL_MAX], glibc
current implementation shows around 0.02% results with an error of
1 ulp (23158 results) while the new implementation only shows
0.0001% of total (111).

[1] https://arxiv.org/pdf/1904.09481.pdf
---
 sysdeps/ieee754/ldbl-96/e_hypotl.c | 227 ++++++++++++-----------------
 1 file changed, 97 insertions(+), 130 deletions(-)

diff --git a/sysdeps/ieee754/ldbl-96/e_hypotl.c b/sysdeps/ieee754/ldbl-96/e_hypotl.c
index 44e72353c0..85dcbc894b 100644
--- a/sysdeps/ieee754/ldbl-96/e_hypotl.c
+++ b/sysdeps/ieee754/ldbl-96/e_hypotl.c
@@ -1,142 +1,109 @@
-/* e_hypotl.c -- long double version of e_hypot.c.
- */
+/* Euclidean distance function.  Long Double/Binary96 version.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
 
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
 
-/* __ieee754_hypotl(x,y)
- *
- * Method :
- *	If (assume round-to-nearest) z=x*x+y*y
- *	has error less than sqrt(2)/2 ulp, than
- *	sqrt(z) has error less than 1 ulp (exercise).
- *
- *	So, compute sqrt(x*x+y*y) with some care as
- *	follows to get the error below 1 ulp:
- *
- *	Assume x>y>0;
- *	(if possible, set rounding to round-to-nearest)
- *	1. if x > 2y  use
- *		x1*x1+(y*y+(x2*(x+x1))) for x*x+y*y
- *	where x1 = x with lower 32 bits cleared, x2 = x-x1; else
- *	2. if x <= 2y use
- *		t1*y1+((x-y)*(x-y)+(t1*y2+t2*y))
- *	where t1 = 2x with lower 32 bits cleared, t2 = 2x-t1,
- *	y1= y with lower 32 bits chopped, y2 = y-y1.
- *
- *	NOTE: scaling may be necessary if some argument is too
- *	      large or too tiny
- *
- * Special cases:
- *	hypot(x,y) is INF if x or y is +INF or -INF; else
- *	hypot(x,y) is NAN if x or y is NAN.
- *
- * Accuracy:
- *	hypot(x,y) returns sqrt(x^2+y^2) with error less
- *	than 1 ulps (units in the last place)
- */
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+/* This implementation is based on 'An Improved Algorithm for hypot(a,b)' by
+   Carlos F. Borges [1] using the MyHypot3 with the following changes:
+
+   - Handle qNaN and sNaN.
+   - Tune the 'widely varying operands' to avoid spurious underflow
+     due the multiplication and fix the return value for upwards
+     rounding mode.
+   - Handle required underflow exception for subnormal results.
+
+   [1] https://arxiv.org/pdf/1904.09481.pdf  */
 
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
 #include <libm-alias-finite.h>
 
-long double __ieee754_hypotl(long double x, long double y)
+/* sqrt (LDBL_EPSILON / 2.0)  */
+#define SQRT_EPS_DIV_2      0x8p-35L
+/* DBL_MIN / (sqrt (LDBL_EPSILON / 2.0))   */
+#define LDBL_MIN_THRESHOLD  0x8p-16353L
+/* eps (long double) * sqrt (LDBL_MIN)  */
+#define SCALE               0x8p-8257L
+/* 1 / eps (sqrt (LDBL_MIN)  */
+#define INV_SCALE           0x8p+8251L
+/* sqrt (LDBL_MAX)  */
+#define SQRT_LDBL_MAX       0xb.504f333f9de6484p+8188L
+/* sqrt (LDBL_MIN)  */
+#define SQRT_LDBL_MIN       0x8p-8194L
+
+long double
+__ieee754_hypotl (long double x, long double y)
 {
-	long double a,b,t1,t2,y1,y2,w;
-	uint32_t j,k,ea,eb;
+  if ((isinf (x) || isinf (y))
+      && !issignaling (x) && !issignaling (y))
+    return INFINITY;
+  if (isnan (x) || isnan (y))
+    return x + y;
+
+  long double ax = fabsl (x);
+  long double ay = fabsl (y);
+  if (ay > ax)
+    {
+      long double tmp = ax;
+      ax = ay;
+      ay = tmp;
+    }
+
+  /* Widely varying operands.  The LDBL_MIN_THRESHOLD check is used to avoid
+     a spurious underflow from the multiplication.  */
+  if (ax >= LDBL_MIN_THRESHOLD && ay <= ax * SQRT_EPS_DIV_2)
+    return (ay == 0.0) ? ax : ax + LDBL_TRUE_MIN;
+
+  long double scale = SCALE;
+  if (ax > SQRT_LDBL_MAX)
+    {
+      ax *= scale;
+      ay *= scale;
+      scale = INV_SCALE;
+    }
+  else if (ay < SQRT_LDBL_MIN)
+    {
+      ax /= scale;
+      ay /= scale;
+    }
+  else
+    scale = 1.0L;
+
+  long double h = sqrtl (ax * ax + ay * ay);
 
-	GET_LDOUBLE_EXP(ea,x);
-	ea &= 0x7fff;
-	GET_LDOUBLE_EXP(eb,y);
-	eb &= 0x7fff;
-	if(eb > ea) {a=y;b=x;j=ea; ea=eb;eb=j;} else {a=x;b=y;}
-	SET_LDOUBLE_EXP(a,ea);	/* a <- |a| */
-	SET_LDOUBLE_EXP(b,eb);	/* b <- |b| */
-	if((ea-eb)>0x46) {return a+b;} /* x/y > 2**70 */
-	k=0;
-	if(__builtin_expect(ea > 0x5f3f,0)) {	/* a>2**8000 */
-	   if(ea == 0x7fff) {	/* Inf or NaN */
-	       uint32_t exp __attribute__ ((unused));
-	       uint32_t high,low;
-	       w = a+b;			/* for sNaN */
-	       if (issignaling (a) || issignaling (b))
-		 return w;
-	       GET_LDOUBLE_WORDS(exp,high,low,a);
-	       if(((high&0x7fffffff)|low)==0) w = a;
-	       GET_LDOUBLE_WORDS(exp,high,low,b);
-	       if(((eb^0x7fff)|(high&0x7fffffff)|low)==0) w = b;
-	       return w;
-	   }
-	   /* scale a and b by 2**-9600 */
-	   ea -= 0x2580; eb -= 0x2580;	k += 9600;
-	   SET_LDOUBLE_EXP(a,ea);
-	   SET_LDOUBLE_EXP(b,eb);
-	}
-	if(__builtin_expect(eb < 0x20bf, 0)) {	/* b < 2**-8000 */
-	    if(eb == 0) {	/* subnormal b or 0 */
-		uint32_t exp __attribute__ ((unused));
-		uint32_t high,low;
-		GET_LDOUBLE_WORDS(exp,high,low,b);
-		if((high|low)==0) return a;
-		SET_LDOUBLE_WORDS(t1, 0x7ffd, 0x80000000, 0); /* t1=2^16382 */
-		b *= t1;
-		a *= t1;
-		k -= 16382;
-		GET_LDOUBLE_EXP (ea, a);
-		GET_LDOUBLE_EXP (eb, b);
-		if (eb > ea)
-		  {
-		    t1 = a;
-		    a = b;
-		    b = t1;
-		    j = ea;
-		    ea = eb;
-		    eb = j;
-		  }
-	    } else {		/* scale a and b by 2^9600 */
-		ea += 0x2580;	/* a *= 2^9600 */
-		eb += 0x2580;	/* b *= 2^9600 */
-		k -= 9600;
-		SET_LDOUBLE_EXP(a,ea);
-		SET_LDOUBLE_EXP(b,eb);
-	    }
-	}
-    /* medium size a and b */
-	w = a-b;
-	if (w>b) {
-	    uint32_t high;
-	    GET_LDOUBLE_MSW(high,a);
-	    SET_LDOUBLE_WORDS(t1,ea,high,0);
-	    t2 = a-t1;
-	    w  = sqrtl(t1*t1-(b*(-b)-t2*(a+t1)));
-	} else {
-	    uint32_t high;
-	    GET_LDOUBLE_MSW(high,b);
-	    a  = a+a;
-	    SET_LDOUBLE_WORDS(y1,eb,high,0);
-	    y2 = b - y1;
-	    GET_LDOUBLE_MSW(high,a);
-	    SET_LDOUBLE_WORDS(t1,ea+1,high,0);
-	    t2 = a - t1;
-	    w  = sqrtl(t1*y1-(w*(-w)-(t1*y2+t2*b)));
-	}
-	if(k!=0) {
-	    uint32_t exp;
-	    t1 = 1.0;
-	    GET_LDOUBLE_EXP(exp,t1);
-	    SET_LDOUBLE_EXP(t1,exp+k);
-	    w *= t1;
-	    math_check_force_underflow_nonneg (w);
-	    return w;
-	} else return w;
+  long double t1;
+  long double t2;
+  if (h == 0.0L)
+    return h;
+  if (h <= 2.0L * ay)
+    {
+      long double delta = h - ay;
+      t1 = ax * (2.0L * delta - ax);
+      t2 = (delta - 2.0L * (ax - ay)) * delta;
+    }
+  else
+    {
+      long double delta = h - ax;
+      t1 = 2.0L * delta * (ax - 2.0L * ay);
+      t2 = (4.0L * delta - ay) * ay + delta * delta;
+    }
+  h -= (t1 + t2) / (2.0L * h);
+  h *= scale;
+  math_check_force_underflow_nonneg (h);
+  return h;
 }
 libm_alias_finite (__ieee754_hypotl, __hypotl)
-- 
2.30.2


^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH 6/9] math: Use an improved algorithm for hypotl (ldbl-128)
  2021-10-06 18:05 [PATCH 0/9] Improve hypot() Adhemerval Zanella
                   ` (4 preceding siblings ...)
  2021-10-06 18:05 ` [PATCH 5/9] math: Use an improved algorithm for hypotl (ldbl-96) Adhemerval Zanella
@ 2021-10-06 18:05 ` Adhemerval Zanella
  2021-10-06 18:05 ` [PATCH 7/9] math: Remove powerpc e_hypot Adhemerval Zanella
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 18:05 UTC (permalink / raw)
  To: libc-alpha

This implementation is based on 'An Improved Algorithm for hypot(a,b)'
by Carlos F. Borges [1] using the MyHypot3 with the following changes:

  - Handle qNaN and sNaN.
  - Tune the 'widely varying operands' to avoid spurious underflow
    due the multiplication and fix the return value for upwards
    rounding mode.
  - Handle required underflow exception for subnormal results.

The main advantage of the new algorithm is its precision.  With a
random 1e9 input pairs in the range of [LDBL_MIN, LDBL_MAX], glibc
current implementation shows around 0.05% results with an error of
1 ulp (453266 results) while the new implementation only shows
0.0001% of total (1280).

Checked on aarch64-linux-gnu and x86_64-linux-gnu.

[1] https://arxiv.org/pdf/1904.09481.pdf
---
 sysdeps/ieee754/ldbl-128/e_hypotl.c | 222 ++++++++++++----------------
 1 file changed, 95 insertions(+), 127 deletions(-)

diff --git a/sysdeps/ieee754/ldbl-128/e_hypotl.c b/sysdeps/ieee754/ldbl-128/e_hypotl.c
index cd4fdbc4a6..a27eab0470 100644
--- a/sysdeps/ieee754/ldbl-128/e_hypotl.c
+++ b/sysdeps/ieee754/ldbl-128/e_hypotl.c
@@ -1,141 +1,109 @@
-/* e_hypotl.c -- long double version of e_hypot.c.
- */
+/* Euclidean distance function.  Long Double/Binary128 version.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
 
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
 
-/* __ieee754_hypotl(x,y)
- *
- * Method :
- *	If (assume round-to-nearest) z=x*x+y*y
- *	has error less than sqrtl(2)/2 ulp, than
- *	sqrtl(z) has error less than 1 ulp (exercise).
- *
- *	So, compute sqrtl(x*x+y*y) with some care as
- *	follows to get the error below 1 ulp:
- *
- *	Assume x>y>0;
- *	(if possible, set rounding to round-to-nearest)
- *	1. if x > 2y  use
- *		x1*x1+(y*y+(x2*(x+x1))) for x*x+y*y
- *	where x1 = x with lower 64 bits cleared, x2 = x-x1; else
- *	2. if x <= 2y use
- *		t1*y1+((x-y)*(x-y)+(t1*y2+t2*y))
- *	where t1 = 2x with lower 64 bits cleared, t2 = 2x-t1,
- *	y1= y with lower 64 bits chopped, y2 = y-y1.
- *
- *	NOTE: scaling may be necessary if some argument is too
- *	      large or too tiny
- *
- * Special cases:
- *	hypotl(x,y) is INF if x or y is +INF or -INF; else
- *	hypotl(x,y) is NAN if x or y is NAN.
- *
- * Accuracy:
- *	hypotl(x,y) returns sqrtl(x^2+y^2) with error less
- *	than 1 ulps (units in the last place)
- */
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+/* This implementation is based on 'An Improved Algorithm for hypot(a,b)' by
+   Carlos F. Borges [1] using the MyHypot3 with the following changes:
+
+   - Handle qNaN and sNaN.
+   - Tune the 'widely varying operands' to avoid spurious underflow
+     due the multiplication and fix the return value for upwards
+     rounding mode.
+   - Handle required underflow exception for subnormal results.
+
+   [1] https://arxiv.org/pdf/1904.09481.pdf  */
 
 #include <math.h>
 #include <math_private.h>
 #include <math-underflow.h>
 #include <libm-alias-finite.h>
 
+/* sqrt (LDBL_EPSILON / 2.0)  */
+#define SQRT_EPS_DIV_2      L(0x1.6a09e667f3bcc908b2fb1366ea95p-57)
+/* DBL_MIN / (sqrt (LDBL_EPSILON / 2.0))   */
+#define LDBL_MIN_THRESHOLD  L(0x1.6a09e667f3bcc908b2fb1366ea96p-16326)
+/* eps (long double) *(sqrt (LDBL_MIN)  */
+#define SCALE               L(0x1p-8303)
+/* 1 / eps (sqrt (LDBL_MIN)  */
+#define INV_SCALE           L(0x1p+8303)
+/* sqrt (LDBL_MAX)  */
+#define SQRT_LDBL_MAX       L(0x1.6a09e667f3bcc908b2fb1366ea95p+8191)
+/* sqrt (LDBL_MIN)  */
+#define SQRT_LDBL_MIN       L(0x1p-8191)
+
 _Float128
 __ieee754_hypotl(_Float128 x, _Float128 y)
 {
-	_Float128 a,b,t1,t2,y1,y2,w;
-	int64_t j,k,ha,hb;
+  if ((isinf (x) || isinf (y))
+      && !issignaling (x) && !issignaling (y))
+    return INFINITY;
+  if (isnan (x) || isnan (y))
+    return x + y;
+
+  _Float128 ax = fabsl (x);
+  _Float128 ay = fabsl (y);
+  if (ay > ax)
+    {
+      _Float128 tmp = ax;
+      ax = ay;
+      ay = tmp;
+    }
+
+  /* Widely varying operands.  The DBL_MIN_THRESHOLD check is used to avoid
+     an spurious underflow from the multiplication.  */
+  if (ax >= LDBL_MIN_THRESHOLD && ay <= ax * SQRT_EPS_DIV_2)
+    return (ay == 0.0) ? ax : ax + LDBL_TRUE_MIN;
+
+  _Float128 scale = SCALE;
+  if (ax > SQRT_LDBL_MAX)
+    {
+      ax *= scale;
+      ay *= scale;
+      scale = INV_SCALE;
+    }
+  else if (ay < SQRT_LDBL_MIN)
+    {
+      ax /= scale;
+      ay /= scale;
+    }
+  else
+    scale = 1.0;
+
+  _Float128 h = sqrtl (ax * ax + ay * ay);
 
-	GET_LDOUBLE_MSW64(ha,x);
-	ha &= 0x7fffffffffffffffLL;
-	GET_LDOUBLE_MSW64(hb,y);
-	hb &= 0x7fffffffffffffffLL;
-	if(hb > ha) {a=y;b=x;j=ha; ha=hb;hb=j;} else {a=x;b=y;}
-	SET_LDOUBLE_MSW64(a,ha);	/* a <- |a| */
-	SET_LDOUBLE_MSW64(b,hb);	/* b <- |b| */
-	if((ha-hb)>0x78000000000000LL) {return a+b;} /* x/y > 2**120 */
-	k=0;
-	if(ha > 0x5f3f000000000000LL) {	/* a>2**8000 */
-	   if(ha >= 0x7fff000000000000LL) {	/* Inf or NaN */
-	       uint64_t low;
-	       w = a+b;			/* for sNaN */
-	       if (issignaling (a) || issignaling (b))
-		 return w;
-	       GET_LDOUBLE_LSW64(low,a);
-	       if(((ha&0xffffffffffffLL)|low)==0) w = a;
-	       GET_LDOUBLE_LSW64(low,b);
-	       if(((hb^0x7fff000000000000LL)|low)==0) w = b;
-	       return w;
-	   }
-	   /* scale a and b by 2**-9600 */
-	   ha -= 0x2580000000000000LL;
-	   hb -= 0x2580000000000000LL;	k += 9600;
-	   SET_LDOUBLE_MSW64(a,ha);
-	   SET_LDOUBLE_MSW64(b,hb);
-	}
-	if(hb < 0x20bf000000000000LL) {	/* b < 2**-8000 */
-	    if(hb <= 0x0000ffffffffffffLL) {	/* subnormal b or 0 */
-		uint64_t low;
-		GET_LDOUBLE_LSW64(low,b);
-		if((hb|low)==0) return a;
-		t1=0;
-		SET_LDOUBLE_MSW64(t1,0x7ffd000000000000LL); /* t1=2^16382 */
-		b *= t1;
-		a *= t1;
-		k -= 16382;
-		GET_LDOUBLE_MSW64 (ha, a);
-		GET_LDOUBLE_MSW64 (hb, b);
-		if (hb > ha)
-		  {
-		    t1 = a;
-		    a = b;
-		    b = t1;
-		    j = ha;
-		    ha = hb;
-		    hb = j;
-		  }
-	    } else {		/* scale a and b by 2^9600 */
-		ha += 0x2580000000000000LL;	/* a *= 2^9600 */
-		hb += 0x2580000000000000LL;	/* b *= 2^9600 */
-		k -= 9600;
-		SET_LDOUBLE_MSW64(a,ha);
-		SET_LDOUBLE_MSW64(b,hb);
-	    }
-	}
-    /* medium size a and b */
-	w = a-b;
-	if (w>b) {
-	    t1 = 0;
-	    SET_LDOUBLE_MSW64(t1,ha);
-	    t2 = a-t1;
-	    w  = sqrtl(t1*t1-(b*(-b)-t2*(a+t1)));
-	} else {
-	    a  = a+a;
-	    y1 = 0;
-	    SET_LDOUBLE_MSW64(y1,hb);
-	    y2 = b - y1;
-	    t1 = 0;
-	    SET_LDOUBLE_MSW64(t1,ha+0x0001000000000000LL);
-	    t2 = a - t1;
-	    w  = sqrtl(t1*y1-(w*(-w)-(t1*y2+t2*b)));
-	}
-	if(k!=0) {
-	    uint64_t high;
-	    t1 = 1;
-	    GET_LDOUBLE_MSW64(high,t1);
-	    SET_LDOUBLE_MSW64(t1,high+(k<<48));
-	    w *= t1;
-	    math_check_force_underflow_nonneg (w);
-	    return w;
-	} else return w;
+  _Float128 t1;
+  _Float128 t2;
+  if (h == 0.0)
+    return h;
+  if (h <= 2.0 * ay)
+    {
+      _Float128 delta = h - ay;
+      t1 = ax * (2.0 * delta - ax);
+      t2 = (delta - 2.0 * (ax - ay)) * delta;
+    }
+  else
+    {
+      _Float128 delta = h - ax;
+      t1 = 2.0 * delta * (ax - 2 * ay);
+      t2 = (4.0 * delta - ay) * ay + delta * delta;
+    }
+  h -= (t1 + t2) / (2.0 * h);
+  h *= scale;
+  math_check_force_underflow_nonneg (h);
+  return h;
 }
 libm_alias_finite (__ieee754_hypotl, __hypotl)
-- 
2.30.2


^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH 7/9] math: Remove powerpc e_hypot
  2021-10-06 18:05 [PATCH 0/9] Improve hypot() Adhemerval Zanella
                   ` (5 preceding siblings ...)
  2021-10-06 18:05 ` [PATCH 6/9] math: Use an improved algorithm for hypotl (ldbl-128) Adhemerval Zanella
@ 2021-10-06 18:05 ` Adhemerval Zanella
  2021-10-06 19:43   ` Paul E Murphy
  2021-10-06 18:05 ` [PATCH 8/9] i386: Move hypot implementation to C Adhemerval Zanella
                   ` (2 subsequent siblings)
  9 siblings, 1 reply; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 18:05 UTC (permalink / raw)
  To: libc-alpha

power9 master:

  "hypot": {
   "workload-random": {
    "duration": 5.20744e+08,
    "iterations": 5.6e+07,
    "reciprocal-throughput": 9.27604,
    "latency": 9.32194,
    "max-throughput": 1.07805e+08,
    "min-throughput": 1.07274e+08
   }
  }

power9 patched:

  "hypot": {
   "workload-random": {
    "duration": 5.23124e+08,
    "iterations": 5.4e+07,
    "reciprocal-throughput": 9.51892,
    "latency": 9.85606,
    "max-throughput": 1.05054e+08,
    "min-throughput": 1.0146e+08
   }
  }

power8 master:

  "hypot": {
   "workload-random": {
    "duration": 5.21128e+08,
    "iterations": 4.6e+07,
    "reciprocal-throughput": 11.3589,
    "latency": 11.2988,
    "max-throughput": 8.80368e+07,
    "min-throughput": 8.85047e+07
   }
  }

power8 patched:

  "hypot": {
   "workload-random": {
    "duration": 5.22651e+08,
    "iterations": 4.6e+07,
    "reciprocal-throughput": 11.3764,
    "latency": 11.3475,
    "max-throughput": 8.79009e+07,
    "min-throughput": 8.81252e+07
   }
  }

Checked on powerpc64-linux-gnu (power8) and powerpc64le-linux-gnu
(power9).
---
 sysdeps/powerpc/fpu/e_hypot.c                 | 87 -------------------
 sysdeps/powerpc/fpu/e_hypotf.c                | 78 -----------------
 .../powerpc32/power4/fpu/multiarch/Makefile   |  5 +-
 .../power4/fpu/multiarch/e_hypot-power7.c     | 23 -----
 .../power4/fpu/multiarch/e_hypot-ppc32.c      | 23 -----
 .../powerpc32/power4/fpu/multiarch/e_hypot.c  | 33 -------
 .../power4/fpu/multiarch/e_hypotf-power7.c    | 23 -----
 .../power4/fpu/multiarch/e_hypotf-ppc32.c     | 23 -----
 .../powerpc32/power4/fpu/multiarch/e_hypotf.c | 33 -------
 9 files changed, 1 insertion(+), 327 deletions(-)
 delete mode 100644 sysdeps/powerpc/fpu/e_hypot.c
 delete mode 100644 sysdeps/powerpc/fpu/e_hypotf.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
 delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c

diff --git a/sysdeps/powerpc/fpu/e_hypot.c b/sysdeps/powerpc/fpu/e_hypot.c
deleted file mode 100644
index f96c589bbd..0000000000
--- a/sysdeps/powerpc/fpu/e_hypot.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Pythagorean addition using doubles
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If
-   not, see <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <math_private.h>
-#include <math-underflow.h>
-#include <stdint.h>
-#include <libm-alias-finite.h>
-
-/* __ieee754_hypot(x,y)
- *
- * This a FP only version without any FP->INT conversion.
- * It is similar to default C version, making appropriates
- * overflow and underflows checks as well scaling when it
- * is needed.
- */
-
-double
-__ieee754_hypot (double x, double y)
-{
-  if ((isinf (x) || isinf (y))
-      && !issignaling (x) && !issignaling (y))
-    return INFINITY;
-  if (isnan (x) || isnan (y))
-    return x + y;
-
-  x = fabs (x);
-  y = fabs (y);
-
-  if (y > x)
-    {
-      double t = x;
-      x = y;
-      y = t;
-    }
-  if (y == 0.0)
-    return x;
-
-  /* if y is higher enough, y * 2^60 might overflow. The tests if
-     y >= 1.7976931348623157e+308/2^60 (two60factor) and uses the
-     appropriate check to avoid the overflow exception generation.  */
-  if (y <= 0x1.fffffffffffffp+963 && x > (y * 0x1p+60))
-    return x + y;
-
-  if (x > 0x1p+500)
-    {
-      x *= 0x1p-600;
-      y *= 0x1p-600;
-      return sqrt (x * x + y * y) / 0x1p-600;
-    }
-  if (y < 0x1p-500)
-    {
-      if (y <= 0x0.fffffffffffffp-1022)
-	{
-	  x *= 0x1p+1022;
-	  y *= 0x1p+1022;
-	  double ret = sqrt (x * x + y * y) / 0x1p+1022;
-	  math_check_force_underflow_nonneg (ret);
-	  return ret;
-	}
-      else
-	{
-	  x *= 0x1p+600;
-	  y *= 0x1p+600;
-	  return sqrt (x * x + y * y) / 0x1p+600;
-	}
-    }
-  return sqrt (x * x + y * y);
-}
-#ifndef __ieee754_hypot
-libm_alias_finite (__ieee754_hypot, __hypot)
-#endif
diff --git a/sysdeps/powerpc/fpu/e_hypotf.c b/sysdeps/powerpc/fpu/e_hypotf.c
deleted file mode 100644
index fa201dda51..0000000000
--- a/sysdeps/powerpc/fpu/e_hypotf.c
+++ /dev/null
@@ -1,78 +0,0 @@
-/* Pythagorean addition using floats
-   Copyright (C) 2011-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public License as
-   published by the Free Software Foundation; either version 2 of the
-   License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public
-   License along with the GNU C Library; see the file COPYING.LIB.  If
-   not, see <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <math_private.h>
-#include <stdint.h>
-#include <libm-alias-finite.h>
-
-/* __ieee754_hypotf(x,y)
-
-   This a FP only version without any FP->INT conversion.
-   It is similar to default C version, making appropriates
-   overflow and underflows checks as using double precision
-   instead of scaling.  */
-
-#ifdef _ARCH_PWR7
-/* POWER7 isinf and isnan optimizations are fast. */
-# define TEST_INF_NAN(x, y)                                      \
-   if ((isinff(x) || isinff(y))					 \
-       && !issignaling (x) && !issignaling (y))			 \
-     return INFINITY;                                            \
-   if (isnanf(x) || isnanf(y))                                   \
-     return x + y;
-# else
-/* For POWER6 and below isinf/isnan triggers LHS and PLT calls are
- * costly (especially for POWER6). */
-# define GET_TWO_FLOAT_WORD(f1,f2,i1,i2)                         \
- do {                                                            \
-   ieee_float_shape_type gf_u1;                                  \
-   ieee_float_shape_type gf_u2;                                  \
-   gf_u1.value = (f1);                                           \
-   gf_u2.value = (f2);                                           \
-   (i1) = gf_u1.word & 0x7fffffff;                               \
-   (i2) = gf_u2.word & 0x7fffffff;                               \
- } while (0)
-
-# define TEST_INF_NAN(x, y)                                      \
- do {                                                            \
-   uint32_t hx, hy;                                              \
-   GET_TWO_FLOAT_WORD(x, y, hx, hy);                             \
-   if (hy > hx) {                                                \
-     uint32_t ht = hx; hx = hy; hy = ht;                         \
-   }                                                             \
-   if (hx >= 0x7f800000) {                                       \
-     if ((hx == 0x7f800000 || hy == 0x7f800000)			 \
-	 && !issignaling (x) && !issignaling (y))		 \
-       return INFINITY;                                          \
-     return x + y;						 \
-   }                                                             \
- } while (0)
-#endif
-
-
-float
-__ieee754_hypotf (float x, float y)
-{
-  TEST_INF_NAN (x, y);
-
-  return sqrt ((double) x * x + (double) y * y);
-}
-#ifndef __ieee754_hypotf
-libm_alias_finite (__ieee754_hypotf, __hypotf)
-#endif
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile
index 60f2c95532..1de0f9b350 100644
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile
+++ b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/Makefile
@@ -15,8 +15,7 @@ libm-sysdep_routines += s_llrintf-power6 s_llrintf-ppc32 s_llrint-power6 \
 			s_lrint-ppc32 s_modf-power5+ s_modf-ppc32 \
 			s_modff-power5+ s_modff-ppc32 s_logbl-power7 \
 			s_logbl-ppc32 s_logb-power7 s_logb-ppc32 \
-			s_logbf-power7 s_logbf-ppc32 e_hypot-power7 \
-			e_hypot-ppc32 e_hypotf-power7 e_hypotf-ppc32
+			s_logbf-power7 s_logbf-ppc32
 
 CFLAGS-s_llrintf-power6.c += -mcpu=power6
 CFLAGS-s_llrintf-ppc32.c += -mcpu=power4
@@ -35,8 +34,6 @@ CFLAGS-s_modff-power5+.c = -mcpu=power5+
 CFLAGS-s_logbl-power7.c = -mcpu=power7
 CFLAGS-s_logb-power7.c = -mcpu=power7
 CFLAGS-s_logbf-power7.c = -mcpu=power7
-CFLAGS-e_hypot-power7.c = -mcpu=power7
-CFLAGS-e_hypotf-power7.c = -mcpu=power7
 
 # These files quiet sNaNs in a way that is optimized away without
 # -fsignaling-nans.
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
deleted file mode 100644
index 382b4a0b27..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* __ieee_hypot() POWER7 version.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-
-#define __ieee754_hypot __ieee754_hypot_power7
-
-#include <sysdeps/powerpc/fpu/e_hypot.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
deleted file mode 100644
index abb14d5469..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* __ieee_hypot() PowerPC32 version.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-
-#define __ieee754_hypot __ieee754_hypot_ppc32
-
-#include <sysdeps/powerpc/fpu/e_hypot.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
deleted file mode 100644
index a16efa350c..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Multiple versions of ieee754_hypot.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <math_private.h>
-#include <math_ldbl_opt.h>
-#include <libm-alias-finite.h>
-#include "init-arch.h"
-
-extern __typeof (__ieee754_hypot) __ieee754_hypot_ppc32 attribute_hidden;
-extern __typeof (__ieee754_hypot) __ieee754_hypot_power7 attribute_hidden;
-
-libc_ifunc (__ieee754_hypot,
-	    (hwcap & PPC_FEATURE_ARCH_2_06)
-	    ? __ieee754_hypot_power7
-            : __ieee754_hypot_ppc32);
-
-libm_alias_finite (__ieee754_hypot, __hypot)
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
deleted file mode 100644
index f8a26ff22f..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* __ieee754_hypot POWER7 version.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-
-#define __ieee754_hypotf __ieee754_hypotf_power7
-
-#include <sysdeps/powerpc/fpu/e_hypotf.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
deleted file mode 100644
index b13f8c9db2..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* __ieee_hypot() PowerPC32 version.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-
-#define __ieee754_hypotf __ieee754_hypotf_ppc32
-
-#include <sysdeps/ieee754/flt-32/e_hypotf.c>
diff --git a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c b/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
deleted file mode 100644
index 1e72605db8..0000000000
--- a/sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/* Multiple versions of ieee754_hypotf.
-   Copyright (C) 2013-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <math.h>
-#include <math_private.h>
-#include <math_ldbl_opt.h>
-#include <libm-alias-finite.h>
-#include "init-arch.h"
-
-extern __typeof (__ieee754_hypotf) __ieee754_hypotf_ppc32 attribute_hidden;
-extern __typeof (__ieee754_hypotf) __ieee754_hypotf_power7 attribute_hidden;
-
-libc_ifunc (__ieee754_hypotf,
-	    (hwcap & PPC_FEATURE_ARCH_2_06)
-	    ? __ieee754_hypotf_power7
-            : __ieee754_hypotf_ppc32);
-
-libm_alias_finite (__ieee754_hypotf, __hypotf)
-- 
2.30.2


^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH 8/9] i386: Move hypot implementation to C
  2021-10-06 18:05 [PATCH 0/9] Improve hypot() Adhemerval Zanella
                   ` (6 preceding siblings ...)
  2021-10-06 18:05 ` [PATCH 7/9] math: Remove powerpc e_hypot Adhemerval Zanella
@ 2021-10-06 18:05 ` Adhemerval Zanella
  2021-10-06 18:37   ` Joseph Myers
  2021-10-06 18:05 ` [PATCH 9/9] math: Remove the error handling wrapper from hypot and hypotf Adhemerval Zanella
  2021-10-07 11:03 ` [PATCH 0/9] Improve hypot() Paul Zimmermann
  9 siblings, 1 reply; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 18:05 UTC (permalink / raw)
  To: libc-alpha

The generic hypotf is slight slower, mostly due the tricks the assembly
does to optimize the isinf/isnan/issignaling.  Results on a Ryzen 5900X
with gcc 10.3.1:

master:
  "hypotf": {
   "workload-random": {
    "duration": 3.76493e+09,
    "iterations": 6.8e+07,
    "reciprocal-throughput": 38.4243,
    "latency": 72.309,
    "max-throughput": 2.60252e+07,
    "min-throughput": 1.38295e+07
   }
  }

patched:
  "hypotf": {
   "workload-random": {
    "duration": 3.78098e+09,
    "iterations": 6.8e+07,
    "reciprocal-throughput": 28.9206,
    "latency": 82.2848,
    "max-throughput": 3.45774e+07,
    "min-throughput": 1.21529e+07
   }
  }

The generic hypot is way slower, since the optimized implementation
uses the i386 default excessive precision to issue the operation
directly.  A similar implementation is provided instead of using
the generic implementation:

master:
  "hypot": {
   "workload-random": {
    "duration": 3.7452e+09,
    "iterations": 6.6e+07,
    "reciprocal-throughput": 40.3203,
    "latency": 73.1707,
    "max-throughput": 2.48014e+07,
    "min-throughput": 1.36667e+07
   }
  }

patched:
./benchtests/bench-hypot
  "hypot": {
   "workload-random": {
    "duration": 3.72606e+09,
    "iterations": 7.6e+07,
    "reciprocal-throughput": 25.9437,
    "latency": 72.1104,
    "max-throughput": 3.8545e+07,
    "min-throughput": 1.38676e+07
   }
  }

Checked on i686-linux-gnu.
---
 sysdeps/i386/fpu/e_hypot.S  | 75 -------------------------------------
 sysdeps/i386/fpu/e_hypot.c  | 42 +++++++++++++++++++++
 sysdeps/i386/fpu/e_hypotf.S | 64 -------------------------------
 3 files changed, 42 insertions(+), 139 deletions(-)
 delete mode 100644 sysdeps/i386/fpu/e_hypot.S
 create mode 100644 sysdeps/i386/fpu/e_hypot.c
 delete mode 100644 sysdeps/i386/fpu/e_hypotf.S

diff --git a/sysdeps/i386/fpu/e_hypot.S b/sysdeps/i386/fpu/e_hypot.S
deleted file mode 100644
index f2c956b77a..0000000000
--- a/sysdeps/i386/fpu/e_hypot.S
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Compute the hypothenuse of X and Y.
-   Copyright (C) 1998-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <i386-math-asm.h>
-#include <libm-alias-finite.h>
-
-DEFINE_DBL_MIN
-
-#ifdef PIC
-# define MO(op) op##@GOTOFF(%edx)
-#else
-# define MO(op) op
-#endif
-
-	.text
-ENTRY(__ieee754_hypot)
-#ifdef  PIC
-	LOAD_PIC_REG (dx)
-#endif
-	fldl	4(%esp)		// x
-	fxam
-	fnstsw
-	fldl	12(%esp)	// y : x
-	movb	%ah, %ch
-	fxam
-	fnstsw
-	movb	%ah, %al
-	orb	%ch, %ah
-	sahf
-	jc	1f
-	fmul	%st(0)		// y * y : x
-	fxch			// x : y * y
-	fmul	%st(0)		// x * x : y * y
-	faddp			// x * x + y * y
-	fsqrt
-	DBL_NARROW_EVAL_UFLOW_NONNEG
-2:	ret
-
-	// We have to test whether any of the parameters is Inf.
-	// In this case the result is infinity.
-1:	andb	$0x45, %al
-	cmpb	$5, %al
-	je	3f		// jump if y is Inf
-	andb	$0x45, %ch
-	cmpb	$5, %ch
-	jne	4f		// jump if x is not Inf
-	fxch
-3:	fstp	%st(1)
-	fabs
-	jmp	2b
-
-4:	testb	$1, %al
-	jnz	5f		// y is NaN
-	fxch
-5:	fstp	%st(1)
-	jmp	2b
-
-END(__ieee754_hypot)
-libm_alias_finite (__ieee754_hypot, __hypot)
diff --git a/sysdeps/i386/fpu/e_hypot.c b/sysdeps/i386/fpu/e_hypot.c
new file mode 100644
index 0000000000..4920a8cb49
--- /dev/null
+++ b/sysdeps/i386/fpu/e_hypot.c
@@ -0,0 +1,42 @@
+/* Euclidean distance function.  Double/Binary64 i386 version.
+   Copyright (C) 2021 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <https://www.gnu.org/licenses/>.  */
+
+#include <math.h>
+#include <math_private.h>
+#include <math-underflow.h>
+#include <math-narrow-eval.h>
+#include <libm-alias-finite.h>
+#include <math_config.h>
+
+/* The i386 allows ot use the default excess of precision to optimize the
+   hypot implementation, since internal multiplication and sqrt is carried
+   with 80-bit FP type.  */
+double
+__ieee754_hypot (double x, double y)
+{
+  if ((isinf (x) || isinf (y))
+      && !issignaling (x) && !issignaling (y))
+    return INFINITY;
+  if (isnan (x) || isnan (y))
+    return x + y;
+
+  double r = math_narrow_eval (sqrt (x * x + y * y));
+  math_check_force_underflow_nonneg (r);
+  return r;
+}
+libm_alias_finite (__ieee754_hypot, __hypot)
diff --git a/sysdeps/i386/fpu/e_hypotf.S b/sysdeps/i386/fpu/e_hypotf.S
deleted file mode 100644
index cec5d15403..0000000000
--- a/sysdeps/i386/fpu/e_hypotf.S
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Compute the hypothenuse of X and Y.
-   Copyright (C) 1998-2021 Free Software Foundation, Inc.
-   This file is part of the GNU C Library.
-
-   The GNU C Library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Lesser General Public
-   License as published by the Free Software Foundation; either
-   version 2.1 of the License, or (at your option) any later version.
-
-   The GNU C Library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public
-   License along with the GNU C Library; if not, see
-   <https://www.gnu.org/licenses/>.  */
-
-#include <sysdep.h>
-#include <i386-math-asm.h>
-#include <libm-alias-finite.h>
-
-	.text
-ENTRY(__ieee754_hypotf)
-	flds	4(%esp)		// x
-	fxam
-	fnstsw
-	flds	8(%esp)		// y : x
-	movb	%ah, %ch
-	fxam
-	fnstsw
-	movb	%ah, %al
-	orb	%ch, %ah
-	sahf
-	jc	1f
-	fmul	%st(0)		// y * y : x
-	fxch			// x : y * y
-	fmul	%st(0)		// x * x : y * y
-	faddp			// x * x + y * y
-	fsqrt
-	FLT_NARROW_EVAL
-2:	ret
-
-	// We have to test whether any of the parameters is Inf.
-	// In this case the result is infinity.
-1:	andb	$0x45, %al
-	cmpb	$5, %al
-	je	3f		// jump if y is Inf
-	andb	$0x45, %ch
-	cmpb	$5, %ch
-	jne	4f		// jump if x is not Inf
-	fxch
-3:	fstp	%st(1)
-	fabs
-	jmp	2b
-
-4:	testb	$1, %al
-	jnz	5f		// y is NaN
-	fxch
-5:	fstp	%st(1)
-	jmp	2b
-
-END(__ieee754_hypotf)
-libm_alias_finite (__ieee754_hypotf, __hypotf)
-- 
2.30.2


^ permalink raw reply	[flat|nested] 31+ messages in thread

* [PATCH 9/9] math: Remove the error handling wrapper from hypot and hypotf
  2021-10-06 18:05 [PATCH 0/9] Improve hypot() Adhemerval Zanella
                   ` (7 preceding siblings ...)
  2021-10-06 18:05 ` [PATCH 8/9] i386: Move hypot implementation to C Adhemerval Zanella
@ 2021-10-06 18:05 ` Adhemerval Zanella
  2021-10-06 18:38   ` Joseph Myers
  2021-10-07 11:03 ` [PATCH 0/9] Improve hypot() Paul Zimmermann
  9 siblings, 1 reply; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 18:05 UTC (permalink / raw)
  To: libc-alpha

The error handling is moved to sysdeps/ieee754 version with no SVID
support.  The compatibility symbol versions still use the wrapper with
SVID error handling around the new code.  There is no new symbol version
nor compatibility code on !LIBM_SVID_COMPAT targets (e.g. riscv).

Only ia64 is unchanged, since it still uses the arch specific
__libm_error_region on its implementation.

On x86_64 (Ryzen 5900X) with gcc 10.3.1:

* master:
    "hypot": {
     "workload-random": {
      "duration": 3.70911e+09,
      "iterations": 2.44e+08,
      "reciprocal-throughput": 15.0929,
      "latency": 15.3097,
      "max-throughput": 6.62565e+07,
      "min-throughput": 6.53181e+07
     }
    }

*patched:
  "hypot": {
   "workload-random": {
    "duration": 3.72248e+09,
    "iterations": 3.26e+08,
    "reciprocal-throughput": 11.1809,
    "latency": 11.6564,
    "max-throughput": 8.94384e+07,
    "min-throughput": 8.57895e+07
   }
  }

Checked on x86_64-linux-gnu, i686-linux-gnu, and aarch64-linux-gnu.
---
 math/Versions                                 |  2 ++
 math/w_hypot.c                                |  8 ++++++
 math/w_hypot_compat.c                         | 13 +++++++---
 math/w_hypotf.c                               |  8 ++++++
 math/w_hypotf_compat.c                        |  6 ++---
 sysdeps/i386/fpu/e_hypot.c                    | 14 +++++++++-
 sysdeps/ieee754/dbl-64/e_hypot.c              | 26 ++++++++++++++++---
 sysdeps/ieee754/dbl-64/w_hypot.c              |  1 +
 sysdeps/ieee754/flt-32/e_hypotf.c             | 19 +++++++++++---
 sysdeps/ieee754/flt-32/w_hypotf.c             |  1 +
 sysdeps/mach/hurd/i386/libm.abilist           |  2 ++
 sysdeps/mach/hurd/libhurduser.abilist         |  0
 sysdeps/mach/libmachuser.abilist              |  0
 sysdeps/unix/sysv/linux/aarch64/libm.abilist  |  2 ++
 sysdeps/unix/sysv/linux/alpha/libm.abilist    |  2 ++
 sysdeps/unix/sysv/linux/arm/be/libm.abilist   |  2 ++
 sysdeps/unix/sysv/linux/arm/le/libm.abilist   |  2 ++
 sysdeps/unix/sysv/linux/hppa/libm.abilist     |  2 ++
 sysdeps/unix/sysv/linux/i386/libm.abilist     |  2 ++
 .../sysv/linux/m68k/coldfire/libm.abilist     |  2 ++
 .../unix/sysv/linux/m68k/m680x0/libm.abilist  |  2 ++
 .../sysv/linux/microblaze/be/libm.abilist     |  2 ++
 .../sysv/linux/microblaze/le/libm.abilist     |  2 ++
 .../unix/sysv/linux/mips/mips32/libm.abilist  |  2 ++
 .../unix/sysv/linux/mips/mips64/libm.abilist  |  2 ++
 sysdeps/unix/sysv/linux/nios2/libm.abilist    |  2 ++
 .../linux/powerpc/powerpc32/fpu/libm.abilist  |  2 ++
 .../powerpc/powerpc32/nofpu/libm.abilist      |  2 ++
 .../linux/powerpc/powerpc64/be/libm.abilist   |  2 ++
 .../linux/powerpc/powerpc64/le/libm.abilist   |  2 ++
 .../unix/sysv/linux/s390/s390-32/libm.abilist |  2 ++
 .../unix/sysv/linux/s390/s390-64/libm.abilist |  2 ++
 sysdeps/unix/sysv/linux/sh/be/libm.abilist    |  2 ++
 sysdeps/unix/sysv/linux/sh/le/libm.abilist    |  2 ++
 .../sysv/linux/sparc/sparc32/libm.abilist     |  2 ++
 .../sysv/linux/sparc/sparc64/libm.abilist     |  2 ++
 .../unix/sysv/linux/x86_64/64/libm.abilist    |  2 ++
 .../unix/sysv/linux/x86_64/x32/libm.abilist   |  2 ++
 38 files changed, 135 insertions(+), 15 deletions(-)
 create mode 100644 math/w_hypot.c
 create mode 100644 math/w_hypotf.c
 create mode 100644 sysdeps/ieee754/dbl-64/w_hypot.c
 create mode 100644 sysdeps/ieee754/flt-32/w_hypotf.c
 delete mode 100644 sysdeps/mach/hurd/libhurduser.abilist
 delete mode 100644 sysdeps/mach/libmachuser.abilist

diff --git a/math/Versions b/math/Versions
index a4b5405ddc..fef7a08c3b 100644
--- a/math/Versions
+++ b/math/Versions
@@ -628,5 +628,7 @@ libm {
     fminimum_numf64x; fminimum_numf128;
     fminimum_magf64x; fminimum_magf128;
     fminimum_mag_numf64x; fminimum_mag_numf128;
+    # No SVID compatible error handling.
+    hypotf; hypot;
   }
 }
diff --git a/math/w_hypot.c b/math/w_hypot.c
new file mode 100644
index 0000000000..66f723a896
--- /dev/null
+++ b/math/w_hypot.c
@@ -0,0 +1,8 @@
+#include <math-type-macros-float.h>
+#undef __USE_WRAPPER_TEMPLATE
+#define __USE_WRAPPER_TEMPLATE 1
+#undef declare_mgen_alias
+#define declare_mgen_alias(a, b)
+#include <w_hypot_template.c>
+versioned_symbol (libm, __hypot, hypot, GLIBC_2_35);
+libm_alias_float_other (__hypot, hypot)
diff --git a/math/w_hypot_compat.c b/math/w_hypot_compat.c
index f07039cc51..8ee73078bf 100644
--- a/math/w_hypot_compat.c
+++ b/math/w_hypot_compat.c
@@ -20,9 +20,9 @@
 #include <libm-alias-double.h>
 
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_35)
 double
-__hypot (double x, double y)
+__hypot_compat (double x, double y)
 {
 	double z = __ieee754_hypot(x,y);
 	if(__builtin_expect(!isfinite(z), 0)
@@ -31,5 +31,12 @@ __hypot (double x, double y)
 
 	return z;
 }
-libm_alias_double (__hypot, hypot)
+compat_symbol (libm, __hypot_compat, hypot, GLIBC_2_0);
+# ifdef NO_LONG_DOUBLE
+weak_alias (__hypot_compat, hypotl)
+# endif
+# ifdef LONG_DOUBLE_COMPAT
+LONG_DOUBLE_COMPAT_CHOOSE_libm_expl (
+  compat_symbol (libm, __hypot_compat, hypotl, FIRST_VERSION_libm_hypotl), );
+# endif
 #endif
diff --git a/math/w_hypotf.c b/math/w_hypotf.c
new file mode 100644
index 0000000000..b15a9b06d0
--- /dev/null
+++ b/math/w_hypotf.c
@@ -0,0 +1,8 @@
+#include <math-type-macros-float.h>
+#undef __USE_WRAPPER_TEMPLATE
+#define __USE_WRAPPER_TEMPLATE 1
+#undef declare_mgen_alias
+#define declare_mgen_alias(a, b)
+#include <w_hypot_template.c>
+versioned_symbol (libm, __hypotf, hypotf, GLIBC_2_35);
+libm_alias_float_other (__hypotf, hypotf)
diff --git a/math/w_hypotf_compat.c b/math/w_hypotf_compat.c
index 05898d3420..2bde4553b0 100644
--- a/math/w_hypotf_compat.c
+++ b/math/w_hypotf_compat.c
@@ -22,9 +22,9 @@
 #include <libm-alias-float.h>
 
 
-#if LIBM_SVID_COMPAT
+#if LIBM_SVID_COMPAT && SHLIB_COMPAT (libm, GLIBC_2_0, GLIBC_2_35)
 float
-__hypotf(float x, float y)
+__hypotf_compat (float x, float y)
 {
 	float z = __ieee754_hypotf(x,y);
 	if(__builtin_expect(!isfinite(z), 0)
@@ -34,5 +34,5 @@ __hypotf(float x, float y)
 
 	return z;
 }
-libm_alias_float (__hypot, hypot)
+compat_symbol (libm, __hypotf_compat, hypotf, GLIBC_2_0);
 #endif
diff --git a/sysdeps/i386/fpu/e_hypot.c b/sysdeps/i386/fpu/e_hypot.c
index 4920a8cb49..e16f3bf0ab 100644
--- a/sysdeps/i386/fpu/e_hypot.c
+++ b/sysdeps/i386/fpu/e_hypot.c
@@ -20,14 +20,17 @@
 #include <math_private.h>
 #include <math-underflow.h>
 #include <math-narrow-eval.h>
+#include <math-svid-compat.h>
 #include <libm-alias-finite.h>
+#include <libm-alias-double.h>
 #include <math_config.h>
+#include <errno.h>
 
 /* The i386 allows ot use the default excess of precision to optimize the
    hypot implementation, since internal multiplication and sqrt is carried
    with 80-bit FP type.  */
 double
-__ieee754_hypot (double x, double y)
+__hypot (double x, double y)
 {
   if ((isinf (x) || isinf (y))
       && !issignaling (x) && !issignaling (y))
@@ -37,6 +40,15 @@ __ieee754_hypot (double x, double y)
 
   double r = math_narrow_eval (sqrt (x * x + y * y));
   math_check_force_underflow_nonneg (r);
+  if (isinf (r))
+    __set_errno (ERANGE);
   return r;
 }
+strong_alias (__hypot, __ieee754_hypot)
+#if LIBM_SVID_COMPAT
+versioned_symbol (libm, __hypot, hypot, GLIBC_2_35);
 libm_alias_finite (__ieee754_hypot, __hypot)
+libm_alias_double_other (__hypot, hypot)
+#else
+libm_alias_double (__hypot, hypot)
+#endif
diff --git a/sysdeps/ieee754/dbl-64/e_hypot.c b/sysdeps/ieee754/dbl-64/e_hypot.c
index 231fb0d70f..d20bc3e365 100644
--- a/sysdeps/ieee754/dbl-64/e_hypot.c
+++ b/sysdeps/ieee754/dbl-64/e_hypot.c
@@ -32,7 +32,18 @@
 #include <math-underflow.h>
 #include <math-narrow-eval.h>
 #include <libm-alias-finite.h>
+#include <libm-alias-double.h>
 #include <math_config.h>
+#include <math-svid-compat.h>
+#include <errno.h>
+
+static inline double
+handle_errno (double r)
+{
+  if (isinf (r))
+    __set_errno (ERANGE);
+  return r;
+}
 
 /* sqrt (DBL_EPSILON / 2.0)  */
 #define SQRT_EPS_DIV_2     0x1.6a09e667f3bcdp-27
@@ -48,7 +59,7 @@
 #define SQRT_DBL_MIN       0x1p-511
 
 double
-__ieee754_hypot (double x, double y)
+__hypot (double x, double y)
 {
   if ((isinf (x) || isinf (y))
       && !issignaling (x) && !issignaling (y))
@@ -68,7 +79,9 @@ __ieee754_hypot (double x, double y)
   /* Widely varying operands.  The DBL_MIN_THRESHOLD check is used to avoid
      a spurious underflow from the multiplication.  */
   if (ax >= DBL_MIN_THRESHOLD && ay <= ax * SQRT_EPS_DIV_2)
-    return (ay == 0.0) ? ax : math_narrow_eval (ax + DBL_TRUE_MIN);
+    return (ay == 0.0)
+	   ? ax
+	   : handle_errno (math_narrow_eval (ax + DBL_TRUE_MIN));
 
   double scale = SCALE;
   if (ax > SQRT_DBL_MAX)
@@ -105,8 +118,13 @@ __ieee754_hypot (double x, double y)
   h -= (t1 + t2) / (2.0 * h);
   h = math_narrow_eval (h * scale);
   math_check_force_underflow_nonneg (h);
-  return h;
+  return handle_errno (h);
 }
-#ifndef __ieee754_hypot
+strong_alias (__hypot, __ieee754_hypot)
 libm_alias_finite (__ieee754_hypot, __hypot)
+#if LIBM_SVID_COMPAT
+versioned_symbol (libm, __hypot, hypot, GLIBC_2_35);
+libm_alias_double_other (__hypot, hypot)
+#else
+libm_alias_double (__hypot, hypot)
 #endif
diff --git a/sysdeps/ieee754/dbl-64/w_hypot.c b/sysdeps/ieee754/dbl-64/w_hypot.c
new file mode 100644
index 0000000000..1cc8931700
--- /dev/null
+++ b/sysdeps/ieee754/dbl-64/w_hypot.c
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/ieee754/flt-32/e_hypotf.c b/sysdeps/ieee754/flt-32/e_hypotf.c
index 6495a91cd4..d73eecca8c 100644
--- a/sysdeps/ieee754/flt-32/e_hypotf.c
+++ b/sysdeps/ieee754/flt-32/e_hypotf.c
@@ -19,9 +19,12 @@
 #include <math.h>
 #include <math_private.h>
 #include <libm-alias-finite.h>
+#include <libm-alias-float.h>
+#include <math-svid-compat.h>
+#include <errno.h>
 
 float
-__ieee754_hypotf (float x, float y)
+__hypotf (float x, float y)
 {
   if ((isinf (x) || isinf (y))
       && !issignaling (x) && !issignaling (y))
@@ -29,8 +32,16 @@ __ieee754_hypotf (float x, float y)
   if (isnan (x) || isnan (y))
     return x + y;
 
-  return sqrt ((double) x * (double) x + (double) y * (double) y);
+  float r = sqrt ((double) x * (double) x + (double) y * (double) y);
+  if (!isfinite (r))
+    __set_errno (ERANGE);
+  return r;
 }
-#ifndef __ieee754_hypotf
-libm_alias_finite (__ieee754_hypotf, __hypotf)
+strong_alias (__hypotf, __ieee754_hypotf)
+#if LIBM_SVID_COMPAT
+versioned_symbol (libm, __hypotf, hypotf, GLIBC_2_35);
+libm_alias_float_other (__hypot, hypot)
+#else
+libm_alias_float (__hypot, hypot)
 #endif
+libm_alias_finite (__ieee754_hypotf, __hypotf)
diff --git a/sysdeps/ieee754/flt-32/w_hypotf.c b/sysdeps/ieee754/flt-32/w_hypotf.c
new file mode 100644
index 0000000000..1cc8931700
--- /dev/null
+++ b/sysdeps/ieee754/flt-32/w_hypotf.c
@@ -0,0 +1 @@
+/* Not needed.  */
diff --git a/sysdeps/mach/hurd/i386/libm.abilist b/sysdeps/mach/hurd/i386/libm.abilist
index abf91bd142..8f40ddb150 100644
--- a/sysdeps/mach/hurd/i386/libm.abilist
+++ b/sysdeps/mach/hurd/i386/libm.abilist
@@ -1179,3 +1179,5 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
diff --git a/sysdeps/mach/hurd/libhurduser.abilist b/sysdeps/mach/hurd/libhurduser.abilist
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/sysdeps/mach/libmachuser.abilist b/sysdeps/mach/libmachuser.abilist
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/sysdeps/unix/sysv/linux/aarch64/libm.abilist b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
index 1cef7d3db7..c2e3c6453e 100644
--- a/sysdeps/unix/sysv/linux/aarch64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/aarch64/libm.abilist
@@ -1144,3 +1144,5 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
diff --git a/sysdeps/unix/sysv/linux/alpha/libm.abilist b/sysdeps/unix/sysv/linux/alpha/libm.abilist
index 59d51021fa..4f85b6180f 100644
--- a/sysdeps/unix/sysv/linux/alpha/libm.abilist
+++ b/sysdeps/unix/sysv/linux/alpha/libm.abilist
@@ -1201,6 +1201,8 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/arm/be/libm.abilist b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
index 44666ad7cd..36190add84 100644
--- a/sysdeps/unix/sysv/linux/arm/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/be/libm.abilist
@@ -531,6 +531,8 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
 GLIBC_2.4 __clog10f F
diff --git a/sysdeps/unix/sysv/linux/arm/le/libm.abilist b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
index 44666ad7cd..36190add84 100644
--- a/sysdeps/unix/sysv/linux/arm/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/arm/le/libm.abilist
@@ -531,6 +531,8 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
 GLIBC_2.4 __clog10f F
diff --git a/sysdeps/unix/sysv/linux/hppa/libm.abilist b/sysdeps/unix/sysv/linux/hppa/libm.abilist
index 35d316a720..b5dd4e851f 100644
--- a/sysdeps/unix/sysv/linux/hppa/libm.abilist
+++ b/sysdeps/unix/sysv/linux/hppa/libm.abilist
@@ -842,4 +842,6 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/i386/libm.abilist b/sysdeps/unix/sysv/linux/i386/libm.abilist
index ef99b3e104..5d89aaa08e 100644
--- a/sysdeps/unix/sysv/linux/i386/libm.abilist
+++ b/sysdeps/unix/sysv/linux/i386/libm.abilist
@@ -1186,3 +1186,5 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
diff --git a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
index 44666ad7cd..36190add84 100644
--- a/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist
@@ -531,6 +531,8 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 _LIB_VERSION D 0x4
 GLIBC_2.4 __clog10 F
 GLIBC_2.4 __clog10f F
diff --git a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
index 58316c96ae..e7cd739a54 100644
--- a/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
+++ b/sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist
@@ -882,3 +882,5 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
diff --git a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
index b5e5da0272..274ecff630 100644
--- a/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/be/libm.abilist
@@ -843,3 +843,5 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
diff --git a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
index b5e5da0272..274ecff630 100644
--- a/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/microblaze/le/libm.abilist
@@ -843,3 +843,5 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
diff --git a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
index 4113d3170d..08b902118d 100644
--- a/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips32/libm.abilist
@@ -842,4 +842,6 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
index 18fe9cc57a..09bb3bd75b 100644
--- a/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/mips/mips64/libm.abilist
@@ -1144,3 +1144,5 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
diff --git a/sysdeps/unix/sysv/linux/nios2/libm.abilist b/sysdeps/unix/sysv/linux/nios2/libm.abilist
index 3a2b34ecc2..11abbb5668 100644
--- a/sysdeps/unix/sysv/linux/nios2/libm.abilist
+++ b/sysdeps/unix/sysv/linux/nios2/libm.abilist
@@ -843,3 +843,5 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
index 740cc8f55b..1688809c36 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist
@@ -888,6 +888,8 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
index 16fb30566b..e880cebd78 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist
@@ -887,6 +887,8 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
index ad4b98c09a..033385dfc1 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist
@@ -881,6 +881,8 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
index 955765051c..7923d428bc 100644
--- a/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist
@@ -1316,3 +1316,5 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
index 1f5bd7754d..9a84163089 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist
@@ -1145,6 +1145,8 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
index 0b18481f39..174bde4fa0 100644
--- a/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist
@@ -1145,6 +1145,8 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/sh/be/libm.abilist b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
index f525a9e77e..1e1324d667 100644
--- a/sysdeps/unix/sysv/linux/sh/be/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/be/libm.abilist
@@ -842,4 +842,6 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/sh/le/libm.abilist b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
index f525a9e77e..1e1324d667 100644
--- a/sysdeps/unix/sysv/linux/sh/le/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sh/le/libm.abilist
@@ -842,4 +842,6 @@ GLIBC_2.35 fminimumf64 F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 exp2l F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
index 727d1ce707..217e6eff7f 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist
@@ -1152,6 +1152,8 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
 GLIBC_2.4 __clog10l F
 GLIBC_2.4 __finitel F
 GLIBC_2.4 __fpclassifyl F
diff --git a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
index 0f57574523..6b53b0c59f 100644
--- a/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist
@@ -1144,3 +1144,5 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
diff --git a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
index 574789e061..dbefbc3a1a 100644
--- a/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/64/libm.abilist
@@ -1177,3 +1177,5 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
diff --git a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
index 1dc89b304d..8001d0f219 100644
--- a/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
+++ b/sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist
@@ -1177,3 +1177,5 @@ GLIBC_2.35 fminimumf64x F
 GLIBC_2.35 fminimuml F
 GLIBC_2.35 fsqrt F
 GLIBC_2.35 fsqrtl F
+GLIBC_2.35 hypot F
+GLIBC_2.35 hypotf F
-- 
2.30.2


^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 8/9] i386: Move hypot implementation to C
  2021-10-06 18:05 ` [PATCH 8/9] i386: Move hypot implementation to C Adhemerval Zanella
@ 2021-10-06 18:37   ` Joseph Myers
  2021-10-06 19:19     ` Adhemerval Zanella
  0 siblings, 1 reply; 31+ messages in thread
From: Joseph Myers @ 2021-10-06 18:37 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

On Wed, 6 Oct 2021, Adhemerval Zanella via Libc-alpha wrote:

> +/* The i386 allows ot use the default excess of precision to optimize the

s/ot/to/

> +   hypot implementation, since internal multiplication and sqrt is carried
> +   with 80-bit FP type.  */
> +double
> +__ieee754_hypot (double x, double y)
> +{
> +  if ((isinf (x) || isinf (y))
> +      && !issignaling (x) && !issignaling (y))
> +    return INFINITY;
> +  if (isnan (x) || isnan (y))
> +    return x + y;
> +
> +  double r = math_narrow_eval (sqrt (x * x + y * y));

There is no guarantee of when excess precision might or might not be used 
for intermediate computations, or whether it might not be used (so 
resulting in spurious overflows).  I'd expect explicit conversions of x 
and y to long double here, use of sqrtl and conversion of the result to 
double.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 9/9] math: Remove the error handling wrapper from hypot and hypotf
  2021-10-06 18:05 ` [PATCH 9/9] math: Remove the error handling wrapper from hypot and hypotf Adhemerval Zanella
@ 2021-10-06 18:38   ` Joseph Myers
  2021-10-06 19:23     ` Adhemerval Zanella
  0 siblings, 1 reply; 31+ messages in thread
From: Joseph Myers @ 2021-10-06 18:38 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

On Wed, 6 Oct 2021, Adhemerval Zanella via Libc-alpha wrote:

> +# ifdef LONG_DOUBLE_COMPAT
> +LONG_DOUBLE_COMPAT_CHOOSE_libm_expl (

The expl reference seems odd here.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 8/9] i386: Move hypot implementation to C
  2021-10-06 18:37   ` Joseph Myers
@ 2021-10-06 19:19     ` Adhemerval Zanella
  2021-10-06 19:20       ` Adhemerval Zanella
  0 siblings, 1 reply; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 19:19 UTC (permalink / raw)
  To: Joseph Myers; +Cc: libc-alpha



On 06/10/2021 15:37, Joseph Myers wrote:
> On Wed, 6 Oct 2021, Adhemerval Zanella via Libc-alpha wrote:
> 
>> +/* The i386 allows ot use the default excess of precision to optimize the
> 
> s/ot/to/

Ack.

> 
>> +   hypot implementation, since internal multiplication and sqrt is carried
>> +   with 80-bit FP type.  */
>> +double
>> +__ieee754_hypot (double x, double y)
>> +{
>> +  if ((isinf (x) || isinf (y))
>> +      && !issignaling (x) && !issignaling (y))
>> +    return INFINITY;
>> +  if (isnan (x) || isnan (y))
>> +    return x + y;
>> +
>> +  double r = math_narrow_eval (sqrt (x * x + y * y));
> 
> There is no guarantee of when excess precision might or might not be used 
> for intermediate computations, or whether it might not be used (so 
> resulting in spurious overflows).  I'd expect explicit conversions of x 
> and y to long double here, use of sqrtl and conversion of the result to 
> double.
> 

Something like the below?

  long double lx = x;
  long double ly = y;
  double r = sqrtl (lx * lx + ly * ly);
  return r;

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 8/9] i386: Move hypot implementation to C
  2021-10-06 19:19     ` Adhemerval Zanella
@ 2021-10-06 19:20       ` Adhemerval Zanella
  2021-10-06 19:52         ` Joseph Myers
  0 siblings, 1 reply; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 19:20 UTC (permalink / raw)
  To: Joseph Myers; +Cc: libc-alpha



On 06/10/2021 16:19, Adhemerval Zanella wrote:
> 
> 
> On 06/10/2021 15:37, Joseph Myers wrote:
>> On Wed, 6 Oct 2021, Adhemerval Zanella via Libc-alpha wrote:
>>
>>> +/* The i386 allows ot use the default excess of precision to optimize the
>>
>> s/ot/to/
> 
> Ack.
> 
>>
>>> +   hypot implementation, since internal multiplication and sqrt is carried
>>> +   with 80-bit FP type.  */
>>> +double
>>> +__ieee754_hypot (double x, double y)
>>> +{
>>> +  if ((isinf (x) || isinf (y))
>>> +      && !issignaling (x) && !issignaling (y))
>>> +    return INFINITY;
>>> +  if (isnan (x) || isnan (y))
>>> +    return x + y;
>>> +
>>> +  double r = math_narrow_eval (sqrt (x * x + y * y));
>>
>> There is no guarantee of when excess precision might or might not be used 
>> for intermediate computations, or whether it might not be used (so 
>> resulting in spurious overflows).  I'd expect explicit conversions of x 
>> and y to long double here, use of sqrtl and conversion of the result to 
>> double.
>>
> 
> Something like the below?
> 
>   long double lx = x;
>   long double ly = y;
>   double r = sqrtl (lx * lx + ly * ly);
>   return r;
> 

In fact we need to handle underflow:

  long double lx = x;
  long double ly = y;
  double r = sqrtl (lx * lx + ly * ly);
  math_check_force_underflow_nonneg (r);
  return r;

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 9/9] math: Remove the error handling wrapper from hypot and hypotf
  2021-10-06 18:38   ` Joseph Myers
@ 2021-10-06 19:23     ` Adhemerval Zanella
  0 siblings, 0 replies; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 19:23 UTC (permalink / raw)
  To: Joseph Myers; +Cc: libc-alpha



On 06/10/2021 15:38, Joseph Myers wrote:
> On Wed, 6 Oct 2021, Adhemerval Zanella via Libc-alpha wrote:
> 
>> +# ifdef LONG_DOUBLE_COMPAT
>> +LONG_DOUBLE_COMPAT_CHOOSE_libm_expl (
> 
> The expl reference seems odd here.
> 

Ack, this should be hypotl.

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 7/9] math: Remove powerpc e_hypot
  2021-10-06 18:05 ` [PATCH 7/9] math: Remove powerpc e_hypot Adhemerval Zanella
@ 2021-10-06 19:43   ` Paul E Murphy
  2021-10-06 19:46     ` Adhemerval Zanella
  0 siblings, 1 reply; 31+ messages in thread
From: Paul E Murphy @ 2021-10-06 19:43 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha



On 10/6/21 1:05 PM, Adhemerval Zanella via Libc-alpha wrote:
> power9 master:
> 
>    "hypot": {
>     "workload-random": {
>      "duration": 5.20744e+08,
>      "iterations": 5.6e+07,
>      "reciprocal-throughput": 9.27604,
>      "latency": 9.32194,
>      "max-throughput": 1.07805e+08,
>      "min-throughput": 1.07274e+08
>     }
>    }
> 
> power9 patched:
> 
>    "hypot": {
>     "workload-random": {
>      "duration": 5.23124e+08,
>      "iterations": 5.4e+07,
>      "reciprocal-throughput": 9.51892,
>      "latency": 9.85606,
>      "max-throughput": 1.05054e+08,
>      "min-throughput": 1.0146e+08
>     }
>    }
> 
> power8 master:
> 
>    "hypot": {
>     "workload-random": {
>      "duration": 5.21128e+08,
>      "iterations": 4.6e+07,
>      "reciprocal-throughput": 11.3589,
>      "latency": 11.2988,
>      "max-throughput": 8.80368e+07,
>      "min-throughput": 8.85047e+07
>     }
>    }
> 
> power8 patched:
> 
>    "hypot": {
>     "workload-random": {
>      "duration": 5.22651e+08,
>      "iterations": 4.6e+07,
>      "reciprocal-throughput": 11.3764,
>      "latency": 11.3475,
>      "max-throughput": 8.79009e+07,
>      "min-throughput": 8.81252e+07
>     }
>    }
> 
> Checked on powerpc64-linux-gnu (power8) and powerpc64le-linux-gnu
> (power9).
> ---
>   sysdeps/powerpc/fpu/e_hypot.c                 | 87 -------------------
>   sysdeps/powerpc/fpu/e_hypotf.c                | 78 -----------------
>   .../powerpc32/power4/fpu/multiarch/Makefile   |  5 +-
>   .../power4/fpu/multiarch/e_hypot-power7.c     | 23 -----
>   .../power4/fpu/multiarch/e_hypot-ppc32.c      | 23 -----
>   .../powerpc32/power4/fpu/multiarch/e_hypot.c  | 33 -------
>   .../power4/fpu/multiarch/e_hypotf-power7.c    | 23 -----
>   .../power4/fpu/multiarch/e_hypotf-ppc32.c     | 23 -----
>   .../powerpc32/power4/fpu/multiarch/e_hypotf.c | 33 -------
>   9 files changed, 1 insertion(+), 327 deletions(-)
>   delete mode 100644 sysdeps/powerpc/fpu/e_hypot.c
>   delete mode 100644 sysdeps/powerpc/fpu/e_hypotf.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c

This also removes the ppc specific hypotf too. Have you had a chance to 
measure the difference?

I think it is OK if the performance difference is negligible. Though, I 
don't speak for the other ppc contributors in that regard. They may want 
to double-check the results.

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 7/9] math: Remove powerpc e_hypot
  2021-10-06 19:43   ` Paul E Murphy
@ 2021-10-06 19:46     ` Adhemerval Zanella
  2021-10-06 19:51       ` Paul E Murphy
  0 siblings, 1 reply; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-06 19:46 UTC (permalink / raw)
  To: Paul E Murphy, libc-alpha



On 06/10/2021 16:43, Paul E Murphy wrote:
> 
> 
> On 10/6/21 1:05 PM, Adhemerval Zanella via Libc-alpha wrote:
>> power9 master:
>>
>>    "hypot": {
>>     "workload-random": {
>>      "duration": 5.20744e+08,
>>      "iterations": 5.6e+07,
>>      "reciprocal-throughput": 9.27604,
>>      "latency": 9.32194,
>>      "max-throughput": 1.07805e+08,
>>      "min-throughput": 1.07274e+08
>>     }
>>    }
>>
>> power9 patched:
>>
>>    "hypot": {
>>     "workload-random": {
>>      "duration": 5.23124e+08,
>>      "iterations": 5.4e+07,
>>      "reciprocal-throughput": 9.51892,
>>      "latency": 9.85606,
>>      "max-throughput": 1.05054e+08,
>>      "min-throughput": 1.0146e+08
>>     }
>>    }
>>
>> power8 master:
>>
>>    "hypot": {
>>     "workload-random": {
>>      "duration": 5.21128e+08,
>>      "iterations": 4.6e+07,
>>      "reciprocal-throughput": 11.3589,
>>      "latency": 11.2988,
>>      "max-throughput": 8.80368e+07,
>>      "min-throughput": 8.85047e+07
>>     }
>>    }
>>
>> power8 patched:
>>
>>    "hypot": {
>>     "workload-random": {
>>      "duration": 5.22651e+08,
>>      "iterations": 4.6e+07,
>>      "reciprocal-throughput": 11.3764,
>>      "latency": 11.3475,
>>      "max-throughput": 8.79009e+07,
>>      "min-throughput": 8.81252e+07
>>     }
>>    }
>>
>> Checked on powerpc64-linux-gnu (power8) and powerpc64le-linux-gnu
>> (power9).
>> ---
>>   sysdeps/powerpc/fpu/e_hypot.c                 | 87 -------------------
>>   sysdeps/powerpc/fpu/e_hypotf.c                | 78 -----------------
>>   .../powerpc32/power4/fpu/multiarch/Makefile   |  5 +-
>>   .../power4/fpu/multiarch/e_hypot-power7.c     | 23 -----
>>   .../power4/fpu/multiarch/e_hypot-ppc32.c      | 23 -----
>>   .../powerpc32/power4/fpu/multiarch/e_hypot.c  | 33 -------
>>   .../power4/fpu/multiarch/e_hypotf-power7.c    | 23 -----
>>   .../power4/fpu/multiarch/e_hypotf-ppc32.c     | 23 -----
>>   .../powerpc32/power4/fpu/multiarch/e_hypotf.c | 33 -------
>>   9 files changed, 1 insertion(+), 327 deletions(-)
>>   delete mode 100644 sysdeps/powerpc/fpu/e_hypot.c
>>   delete mode 100644 sysdeps/powerpc/fpu/e_hypotf.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
>>   delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
> 
> This also removes the ppc specific hypotf too. Have you had a chance to measure the difference?
> 
> I think it is OK if the performance difference is negligible. Though, I don't speak for the other ppc contributors in that regard. They may want to double-check the results.

I would expect the performance difference to be similar to 64-bit,
at least on the hardware I checked (since most of the time would
be spent in FPU calculations).

In any case, I don't see much gain in keeping a 32-bit powerpc
implementation that deviates from generic implementation.

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 7/9] math: Remove powerpc e_hypot
  2021-10-06 19:46     ` Adhemerval Zanella
@ 2021-10-06 19:51       ` Paul E Murphy
  2021-10-12 12:17         ` Paul A. Clarke
  0 siblings, 1 reply; 31+ messages in thread
From: Paul E Murphy @ 2021-10-06 19:51 UTC (permalink / raw)
  To: Adhemerval Zanella, libc-alpha



On 10/6/21 2:46 PM, Adhemerval Zanella wrote:
> 
> 
> On 06/10/2021 16:43, Paul E Murphy wrote:
>>
>>
>> On 10/6/21 1:05 PM, Adhemerval Zanella via Libc-alpha wrote:
>>> power9 master:
>>>
>>>     "hypot": {
>>>      "workload-random": {
>>>       "duration": 5.20744e+08,
>>>       "iterations": 5.6e+07,
>>>       "reciprocal-throughput": 9.27604,
>>>       "latency": 9.32194,
>>>       "max-throughput": 1.07805e+08,
>>>       "min-throughput": 1.07274e+08
>>>      }
>>>     }
>>>
>>> power9 patched:
>>>
>>>     "hypot": {
>>>      "workload-random": {
>>>       "duration": 5.23124e+08,
>>>       "iterations": 5.4e+07,
>>>       "reciprocal-throughput": 9.51892,
>>>       "latency": 9.85606,
>>>       "max-throughput": 1.05054e+08,
>>>       "min-throughput": 1.0146e+08
>>>      }
>>>     }
>>>
>>> power8 master:
>>>
>>>     "hypot": {
>>>      "workload-random": {
>>>       "duration": 5.21128e+08,
>>>       "iterations": 4.6e+07,
>>>       "reciprocal-throughput": 11.3589,
>>>       "latency": 11.2988,
>>>       "max-throughput": 8.80368e+07,
>>>       "min-throughput": 8.85047e+07
>>>      }
>>>     }
>>>
>>> power8 patched:
>>>
>>>     "hypot": {
>>>      "workload-random": {
>>>       "duration": 5.22651e+08,
>>>       "iterations": 4.6e+07,
>>>       "reciprocal-throughput": 11.3764,
>>>       "latency": 11.3475,
>>>       "max-throughput": 8.79009e+07,
>>>       "min-throughput": 8.81252e+07
>>>      }
>>>     }
>>>
>>> Checked on powerpc64-linux-gnu (power8) and powerpc64le-linux-gnu
>>> (power9).
>>> ---
>>>    sysdeps/powerpc/fpu/e_hypot.c                 | 87 -------------------
>>>    sysdeps/powerpc/fpu/e_hypotf.c                | 78 -----------------
>>>    .../powerpc32/power4/fpu/multiarch/Makefile   |  5 +-
>>>    .../power4/fpu/multiarch/e_hypot-power7.c     | 23 -----
>>>    .../power4/fpu/multiarch/e_hypot-ppc32.c      | 23 -----
>>>    .../powerpc32/power4/fpu/multiarch/e_hypot.c  | 33 -------
>>>    .../power4/fpu/multiarch/e_hypotf-power7.c    | 23 -----
>>>    .../power4/fpu/multiarch/e_hypotf-ppc32.c     | 23 -----
>>>    .../powerpc32/power4/fpu/multiarch/e_hypotf.c | 33 -------
>>>    9 files changed, 1 insertion(+), 327 deletions(-)
>>>    delete mode 100644 sysdeps/powerpc/fpu/e_hypot.c
>>>    delete mode 100644 sysdeps/powerpc/fpu/e_hypotf.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-power7.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot-ppc32.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypot.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-power7.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf-ppc32.c
>>>    delete mode 100644 sysdeps/powerpc/powerpc32/power4/fpu/multiarch/e_hypotf.c
>>
>> This also removes the ppc specific hypotf too. Have you had a chance to measure the difference?
>>
>> I think it is OK if the performance difference is negligible. Though, I don't speak for the other ppc contributors in that regard. They may want to double-check the results.
> 
> I would expect the performance difference to be similar to 64-bit,
> at least on the hardware I checked (since most of the time would
> be spent in FPU calculations).
> 
> In any case, I don't see much gain in keeping a 32-bit powerpc
> implementation that deviates from generic implementation.
> 

Oops, I read this patch in isolation to the series. There probably isn't 
any difference. Sorry for the noise.

Anyhow, in the context of the series, this looks OK to me.

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 8/9] i386: Move hypot implementation to C
  2021-10-06 19:20       ` Adhemerval Zanella
@ 2021-10-06 19:52         ` Joseph Myers
  2021-10-07  8:28           ` Paul Zimmermann
  0 siblings, 1 reply; 31+ messages in thread
From: Joseph Myers @ 2021-10-06 19:52 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

On Wed, 6 Oct 2021, Adhemerval Zanella via Libc-alpha wrote:

> In fact we need to handle underflow:
> 
>   long double lx = x;
>   long double ly = y;
>   double r = sqrtl (lx * lx + ly * ly);

You probably also need a math_narrow_eval here to ensure the value checked 
for overflow and returned has definitely been properly narrowed to double 
first.

>   math_check_force_underflow_nonneg (r);
>   return r;

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 8/9] i386: Move hypot implementation to C
  2021-10-06 19:52         ` Joseph Myers
@ 2021-10-07  8:28           ` Paul Zimmermann
  2021-10-07 17:05             ` Joseph Myers
  0 siblings, 1 reply; 31+ messages in thread
From: Paul Zimmermann @ 2021-10-07  8:28 UTC (permalink / raw)
  To: Joseph Myers; +Cc: adhemerval.zanella, libc-alpha

> > In fact we need to handle underflow:
> > 
> >   long double lx = x;
> >   long double ly = y;
> >   double r = sqrtl (lx * lx + ly * ly);
> 
> You probably also need a math_narrow_eval here to ensure the value checked 
> for overflow and returned has definitely been properly narrowed to double 
> first.

right, If x = y = 0x1.fffffffffffffp1023, then lx * lx + ly * ly will not
overflow as long double, nor sqrtl(.), but the conversion to double will.
This should probably be added as a test case (if not already).

Paul

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 3/9] math: Simplify hypotf implementation
  2021-10-06 18:05 ` [PATCH 3/9] math: Simplify hypotf implementation Adhemerval Zanella
@ 2021-10-07  9:44   ` Paul Zimmermann
  2021-10-07 11:37     ` Adhemerval Zanella
  0 siblings, 1 reply; 31+ messages in thread
From: Paul Zimmermann @ 2021-10-07  9:44 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

       Dear Adhemerval,

> Use isnan()/isinf() instead of GET_FLOAT_WORD and interger operations.

interger -> integer

> There is also no need to check for 0.0.
> 
> The file Copyright is also change to use  GPL, the implementation was

change -> changed

> complete change by 7c10fd3515f to use double precision instead of

complete change -> completely changed ?

> scaling and this change removes all the GET_FLOAT_WORD usage.
> 
> Checked on x86_64-linux-gnu.
> ---
>  sysdeps/ieee754/flt-32/e_hypotf.c | 57 +++++++++++++------------------
>  1 file changed, 23 insertions(+), 34 deletions(-)
> 
> diff --git a/sysdeps/ieee754/flt-32/e_hypotf.c b/sysdeps/ieee754/flt-32/e_hypotf.c
> index e770947dc1..6495a91cd4 100644
> --- a/sysdeps/ieee754/flt-32/e_hypotf.c
> +++ b/sysdeps/ieee754/flt-32/e_hypotf.c
> @@ -1,46 +1,35 @@
> -/* e_hypotf.c -- float version of e_hypot.c.
> - */
> +/* Euclidean distance function.  Float/Binary32 version.
> +   Copyright (C) 2012-2021 Free Software Foundation, Inc.
> +   This file is part of the GNU C Library.
>  
> -/*
> - * ====================================================
> - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
> - *
> - * Developed at SunPro, a Sun Microsystems, Inc. business.
> - * Permission to use, copy, modify, and distribute this
> - * software is freely granted, provided that this notice
> - * is preserved.
> - * ====================================================
> - */
> +   The GNU C Library is free software; you can redistribute it and/or
> +   modify it under the terms of the GNU Lesser General Public
> +   License as published by the Free Software Foundation; either
> +   version 2.1 of the License, or (at your option) any later version.
> +
> +   The GNU C Library is distributed in the hope that it will be useful,
> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> +   Lesser General Public License for more details.
> +
> +   You should have received a copy of the GNU Lesser General Public
> +   License along with the GNU C Library; if not, see
> +   <https://www.gnu.org/licenses/>.  */
>  
>  #include <math.h>
>  #include <math_private.h>
>  #include <libm-alias-finite.h>
>  
>  float
> -__ieee754_hypotf(float x, float y)
> +__ieee754_hypotf (float x, float y)
>  {
> -	double d_x, d_y;
> -	int32_t ha, hb;
> -
> -	GET_FLOAT_WORD(ha,x);
> -	ha &= 0x7fffffff;
> -	GET_FLOAT_WORD(hb,y);
> -	hb &= 0x7fffffff;
> -	if (ha == 0x7f800000 && !issignaling (y))
> -	  return fabsf(x);
> -	else if (hb == 0x7f800000 && !issignaling (x))
> -	  return fabsf(y);
> -	else if (ha > 0x7f800000 || hb > 0x7f800000)
> -	  return fabsf(x) * fabsf(y);
> -	else if (ha == 0)
> -	  return fabsf(y);
> -	else if (hb == 0)
> -	  return fabsf(x);
> -
> -	d_x = (double) x;
> -	d_y = (double) y;
> +  if ((isinf (x) || isinf (y))
> +      && !issignaling (x) && !issignaling (y))
> +    return INFINITY;
> +  if (isnan (x) || isnan (y))
> +    return x + y;

why not test NaN before +/-Inf, to avoid the issignaling test?

> -	return (float) sqrt(d_x * d_x + d_y * d_y);
> +  return sqrt ((double) x * (double) x + (double) y * (double) y);

a double-rounding problem can happen here, but anyway the function is not
correctly rounded

>  }
>  #ifndef __ieee754_hypotf
>  libm_alias_finite (__ieee754_hypotf, __hypotf)
> -- 
> 2.30.2
> 
> 

Paul

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 1/9] benchtests: Make hypot input random
  2021-10-06 18:05 ` [PATCH 1/9] benchtests: Make hypot input random Adhemerval Zanella
@ 2021-10-07  9:48   ` Paul Zimmermann
  2021-10-07 11:20     ` Adhemerval Zanella
  2021-10-07 17:08     ` Joseph Myers
  0 siblings, 2 replies; 31+ messages in thread
From: Paul Zimmermann @ 2021-10-07  9:48 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

       Dear Adhemerval,

> From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> Cc: Paul Zimmermann <Paul.Zimmermann@inria.fr>
> Date: Wed,  6 Oct 2021 15:05:49 -0300
> 
> Instead of inputs based on the algorithm implementation details.
> ---
>  benchtests/hypot-inputs | 1014 ++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 1002 insertions(+), 12 deletions(-)
> 
> diff --git a/benchtests/hypot-inputs b/benchtests/hypot-inputs
> index e987e5dd1b..b3c8762ef3 100644
> --- a/benchtests/hypot-inputs
> +++ b/benchtests/hypot-inputs
> @@ -2,15 +2,1005 @@
>  ## args: double:double
>  ## ret: double
>  
> -## name: overflow
> -0x3.ffffffffffffcp-1024, 0x8p-152
> -## name: higher_two500
> -0x1.000002027941dp+500,  0x1.0000000000001p+500
> -## name: subnormal
> -0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022
> -## name: less_two500
> -0x1.fffffffffffffp-501,  0x1.fffffffffffffp-501
> -
> -## name: default
> -3.0                   , 4.0
> -5.0                   , 4.0
> +# Random inputs in [DBL_MIN, DBL_MAX]

should be Random inputs with absolute value in [DBL_MIN, DBL_MAX]

> +## name: workload-random
> +-0x1.c9b9e4ccb538fp+526, 0x1.5a2839615dcc4p-90
> +-0x1.b4686db8fbe07p-466, -0x1.ad5bab40e28b5p-705
> +0x1.b67e9830d0742p+89, 0x1.712bed15ab242p-79
> +0x1.2b0cf5dce789bp+94, 0x1.de2935e408821p+744
> +-0x1.4b8bfab1fbe84p-696, 0x1.9400021b6864p-353
> +-0x1.586240fa11ce1p+563, 0x1.d032a033d5883p-277
> +0x1.d4ed8f4dad9a1p-577, 0x1.15cc3a3dfd1a8p+904
> +0x1.ef56f125ff922p-961, -0x1.a081c8f4a8b54p-739
> +-0x1.3ae85ca2a7a85p+634, 0x1.ab7f8908907b5p-616
> +0x1.5689b747313f2p-288, -0x1.533e4d90ba16ep-617
> +-0x1.14a5c88935df3p+330, 0x1.a5e5f87292686p-493
> +-0x1.11e5466d30d72p-649, 0x1.252e4933a8dffp+83
> +-0x1.42310106b5893p+507, 0x1.d7c96bb09f172p+7
> +-0x1.9d8063c48f8bap-618, 0x1.34eb629467897p-660
> +-0x1.d06c9facc6cb9p-957, 0x1.66eea10b76d25p-120
> +-0x1.fd476b0696ea7p-217, -0x1.e05d14a0749aep+896
> +0x1.cdd05ca691efp+455, -0x1.34157c01b4401p-862
> +0x1.761da13f8f6e4p-659, -0x1.cd34b2b726c35p-73
> +0x1.4b5e793152991p+1023, 0x1.b0e7c833bab6dp+265
> +0x1.1fec80cb0cfbep+352, 0x1.fe7879323a307p+115
> +0x1.ca13c6a7c361ep-1, 0x1.e7794b757984ap+20
> +0x1.9d0b10c3259cap+328, 0x1.a6f6e01fa8308p+27
> +0x1.359cb18c6be06p-1010, -0x1.5c9b8ea01c649p+243
> +-0x1.d0dcb95e18854p-850, -0x1.692c34253f833p+897
> +0x1.64a3e91246202p+194, -0x1.6a08b6e0c10fcp+869
> +-0x1.09133c8b3ab46p-817, 0x1.5e33faa5f9609p+204
> +-0x1.5d65411fca3e1p-883, -0x1.c49451e8ff7ffp+463
> +-0x1.a49b5f87b5e33p-192, 0x1.4e346710769e6p-532
> +-0x1.71e5eeb1af912p+233, -0x1.e0d9fc2c51f5ap+465
> +-0x1.8b1153ccd5db1p+912, 0x1.8122f54133f1dp-636
> +-0x1.6b2c289f6d0f8p+4, -0x1.0e020ad34ea5fp+184
> +-0x1.910d7cab2fed5p-856, 0x1.f48192b625d76p-193
> +0x1.cef0e34593e32p-697, -0x1.823fdb16ac5a8p+233
> +0x1.9dbca687e11fcp+460, -0x1.064a7d8a035bdp-695
> +0x1.c33f7ac0118fp-354, 0x1.25c6e97f8ee95p-727
> +-0x1.ed77de8fe0b87p+1019, -0x1.4231d27d608d6p-569
> +-0x1.13b5a2be4d59dp-5, -0x1.f74f34809e8cap+734
> +0x1.29470976cb343p-794, -0x1.688e2134673eap-760
> +-0x1.dbd669283a975p+950, 0x1.8bd4b47b19394p-972
> +0x1.dcebfad589251p+584, 0x1.ab821c80883efp-745
> +0x1.3d7898d9e10c8p-826, -0x1.2ea1591bcf713p-168
> +-0x1.8062525376bbap-671, -0x1.1320518198246p-281
> +0x1.aef3fad3f633fp+433, -0x1.033b6ebbde9eep-387
> +-0x1.cedf0931fbcc3p+440, -0x1.c9b40671bbf62p-26
> +-0x1.bf147c6ae1629p+644, -0x1.f10b967824ef3p+218
> +-0x1.69b82f4508c9bp-1002, -0x1.1f52bdcf38bfcp-522
> +-0x0.226af30ce6ba4p-1022, 0x1.956794128b9c7p-816
> +0x1.269e8197b6197p-660, -0x1.9c08a23eb8cafp+408
> +-0x1.067677cb27c65p-577, 0x1.54f85143ad106p-252
> +-0x1.5c139666cc203p-678, -0x1.6fa4a26a23e3fp-500
> +0x1.fb4bbc14ed566p-980, -0x1.64a2623385865p-105
> +-0x1.0d9e75e4bc22dp-702, 0x1.0010bb11ef0ep+461
> +0x1.b047105706bf1p+811, 0x1.294f1289e801fp-479
> +-0x1.a1539b9498fcfp-219, 0x1.b8cfa27e5b9dbp-852
> +0x1.60b580776e0dap-965, 0x1.86ca0301b862bp+64
> +-0x1.de27a3092c282p+956, -0x1.d14da5110136dp-125
> +0x1.216680bf7c046p-219, -0x1.672b73cc56298p-533
> +0x1.7f964e1e6933ep+225, -0x1.b397a6addb416p-782
> +0x1.5c5ac7088ad85p+67, 0x1.c5c1f54c8c464p+900
> +0x1.b99bf2d232a67p+183, -0x1.3b6d8db73e9e7p+587
> +0x1.efd8702ceea4bp+112, 0x1.27662ebd318d4p-736
> +-0x1.d00020aa60799p-269, -0x1.4602aaefed288p+841
> +-0x1.0ca653d3607p+843, 0x1.8165ec6a151f2p-245
> +0x1.637d7faf2dcd3p+339, -0x1.5de8f895e0921p-311
> +-0x1.0a54dcf5397dap-543, -0x1.cf69228868211p-922
> +0x1.4239bcb2ff07fp+415, 0x1.37df12f9bff83p+518
> +-0x1.c7fac16e63044p+219, 0x1.cd83114f41ff9p-161
> +-0x1.b469af516da75p-714, 0x1.782837617acd9p-977
> +0x1.564ee8746d24fp-635, -0x1.23be8b6551b5fp-104
> +0x1.f6dd92d2c98fep-186, -0x1.dbd48c6dd0933p-563
> +0x1.5415754086856p+692, -0x1.ade3a6fbe19c2p-636
> +-0x1.3a86ff32e226ep+956, 0x1.f7bf282f8ec3fp+617
> +0x1.5dabcedf6d038p-402, 0x1.3921fe12cbd16p+802
> +-0x1.580f681d777d1p-649, 0x1.82ce0cd6261ccp+237
> +0x1.4dbd038b40241p+742, 0x1.74a8ca5e0a9a8p-193
> +-0x1.81fb7906a6e7ap+858, 0x1.060707422c742p+615
> +-0x1.9f20a4e0fc9aep-50, 0x1.ce323011d922fp-93
> +0x1.251c72200297bp+984, 0x1.00bd429a23dc8p+101
> +0x1.4e68d50a30953p-570, 0x1.0f725b5d4ff05p-76
> +-0x1.d47d5d42ff4bep+941, -0x1.4fd8f1971f601p+269
> +-0x1.bd95a498e5246p+777, 0x1.27388108b2efep+422
> +0x1.e734c9d1d015ep-712, -0x1.7cb5b0ff76b6ap+808
> +-0x1.c50bbe662db65p-594, 0x1.a004f6eb37cc1p-116
> +0x1.382b84973113ep-727, 0x1.9ea5b4ee35aa5p+834
> +0x1.3a4b07f2f3d36p+189, -0x1.364bd57f1cd8bp-785
> +-0x1.6faf61accf379p+489, -0x1.cb52b93ba68ecp-548
> +-0x1.afd131d3d2b49p+236, 0x1.654017eaccba4p+78
> +-0x1.afd3da3760269p-146, -0x1.f5fe580b9e7ep-934
> +-0x1.8c4c67078936bp-12, -0x1.744e6736a7dffp+851
> +-0x1.a90de8574d525p+518, 0x1.87fdedfd965bbp+461
> +0x1.d8050ffe1f993p-989, -0x1.ca5bf9ea2f1d3p-358
> +-0x1.b9fd456ba3825p-559, 0x1.df45fa0640fb2p-632
> +0x1.27b3ef01957d9p-48, -0x1.4214dd3231529p+232
> +-0x1.3348f5d5ae725p+242, -0x1.01fdc7c1a472fp-541
> +-0x1.779cf98e86ffcp+324, 0x1.efa30985d4c9ep-865
> +-0x1.daeab430fe19fp+904, -0x1.bf73667703487p-19
> +-0x1.2337981a0ea42p+555, 0x1.72fc7523f3aa9p+699
> +-0x1.c1f53cb9c4858p-877, -0x1.88c740da5c31ap-451
> +0x1.4a7cc59577262p-58, -0x1.eaaf5c8bc91f6p+378
> +-0x1.5ab543c3de40ap+379, -0x1.506c8ac72d8b5p+508
> +0x1.87ee478dfb8aap+767, -0x1.6934d5063786dp+877
> +0x1.a9658347666bbp+720, 0x1.9e9883550ae82p+119
> +-0x1.f11cba04565bep+536, 0x1.a77c4d7de3901p-907
> +-0x1.637aed92c164ap-773, 0x1.563a853915c42p+437
> +0x1.0ac5623fe4d48p+245, 0x1.60f4ab95dbda6p-258
> +-0x1.9f046bc061838p-149, 0x1.eed3c3dd7c7cdp+284
> +0x1.bfe4663804caap-26, 0x1.ab9f1e111572fp+699
> +0x1.34b033c032cc3p-701, 0x1.54eb3833df0cbp-621
> +-0x1.d7992b5a800ecp+415, -0x1.658855a5caecep+714
> +-0x1.4ec652825633ep+1023, 0x1.a4ffd3a40a26ep+31
> +-0x1.5f664d7f22a9bp+150, 0x1.4efa7d597084p+719
> +0x1.618ee42ae6009p+28, 0x1.db0e81473ab64p+191
> +0x1.bce0aef1f1fap-326, -0x1.5ad80a5760518p-609
> +0x1.93708072fdf0fp-591, 0x1.46d43d71768p+605
> +-0x1.f28f62effec4fp+502, 0x1.897d978a0b593p+750
> +-0x1.23ff24b59fb3bp+354, -0x1.27870d98e3026p-780
> +0x1.462c222c9b216p-451, 0x1.a1389d9277e44p-229
> +0x1.949a454cfc1f4p-296, -0x1.5989cd90df4f9p+634
> +-0x1.c4a0554f11021p-985, -0x1.ebf8e73763f67p-990
> +-0x1.a6d24b4d26f2p+616, 0x1.9398629961de3p+601
> +-0x1.d6a7a620bcbd4p-205, 0x1.92937feb024b7p+335
> +0x1.418684de16ec3p+486, 0x1.3006846754803p-426
> +0x1.3256cab64df2cp-538, -0x1.55ab298d58395p+656
> +-0x1.2ca0062a03c7fp-639, -0x1.8e46155170c63p+982
> +-0x1.d86feb9f05e9bp+964, -0x1.218a8f3a16949p-282
> +0x1.6a19114fa7321p+1015, 0x1.b754067c9e2d8p+636
> +-0x1.0a8381ab06281p+909, 0x1.4a718f00e0a7p-361
> +-0x1.ef571562e5ffcp-706, -0x1.3e40e8e8677e5p-712
> +0x1.6024680e45bep-228, -0x1.c2c0877492ee3p-442
> +0x1.0651afa5be1c4p+257, -0x1.70a2cce7668aep-112
> +0x1.3273c5c3a2ef6p+436, -0x1.a5ba1669b0ee1p-32
> +-0x1.be37878b94849p+720, 0x1.444659b28d49cp-635
> +0x1.ec87a2a4bfdaap-322, 0x1.dbcdddd0214cp+146
> +0x1.4438b217911d8p+134, 0x1.00efaddb1137cp-82
> +-0x1.8252c0ca5d1a6p-875, 0x1.c6a8d7ca520cap-293
> +-0x1.fb0e91dc80524p-86, -0x1.079abd8f02a8dp-807
> +0x1.c2058b220be56p-82, 0x1.6cd250a6189e2p-144
> +-0x1.9719b79d19e1bp+548, -0x1.a883e9e65f1e6p-890
> +0x1.f596727c3a99fp+203, 0x1.8a224f1264e47p-491
> +-0x1.1f7d9c69c0f18p+276, -0x1.c355418418a7cp-491
> +0x1.ce61bba0004a6p+423, -0x1.d2eccb2c8f702p+114
> +-0x1.68f9afab87fa2p+877, -0x1.61630090f07ffp+689
> +-0x1.3b9af2b3d18dbp+351, 0x1.563ebfed3bfb9p+194
> +-0x1.fd3d2b95b33e2p+607, -0x1.6ba06587fc088p-750
> +-0x1.62697c2790ea6p-762, 0x1.940443c2bf806p+363
> +0x1.82f9a7f79ab11p-398, 0x1.399d121c78ee7p+624
> +-0x1.47a6905e12d29p+775, 0x1.5dbe293914a2p+297
> +0x1.5388a26b37edfp-760, -0x1.2642bb599e25ep+186
> +0x1.415d8a0ac5257p+876, 0x1.6aa66a01eaa79p+866
> +0x1.6d9a658695dddp-222, -0x1.7b9856f12729fp-769
> +0x1.159bb14a7af3dp+486, -0x1.06c00e97d6bd3p+747
> +-0x1.e17bbdc8fae26p+417, -0x1.6733fdf758a97p-823
> +-0x1.43048fd005312p+504, 0x1.3ec148f513b83p+905
> +-0x1.50745c6aedbe5p-195, -0x1.a3b710c9b630cp+786
> +0x1.59a9cc50449e8p+95, 0x1.b4ff697900ee2p+320
> +-0x1.adfb919cb6ea5p-576, 0x1.005f12f94b659p-554
> +-0x1.8f872bdfb906cp+99, -0x1.f589b72cf4fc6p-477
> +0x1.17d258034c48fp-611, -0x1.1838e57f0a5eep+471
> +-0x1.d01e0fe18253dp-109, 0x1.a083d4e940fe1p+432
> +-0x1.51df04426df75p+859, 0x1.0c322348c5dcap-930
> +0x1.ab9c906ce5019p+844, -0x1.b2255ef461be8p-517
> +-0x1.54fb74bf1cad3p-774, -0x1.74b3abc36f7cep+552
> +0x1.3267692663a7bp-572, -0x1.d16fcd4949779p-553
> +-0x1.c965c71480f41p-447, 0x1.1f54d57f3d4adp-659
> +0x1.38357cfa8ee7p-396, 0x1.9a97dcdfc45b2p-174
> +-0x1.3f8f2c4694a3ep-860, -0x1.074af4a491069p-147
> +0x1.be5b121361bcep-279, 0x1.a6271864c15e5p+54
> +-0x1.571d524fb837fp-332, -0x1.6c8b85553ccdap+728
> +-0x1.dae5da9458a36p-18, -0x1.af80fcafe421ep+869
> +0x1.bdf5e14076194p+230, 0x1.5f3872155062cp-840
> +-0x1.68736f0a701e5p-369, 0x1.63cb6b731e9bep+362
> +0x1.0585505e94b3ap+132, -0x1.eee570790b35p-750
> +-0x1.5612b0b696c64p-542, 0x1.41c9378f060b2p-1007
> +0x1.b1e8265bbb6ep-227, -0x1.1c5e724be2b67p+92
> +0x1.0ac13517bf64ep-246, 0x1.4a443e5081577p-420
> +0x1.8039830b7dfa4p+965, 0x1.99086df83915ap-942
> +-0x1.2d2988b255995p+429, 0x1.1d19bcdfa257ep+251
> +0x1.4274e0e9c27e7p-943, -0x1.114ed04e2e4b4p-470
> +0x1.6af9dddeb095bp+775, -0x1.ed9ca85c3aa46p-601
> +0x1.631e4a1067d03p-781, 0x1.be6d46e30228ep+534
> +-0x1.2ac10fa9a0893p+332, 0x1.1b2d4e33621f1p+29
> +0x1.709f2137dab95p-445, -0x1.6fde48d966fc8p-25
> +-0x1.f811f68aba1aap+535, -0x1.96004333260a6p-290
> +-0x1.2c51ffe1fcf8ep+152, -0x1.17af9b031a485p-174
> +0x1.f69275e5f29ap+756, -0x1.682105d44483dp+613
> +0x1.7d13efce5f1a1p+707, -0x1.3858a4e669e3bp-752
> +-0x1.6cd05a4c54144p+826, 0x1.7c42ac0d2886fp-866
> +-0x1.f89ce04dfd27fp+410, 0x1.fe0de103ce1abp-573
> +-0x1.43b5c66354397p+311, 0x1.5bd0c23718998p-967
> +-0x1.2319f27f77d36p-663, -0x1.615950a57876dp+924
> +-0x1.83385c49fbcebp+686, 0x1.010c2b151c788p+619
> +-0x1.0d44261e94de8p-670, 0x1.17160af447683p+571
> +0x1.3481f39ea088bp+25, -0x1.706d7cd9b1652p+781
> +-0x1.f0039b20728b8p-542, -0x1.51e7fca7f6499p-80
> +-0x1.06b7cc5a7aedp-775, -0x1.e8efd554e61fbp+375
> +-0x1.d9473d1361ae7p+477, -0x1.86a9bfbf95f03p-415
> +-0x1.3f932e5d162bp-31, -0x1.a96d172b0257bp-804
> +0x1.b3172331d60d6p-173, 0x1.3a7a560866aa9p-266
> +-0x1.0358cd79c7569p-173, -0x1.4705dd58b26a8p+515
> +-0x1.18805746027a1p-741, -0x1.d05d211d42f13p-228
> +-0x1.659e72e94f232p-821, 0x1.a674275ce4cbep-164
> +0x1.e9029329f9a9bp+115, -0x1.c8b8788091017p+461
> +0x1.070b4391204cfp-612, -0x1.c0b61ce1003ecp-369
> +0x1.d9792e699e24cp-716, -0x1.da3503c8b2b43p-784
> +-0x1.ce75906b2a612p+994, 0x1.1f17844d2ebbbp+306
> +-0x1.b837832174a07p-235, -0x1.4deefd727a398p-999
> +-0x1.d39e49f0c9e38p+607, -0x1.bbdbd223f6e0fp+527
> +0x1.d475d8f7f9b1cp+574, -0x1.d084c3a952956p-930
> +0x1.36367deff0d1ep-819, -0x1.c1840b9d5cd01p-169
> +0x1.56c29271ff50bp+991, 0x1.3133db7e7f3d6p+492
> +0x1.70949a147a538p-649, 0x1.015d59b9e641cp+604
> +0x1.48acc2d1e59b3p+280, 0x1.e97d807eb23d6p+419
> +-0x1.8b0fb0c961928p-415, 0x1.35e01b117c406p+868
> +-0x1.e95698f9b36a5p-282, 0x1.2d1a96cf2b0e9p-90
> +0x1.0f2cbb86d9dd8p+46, -0x1.09f47148e87d4p-583
> +-0x1.84c4de82fa752p+827, -0x1.9d36bcf2289f2p-315
> +-0x1.262e501cf4fe6p-484, -0x1.18cbf59d3c82bp-956
> +-0x1.d6c5b75278e41p-126, -0x1.1e1a6117f2e03p-295
> +0x1.53c7b4d94cb4p+277, 0x1.2131bcf644999p+306
> +0x1.956d78a2e3bf5p+804, 0x1.1e43de7ae36c9p-707
> +0x1.e8fc958c5b717p-443, -0x1.1a7d40b3f2739p-1012
> +-0x1.126556bd1c7cbp-69, -0x1.fc96af8d1e8cap+76
> +0x1.5f3db9f4f3b8ap-938, 0x1.fc2131e7568bep-209
> +-0x1.c354c3873dde2p+694, -0x1.8cdeee290f152p+381
> +0x1.5339563d3cb9bp-638, 0x1.131d7aa4d4e46p-619
> +-0x1.db77aa4411622p+219, 0x1.38efddb4b014bp+15
> +0x1.4782b8dc33f23p-989, 0x1.fdbc130d05fbdp+217
> +0x1.1554b3faa9bc8p+663, 0x1.91b103ff68c84p+498
> +-0x1.105a3b4f92febp-877, -0x1.3fe0c998823dfp+862
> +0x1.4c4c1467e80b6p+403, -0x1.3b1826a3d91e3p+547
> +0x1.15885c2cb065ep+525, -0x1.b9014a9051735p-662
> +0x1.b55857117e40bp-1006, -0x1.4bde04447b4b4p+162
> +0x1.770d8b9533efep-954, 0x1.8bd860f89e00ep-586
> +0x1.4bf1ef8066d3ep+20, 0x1.5a3b04c8ecb31p-370
> +-0x1.856affcdc7484p+105, 0x1.b2c2a3327b38fp+516
> +-0x1.2043fbca121cap-986, 0x1.78067f50d8218p+973
> +0x1.7a9b80611e082p-939, -0x1.4bc487d06fcc3p+321
> +0x1.a7af5850d7e21p+837, -0x1.e4f86095eda51p-946
> +-0x1.348c991495b18p+1012, -0x1.3fca47184df5ep+251
> +-0x1.b30af77ac83e3p+734, -0x1.6ef2c081952cfp+912
> +-0x1.bd05a684eefd2p-180, 0x1.689a61eb600d1p-717
> +-0x1.eca4d31cbed39p+725, -0x1.e672808edfee1p-1012
> +-0x1.af0c6f8066b2bp+160, 0x1.a0df9068424e9p+218
> +-0x1.074cd85809a85p+123, 0x1.1167ddb731e5fp+901
> +0x1.72eae8bda4c5bp-813, 0x1.4a5062248e4adp-71
> +-0x1.9d63ecbed33bcp+265, 0x1.6cba2bbeebdbap-818
> +0x1.41202ee7dd7ebp-231, 0x1.927d7db0b3ac1p-438
> +-0x1.fae9b8015cc4cp+163, 0x1.c44783a48ed9dp+776
> +0x1.114f5d056d1a9p-113, 0x1.3f716fc0860cfp+303
> +0x1.8826271676367p-821, 0x1.b0caed69c32dp-325
> +-0x1.6f71959e447d8p-502, 0x1.076175c1ea436p-527
> +-0x1.05d90a1df2ca7p+382, -0x1.22b79fed8c6c5p-221
> +0x1.0ab8360e63e2p+194, 0x1.d6508c089866fp+198
> +0x1.8a6123459b2d2p+127, -0x1.02dbf496418a7p-615
> +-0x1.eef719eabbaeep-726, -0x1.3dc0270cf8aacp-126
> +0x1.67b96ab330527p+600, 0x1.bffd396c7e8acp-940
> +0x1.988759e704db4p+861, -0x1.55b449b993732p+231
> +0x1.815034668d89p-293, 0x1.47e31361c5b59p+330
> +-0x1.f1d051ffebb52p+291, 0x1.6ba2fcb860761p+253
> +0x1.086f2905624f3p+510, -0x1.b90f1a2ec5ee1p+181
> +0x1.5b539bb7d553ap-330, -0x1.2892c14113004p-859
> +-0x1.16b0a2af6d9f6p-896, 0x1.04b4cb13a7c09p+603
> +0x1.ac408d54fcccap+424, 0x1.33a7b922bf9ebp-108
> +0x1.9487a31a13b57p-398, 0x1.a0329ebf9d818p+610
> +-0x1.5589c7698dd8p-444, 0x1.e4bbf4f028bc2p+467
> +0x1.0209ebc01c62dp-15, -0x1.590c303f5c32ep-625
> +0x1.0858928266e15p+793, 0x1.27572b171f4fap+526
> +-0x1.19d225c27b15bp-167, 0x1.93d1c269a3023p-153
> +-0x1.5e01f51a9409ep+927, -0x1.72ce2117da968p+411
> +0x1.afdf52ba2f9a1p-164, 0x1.8518c5c3f9ae4p+65
> +-0x1.1e4f218d1cf3dp-294, -0x1.af9948f24567bp-443
> +0x1.49f8a32ff1489p+954, -0x1.c6f38622684e9p-252
> +-0x1.b23af13e433e8p-459, -0x1.5538f4ac5ffefp+973
> +0x1.145a167ea4ea3p+749, 0x1.e8e69e6ba34dp-718
> +-0x1.17ad652e40944p+23, 0x1.66ddc1e172328p-450
> +-0x1.ae48e33b39c31p+851, 0x1.03deb2a4c08d7p-198
> +0x1.029657e93754p+23, 0x1.f089b6f3f4e12p+885
> +-0x1.14a99baac9aacp-486, 0x1.3c54cf9ef9d37p+305
> +-0x1.e433d50b1645ep-826, -0x1.f502d8dd83819p+243
> +0x1.ea1bbab4a6f05p-63, -0x1.48dc68f196565p+344
> +0x1.19b93fe281cep+182, 0x1.3cae06156bafep+245
> +-0x1.eafc483d29c5ep-941, -0x1.757c7688daddbp+780
> +-0x1.cfcd3060df71bp-599, -0x1.5574747016423p-122
> +0x1.e2a08569c5146p-208, -0x1.6f93aad37bad3p+678
> +-0x1.cfb545723ed6dp+574, -0x1.4e7218edc07e5p+548
> +0x1.13e16abe51f46p+790, 0x1.fa484c70d4103p-280
> +0x1.8db06dfb66124p+567, 0x1.53d01cb5b356p-700
> +0x1.0ce4ef1e7236dp-554, -0x1.c1fc4d7a584bp-303
> +0x1.89206dfc8616cp+15, -0x1.9e7478f5bec9cp+923
> +0x1.6cc0ac296df5ap-147, -0x1.d739c6a80e0f3p+552
> +-0x1.df37c2f72c6ccp+1005, -0x1.f4e6900023b7dp+547
> +0x1.a51aa19b57427p+1001, 0x1.1f938280997e4p+987
> +-0x1.44146720af4adp+997, -0x1.b1e854686ddffp-496
> +-0x1.7d243089f275fp-330, -0x1.7d93a4d0485d4p-56
> +-0x1.86c36110b814bp+100, -0x1.830d04b6994eap+904
> +-0x1.025cb594ffd92p-612, -0x1.df97ee930ad24p+394
> +0x1.ac3302e5f07e8p+532, -0x1.5ada3b5365c8bp-359
> +-0x1.bf0774299faaep+454, 0x1.12f06f88c041dp-521
> +-0x1.12db166bcf454p+810, -0x1.e7eccfd52033ep+102
> +0x1.ded6a6913d792p+631, -0x1.484b2de8cf2b5p+966
> +-0x1.114054988c55fp-878, 0x1.2057d26e3eb6ep-28
> +0x1.18d0062268ac2p-329, -0x1.397bdc3aa0c52p-581
> +0x1.c4b492b296653p+560, 0x1.83965be75df49p+915
> +0x1.7c4b464475424p-258, 0x1.364b6b9ecc84p-86
> +-0x1.932ee715ee9cp-820, 0x1.5d0acac046461p+11
> +0x1.89f236108da3dp+719, -0x1.8f46421ff86dbp+619
> +0x1.bab714dbc675cp-735, 0x1.9b8ea9c4a0afcp+990
> +0x1.953f1c8fbb33ep+503, 0x1.4a9dbcd88b5a4p+105
> +-0x1.6b04af0630912p-113, 0x1.834f7677b3ab9p+179
> +-0x1.3888739dfb47ap-7, -0x1.00f6937bbf981p+352
> +-0x1.26e31d1f6989ap+985, -0x1.4a62efd62f7d4p-676
> +0x1.b1318ee7120ap-249, 0x1.31dff7b683cb8p-468
> +-0x1.7eca922a0218ep+757, -0x1.5130bad36e8e6p-20
> +-0x1.3ea820bf73af7p-99, 0x1.54891c667887bp-389
> +-0x1.4173e13089454p+969, 0x1.c2270a9e17d99p-762
> +0x1.e0f91f0c64208p-803, 0x1.2271e0e7f4f2ap+61
> +-0x1.56d3f9037057ep-718, 0x1.3e223c3967763p+574
> +-0x1.665faed24722fp-157, 0x1.40053a68f4211p+95
> +0x1.2454b75a6cab2p+745, -0x1.a7f2287049bc5p+395
> +-0x1.9d2154ed6469cp-968, -0x1.d3ac769e77edap-963
> +-0x1.afc4aa9627a8dp-971, -0x1.079013d73e044p+288
> +0x1.66924e10ea983p-696, -0x1.8d1e7efdf17b4p-414
> +0x1.482a8a82a858fp-147, 0x1.5765012556a53p-280
> +-0x1.a3e22d6b16af4p-951, -0x1.71c1d60485311p+51
> +0x1.f7ffee28ce83fp-929, 0x1.3d8b9f1309ba1p-733
> +-0x1.ce4e32e5bae99p-11, -0x1.0322d6f0db1b3p-686
> +-0x1.c5b3a9093463fp-626, 0x1.7512d37db67ebp-618
> +-0x1.e4467d3b1c326p+196, -0x1.3e29526da8062p-356
> +-0x1.254a46a8edfd4p+315, -0x1.ee95ab5cc02dp-871
> +0x1.432a8d8a87f6ap-670, 0x1.616525e862d08p-421
> +0x1.aba7daefcca05p+646, 0x1.4c73556be56acp-236
> +-0x1.865f26dc229cdp+440, 0x1.7f2892578881fp+29
> +0x1.8ba56472f51efp+525, 0x1.95e1a93ac3379p-262
> +0x1.11a5f934f0679p+98, 0x1.d42d0edd0f56p-756
> +0x1.0503e708de3ffp+263, -0x1.8272e0f532f82p+444
> +-0x1.30fa73e805392p+379, -0x1.9ec42fc6c86b7p-916
> +0x1.039c6350d048dp+189, -0x1.e27d363f4dc48p+759
> +-0x1.b2f5f5a32cf93p+162, -0x1.089b0581a89b5p-554
> +0x1.d6dea1404a5ebp-386, 0x1.d1e7427d8fd74p-585
> +-0x1.138943e1ba00bp+260, -0x1.55a8357860ff4p-633
> +-0x1.cb0585a69ec8p-771, -0x1.b30b34fb4849bp+1019
> +0x1.15b8d33e57b5dp+613, -0x1.16d8525dd808ep+819
> +0x1.089a11b10202p+860, -0x1.661b937862d88p+985
> +0x1.ecd24009cb22bp+611, 0x1.e8fd804b52191p+722
> +0x1.bdeed16ee9071p-21, 0x1.c18770cf15d94p+893
> +-0x1.7e246229c7479p+11, 0x1.8c0a023da75bp+22
> +-0x1.2696479517f63p-873, 0x1.61472367b790cp-273
> +-0x1.dff31fa2945e4p+879, -0x1.788f359366c3dp-999
> +-0x1.204a18b87c646p+526, 0x1.c3906c3b0745fp+318
> +-0x1.8ebbfa9bfd865p-570, 0x1.df27bbba13fabp-1005
> +-0x1.f0bce56e90b36p-906, -0x1.621a7b0077f98p+74
> +0x1.f1d65127c0b6dp+121, 0x1.62c01ad0396afp-792
> +0x1.83edee737ce55p-183, -0x1.b76cec6de8a28p-810
> +-0x1.00fd8f4b7eaeap+798, -0x1.d10dc39b5cb6ep+202
> +-0x1.badde0405e759p+324, 0x1.77dc6d3ea132ap+823
> +0x1.da1baea3c16fap+333, 0x1.2cc0c40bc671dp-339
> +-0x1.ac7789c6b4cf2p+51, 0x1.51e3dc935590bp+316
> +0x1.13cd66f9c9a41p+110, -0x1.73044e1701d54p+955
> +0x1.aa206d92df49ap-539, 0x1.787369e33123p+338
> +-0x1.5e085883313c7p-698, -0x1.c5c7fcaff2a8dp-417
> +0x1.b3333de61b2c9p-380, -0x1.544afdd14d54ap+393
> +0x1.7bcdabfd53ac9p+141, 0x1.f0b76e9704968p+408
> +-0x1.7369c072cb16bp-29, -0x1.68971ae967238p+320
> +0x1.ef8c843fd5689p+161, -0x1.ff0d6afd40d0cp-31
> +0x1.f6a910bfe476ap-159, 0x1.b96aa192e68b6p-538
> +0x1.5374abf201ef3p+838, 0x1.ac2785d030c44p-616
> +0x1.26eb33cd00e9dp-509, -0x1.f3d66906ee76bp+707
> +-0x1.a26c06a38e4a1p-730, -0x1.dc673bdc267bep-999
> +0x1.3216151975fc7p-457, 0x1.4d50afe1e7304p-449
> +0x1.1e099367bca38p+255, 0x1.6b58cf3af69a3p+884
> +0x1.236e0a09b95e9p+567, 0x1.e8ee1eb0da59fp+100
> +0x1.64fe680eddb96p-513, -0x1.71722a535e8f7p+787
> +-0x1.abd443466d6f8p-274, 0x1.bce5c9e6e1067p-455
> +0x1.ef4dcfd4ecd88p-210, 0x1.454b0894b629bp-731
> +0x1.7e4055d580af4p-265, -0x1.af992ca040efap+635
> +0x1.3aff343aeab8ap-692, -0x1.b7f34b4c1770bp+736
> +0x1.a825e573089fbp+267, -0x1.ff89356fd5dcap+324
> +-0x1.4c74bd94c23e9p-699, -0x1.6f8f0f40c819p+688
> +0x1.ed672b96b7d2p+244, 0x1.67398b6a9639ep+499
> +-0x1.896f4f1a0af8dp-348, 0x1.247df7c6665d9p-635
> +0x1.64a8ad593015fp+173, -0x1.1ff42760e7babp-37
> +-0x1.066ca4e6a26b9p-144, -0x1.f228ff9fd4b29p-50
> +0x1.1c297a31d8e09p+496, -0x1.2ec016ced5d6ep-581
> +-0x1.e2f48ee5963dep+554, 0x1.67b03a7908837p-32
> +0x1.a6d1a3a6ff54bp-816, 0x1.fc81e2ef3f55p+385
> +-0x1.14ed4b5053f69p+570, -0x1.39990faca1affp+17
> +-0x1.4e49d59528292p+768, 0x1.5fbc8a55f23eap-68
> +-0x1.2fb3935152a42p-868, -0x1.b74743ff80cfcp+699
> +0x1.0a9e69428019ap+297, -0x1.b569c64ba1cbbp+155
> +0x1.8035305a8c434p-646, -0x1.6ee5d92a20efep+559
> +0x1.7d0489a9409ddp+893, -0x1.ce88b5a1086e9p-787
> +0x1.b0fe00e7f1ddap-495, 0x1.4b9baf802f094p-901
> +-0x1.962ffbd66b12bp+806, 0x1.75e05396da57fp+195
> +0x1.a29aea6168e29p-279, -0x1.192abc8197e6ap+37
> +0x1.8c133db90b85ap-466, 0x1.946563959c2bap+456
> +0x1.c9789ef809b8ap+341, 0x1.2a49d0ca369a3p-962
> +-0x1.5f2f72d0eded7p-840, -0x1.4bd4f1980ab3dp+54
> +0x1.6d67321d91dap+304, 0x1.a328296f03117p-867
> +-0x1.839cca5c3f88bp+36, -0x1.e5d66a7c3bfa9p+310
> +0x1.bcb853a989cf4p-637, 0x1.3da4a58536c7ap+227
> +0x1.1d678d30a3afep-335, -0x1.632ed31c4ef7p+188
> +0x1.7cdc8685ea2abp-463, 0x1.4be25b058c5dap+1006
> +-0x1.b3cac7cf3ca82p+769, -0x1.bc8931922cb8ap+38
> +-0x1.4009d3f1e9232p+184, 0x1.e0157784e700dp+708
> +0x1.5398945cf4022p-488, -0x1.d2121ac926aaep-665
> +-0x1.12c11e3852e9dp-495, -0x1.0a8b5d5667b46p+926
> +-0x1.0d88d03448ba2p-159, -0x1.d365262040e95p+660
> +0x1.a6ad97b6322e8p-976, 0x1.dc3fbb8a5734bp+579
> +-0x1.548081a3d1873p+709, -0x1.321c60171f77ap+679
> +-0x1.e9c6f424313ebp+877, -0x1.e83d59a949f5dp+212
> +0x1.ddd8f91b00853p-270, 0x1.aee61ef9a4dd9p-108
> +-0x1.3d0042532b7fbp+688, -0x1.fd8aab6dac0c3p-681
> +0x1.d0c862fb02403p+754, 0x1.7c3ad6097438ap-242
> +0x1.78d852eac428cp+964, -0x1.4328c93b56089p-303
> +-0x1.1ee22e52fe9e7p-628, 0x1.2a3bc85a3db6cp-502
> +0x1.d8f1bd1a041d3p-344, -0x1.2833cf7e22b7fp-434
> +0x1.10e2c2bd2fb45p+129, -0x1.ed7dccc0e350ep+358
> +0x1.b578dea09879ep+893, 0x1.abca8d47f2e38p+942
> +0x1.54266fb6dfc3fp-377, 0x1.a98189e9ed367p+490
> +-0x1.3dffa7105fecbp+314, 0x1.9277eb5ee3b9p-689
> +-0x1.4df79e9addeddp+805, 0x1.b2b8f2bf5b352p-244
> +-0x1.d64da0b70510dp+527, -0x1.8565e650f15c3p+778
> +-0x1.2aad5abf7d92ap+353, -0x1.a9d6977598aa3p+570
> +-0x1.d0565b035198p+268, -0x1.555e91b7ac1d2p+464
> +0x1.ccabdaa29e061p+627, 0x1.fb9beaf2413a9p-534
> +0x1.7c68d90e0552cp-410, 0x1.35f296bf50fd2p-472
> +-0x1.8e7677094d102p-760, -0x1.f7607d5e95586p-234
> +-0x1.6f989baeb0008p+522, 0x1.440db29d598e7p+131
> +0x1.5e05478ad697ap+187, -0x1.4cde3bc245dbdp-493
> +0x1.205c69372380cp+949, -0x1.246c125149301p-385
> +-0x1.28a4a30c67eadp-750, -0x1.7586a35e654c2p+705
> +0x1.9c57811360249p+997, 0x1.cb5374777df29p+466
> +-0x1.e71629b1d2e24p+0, -0x1.7c32976051278p-85
> +-0x1.4555929e65b69p-437, -0x1.08f901cbff6e7p+534
> +-0x1.d482302130b9cp-351, -0x1.d87c620a546c5p-806
> +0x1.61f8ae086e3a7p-744, -0x1.addecbec35731p+80
> +-0x1.15171f44c3508p-25, -0x1.6f8401e5340f5p+599
> +-0x1.bb5e0f6e722a8p-266, -0x1.3d1393d8f644ap-686
> +-0x1.c44dac2e882efp-117, -0x1.1b4eabd97a3eep-890
> +-0x1.5de17111873bbp-523, 0x1.441cddd48e282p-273
> +0x1.8ceab10eed252p-150, -0x1.5cf44e4f50a92p-931
> +-0x1.3e6926fcd302ep+680, 0x1.67081048ebe9cp+383
> +0x1.f609787820c22p+467, -0x1.0f0e3dc10b434p-706
> +-0x1.6281a8dc9a637p-862, -0x1.3d66a75dd6459p-515
> +-0x1.12756c0b8a7e5p+553, -0x1.20557c4c9df55p-618
> +-0x1.7165a5f004259p-328, -0x1.1bc31035b0cccp+488
> +-0x1.bd7bc111885bbp+635, 0x1.78f6031426ab5p-383
> +-0x1.da9337b21ff9bp-664, 0x1.a983594eb464cp-472
> +-0x1.4463e633452b5p+94, -0x1.eba53c2d63cfep+113
> +0x1.41f53747cdap-110, -0x1.a6420ec80a717p-387
> +-0x1.30979d9547db3p-741, 0x1.04f47f562677cp-455
> +0x1.3026666a06f7dp-919, 0x1.4488c08c8dd38p+594
> +0x1.b86e0629db653p+869, 0x1.7009f8525f842p+977
> +-0x1.45ba8f33c5bbdp-646, 0x1.bd14e056f875dp-989
> +0x1.42b7e9c042083p+836, 0x1.22d1039d0e6fbp+37
> +-0x1.69bc336ab616dp+478, -0x1.ea8689ce6f8b2p-589
> +-0x1.0a059370ba169p+734, 0x1.40172539857e3p+457
> +0x1.7d1abd28728fap+951, 0x1.95be8f48dd74ap+125
> +-0x1.4c29760bc909cp-966, 0x1.4d0c39ea994p+194
> +0x1.807ee47258958p-134, -0x1.9ab6b2b3c6b47p-86
> +0x1.df2343ac77142p-596, -0x1.65aaefd7164cdp-397
> +-0x1.0d55066ffb4e1p-418, -0x1.f498b0b57eabfp-985
> +0x1.92487706239e7p+839, 0x1.a861c4e6cd56bp+858
> +-0x1.90e289ce03823p+266, -0x1.9b7324b04fbe9p+534
> +0x1.7a89e24f4dd4ep+202, 0x1.e17b0d5028495p+147
> +0x1.c76ef2787661fp+312, -0x1.d11873afe7043p+750
> +-0x1.9475f232679bbp-492, -0x1.ec5d349eeb8fcp-83
> +-0x1.46ff6c6d01bfdp+133, 0x1.15f45a6ce5d07p+819
> +-0x1.e865ac432e475p+864, 0x1.5b688316a6f35p-335
> +-0x1.ff1b174fc083ap+447, 0x1.0cda1c8c6e17dp-636
> +-0x1.93be66e12ab6cp-785, -0x1.52c017a7eeb1ep+528
> +0x1.5a81cae2bf074p+633, 0x1.1e7c44e3f7147p+412
> +-0x1.ea37520cc4c73p+747, 0x1.56938541747cfp-1010
> +0x1.e07f64df0472bp+499, -0x1.da4ea4d50f099p-330
> +-0x1.3b46a22b4d1a5p-484, -0x1.3c9652a1b38e4p+735
> +0x1.99f8988c9a29ep+406, -0x1.267efe22b4d6ap-507
> +-0x1.e6900f34f0e89p+201, 0x1.6808d8175449fp-781
> +0x1.281e7cd9e6f8ep+755, 0x1.91878892830e6p-760
> +0x1.c11d41d32e7a9p-836, -0x1.b13f6e505e542p-517
> +-0x1.763242a88a435p+575, -0x1.c735b86af8c0ap+164
> +-0x1.68d2d31ef5a0fp-822, 0x1.fe73b669121e6p-530
> +-0x1.e2ec1e484b467p-246, -0x1.517674118ece2p-510
> +-0x1.d476c1bc1a52fp+376, -0x1.c8436ee6291bep+818
> +-0x1.2ffdeebbaab96p+144, -0x1.cbd166199ba51p-734
> +-0x1.fcbed2f5373aap+669, 0x1.435d769199dbfp-805
> +0x1.bca15435f5c05p+45, 0x1.e294e729b665dp+549
> +-0x1.392bf94af616ap+455, -0x1.b37cc138ca3cep+102
> +0x1.56ff2da161de6p-919, 0x1.16d11c53a7cf5p+303
> +-0x1.204990fc84f77p+684, -0x1.2628043f0fe08p-417
> +-0x1.50360f8a8f455p-818, -0x1.0ede3efc906b7p-573
> +-0x1.13dd476a38f43p-92, -0x1.3f243a6caf87bp-214
> +-0x1.bb3685b58bd14p+889, 0x1.262e682291e64p+813
> +0x1.f7b34af8b1b6ep+818, -0x1.1f6557d369c25p+648
> +0x1.90c2babca2f1fp+131, 0x1.70a7107f832fap+558
> +-0x1.56c85887bc5ebp-896, -0x1.2d706f8f20cc1p-585
> +0x1.f446545972c8cp-832, 0x1.cd4b4070c8996p+393
> +0x1.52b20cf35c687p+466, -0x1.2e658b97fc69bp+381
> +-0x1.69ef69848858ep-925, 0x1.c49c1fb4ff3a2p+677
> +-0x1.4faa81b6c6265p-361, -0x1.be626569dccccp-503
> +-0x1.8d2a9a383d506p-467, -0x1.c9f284d06c576p+434
> +-0x1.9a293ce2c81cfp-447, -0x1.841977b795897p-63
> +0x1.3ec878f68f40cp-806, 0x1.f348321912e5cp-550
> +-0x1.6f7bbd10c82ddp-439, 0x1.877dcff25c497p-577
> +-0x1.9c2f7ea3b6878p+408, -0x1.83fa86483766bp-325
> +0x1.70f578bb9533bp-712, 0x1.a1a74a80f45c7p-295
> +0x1.cca7cf2817ba7p-860, -0x1.2be524a6f3e33p-221
> +0x1.20bc24c8a126p+842, 0x1.8cffe6532802fp-854
> +0x1.6f1a523e6e92ap-640, 0x1.acac10f26818p-868
> +-0x1.efb2bf99c041ap-49, 0x1.59bbe4d1e01bfp-68
> +0x1.1a003438903f4p+864, 0x1.4a656551d94fcp+976
> +0x1.472679d7418eap+697, 0x1.63d3e008371fdp+72
> +-0x1.a56bf5b0a35fap-221, 0x1.5bc6dec8df722p+153
> +0x1.2e6bf50077ac8p+472, -0x1.092db085783cdp+604
> +0x1.828468bbcee93p+170, 0x1.5cdd84670e071p-646
> +-0x1.2b6e8dd80a229p-702, -0x1.897b1e2bab355p+656
> +-0x1.09f81069fbaa4p+514, -0x1.645850022d112p-871
> +-0x1.61141fb352a63p-622, 0x1.a25bfcd7039dbp+705
> +0x1.38f128a15e6p-780, 0x1.fdcacd1866dbbp-740
> +0x1.4a816e68d12ap+938, -0x1.4d4f5e8beb119p-137
> +-0x1.79743984c7c4bp-432, 0x1.6b360061cb6ebp+341
> +0x1.4085f9860efc7p-578, 0x1.3b1a52f7735a2p+821
> +-0x1.fdd6f1f21f4cbp+600, 0x1.63b1cf27c3d71p-861
> +0x1.d6d5636d9b52bp+747, 0x1.f74138528a4edp+205
> +-0x1.d889d11cc04e3p+124, -0x1.727a5b11ea9c9p-194
> +-0x1.b14cb39070498p-870, 0x1.adc43b3db4d59p-913
> +-0x1.8f9a4c8709cfcp-683, 0x1.c167543c4f8dp+484
> +-0x1.8c8f198f83d25p+389, -0x1.2acd43dc601c7p-925
> +0x1.00dc21201dd3fp-363, 0x1.12bd881160a0fp-611
> +0x1.3b8d0b7b496d8p+741, 0x1.d9791df33fac1p+718
> +-0x1.c57a262ffca6fp-299, 0x1.67ca7d276fe05p+842
> +-0x1.398bf03135e64p+180, -0x1.6f63b6716c7d6p-553
> +-0x1.577ed8a9668c7p-435, 0x1.b158b8ef66da7p+773
> +0x1.a925ddd73d122p+239, 0x1.75da7381ba36bp-554
> +0x1.aa55abf852967p-865, -0x1.a5ba61af0e1b9p-640
> +0x1.8da7a6d44fc61p-994, -0x1.c9b1584f1107bp-197
> +0x1.01211a48a51e9p-122, 0x1.8b7492103e65dp+734
> +-0x1.1537e473f5c65p-757, 0x1.79effd1669aa8p-38
> +0x1.8baaeb1ebf6e6p+233, 0x1.33088baff4c6p+241
> +-0x1.f9a6d8e0975e6p+236, 0x1.ff9f0020e9048p+8
> +0x1.ef67be55e650ep-305, 0x1.79e2e6ecdcb89p-469
> +0x1.616acbc7b7fcfp-953, -0x1.f9c43c9a4997p-779
> +0x1.d4f001ee489fcp+991, 0x1.b6659362bd8e7p-976
> +-0x1.38635f22ae1e9p-721, 0x1.e0f0a6a27ec05p-950
> +0x1.37a00d97d5439p-647, -0x1.73d96401d733ep-381
> +-0x1.ef42af5cde108p-734, -0x1.a1111a85d88dcp+368
> +-0x1.f9356336eb04bp+425, 0x1.c73595538494ep-266
> +-0x1.7d4616d0d4ab9p+867, 0x1.803c102f32713p+396
> +-0x1.c1a231aaa532ep+984, -0x1.70d03a3853fa4p-473
> +-0x1.329e89377c4ffp-717, -0x1.0e9a006387ac5p-46
> +0x1.754af9e855c0cp+205, 0x1.a966e0f892021p-644
> +0x1.afb4d264dbdfap+411, -0x1.ee31ecc37a5f1p+1021
> +0x1.9ee00bbf52557p+345, 0x1.f31c8a31ab158p+274
> +-0x1.c6e1644d8c4e4p+262, -0x1.45c50029dd117p-428
> +0x1.bd12397eb841p+540, 0x1.7057b7f788553p+732
> +0x1.e7b4d0d26f2b3p+892, 0x1.b57ddd846a188p+193
> +-0x1.2b5a9c0241dc8p-518, -0x1.915b7e9526228p-320
> +0x1.bc804abeaca35p-596, -0x1.4420836242beep-59
> +-0x1.cba822633ff8fp-214, -0x1.6161c6719a7c3p-753
> +0x1.654df6c52a9fbp-309, -0x1.06074a07ee34bp-277
> +0x1.71a2fde5038b3p+214, 0x1.d7203b3a1411dp-446
> +0x1.864163a41ac0fp-700, 0x1.fc3e0d3881296p-468
> +-0x1.a0fe0638a13d6p-1019, 0x1.3ccfd97d04ac3p-883
> +-0x1.ea2d6341264f9p+967, 0x1.74c85a744a30dp-895
> +-0x1.7b229dd4fad83p+574, -0x1.f5b6ff060e14bp-311
> +0x1.0847e35317b2ap+872, 0x1.263cc7008eda6p+786
> +0x1.836d9cba61135p-822, 0x1.42cadefcbe54fp-881
> +-0x1.f3160f0fabd52p-679, -0x1.b422bf6a06284p+226
> +0x1.6d53a76310183p+137, -0x1.5990d03d7fc06p-807
> +-0x1.f2707b38430cep+819, 0x1.197b70fe7abf1p-289
> +0x1.3d089bf57d8a6p+761, -0x1.edd136b9f96a4p-439
> +0x1.0709c83a75b8ap-433, -0x1.b903f3b7d4615p-260
> +0x1.6ef476cc3b04ep-609, -0x1.26049c2f1c352p-433
> +0x1.df370d82f900ap+43, 0x1.e0a3ff4d4a3cdp+893
> +-0x1.c0fd6da7e0c1ap-1003, -0x1.988ba00743d67p+549
> +0x1.84206fe9d4f58p+648, 0x1.d8b8d3e0b4e46p-869
> +0x1.ff96130f95774p-173, -0x1.edecc6c42567bp-330
> +0x1.eb2ef215c55b2p+34, 0x1.27e6b07cf8c7dp-692
> +0x1.4b40312a220abp-516, 0x1.d8f1cecf8b454p-996
> +-0x1.b78cb61a1150ap-207, 0x1.45720db95266fp-963
> +0x1.927136ec86accp-764, 0x1.251099daf16a4p+857
> +-0x1.880f868994f9cp-558, -0x1.f986798188bcap-918
> +-0x1.ad4f15fc5b3ccp-496, 0x1.54f2a9c040b1ap+752
> +0x1.345a08e466479p+754, 0x1.eba2a4ba16953p-593
> +0x1.ca715be6a7cc6p-136, 0x1.a8877bf600824p+837
> +-0x1.a2f91d66f1b86p+263, -0x1.82b1b34a211aep-605
> +-0x1.ab9e91db764bp+110, -0x1.7eee5611dd3fep-860
> +-0x1.1fcaa151dcf23p-1004, -0x1.32d025c752388p+787
> +-0x1.328464f3c8726p-973, 0x1.cc2b39aeb9a6p-416
> +0x1.007f3d7f0e16bp+98, -0x1.a2d87e3b81475p+963
> +-0x1.46589bf40603ep-492, -0x1.e2e2ff99c103ap+287
> +0x1.b0e96c5eb7685p+386, -0x1.d824f6f0c309cp+294
> +0x1.9d19ef3e2ffa9p+359, -0x1.143b522ff344fp+68
> +-0x1.c5a997bdc73ebp-803, 0x1.c22d771e1e0bcp-443
> +-0x1.ad43d4178df7bp+545, -0x1.0476bd7e6a54bp-134
> +-0x1.3dec26382e421p+433, -0x1.94fe1637a388bp-222
> +0x1.e3e8bd564a2a6p-55, 0x1.49c70d3334283p+481
> +-0x1.a12efcac0fa89p-15, -0x1.36f0d6dd3c26bp+3
> +0x1.fd73824406e7fp-173, 0x1.78219dd6bbcfbp-237
> +-0x1.418ec59bb4e29p-858, -0x1.d4318757b4b8bp-409
> +0x1.0310c4fa29ee9p+815, -0x1.561374f4c43d6p-589
> +0x1.841880334fe9dp-236, -0x1.4848b24d0472dp+866
> +0x1.5d6949de4154dp-829, 0x1.2091c1d9b73d3p-1021
> +-0x1.2ac8017ab5892p+228, -0x1.2be11eb3cbb2p-62
> +-0x1.79ae0adf95f2bp+469, -0x1.5d03f72741e28p+261
> +0x1.0b6cc6755cf4fp+1004, -0x1.657df8cd3ad36p+969
> +0x1.6ac7dc7cbd9a2p+844, -0x1.295186fd5a461p+583
> +-0x1.7ff3241662b9cp-407, -0x1.5fd7fbbaf3a9dp-813
> +-0x1.c58ee93c33266p+753, 0x1.a1ab883ce5434p-36
> +-0x1.96f5f04c2f464p-168, 0x1.0b461ecc4b7d6p-922
> +0x1.ba604f170f7c9p-149, 0x1.a99217bf2d0a7p-778
> +-0x1.4835d1f469224p+841, 0x1.1937793755eabp-182
> +0x1.fe78881af7febp-134, 0x1.630169576e036p+539
> +-0x1.6698ba5c20ddp-115, -0x1.ff068e5836595p-939
> +0x1.17b49e9681a82p+898, -0x1.364fb710eab17p+964
> +0x1.899cb4a8030bcp+731, 0x1.a6e18b4844a54p+814
> +0x1.5d249524d7c1cp-916, -0x1.4df4912c71364p-528
> +-0x1.b483741db72fep-896, 0x1.5e38500a41ef6p-353
> +-0x1.c649b634c49f3p+462, 0x1.e10d690e21746p-588
> +0x1.c0243af36ae07p-56, 0x1.98efe19e31d0bp-745
> +0x1.3e9375f1fdfc4p+610, 0x1.98981c3a04c1dp+852
> +-0x1.22b057aaf9d81p-895, 0x1.2a52d36701ff1p+180
> +-0x1.1a43b134b404ep+758, 0x1.2dde4e536602dp+803
> +-0x1.4a8ec71fbaae9p+86, 0x1.5af682eb54995p+803
> +-0x1.4ea2023486202p-955, 0x1.fbd200f967ad7p-364
> +0x1.653e2e58fee69p+731, -0x1.73a474aa28ab7p+247
> +0x1.91c372ed7dba9p-866, 0x1.7434b02c10f8fp-217
> +0x1.dc09c5407e20ep-350, 0x1.638ce6ffc4f74p+660
> +-0x1.bfffd339062c2p-935, -0x1.9561d60fc0379p+779
> +-0x1.1c84fae104859p+350, -0x1.c29f23ab083b5p+980
> +-0x1.d76aa28c3b123p-380, -0x1.0e9739accda04p+981
> +-0x1.c8eba56da773p-568, 0x1.20334ccf0ad5cp+754
> +0x1.70248ce177e39p+65, -0x1.59e7dd27a32c1p-295
> +0x1.15f0c7a31a514p+415, -0x1.a13e1be0eff11p-722
> +-0x1.9b29bdc200f9cp+895, 0x1.640b44f368a39p-108
> +-0x1.f3ce00a4d660dp-974, -0x1.7da4c6c6c4058p-45
> +0x1.96d47ff47e46p-836, -0x1.4073d7c22860bp+965
> +0x1.525621ff5063fp+147, 0x1.f692f37cdd382p+291
> +0x1.c98c9fb3c856dp-505, -0x1.ae059226c76d4p-628
> +0x1.6ff383d1ade7dp-797, 0x1.2faff9f1e05f4p-894
> +0x1.33d332690fc6cp-472, -0x1.0596916b71093p-66
> +0x1.6ac0e441c0b8fp+19, 0x1.f462c3703ff57p+640
> +0x1.5d6b56ec43c82p+554, -0x1.4b5893c3c2a93p-814
> +0x1.eb41fc0afbae8p-941, 0x1.4ab53f214d8c6p-791
> +0x1.b2d45d736a02ep+207, -0x1.1f95f822d7799p+783
> +-0x1.f5e88da9ba61fp-191, 0x1.44cbede96ea5p-513
> +0x1.aa22ecc174b97p+140, -0x1.34d368e46663fp-750
> +-0x1.afb895fc2d5a9p-391, 0x1.cd058e2ce6a5cp-594
> +-0x1.fdfe414690a48p+219, 0x1.0c62089ea1a26p-564
> +-0x1.b7f139f27d1a9p-958, 0x1.08497b0e149p+609
> +0x1.cbdd9d00ec53fp-889, -0x1.8a0df224eeb41p+180
> +-0x1.2c4f61a61e2f3p-925, -0x1.bb4584ce4583bp-89
> +0x1.398a21ff40d2p-525, 0x1.1ea6dc8faf463p+764
> +-0x1.e053dded237e3p+448, 0x1.d9a4fbf891117p+897
> +-0x1.6970debd68939p-181, -0x1.c321b67b5d8ffp-799
> +0x1.c9173f9d2256cp-94, 0x1.0300654420afbp+132
> +0x1.fd8af1d806cfep+703, 0x1.6f346ed47986cp-725
> +0x1.7359d99eec8bep-377, -0x1.308e8f9dd340ap+22
> +0x1.b69ed445c0fecp-642, 0x1.40fe9856c9524p+830
> +0x1.3c9963a22f88cp+179, -0x1.c1a338d49d771p-153
> +-0x1.3c628bb3a16b4p+943, 0x1.0bd79855c2a15p+892
> +0x1.a2956df189feap+862, -0x1.430a09d3c48e8p-382
> +-0x1.c58a4f88b051dp-818, -0x1.749b08cb7267ep+46
> +-0x1.47424874956c4p-472, 0x1.5d53f92d872b2p+360
> +0x1.3ac3c45e5b085p-583, -0x1.8b888ebd96778p-489
> +-0x1.a3cce9a7875e4p+848, -0x1.4a0288f77b2p+83
> +0x1.04c053055e26p+116, -0x1.adeacc9b7efe9p+748
> +0x1.3a545fad070b5p+736, -0x1.b971a19a23ba7p-204
> +-0x1.4b06d12f140d4p-352, 0x1.4f1f7ca3a5aa4p-97
> +-0x1.4b34797ec8e3bp+1012, -0x1.ec9fedf87d0b5p-708
> +-0x1.9a123ad73fafcp+101, 0x1.424981d6598a6p+351
> +0x1.5b353c0b6aec5p-3, -0x1.c58a64ab63a0ap+1019
> +0x1.c4d6a8aa200d6p-608, -0x1.897f2effad50ap+68
> +0x1.2473892e0d653p-119, -0x1.e8ee7fcff6d67p+818
> +0x0.ca3b996c8f9b6p-1022, 0x1.5fdc12e3b5f85p+216
> +-0x1.b792edef53c35p+416, 0x1.d3ffb3d8fc4dap-674
> +0x1.85cc482bb6e48p+515, 0x1.9282863ea931dp-422
> +-0x1.d56d55f88eeb4p+791, -0x1.14be64f69ce5bp-595
> +0x1.b035c2b7bc0cap+626, -0x1.d0534fb3ab003p+693
> +-0x1.da47e70b4e0c4p-797, 0x1.13bfb01fb078p+197
> +0x1.fc23bbdeffedbp+575, -0x1.4ad27c9e72337p+779
> +-0x1.ed2f41b68412p-85, -0x1.89a6ac24742a1p+162
> +0x1.538f9175bad3ap+969, -0x1.1bb4c19af5595p-493
> +0x1.5548ced19b007p+212, -0x1.0af485176f217p-590
> +-0x1.12f5f81cb1638p-613, 0x1.a9855b7297d3cp-639
> +-0x1.ede28c82a1cecp+653, 0x1.72ace7dd05ae1p-345
> +-0x1.ce0ef9b0c1a58p-927, -0x1.0933e76eb202fp+107
> +0x1.7c5f6f78950d3p+828, -0x1.43b30032f092ap-328
> +-0x1.a91c26be6ec6ep+83, 0x1.d386e9e104b4ap+416
> +0x1.b4b3228d3e8b2p+830, -0x1.9ae727179a915p+165
> +-0x1.b632258d91d4p+754, -0x1.305f94b7a57c4p-87
> +0x1.326690d491cafp+479, -0x1.539cf1f3237bcp+600
> +-0x1.e3510c8015c3ap+867, 0x1.399de732fdb91p-1001
> +-0x1.e71dbbc3bd5d5p+132, 0x1.ff0a5b0c9494bp-201
> +-0x1.714145d97709cp-968, -0x1.20bd66be71137p-147
> +0x1.ca1f25e85fa53p-609, 0x1.54dcf288294d9p-883
> +-0x1.b2daace6045bfp-457, -0x1.bf71fc4c48eb3p-777
> +-0x1.e0bd0b3ee6975p-498, 0x1.a44a68ebd64fdp+926
> +-0x1.91a9040bb5f4dp-374, 0x1.21c03f17a12e3p+494
> +-0x1.52c8e516058cep-605, 0x1.6c773943b6575p-221
> +0x1.0b36199ce6fdcp-402, 0x1.f4fa5dcc66238p-424
> +0x1.7b68fbcc9a7b1p+737, 0x1.00d589aeb9d14p+838
> +0x1.762015597525p-707, 0x1.91c0a96e3e2f3p+69
> +-0x1.9c1c91a01e7f4p+561, -0x1.2b5afc756381p-86
> +0x1.168db8b195388p+77, 0x1.5941ac902b8adp-322
> +-0x1.5fd7fc44221f6p-175, 0x1.8ec12c1b5db9dp+821
> +0x1.afc39485b60e5p+365, 0x1.ca8524e92647ap-889
> +0x1.6d6fb6ff7d88bp+1007, -0x1.1f98ec264f97bp+818
> +-0x1.aabed7cb278bfp-531, -0x1.7d50961792ae2p+646
> +-0x1.54c1810ef8546p-863, 0x1.8494c04338cffp-933
> +0x1.4a53f9d493286p+13, -0x1.7d5f45cf88817p-561
> +0x1.9202115764e33p-762, 0x1.3aeeb538484ffp+632
> +-0x1.fd3120017ba15p-171, -0x1.8e7297b901883p+175
> +0x1.5432ceb2d540bp+204, 0x1.e2fb29d69d5b4p+868
> +0x1.fade56777205ep-441, 0x1.7008842efa71bp-836
> +-0x1.c56cf93119487p-697, 0x1.80b8c8746f3a1p+746
> +0x1.5981929daf7f5p-827, -0x1.ed02906ddcb2fp-906
> +-0x1.a41b88e2c5debp+342, -0x1.2b2469d0471d3p+404
> +0x1.01599e94c69cbp+466, 0x1.01993baa28dfcp+818
> +-0x1.dd239f1b51226p-511, -0x1.16789d43ac97dp+565
> +0x1.0ded21786afbap-262, -0x1.a54ddc4e86bcap+659
> +-0x1.23f4f983b875dp-750, 0x1.dd4aadb8840cbp-633
> +-0x1.fc421b593967cp-517, 0x1.f0ed46dfb4ffep+713
> +0x1.dfb22ec4cf72cp-1004, -0x1.73173dd7aab6p+326
> +0x1.2db5f7b524b72p-919, -0x1.589675c47344fp+378
> +0x1.56d3d3502df3cp-952, 0x1.db00e5c4e0213p-311
> +0x1.50edf7242bddp+559, 0x1.4613f677cbad5p-40
> +-0x1.f7d9ec2938ee2p+220, 0x1.0be59f2cce9a5p-382
> +-0x1.9c9a552de56dfp-57, -0x1.b4f304bdc8ab6p-937
> +0x1.f02142c026defp-961, -0x1.eb3716d2031bfp+195
> +0x1.527b93ca647cep-866, 0x1.a88a9f3833375p+1002
> +-0x1.a74019c62e26p+399, 0x1.faee3010ed0c4p+801
> +-0x1.7ca550710140ep-101, 0x1.eb52be9e679fp+571
> +0x1.12171f8729216p-519, -0x1.004f792d5a268p-63
> +0x1.d65bfd4c30839p-746, -0x1.4daba43409641p+204
> +-0x1.21cd83e498516p-450, 0x1.4609b19e9ef53p-403
> +0x1.ebb5fa387c927p+248, 0x1.4ecab9624ec62p-92
> +0x1.45b55f65ff1e7p+813, -0x1.f707e3c8b5239p-138
> +-0x1.1da001fda482bp+974, 0x1.edec501a36b24p-724
> +0x1.97315ecb8425cp-123, 0x1.612592215f3fdp-132
> +0x1.8d5b1b3846284p-425, -0x1.3ce5fa09132cbp+436
> +0x1.d1d47524c44a4p-812, -0x1.bf891b93dde8ap+744
> +0x1.92a7bf9242684p-73, -0x1.aa82bb891be0cp+89
> +-0x1.e6810b9a1bf0ap-168, 0x1.c5398195ccdc3p+956
> +0x1.7e96a89da165fp-109, 0x1.f329f2304d644p-49
> +0x1.34bd8b31ce5c4p-282, 0x1.abae1a040636p+948
> +0x1.996f4e63d4f6cp+525, -0x1.cc3c2ee836653p+88
> +-0x1.02c3adb3be10fp+415, 0x1.9b4364f0bdae8p+443
> +0x1.b9b92f18fd558p+252, 0x1.016c8f344aa47p+650
> +0x1.c4c4bb137d3b3p-872, 0x1.f8f7156fde005p+743
> +0x1.a8de0feae63afp+656, -0x1.be0f16040e274p+567
> +0x1.dbfd2ff985308p-669, -0x1.44af235aa6586p+1020
> +-0x1.a0078fbaaab42p-479, 0x1.9dd2d4b16edecp-982
> +-0x1.e5ecc39229163p-774, 0x1.76f56f40cf5fep-657
> +-0x1.50b0162168c61p+75, -0x1.57cd096ae8ceep+687
> +-0x1.a462268708eaep-588, -0x1.0d36bcb0b2543p-466
> +-0x1.9d5d462d78a6bp-722, 0x1.991f65583703p-302
> +0x1.0bc631281acb7p+773, -0x1.94de5221c9b09p+933
> +-0x1.883db5e32c18ep-926, 0x1.e909063938ef8p-786
> +-0x1.c19dc126e2edp-216, 0x1.b69af7ca5d054p-418
> +-0x1.71c3328325a06p-201, 0x1.47b59a7ef826p-85
> +0x1.a4c106321fba5p-905, 0x1.d662dbd1e9c91p+254
> +0x1.c5b5de0aca697p-258, -0x1.f7d22c841742dp-581
> +-0x1.023ca584137cbp-748, 0x1.ca5f548413f7dp-208
> +0x1.22e3284776858p+995, -0x1.17ae2e18def95p-26
> +0x1.ea4795d44137dp+675, 0x1.46f251013b56ap-288
> +0x1.1884e3956d27fp-761, -0x1.e674a4e761f5fp-739
> +0x1.6204d355c8abfp+1015, -0x1.21daf1f59bedap-270
> +0x1.1fc66d71e1062p-964, -0x1.ab81995abffc2p-254
> +-0x1.ac284515546c2p-721, 0x1.1dd5d567a1a71p-396
> +0x1.241d5888f647ep-200, 0x1.73d9a9c9d9b67p-251
> +0x1.cb9669c0b22a4p+218, 0x1.7e5907e439ba7p-72
> +0x1.3ac7220650da3p-269, 0x1.63d95519da5d1p+241
> +0x1.8eb6d46d9a348p+330, 0x1.5ab0857c44654p-861
> +0x1.fe103724110ap+293, -0x1.6f2313c4854bep+856
> +-0x1.c876b78ed48ep+47, 0x1.c364b45c86731p+410
> +0x1.20bc075971705p-179, -0x1.4623e2dba0225p-950
> +-0x1.bab2368e68d6fp-806, -0x1.1bf2a7f5955p+283
> +-0x1.e2a7f07af1ba8p+225, -0x1.2d8a8fa4019fep-360
> +-0x1.7c24cad3c9107p-793, -0x1.7c8df00527f77p+374
> +0x1.4c4257d85d97cp+868, 0x1.d95fb6727b064p+495
> +0x1.883a5e7f0489bp-256, -0x1.c435375952c0fp+27
> +0x1.fc5a906c4aea2p-390, -0x1.057b91c5f31ccp+351
> +0x1.86b1e5feb630ap-212, 0x1.c9317e723e87p-782
> +0x1.fd784a7a3492p-310, 0x1.13394a2dbec98p-79
> +0x1.7fe2769664081p+435, 0x1.10e2b5c4b6481p+145
> +0x1.e03f7bf6e87c2p-470, -0x1.ee5649f4bf6fp+276
> +0x1.4ab32bae3801dp-330, -0x1.cc6cfb5febdfcp-170
> +0x1.d06c7fe7c6b0dp-376, 0x1.cbde7bcaca351p+735
> +0x1.008c2aab04dabp+859, -0x1.285fe5dd7d39ep-855
> +-0x1.8695662e78418p-630, -0x1.4ebb1cd711234p+272
> +0x1.1c7560a0d2df2p+702, 0x1.10fd7629c58a7p+236
> +0x1.e92cd9e803aecp-636, 0x1.2a0d010fccd2cp-157
> +0x1.08913e8bcd565p-224, 0x1.84d49084f3544p-991
> +-0x1.807cc09113d47p+358, -0x1.e984309dbe045p+169
> +-0x1.f83619b15175ap-889, -0x1.9a2cf661dbcbp-663
> +0x1.5fd0dddd8c329p+331, -0x1.f5cad18245203p-325
> +-0x1.af7f725a79dbp+979, 0x1.0569c82eaba96p-1010
> +0x1.cad6d7736af6ap+804, 0x1.68a9d7048d8dfp+16
> +0x1.b06e4f6e05c74p+675, -0x1.82e414b8b1f3cp-981
> +-0x1.0c17284003246p+437, 0x1.a98a01fd5ea0dp+593
> +0x1.0a9276374f493p-364, 0x1.9abc279b0f173p-753
> +0x1.e67c66ea3297cp+799, 0x1.7862e7b7e2378p-324
> +0x1.99f36820e47adp-891, -0x1.74fae8b0b3fa1p-548
> +0x1.5727b90bacc54p+42, 0x1.f8a955c63b79p+439
> +0x1.bc630f9589dep+939, 0x1.00a0432666a59p+370
> +-0x1.a0a05f9ad91dfp+852, 0x1.0400649151163p+262
> +0x1.916ce547832f6p+702, 0x1.1cdde7fed53p+885
> +-0x1.4a809e3e8738ap-1003, -0x1.6e1ebe4d7d35dp-508
> +0x1.d4ede50b0f8fcp+959, 0x1.d723c8d23e883p+736
> +0x1.c2acda5cceb57p+381, 0x1.ccf15447659bfp-45
> +-0x1.a030113512cb1p+746, 0x1.c0f08c56a8681p+756
> +-0x1.87cbeda5c080bp-968, 0x1.37316dba763f4p+1023
> +0x1.2141e5f6943ccp-981, 0x1.894b6684f4d0ep+768
> +-0x1.ee4b5798a9cffp-516, -0x1.a3c3ef4d63759p-176
> +-0x1.28fa20f216b59p+898, 0x1.e0c9b5cabe6ep-154
> +-0x1.045cc99bc9b41p-547, 0x1.ea693bae2df0fp-1018
> +0x1.603305c877b17p+509, -0x1.ae79d5792d458p-499
> +0x1.bd2500f96ac17p+1023, 0x1.1756ccd297817p-134
> +-0x1.2a8372b2c5fa8p-815, 0x1.5acea1671ec1ap+916
> +0x1.a1b0e306ac99p-292, 0x1.8a62c83277e19p+299
> +-0x1.936570229e706p-836, -0x1.32f83f64d9642p+995
> +0x1.57a4e8244e595p-939, -0x1.80e476dda7192p-806
> +0x1.484d7640f541fp+983, -0x1.07a37b1528d44p-182
> +0x1.1254176e87c6ap+392, -0x1.b0001af186addp-981
> +0x1.ede3fc3a5ca1bp+578, 0x1.95031dd4bdd3ep-959
> +0x1.a2eb5cbb6ba73p+1010, 0x1.efcb4205e5ec7p+854
> +0x1.b2c24a0226e26p+526, -0x1.45198a7a92467p-113
> +0x1.3050e85788d06p-665, 0x1.a04395bb35bbfp-990
> +0x1.a4419ac76552dp+299, -0x1.ac156732cef0ap+442
> +-0x0.c9c2ac71cf416p-1022, -0x1.43c79d7592e3bp+662
> +-0x1.61be60c492702p+53, -0x1.04995d2d2f4afp+833
> +-0x1.ec6a831ec4f3ep+814, -0x1.c085bfb8b0802p-312
> +-0x1.459bb6e803835p-368, 0x1.3dc58d44ec162p-469
> +0x1.1d79a7c416909p+813, -0x1.46b62b0a3ac1bp+613
> +0x1.9d1387fc05612p+868, 0x1.adacb571845afp-638
> +0x1.e55125c4369a4p+268, 0x1.8c6b089764121p+17
> +0x1.db29703a69ed2p-72, -0x1.b6011d91ad9e9p+907
> +0x1.9ebd63b002a6p-697, -0x1.cc3c55854c2ecp+239
> +0x1.b45f659d66846p-656, -0x1.ba09fb67b05d2p+186
> +-0x1.c65ba7ae75451p+853, 0x1.844fe2c65f941p-630
> +0x1.738a17a1a0746p+938, 0x1.6bda1a8a04583p-226
> +-0x1.d74d85d4d1f4fp-638, -0x1.8dd6a9ce6cdc3p+876
> +-0x1.ac1dbf8e05e35p+779, 0x1.a6418bed4b62bp+262
> +-0x1.6ea1fa5253bedp+26, -0x1.601895f61ee3cp+697
> +-0x1.a95b0ff128d5ap+633, -0x1.ed2d83198618p+666
> +0x1.8bff8243f7b3dp+278, 0x1.c2a77096bbdb2p+85
> +0x1.eec96511d93b4p-140, 0x1.623a468ac3d94p+183
> +0x1.c4eabfa35fddfp+889, -0x1.33f439b51bc35p-222
> +0x1.949f1b5ce5dbp+302, 0x1.f8f0932a9d195p+710
> +0x1.0aa20a24bcef5p-183, 0x1.5c0292e4e2975p-513
> +0x1.9ef93307c3522p-831, -0x1.4250a65b9d124p+950
> +0x1.d6262800d007cp-587, -0x1.289e6162488a5p-395
> +0x1.9b9c2759b9d6cp+348, -0x1.70f9a73f8de5p+72
> +-0x1.fdb00afbe1e01p-383, -0x1.2a155917930f9p-583
> +0x1.061bdc95f343cp+443, -0x1.fcc2fa73ffe7fp-389
> +0x1.0ecd81dee3403p+1020, -0x1.2b8cab98346e3p+217
> +-0x1.a7d9c01150eeep+145, 0x1.c99503b3fab8ep+79
> +0x1.115849bd4355fp-889, -0x1.584be874ef866p+895
> +0x1.79bdc0480d5f6p+835, -0x1.5137a69c83238p-537
> +0x1.34fcbb895c593p+202, 0x1.3b95fbd9eae2fp-367
> +-0x1.dcc539c5674e9p-497, -0x1.65e85d7fddd54p+973
> +0x1.04c41aef220abp+354, 0x1.f25bfa410cd1ap-637
> +-0x1.21a2f3fa109b3p-176, 0x1.464134cab10a4p+649
> +-0x1.aa97f9df3d02ap+320, 0x1.270a06e1ed625p+393
> +0x1.0757de7784636p-803, -0x1.1078a50df2d9bp+926
> +-0x1.db116067d1e52p+508, -0x1.2094021453f7ap+881
> +-0x1.3e5acfc0a9699p+299, -0x1.a1ac083116c75p+756
> +-0x1.1762f192cc412p+98, 0x1.b34a206142782p+618
> +0x1.380460b387bf9p+261, 0x1.27a285767a5b9p+365
> +0x1.63b3b9db0d83bp+236, -0x1.54964f2e283d3p-291
> +0x1.f9a6d9e3eeffap-811, -0x1.03b06a9b79d63p+832
> +0x1.a25365aaf555bp-114, 0x1.49f4416582a9ap-117
> +0x1.b5d022e408eacp+118, 0x1.6f736ab12a72ep+815
> +0x1.3e8d033a37c35p+669, 0x1.d0b510d024ed8p+163
> +-0x1.753ffb7cf35b6p-308, -0x1.14995499cb3f7p-972
> +-0x1.dc454c6dc2fe4p+93, 0x1.4b543400eae43p+825
> +0x1.ac1f6e3d41783p-173, 0x1.a65dc47c15194p+723
> +-0x1.6c820c125474ap+607, 0x1.5c3f5183eddc3p+920
> +-0x1.78f8b437b9422p-106, 0x1.9b7b5b05b74e6p-982
> +0x1.259163f137d33p+776, 0x1.dc9c19787d832p+960
> +0x1.a21d9506336d1p-607, 0x1.89f563dcefe07p+438
> +0x1.89c77505177efp-232, 0x1.efb52e5b60e65p+459
> +0x1.7aa6fd4ab981bp+488, 0x1.105128296785dp+420
> +-0x1.d90e261c068cp+852, -0x1.2703ac5312c28p+243
> +-0x1.cf492b17bb3f6p+948, 0x1.8c5d493a58a31p+847
> +-0x1.18c29aa390d1cp-212, 0x1.cf0383e46dcc6p+376
> +-0x1.8b85915e13a71p-64, 0x1.d817b0af92102p-944
> +0x1.0ee2196ee8a76p-429, -0x1.739d2fff9fe55p+947
> +-0x1.f367f086e9beep+387, 0x1.7132680938113p+908
> +-0x1.095390367d552p-999, -0x1.09ee53b68a11p-674
> +-0x1.c2bfbd47f1fcp-381, -0x1.90bd759d89c95p-682
> +-0x1.5070732f1b6f6p-574, 0x1.5e1e18a89d10ep+910
> +0x1.b08151a83f7acp+1018, -0x1.b7449856e98b6p+518
> +0x1.9aaeaef8da936p+905, -0x1.f028be9fccdaap+819
> +0x1.e80b1f70df1e6p-274, -0x1.31af0033ae172p+471
> +-0x1.974eb9ea4776fp+769, 0x1.7bc9fb64cf9b6p+671
> +-0x1.42d902d4ac967p+39, 0x1.59fbc371e060ep+915
> +0x1.da244995ea5d9p+923, -0x1.d1f898dea5887p-140
> +0x1.228096ac90886p-475, 0x1.e89d6a356788cp+490
> +0x1.754733aabb8fp+615, -0x1.5ec7f36ef0645p+237
> +-0x1.c28a759014522p-368, 0x1.e06c3c72f1147p+674
> +-0x1.9359e4e2ab8dcp+39, -0x1.49e7e7eb7286p-432
> +-0x1.4205f02739704p-416, 0x1.8590b07658eefp+292
> +0x1.50dc9c70c62d2p+756, -0x1.7e05375a7ab59p-936
> +0x1.692682fbda19dp+135, -0x1.2c1424531f5e8p-57
> +-0x1.533e6e861a0dbp+776, 0x1.30569319da867p-1018
> +-0x1.230a5fd77b2b9p+595, -0x1.aed54652fdfa7p-29
> +0x1.ffb43cc18a59ap-332, 0x1.6541e1db4f3dfp+379
> +0x1.741695d36e2dp-235, 0x1.b2481aa788cc8p+234
> +-0x1.adae686004adcp-287, 0x1.33b21ad23690cp+419
> +0x1.bb009ab42f26fp-247, -0x1.42324ad2b8a68p-43
> +0x1.48d0967c5f305p-409, 0x1.a4e19caa8c9c3p+470
> +-0x1.9ca27f566a9a4p-944, 0x1.cabd95ac29be5p-809
> +0x1.ed59dd38faf7p+525, -0x1.ebc3480df97e3p-355
> +0x1.daf52cf4b4cf9p+37, 0x1.90a3a6c0923b6p-572
> +0x1.17d9f720c2817p-988, 0x1.fcc786fc17e44p-35
> +-0x1.922db9d580176p+647, 0x1.a49c619f10944p-180
> +-0x1.88d69d63ca7b9p+1001, 0x1.aaa0924175993p+233
> +0x1.9fd1c3e8a149p+17, -0x1.0e5dabd650042p+490
> +-0x1.7ee7727afa707p+117, -0x1.f28ff43a60bfbp+41
> +-0x1.c654c5b561eb4p+799, -0x1.d83d996dafdf6p+792
> +0x1.cfce439e8f42bp-782, 0x1.c58c8a15f8b97p+593
> +0x1.6681925e58ac9p-861, 0x1.2768402ced7efp-987
> +-0x1.fcc75df07481ap+978, -0x1.912cd806dd07fp-487
> +-0x1.d71f87c76b1d8p+873, -0x1.f5c64d1a7da78p-20
> +0x1.4cce0cf3c3185p+829, -0x1.cb56ef1a03f52p+87
> +-0x1.bda1a9c5ff5dp+169, 0x1.c66b9959e7f95p+137
> +-0x1.b82e694e7764dp+743, -0x1.c6bd0bdc6648ap+970
> +0x1.18361594258a5p-639, 0x1.2171c4a28c0eep-509
> +0x1.89b8d64277c87p-575, 0x1.b5f836264ff06p+439
> +-0x1.0d83cd1af1e99p+45, -0x1.47be13c8b3911p+751
> +0x1.0c3780fcb3604p+643, -0x1.57a797edd61b1p+754
> +-0x1.7745a041426aap-969, 0x1.4db400b96d65ap+421
> +-0x1.16810be69914dp-120, 0x1.359633ae39259p-436
> +0x1.194c052752cb8p-954, 0x1.01815af1c2c2cp-55
> +0x1.22d8cab5f845bp+652, -0x1.fbb57fa2642cep-510
> +0x1.1857f3606057ep-96, -0x1.6958bf8167258p+926
> +-0x1.275cced907a1fp+691, -0x1.daa610958c4b9p-589
> +-0x1.50962537ad40ap-613, 0x1.9484de2fb6c05p-789
> +0x1.72ec630989c6dp+590, 0x1.fc2ec584faadap+771
> +0x1.ff67d9efd9a7bp-437, 0x1.a342fe8ac841ap+36
> +-0x1.fa6a77ba49436p+594, -0x1.f40dab00e930bp-590
> +-0x1.459843f7583aep+540, 0x1.bb7bc32501f52p+464
> +0x1.3093dbe01bff4p+570, -0x1.38b026fd38248p+295
> +0x1.3f351b55e473ap+695, -0x1.2e9e6547857ccp+697
> +0x1.0ef002c6e5163p-299, 0x1.d467c08cf75a3p-343
> +-0x1.cfff22b862868p-150, -0x1.dd99a1e648e7ap-9
> +-0x1.a6f1972aff101p+317, 0x1.69e2d38ca4cfp-319
> +-0x1.7baeedc009edcp+858, -0x1.3ea62df373ca1p-241
> +-0x1.a91ffa89c5633p-734, 0x1.938cb7ffdb644p-239
> +0x1.2c288ad276a45p-665, 0x1.269c7f16bb183p-181
> +-0x1.76ab172388c82p-615, 0x1.1972be7709aecp+615
> +-0x1.7db418283e85ep-421, -0x1.fae14268866a3p+59
> +-0x1.cb48b2f68de38p-257, 0x1.4c3239a1ab421p+808
> +-0x1.6d20620b488fdp-909, 0x1.58b35285c1115p+501
> +-0x1.9bee720266f0ep-704, 0x1.7e32ae5746303p+863
> +-0x1.1a201780dd7aep-949, -0x0.c1957598624f4p-1022
> +-0x1.f0cf664d8d70ap-826, -0x1.89d0cc2a06bp+136
> +0x1.67059fe254eb2p-9, 0x1.984f78a7fa679p-576
> +-0x1.ea8a9cd8cb5a7p-577, 0x1.83eac1df0b8d1p+728
> +0x1.98ee1b3b19987p+193, -0x1.6cd21f3ec717cp-137
> +-0x1.fefcf1bb6a922p-18, 0x1.9ed2427a5900ap+858
> +0x1.e6ae7e7578defp-633, 0x1.ba06af17eae86p+476
> +0x1.71e69842d986fp-965, 0x1.2c3fdc4684bdp+422
> +0x1.b038cd5ae9e4fp+841, -0x1.95b00ece687efp+21
> +0x1.55a312d2bf3c2p-605, 0x1.f3d2c56e0dca7p-963
> +-0x1.13fce5f27a7a7p-458, -0x1.98c23d246fa2fp-572
> +-0x1.36fb53aa8e38cp-127, -0x1.154bab93c8eb8p-590
> +-0x1.f73f174bb837dp-77, -0x1.67054ecc9f64ep-762
> +0x1.e8df068ba3d27p+550, -0x1.903f587384614p+334
> +-0x1.208e3a22be12bp-545, -0x1.7c50e9315c046p-224
> +-0x1.733bbf66e524bp-167, 0x1.3292c65fc09dfp-602
> +0x1.4461130c1f39ep+95, -0x1.a2de85d48cfecp-345
> +0x1.5bbf44944b906p-224, 0x1.17b902b02851p+22
> +0x1.b55c7423964bcp+84, -0x1.6f05ad0402f98p-402
> +-0x1.3b7550ac640cbp-376, 0x1.b6843aa267502p-861
> +-0x1.bd4d0ffa60298p+962, 0x1.d39028ecd025ap-537
> +-0x1.d539bfb12f853p+533, 0x1.6fd6dcc76b594p-818
> +-0x1.7545b6cc7dab5p-989, 0x1.bfe53e64af279p+595
> +0x1.55d86841fd23p-1004, 0x1.d9c209c1b0068p-514
> +0x1.71d66d7b86f5bp+826, 0x1.80c9e49887e21p-832
> +0x1.a4ba3a825eaf4p-172, -0x1.7dcb9539bc991p-886
> +0x1.90bc135879ee1p+498, -0x1.d6593af2b9d7bp+493
> +-0x1.e3ca7439f0777p-52, 0x1.75cbcb66dc7efp+241
> +0x1.07f6872a92fe5p-607, -0x1.881e8574eaedcp-600
> +-0x1.78ad66194bdap+976, -0x1.763bf4157053fp+882
> +-0x1.ede5ec3f2f167p-439, -0x1.0beb082f89a82p-463
> +-0x1.72acd7228f9ffp-916, -0x1.ce0930cb50203p-755
> +-0x1.42e0f9c1c4b0dp-779, 0x1.08a5ee82c2212p+859
> +0x1.5eba5f7fe5f69p+980, -0x1.3d553ed90e14p-518
> +-0x1.a3a8484f043d4p-207, -0x1.2c3d8c0a90616p-419
> +-0x1.bdbfb2ad17291p-293, 0x1.ada0e6c75e1b8p-1005
> +0x1.dbd467dab06bcp+791, 0x1.344edbf4006aap-638
> +-0x1.8d948c07d8843p-948, -0x1.0f19d92ad5f81p+198
> +0x1.4fd4d0019912fp-940, 0x1.a06753a54d04p+931
> +0x1.1a58041a552efp+775, 0x1.8e950df4ff8aap+428
> +0x1.086dabe1d9b6bp-488, -0x1.f8e2cb6387fe2p+62
> +-0x1.8bbc34c5c76a5p-945, -0x1.27441a8578b44p+860
> +0x1.478d786c0b936p+153, -0x1.29257807aa044p-729
> +-0x1.7c39fb95aaf5cp+150, 0x1.aedeb637a197fp-963
> -- 
> 2.30.2

ok

Paul

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 2/9] benchtests: Add hypotf
  2021-10-06 18:05 ` [PATCH 2/9] benchtests: Add hypotf Adhemerval Zanella
@ 2021-10-07 10:40   ` Paul Zimmermann
  0 siblings, 0 replies; 31+ messages in thread
From: Paul Zimmermann @ 2021-10-07 10:40 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

       Dear Adhemerval,

sounds good to me, except "Random inputs in [FLT_MIN, FTL_MAX]" should be
changed to "Random inputs with absolute value in [FLT_MIN, FTL_MAX]".

Paul

> From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
> Cc: Paul Zimmermann <Paul.Zimmermann@inria.fr>
> Date: Wed,  6 Oct 2021 15:05:50 -0300
> 
> Based on random input arguments.
> ---
>  benchtests/Makefile      |    2 +-
>  benchtests/hypotf-inputs | 1006 ++++++++++++++++++++++++++++++++++++++
>  2 files changed, 1007 insertions(+), 1 deletion(-)
>  create mode 100644 benchtests/hypotf-inputs
> 
> diff --git a/benchtests/Makefile b/benchtests/Makefile
> index 4fcd73131a..ad4bbf2912 100644
> --- a/benchtests/Makefile
> +++ b/benchtests/Makefile
> @@ -26,7 +26,7 @@ bench-math := acos acosh asin asinh atan atanh cos cosh exp exp2 log log2   \
>  	      fmaxf powf trunc truncf roundeven roundevenf expf exp2f logf  \
>  	      log2f sincosf sinf cosf isnan isinf isfinite hypot logb logbf \
>  	      exp10f ilogb ilogbf cbrt erf erfc exp10 expm1 j0 j1 lgamma    \
> -	      log10 log1p tgamma y0 y1 atan2
> +	      log10 log1p tgamma y0 y1 atan2 hypotf
>  
>  ifneq (,$(filter yes,$(float96-fcts)))
>  bench-math += cbrtl
> diff --git a/benchtests/hypotf-inputs b/benchtests/hypotf-inputs
> new file mode 100644
> index 0000000000..25b28c71b0
> --- /dev/null
> +++ b/benchtests/hypotf-inputs
> @@ -0,0 +1,1006 @@
> +## includes: math.h
> +## args: float:float
> +## ret: float
> +
> +# Random inputs in [FLT_MIN, FTL_MAX]
> +## name: workload-random
> +-0x1.edae52p-59, 0x1.504a8p+125
> +0x1.250844p-37, 0x1.e1122ap+3
> +-0x1.5b7a7ep-93, -0x1.21477ap-39
> +-0x1.e5af9ep-81, -0x1.7ed6eap+105
> +0x1.7ef9b6p-75, -0x1.b25f9ap+41
> +-0x1.feef0ep+11, -0x1.d68b4ap+73
> +-0x1.c0907p-53, -0x1.e80e5cp-37
> +-0x1.d7d9ecp+91, -0x1.0768d8p+113
> +0x1.cd0fap-47, 0x1.3e3328p+111
> +0x1.3fcb82p-83, -0x1.b2d3a8p-107
> +0x1.d3df2ep-33, -0x1.3c0398p-89
> +-0x1.a9bc14p+33, -0x1.7f96ecp+5
> +0x1.746f48p-21, -0x1.275848p+33
> +-0x1.3eb37cp-39, 0x1.87d12cp+121
> +0x1.8c853ap-27, 0x1.d92daep-7
> +0x1.45f826p-35, 0x1.7d8a04p+73
> +0x1.682b8ap-29, -0x1.9d9982p-95
> +-0x1.f0c9c2p-23, 0x1.e20deap-49
> +-0x1.4f58ccp-1, 0x1.3a8bb4p+111
> +0x1.9aab7cp-81, -0x1.cadf0ep-123
> +-0x1.59ef08p-113, 0x1.5ba2dp-31
> +0x1.37ff4cp+75, 0x1.d601d2p+85
> +0x1.beb4a4p-119, 0x1.b26a4p+59
> +-0x1.e7bb62p-9, -0x1.17ed62p-69
> +0x1.850c9ap-77, -0x1.db0ad6p-15
> +0x1.3b09e6p-117, 0x1.8d1394p-47
> +-0x1.b6057p+85, 0x1.6db2a6p+41
> +0x1.9b441ep+117, 0x1.1b9d3ap+27
> +0x1.4fb1e4p+79, -0x1.15174ap+3
> +0x1.fa279p+45, -0x1.3164c6p+43
> +-0x1.a0dc4ep-41, 0x1.af8a1ep-123
> +0x1.a87ceap+3, -0x1.3b1402p+1
> +-0x1.2bfa7ep+125, -0x1.d42942p+9
> +0x1.c20decp+45, 0x1.1ac07p-87
> +0x1.320192p+111, 0x1.88bdcp-111
> +0x1.c6ac0ap-13, 0x1.78289ap-125
> +0x1.c04d3ep-97, -0x1.cd2b0ep+119
> +-0x1.f321dap-43, -0x1.f3a8a2p+75
> +-0x1.38618ep+55, 0x1.af4a5cp+95
> +-0x1.262efep-3, -0x1.d641cp-49
> +-0x1.e4a1bep+123, 0x1.fdeefep+109
> +-0x1.b1b03cp-51, 0x1.c89384p+71
> +-0x1.c8bdb6p-29, -0x1.34ee3p+47
> +0x1.d19c0ep-101, -0x1.a3a902p-49
> +0x1.c0e9fcp-113, -0x1.81bc52p-1
> +-0x1.00eaeep-71, -0x1.10cfc4p+91
> +0x1.b0867p+47, 0x1.838426p+65
> +0x1.fa2bb2p+111, 0x1.98b2e2p-35
> +0x1.63215ap+57, -0x1.665636p-71
> +-0x1.f4be8cp+5, -0x1.3308a2p+19
> +0x1.0cea5cp-41, 0x1.c67682p+19
> +0x1.24ff42p-71, 0x1.aadf16p-45
> +-0x1.83714ep+35, -0x1.2144c2p-43
> +0x1.94339ap+9, 0x1.95bf3p+11
> +0x1.cc573cp-7, -0x1.aec4cap-91
> +0x1.679136p-99, -0x1.17589p-19
> +-0x1.369edp-97, 0x1.211da2p-5
> +0x1.1483bep-47, 0x1.cee72ap-15
> +0x1.74c8f4p+57, 0x1.d5bc5cp-49
> +-0x1.a5cc94p-95, -0x1.180822p-37
> +-0x1.6ff11ep+33, 0x1.76a6c2p-35
> +0x1.057fep+29, -0x1.894db4p+13
> +-0x1.1ffe8p-97, -0x1.ea0204p-127
> +0x1.c37c2cp+93, 0x1.d4d0f4p-107
> +-0x1.34dae2p+103, 0x1.944a9ep+5
> +0x1.03da1ep+21, -0x1.85d212p-121
> +0x1.810f02p-91, -0x1.f8fb2cp-111
> +0x1.5c3638p+91, 0x1.2289c8p-77
> +0x1.17a252p+73, -0x1.56add2p-7
> +0x1.c6ff9ap-125, 0x1.7fbcc6p+9
> +0x1.13bdbcp+95, -0x1.e8141p+85
> +0x1.7b0118p+43, -0x1.6353c2p-19
> +0x1.5f8cf6p-79, -0x1.ca90a2p-57
> +0x1.9d465ep-55, 0x1.0487bp-99
> +-0x1.246f1ap+107, 0x1.e1044p-75
> +0x1.b28f2cp+89, 0x1.e33354p+95
> +0x1.bbacecp-35, -0x1.c17d98p-75
> +0x1.2d5ddcp+47, -0x1.aa7e06p+101
> +0x1.a419cap-97, -0x1.e49d0cp+93
> +-0x1.0af2fap+47, -0x1.f8811ap+77
> +0x1.7ecae4p-37, 0x1.f206c6p-57
> +0x1.f52c94p+105, 0x1.3ce9a4p+103
> +-0x1.b51c58p-41, -0x1.e3fcf8p-59
> +0x1.345e16p-55, 0x1.4799e4p-71
> +-0x1.3b3a64p-43, 0x1.19f382p-21
> +-0x1.a8212ap+123, 0x1.7bae1cp+87
> +0x1.c750f8p-91, 0x1.30ef74p+81
> +0x1.f6c2c2p-91, 0x1.2201f2p-109
> +0x1.ca33cep-125, -0x1.97bb84p-27
> +-0x1.d32aaap-21, 0x1.cadeecp+95
> +0x1.93ce2cp+71, -0x1.83f13p+63
> +0x1.481adep-117, -0x1.db71e4p-41
> +0x1.33e14ep-85, -0x1.c81b7ap+29
> +-0x1.ec18e2p+45, -0x1.7e5466p-115
> +0x1.cdb63ep+31, 0x1.fd7ca6p-73
> +-0x1.42db3ep+75, 0x1.a4dff4p-115
> +0x1.a2717cp-99, 0x1.1c7738p-5
> +0x1.d2d31ap-71, -0x1.c1e7a4p-45
> +-0x1.e5567ap+75, 0x1.f4491p+47
> +0x1.67797cp+77, -0x1.1765c8p+107
> +-0x1.b56f7p-77, 0x1.0a4f1cp+15
> +-0x1.ddd08p-93, 0x1.fa8c64p-115
> +0x1.17233ep-3, 0x1.1e184p-31
> +0x1.ed1e3ep+69, 0x1.d4537cp-127
> +-0x1.74d8ep+115, -0x1.ea76c2p+77
> +0x1.c01b0ap+69, -0x1.f0357cp-85
> +-0x1.c93fa6p+91, -0x1.3b143cp+67
> +-0x1.207008p+67, -0x1.940b52p-101
> +0x1.3cab04p-85, 0x1.8d92f2p+15
> +-0x1.bf92e6p+7, -0x1.088e98p-61
> +-0x1.ffd83cp+37, -0x1.66afa8p+61
> +-0x1.193c1p-105, -0x1.d68ef6p+13
> +0x1.2190dp+59, -0x1.739642p-123
> +-0x1.ccd4d4p-65, 0x1.cde8fcp-39
> +0x1.4dc6b8p-111, 0x1.5fd7aep-59
> +-0x1.178cf8p-51, -0x1.2ea798p+25
> +-0x1.8a425p-129, -0x1.fe5ff2p+7
> +0x1.5f9fdp+23, -0x1.692006p+117
> +-0x1.18c246p-101, 0x1.c1df02p-125
> +0x1.13aadcp+59, -0x1.bf3adp+117
> +0x1.bd550ep+63, 0x1.85e3aep-59
> +0x1.173c22p+87, 0x1.c85bcap+53
> +0x1.0f97bcp-69, -0x1.bfc67p-121
> +0x1.8083bep-31, -0x1.952954p-105
> +-0x1.64211p-101, 0x1.b6d996p-77
> +-0x1.b36608p+25, -0x1.1724c2p+57
> +-0x1.66a052p-69, 0x1.bbe4c8p-121
> +-0x1.533d1ap-67, 0x1.cebbaap+61
> +-0x1.aec6a2p+3, -0x1.cdac1ap+119
> +0x1.02a65p+1, 0x1.f033dp-93
> +-0x1.35c59p-15, -0x1.d28adcp-115
> +-0x1.dc584p+119, -0x1.04d12p+97
> +0x1.d1af1p+33, 0x1.9797ap-47
> +0x1.39bcf4p-43, 0x1.20fbp+63
> +-0x1.1e097ap-103, 0x1.48cca4p-35
> +0x1.04990cp-69, 0x1.95c012p-101
> +0x1.321a94p-69, -0x1.7aebe8p-103
> +0x1.f9b85ep+13, 0x1.3ed8a2p-21
> +-0x1.4779c8p-97, -0x1.21c1ap-93
> +0x1.dd15p-89, -0x1.12d19p+35
> +0x1.fbc36p-57, 0x1.bcb044p-91
> +-0x1.9c54f2p+61, 0x1.9b327ep-69
> +0x1.589dbep-47, 0x1.653cc4p-35
> +-0x1.66181p-109, 0x1.c2dc02p-125
> +0x1.3969fp+105, -0x1.997302p+51
> +-0x1.a635dep-7, -0x1.97a04ap-109
> +0x1.15bf3cp+95, 0x1.b0aabcp-77
> +0x1.e04466p-33, -0x1.f19c08p+119
> +-0x1.c1d9d6p-21, -0x1.97d458p-73
> +-0x1.755cfep+57, -0x1.aa0bd6p-105
> +0x1.152f58p-128, 0x1.bf3f96p-25
> +0x1.f777a4p-41, -0x1.d036ap-81
> +-0x1.8c8454p+5, 0x1.96d57p-25
> +0x1.0984c4p+109, 0x1.1667e4p-79
> +-0x1.5a00b4p+57, 0x1.e1c622p+9
> +-0x1.556f9ep-87, -0x1.982f9cp+87
> +-0x1.681d8ep+117, -0x1.050dfep+49
> +-0x1.f78944p-19, -0x1.117ff8p+35
> +-0x1.81c334p+49, 0x1.28c88ep+19
> +0x1.71ddf2p+55, 0x1.fc46ap+37
> +-0x1.8b7bbp-57, -0x1.b14a0ap+47
> +-0x1.4ed274p+21, -0x1.21e6eap+51
> +-0x1.e296cep+101, 0x1.3c1252p+109
> +0x1.0579b8p-71, -0x1.7acbfcp-121
> +-0x1.74b06ep-85, -0x1.786962p-47
> +-0x1.d0be4cp+21, -0x1.07058p+91
> +0x1.f93136p-87, -0x1.a668e6p-63
> +0x1.601a22p+41, 0x1.5e494p-111
> +0x1.ce991p-81, 0x1.175b82p-39
> +0x1.d5a112p-101, -0x1.1d4994p+113
> +0x1.75ba68p+103, -0x1.cc2da4p-31
> +0x1.08016p+3, -0x1.7bdd5p+105
> +0x1.aaf7cep-45, 0x1.d52d2cp+55
> +0x1.ab182ap-71, -0x1.0d7b0ap-23
> +-0x1.a8259ep-41, 0x1.17cdaep-33
> +0x1.2cd59cp+37, -0x1.86326ep+19
> +-0x1.3284e8p+79, 0x1.7841f4p-65
> +-0x1.056f38p-9, 0x1.cf50ccp+101
> +0x1.4e0b02p+109, 0x1.73f5acp+63
> +0x1.ed794p-51, 0x1.3ccc28p+115
> +0x1.bb305ap+11, 0x1.8a2accp+61
> +-0x1.c76cf2p+55, -0x1.24185cp+105
> +-0x1.5825e2p-95, -0x1.7b334ep-59
> +-0x1.0870c2p+65, 0x1.119b16p+115
> +0x1.7bd208p-93, -0x1.1ee962p-25
> +0x1.36cc8ep-57, 0x1.b3b4bcp-1
> +0x1.54bc5ep-95, -0x1.ca7408p-49
> +-0x1.c785b4p+33, 0x1.3ee46ap-85
> +0x1.9a093ep+97, 0x1.b313f4p-17
> +0x1.e2490ep-45, -0x1.d3b4f4p-3
> +-0x1.117022p-125, -0x1.09b56p+19
> +-0x1.2646f2p+77, 0x1.03daf6p-93
> +-0x1.4e15a8p+55, -0x1.19cd9ep+63
> +0x1.87d54ep+55, 0x1.1707dp-81
> +-0x1.530f68p+45, -0x1.f65a18p-61
> +0x1.d976a8p-101, -0x1.75fe4cp+85
> +0x1.2da742p+123, 0x1.2cf722p+33
> +-0x1.20ed2ap+43, 0x1.e2b14p+39
> +0x1.d7c882p-119, 0x1.099654p+51
> +0x1.45529cp-47, -0x1.41eb1ep+17
> +0x1.e7ea3ap-27, 0x1.0c46fep-47
> +0x1.b17efap+1, -0x1.a9e0d4p+125
> +-0x1.4eb16cp-97, -0x1.d6c682p-75
> +-0x1.d7d9cp-87, 0x1.1d453cp-103
> +-0x1.cd905p+43, 0x1.0baa3ep+127
> +-0x1.1f7dd2p-101, 0x1.522d96p+29
> +0x1.0786fap-119, -0x1.013546p+17
> +0x1.67f4dcp+49, 0x1.a49d4p+107
> +-0x1.9e6568p+3, -0x1.e112ccp-115
> +0x1.c5e73ep+113, -0x1.8ed2b2p+121
> +-0x1.14dd8ap+53, 0x1.fc8136p+51
> +0x1.4a05cp-61, -0x1.dc4874p-75
> +0x1.f7356ep+111, 0x1.60014ap+13
> +0x1.71bdf6p+41, 0x1.544ddap+33
> +-0x1.032c3ap-53, 0x1.b72432p-61
> +0x1.e25b44p-19, 0x1.0ea43cp+29
> +0x1.418c5ap-121, -0x1.034ffcp-27
> +-0x1.87294cp+15, 0x1.2a9fc2p+103
> +0x1.7b0666p+69, -0x1.41570ep-47
> +-0x1.4f89e6p+53, 0x1.d6cd3ap+107
> +0x1.584532p-97, -0x1.2c93ecp-29
> +-0x1.53fd5ep-41, 0x1.0b5788p+45
> +0x1.fac676p-17, 0x1.0cac18p-13
> +-0x1.f0eb58p-43, -0x1.07029p-49
> +-0x1.a7c832p+109, 0x1.84987ap+83
> +-0x1.8647dp-117, -0x1.52ef5cp-105
> +0x1.ce399ap+55, -0x1.fd4e0ep-111
> +0x1.55d266p-75, -0x1.bc1d7cp+61
> +-0x1.a28654p-31, 0x1.a9c51p+99
> +0x1.4a1ab8p+5, 0x1.0efa68p-23
> +-0x1.3b4638p+19, 0x1.5dbb58p+57
> +0x1.33fae6p-3, -0x1.e7d4f8p+75
> +-0x1.7b482ap+109, 0x1.05bbc8p-105
> +-0x1.cb961ap+65, -0x1.14130cp-19
> +-0x1.4eec14p+15, -0x1.204db4p+47
> +0x1.e17406p-125, -0x1.4e3086p-7
> +-0x1.c50858p+121, -0x1.cabfaap+1
> +-0x1.52cb0cp+125, -0x1.a7b09ap+69
> +0x1.36075ep+119, 0x1.6892bap+21
> +-0x1.1d7288p+81, -0x1.802e16p+119
> +0x1.b0b4b4p+123, -0x1.0b0e4ep+17
> +0x1.93dc68p-41, -0x1.e6794ap-93
> +0x1.d74842p+103, 0x1.9d5654p+25
> +-0x1.faf37ap-25, -0x1.3c6b2cp+41
> +-0x1.9178e2p-121, -0x1.38c79p+71
> +0x1.a6c92ep+93, 0x1.451e26p+49
> +0x1.615abep+115, 0x1.11d95ap-113
> +-0x1.1a464ep-19, -0x1.d4d388p+103
> +-0x1.139ecap-11, 0x1.6f9988p+99
> +0x1.b23abap+21, 0x1.9a2a76p+59
> +0x1.0c9b7cp+97, -0x1.ac3c9ap-111
> +0x1.fbb1dep-49, 0x1.a393bcp-95
> +-0x1.db70cap-15, -0x1.77ba22p-67
> +-0x1.127bcap+23, -0x1.265d4ep+51
> +0x1.b10c8ap+125, -0x1.64283ap+91
> +0x1.07778p+83, 0x1.9b2a12p-115
> +-0x1.c8b63ep-81, -0x1.9260ccp-97
> +-0x1.1a90ecp-61, 0x1.80e3ep-97
> +-0x1.9ac0fep-19, -0x1.f1650ep-53
> +0x1.25816p+77, -0x1.d71a68p+113
> +0x1.2a7fdp-117, -0x1.b689c8p+23
> +-0x1.5b6556p+65, -0x1.618b9ep+67
> +-0x1.f1bb86p+51, 0x1.47443p-115
> +-0x1.b7b824p-33, 0x1.dc3972p+119
> +-0x1.7442ap-11, 0x1.75a524p+127
> +-0x1.6ecbdcp-21, -0x1.e39962p-49
> +-0x1.97ec52p+107, 0x1.50349cp+17
> +-0x1.ec931ep+61, -0x1.5709a8p-105
> +-0x1.d06e5ap-27, 0x1.e2e274p+21
> +-0x1.ab724cp-39, 0x1.11f774p+51
> +-0x1.12c154p-107, -0x1.0e0b94p-65
> +-0x1.afb4dcp+37, -0x1.1a984ep-81
> +-0x1.da4c16p+1, 0x1.6ff384p-105
> +0x1.59f5aap+95, 0x1.b3f804p-21
> +-0x1.cf49aep+69, 0x1.63246ep-57
> +0x1.55dccep-95, -0x1.37434ep-97
> +-0x1.f42e24p+31, -0x1.c08dcap-79
> +0x1.fa56cep+85, 0x1.d1485ep+111
> +-0x1.02db4cp-17, -0x1.f8298p+5
> +0x1.88f4bep+55, 0x1.856c98p+113
> +-0x1.588882p+83, -0x1.90014cp-127
> +-0x1.bbdfb4p-51, 0x1.055378p-107
> +0x1.b6d108p-31, -0x1.369af6p+119
> +-0x1.81989cp-119, 0x1.adcec4p+127
> +-0x1.3ede92p-125, 0x1.918a96p-91
> +0x1.e2ed6cp-23, -0x1.0c2058p-113
> +0x1.114da6p+37, 0x1.7647ap+101
> +-0x1.82b366p-27, -0x1.1098ccp-75
> +-0x1.8c5e84p-13, -0x1.44d514p+85
> +0x1.8cb0d6p+113, -0x1.aa3aa4p-107
> +-0x1.389ffap+9, -0x1.8e7c08p+109
> +-0x1.621616p+13, 0x1.58b64ep+29
> +-0x1.291d14p-101, 0x1.dacf74p-55
> +0x1.343f14p-5, -0x1.93dda2p+43
> +-0x1.4fbd74p+85, 0x1.de0278p+127
> +-0x1.c84b3cp+49, 0x1.a32546p+53
> +0x1.9fe3f6p+101, -0x1.5e0dp-73
> +0x1.a3afecp-121, -0x1.33a39p+111
> +0x1.ace3b4p+91, 0x1.259e7p-5
> +-0x1.ddd3p-97, 0x1.ce1a84p+45
> +-0x1.8e4464p-7, -0x1.9c72cap-107
> +0x1.11ab9cp-65, -0x1.d39c4cp+99
> +-0x1.8c938cp-9, -0x1.84d616p-113
> +-0x1.66d698p+51, 0x1.bf77b2p+103
> +-0x1.20fd9cp-61, -0x1.7a803ep+67
> +0x1.c3f63cp+87, -0x1.648e4cp-73
> +0x1.a288bap+47, -0x1.9b30ep+69
> +0x1.1d4794p+29, -0x1.5f5402p-113
> +-0x1.cbfa4cp-3, 0x1.07d076p+21
> +-0x1.ab7c5ep-49, -0x1.98f856p+111
> +-0x1.6c4c72p-77, -0x1.976118p+93
> +0x1.7f5b8cp+55, 0x1.296fep+31
> +0x1.4d0d7cp+15, -0x1.62c564p-33
> +-0x1.2c6ea4p+123, 0x1.8c63e2p-59
> +0x1.ba80fp+19, 0x1.e4bcc8p+41
> +-0x1.6145eap+121, 0x1.387e7ep-99
> +0x1.b5bfaep-89, 0x1.3bee24p-127
> +0x1.e794e2p-1, -0x1.7d9fdap+125
> +-0x1.447462p-123, 0x1.7ad05cp+23
> +-0x1.a64f54p-113, -0x1.ba7aa8p-1
> +-0x1.26ac88p-23, -0x1.6259d6p-79
> +0x1.29126p-9, 0x1.dd1db2p-37
> +0x1.f913e8p+37, -0x1.7b1816p-3
> +-0x1.f42a28p+85, -0x1.73c352p-31
> +-0x1.6b090ep-19, 0x1.fcbec8p-19
> +0x1.a05944p+5, -0x1.71ab2cp+37
> +0x1.89b4e4p-111, -0x1.0a243cp+19
> +-0x1.a98a28p+43, -0x1.2c7d9cp+125
> +0x1.cff6cp+11, -0x1.ba7e1cp+11
> +-0x1.6a55ep+17, 0x1.6c998cp-17
> +-0x1.62c776p-99, -0x1.3768e6p-83
> +0x1.495488p-17, -0x1.ea9f72p-125
> +-0x1.9a3e84p-97, 0x1.34cb9ap+53
> +0x1.edcb1cp-21, 0x1.88cp-19
> +-0x1.bb510ep+83, -0x1.3d185p+49
> +-0x1.96e248p+29, -0x1.471e44p-127
> +0x1.51f19ep-101, -0x1.173da4p-119
> +-0x1.b8772ap-83, -0x1.a4ba34p+17
> +-0x1.2da902p-121, -0x1.d3aa84p-41
> +-0x1.9e0db2p-27, -0x1.95454ap+69
> +0x1.b44664p+97, 0x1.dd2b58p-21
> +-0x1.c7eb1cp-79, 0x1.ce6978p-65
> +0x1.46fb8p-33, 0x1.1ad46ap+41
> +0x1.58dcd2p-49, 0x1.f0a34ap+109
> +0x1.7af9bep-45, -0x1.ce931ep-97
> +0x1.55f97p-97, 0x1.bd903cp-41
> +0x1.58d332p+79, -0x1.b8916cp+51
> +0x1.a68326p+113, 0x1.8136fap+37
> +0x1.9edb84p+99, -0x1.a8f788p+63
> +-0x1.64b696p+83, 0x1.da429cp+45
> +0x1.6c0a06p-7, -0x1.5d50b2p+91
> +-0x1.8e56bcp-103, -0x1.0e44dap+15
> +0x1.59a906p+73, 0x1.78d4d6p+83
> +0x1.b80fa2p+47, 0x1.2cff76p+71
> +-0x1.03978ep-37, 0x1.07ae9ap+115
> +0x1.75e992p+99, -0x1.b73b7p-127
> +0x1.fc088ep-65, 0x1.e76328p+63
> +-0x1.474a2ep-67, 0x1.312d9ep-79
> +-0x1.4d6696p+97, -0x1.3a1ef8p+101
> +0x1.4be1aep+15, 0x1.71d37p+77
> +0x1.95871p-63, 0x1.b7db36p-99
> +-0x1.884df8p+77, -0x1.5a3274p-123
> +-0x1.f29684p-125, -0x1.a2a2a2p+33
> +0x1.05a6b8p-89, -0x1.6aa302p+103
> +-0x1.b45d8ap+101, -0x1.92353cp+1
> +-0x1.6e44dp-97, -0x1.b4a108p+57
> +-0x1.a85398p-121, 0x1.15d378p+103
> +0x1.cc4f62p+125, -0x1.55e58p-132
> +-0x1.182f92p+69, 0x1.fd4d16p-79
> +-0x1.417dbep-67, 0x1.a5dddp-103
> +0x1.96040ep+49, 0x1.52864ep+69
> +-0x1.286cbap+117, -0x1.aa16cep+1
> +0x1.53d6aap+67, -0x1.dde9e6p+95
> +-0x1.4b9914p-125, -0x1.f088ecp+89
> +0x1.99f90cp+55, -0x1.1d261cp+119
> +0x1.e3917p-91, 0x1.3ab736p+23
> +0x1.f8aa64p-125, -0x1.22987p-17
> +-0x1.ddddbcp+119, -0x1.4263f6p-65
> +0x1.ba65dp+13, 0x1.00013p-77
> +-0x1.d9d524p+37, -0x1.4303eap-35
> +0x1.ded8c8p+15, -0x1.fb3f36p+99
> +-0x1.24d3b4p+91, 0x1.fc2396p-105
> +-0x1.c9c8f8p+7, -0x1.6fb67ep+21
> +0x1.9da584p-27, 0x1.732e62p+73
> +0x1.25be08p+37, 0x1.ca14d2p-3
> +0x1.d5313p-49, -0x1.fed8bep-43
> +0x1.2837a4p-101, -0x1.35fbbp-97
> +0x1.76c682p+91, 0x1.16a0dep-75
> +0x1.cf0af8p+81, -0x1.109184p+115
> +-0x1.c2530cp-1, -0x1.501a3ap-3
> +-0x1.622172p-61, -0x1.a59ae8p+39
> +-0x1.fd7e7cp-95, -0x1.cdc5fap+91
> +0x1.052b02p+81, 0x1.c05d96p-105
> +-0x1.50409cp-41, 0x1.dd8c6ep+79
> +-0x1.e340cp+99, 0x1.9e6d68p+35
> +0x1.a5a324p+3, 0x1.81988ep-115
> +0x1.78e2c2p+121, -0x1.70d938p+75
> +-0x1.facc84p-109, 0x1.3a729ap-35
> +-0x1.7c5ad8p-7, -0x1.08416ap+99
> +0x1.0c44e4p-37, 0x1.21a94p+23
> +0x1.f47bcp+25, -0x1.9f9eb8p+111
> +0x1.a78abep+41, 0x1.7218p+105
> +0x1.975cfp-103, -0x1.b544b2p-95
> +0x1.52644ep-47, -0x1.af93a4p+105
> +0x1.da63f2p+75, 0x1.19eae4p+63
> +0x1.ab1e98p-111, -0x1.8037dep-27
> +-0x1.0893fp+119, 0x1.7dd9b6p-45
> +0x1.264e1ep+67, 0x1.ce5aap+97
> +0x1.8ebf62p-53, 0x1.2bcde4p+53
> +-0x1.40155ep-11, 0x1.e9a48ap+103
> +0x1.03ace6p+99, -0x1.512956p+39
> +0x1.84dcc2p+113, -0x1.f3aa5ep-121
> +0x1.a8889ep+81, -0x1.b995cp-125
> +0x1.38009ap+1, 0x1.7c59b8p+97
> +-0x1.b9794p+11, 0x1.4bb492p+95
> +0x1.4f7a76p-61, 0x1.731636p+39
> +0x1.b66abap-33, 0x1.df8912p+17
> +-0x1.b7d05cp-17, -0x1.bec0f2p+105
> +0x1.f7c87cp+59, -0x1.fcb0f4p-19
> +0x1.8f7ae2p-75, 0x1.1b1044p-69
> +0x1.cbcee8p-21, 0x1.75ef96p+99
> +0x1.1646fp-93, -0x1.414296p-109
> +0x1.eb9b66p+79, 0x1.f9ea38p-65
> +0x1.f49076p+125, -0x1.8dab26p+105
> +0x1.41ee7cp+111, 0x1.fef55ep+113
> +0x1.1fab94p+5, 0x1.447bb8p+57
> +-0x1.52cb48p+77, -0x1.69d216p+55
> +-0x1.0e5cb2p-121, -0x1.9ea1f6p-109
> +-0x1.f08432p-107, 0x1.3df8d8p-79
> +-0x1.41001cp-53, 0x1.31936ep-83
> +-0x1.cca2c4p-79, -0x1.8c32c6p-115
> +0x1.49101p+117, -0x1.5d9558p-67
> +-0x1.669d38p-1, 0x1.24c8a8p+123
> +-0x1.d7e162p+65, -0x1.6d44p+51
> +-0x1.10bdc6p+81, -0x1.107aa2p-17
> +-0x1.60773ap+125, -0x1.895e88p-61
> +-0x1.804694p+111, -0x1.e71dd6p-81
> +0x1.46f6cap+41, 0x1.f28ff6p-59
> +0x1.ac97b4p+35, -0x1.a88b7cp-89
> +0x1.4dafa6p-121, 0x1.332728p-45
> +0x1.a3f4cp-119, -0x1.b38fe6p-45
> +-0x1.8ea278p-67, 0x1.529cc6p-113
> +0x1.d68898p-115, -0x1.2b76d6p+119
> +0x1.0a8c26p-79, -0x1.1f395cp+75
> +0x1.278146p-25, -0x1.eda13p-71
> +0x1.f675aep+11, 0x1.36e01ap-125
> +-0x1.c0b868p-127, -0x1.6bd0e6p-93
> +-0x1.f9d568p+19, 0x1.916762p+59
> +-0x1.4a156ap-15, -0x1.d48cfp-77
> +0x1.3ece54p-1, 0x1.d23a1ep-107
> +-0x1.e1c66ep-31, 0x1.a974a6p+33
> +0x1.69255ap-11, 0x1.ceddaep+91
> +-0x1.e8e00ep+9, 0x1.1303ep+3
> +0x1.d8750cp-69, 0x1.749ae4p+95
> +0x1.f9695p+7, 0x1.4f7c7ap+17
> +-0x1.e497c6p-119, 0x1.63911p+49
> +-0x1.40f398p-29, 0x1.cceb62p-21
> +0x1.ff45fap-119, 0x1.cf243ep+67
> +-0x1.43b94ap+19, -0x1.853738p-5
> +0x1.dacb1ap-85, 0x1.618b02p+19
> +0x1.7bca08p-33, 0x1.119a1p+69
> +0x1.3d6556p+37, -0x1.9a26b6p+73
> +-0x1.bda44cp+49, 0x1.dff0ap+57
> +-0x1.79251p-109, -0x1.df0798p-109
> +-0x1.bb3162p+1, 0x1.a4545ep-49
> +0x1.6975f2p-9, 0x1.f5d67p-5
> +0x1.c8e30ap+99, 0x1.e341bep-19
> +-0x1.b9452p+71, 0x1.857e08p+61
> +0x1.13cff6p-43, -0x1.370f6ap-37
> +0x1.a5ceap+81, 0x1.e25932p-35
> +-0x1.65a9eap-97, -0x1.e99p-33
> +-0x1.677e16p+79, -0x1.cec76ep+69
> +-0x1.59790cp-29, -0x1.d09608p-65
> +-0x1.7e2c7ep+79, -0x1.24b45cp+67
> +-0x1.2d1a8ep+21, -0x1.0235aep+57
> +-0x1.c693fp-69, 0x1.17651p-83
> +-0x1.db6356p+105, 0x1.b5111p+11
> +-0x1.4c17bep+41, 0x1.e50ba6p-83
> +-0x1.2c8caap+43, -0x1.af6288p+33
> +0x1.0cf9aap-37, 0x1.2b96ccp+29
> +0x1.cc0c36p-43, 0x1.f8aecep+85
> +0x1.43357ap-79, 0x1.a39c1p+53
> +-0x1.885af8p-59, -0x1.174f4ap+9
> +-0x1.3f907cp-29, 0x1.6eefd8p-35
> +-0x1.163b3p-95, -0x1.aab788p+89
> +-0x1.efe05cp-43, 0x1.03e2a4p+5
> +-0x1.378f9cp-93, -0x1.3abd18p+91
> +0x1.04f762p+33, 0x1.19a152p-91
> +-0x1.d4aeeep-111, -0x1.9abd2p+31
> +0x1.c710fep-71, 0x1.80c6d6p+45
> +0x1.d74a16p-111, 0x1.780118p+121
> +-0x1.4c9806p+47, 0x1.21ae0cp-59
> +0x1.da2826p+57, 0x1.fa51d4p-95
> +0x1.c4c11ep-47, -0x1.ca7f62p-85
> +-0x1.7433f4p+33, -0x1.e4a76cp-61
> +0x1.72e95cp-77, 0x1.d5b466p+57
> +-0x1.39ef7ep+63, 0x1.5cd13ep-95
> +0x1.b0d9a6p+91, 0x1.83bb94p+107
> +-0x1.d1d226p+113, 0x1.3f131p+67
> +0x1.956998p+41, 0x1.a4919p-85
> +0x1.0f4a6ep+127, 0x1.5a4b78p+103
> +-0x1.732994p-7, 0x1.e6526p+11
> +-0x1.db0038p-17, -0x1.fe34b8p-35
> +0x1.b24ec4p+5, -0x1.b2b2cp-117
> +0x1.1cec56p+113, -0x1.e59ab2p-43
> +-0x1.cd894p-91, -0x1.1df7d4p-89
> +0x1.a70f02p+11, 0x1.72ee9cp+41
> +-0x1.b79d84p+17, 0x1.1324dcp+87
> +0x1.8f2c34p-23, 0x1.1b1f9cp-29
> +0x1.b37ecap-89, 0x1.bf4cfap+15
> +0x1.ebadcap+121, -0x1.5cb82cp-53
> +-0x1.784b1ap+9, -0x1.f4ff2ap-51
> +-0x1.ff8126p-13, -0x1.789108p-55
> +-0x1.7aff56p+23, -0x1.5b8d1ep+15
> +0x1.2f8be6p+109, 0x1.4c4284p+115
> +0x1.508b94p+101, 0x1.30a78p-11
> +0x1.001e9ep-23, -0x1.da111ep-21
> +0x1.dfdf02p+73, 0x1.ec4538p+39
> +-0x1.83cb52p-31, -0x1.5e784ap-115
> +0x1.2f85eap+23, -0x1.a708f8p-87
> +0x1.46fc1cp-49, 0x1.cdfc56p-87
> +0x1.8fe0e6p-3, -0x1.8db9fcp+57
> +-0x1.f80dp-115, 0x1.6494f4p-13
> +-0x1.7cffe4p+23, -0x1.995b46p-81
> +-0x1.06730ap+43, -0x1.d7b764p+55
> +-0x1.556484p-111, -0x1.858cecp-23
> +0x1.a3c536p+111, -0x1.ade8e4p+97
> +-0x1.556a14p+61, -0x1.4525a8p+77
> +0x1.092f68p+57, -0x1.0a758cp+7
> +0x1.2308b4p-15, 0x1.9ad1b8p+127
> +0x1.37fe7p-27, -0x1.61d1dp+59
> +-0x1.417114p+105, -0x1.6e88cp-87
> +-0x1.a255dcp-103, 0x1.aaa368p-95
> +0x1.f54928p+81, 0x1.a0dc82p-85
> +0x1.f14a8ap-71, -0x1.47712ep-83
> +-0x1.a078p+107, 0x1.548e5cp-105
> +0x1.905b12p+55, 0x1.39fd52p+31
> +0x1.62de8p+53, -0x1.91ad06p+15
> +-0x1.31d756p+55, -0x1.bfb3fap+45
> +0x1.6489a2p-31, -0x1.449558p+15
> +-0x1.84348ep+29, 0x1.bbb018p-75
> +-0x1.d7b856p-5, 0x1.39947ep+31
> +-0x1.a6de0ap+19, -0x1.5ffd76p-123
> +-0x1.f6a908p-7, -0x1.73c1e6p+115
> +0x1.b4acd4p-83, 0x1.30f88ep-115
> +-0x1.89e074p-109, 0x1.515b76p+77
> +-0x1.ed59c8p+51, 0x1.35375p-7
> +-0x1.8cf928p-83, 0x1.0075eap-113
> +-0x1.5fa8dcp+107, 0x1.5bbc32p+51
> +0x1.71c338p-29, 0x1.9f90bap-59
> +0x1.05a45cp+91, -0x1.c0e9c4p-127
> +-0x1.2a6ed6p+15, -0x1.237f46p+9
> +0x1.1625a4p+93, 0x1.2bf54p-113
> +-0x1.e7d0eep-77, 0x1.1b3834p-33
> +0x1.a7098p-77, -0x1.404ea8p-101
> +0x1.ca3028p-99, -0x1.150312p+101
> +-0x1.bf2f14p+73, -0x1.e25b66p-11
> +0x1.8fc53p+61, 0x1.817f2cp+63
> +0x1.59ec72p+85, -0x1.a4e64cp+75
> +-0x1.042a06p-83, 0x1.bf1decp+97
> +0x1.41c616p+107, 0x1.0f41f2p+109
> +0x1.369708p-45, 0x1.c2e258p+85
> +-0x1.6f100ap-3, -0x1.f7fcc4p-123
> +-0x1.85a6e6p-35, 0x1.3520c2p+123
> +-0x1.903fe4p-81, -0x1.f96bd8p-103
> +-0x1.8b67a2p+113, 0x1.a7662cp-75
> +0x1.108868p+77, -0x1.fce106p+59
> +-0x1.a0a34ap+17, 0x1.e916cep-79
> +-0x1.4479f6p-107, -0x1.6abc6cp-127
> +-0x1.d32226p+45, 0x1.f6fd58p-55
> +-0x1.1bede2p+107, -0x1.6ae71p-103
> +-0x1.c56ac2p+123, -0x1.2d2fb4p+45
> +0x1.8a3798p+41, 0x1.72cf3cp+3
> +0x1.d5d736p+19, 0x1.d11aa4p+101
> +0x1.28a0c2p-117, 0x1.4e492ep+47
> +0x1.569b88p-127, -0x1.31925cp+7
> +-0x1.7b0528p+61, -0x1.55b908p-23
> +0x1.7e78a6p-13, -0x1.ac6a34p-27
> +0x1.a38468p+89, -0x1.89bd2ap-83
> +-0x1.b48f4cp-25, -0x1.8d150ep+89
> +-0x1.6a4652p+67, -0x1.9baf46p+43
> +0x1.4917d6p-33, -0x1.af0164p+39
> +0x1.051528p-89, 0x1.dbfbb6p+101
> +0x1.cc9a74p+81, -0x1.06410ap-25
> +0x1.2386ccp+1, 0x1.79aa68p+45
> +-0x1.2f085ap+31, -0x1.3b23aep+75
> +0x1.a8fba4p-75, 0x1.d10b2cp-115
> +0x1.61b196p+1, 0x1.7f596ep+67
> +0x1.22eb8ap+35, 0x1.5cf9f6p-19
> +-0x1.98e53cp-13, -0x1.b775aep+85
> +0x1.3b0b86p-115, 0x1.d01da6p+73
> +-0x1.02a8fep+11, 0x1.a65ec6p-37
> +0x1.1174ep-91, -0x1.30ce22p+63
> +-0x1.e8f3acp+17, -0x1.95fa36p-5
> +0x1.d5f9dcp-101, 0x1.7632bcp-1
> +-0x1.8f0ddep+103, -0x1.6acd4ep+53
> +-0x1.93d702p-3, 0x1.af129ep+29
> +0x1.e69a86p-83, 0x1.c12676p+121
> +0x1.8b4354p+39, 0x1.323796p-15
> +-0x1.7cb89cp+3, -0x1.39bde4p-91
> +-0x1.85b08ep-71, 0x1.b7258p+75
> +0x1.faf7c8p+29, -0x1.b9b7e6p-13
> +0x1.aa2672p+59, -0x1.ea361ep+89
> +-0x1.23fd1cp+83, -0x1.867982p+37
> +-0x1.4fcf5ap-69, -0x1.406216p+17
> +0x1.f4bdd6p-41, 0x1.74eb8p-123
> +0x1.4a2138p-41, -0x1.2821b6p-75
> +-0x1.f519b4p-87, -0x1.b6b50ep+97
> +0x1.ce28e2p+121, -0x1.7cb6eap-49
> +-0x1.2a4c98p+125, 0x1.72cfb4p-117
> +0x1.00d212p+29, 0x1.1218b2p-35
> +0x1.4eea78p-39, 0x1.40ed4ap+91
> +0x1.ca52fcp+105, 0x1.99308ap-51
> +-0x1.6e753p-17, 0x1.795edap+97
> +0x1.6f4bf4p+87, 0x1.da0576p-45
> +0x1.dd95e8p+63, -0x1.c01f4ap-105
> +0x1.48393p-29, -0x1.4b646p-9
> +-0x1.20b24ap+115, 0x1.b6c31ep-79
> +-0x1.bf9442p+59, -0x1.e54f92p+103
> +0x1.ef131ap-57, -0x1.eef68ap+97
> +0x1.f5772p+123, 0x1.9ac2dap-95
> +-0x1.7ad1c8p-5, 0x1.f5a0c6p-29
> +0x1.453de4p-29, -0x1.c3f9dcp+79
> +0x1.95bb26p-49, 0x1.d615fep+81
> +0x1.7a3052p-69, -0x1.88392p+85
> +0x1.74f878p+45, 0x1.0d4c08p-77
> +0x1.b4d184p-35, -0x1.0a613ep+59
> +-0x1.1347d8p+97, 0x1.72c754p+57
> +-0x1.902858p-41, -0x1.3a5b96p-27
> +-0x1.8a5774p+99, -0x1.c09be8p+77
> +-0x1.46e594p+73, 0x1.cbb668p+67
> +-0x1.a0fce4p-27, -0x1.8c288cp-125
> +0x1.152d4p-35, 0x1.6b00bep-105
> +-0x1.5344f4p+111, -0x1.3505bap-105
> +0x1.4444e8p+9, -0x1.0b7abcp+115
> +0x1.f47f92p+111, -0x1.c955e2p+97
> +0x1.8913f6p-123, -0x1.185d6cp+49
> +0x1.dc1f12p-21, 0x1.53771ap-23
> +-0x1.502dd2p+39, 0x1.b6d9dap-121
> +-0x1.7900cap-39, -0x1.06bc36p+13
> +0x1.81b5a2p-61, -0x1.aad6ep-77
> +0x1.6b8c34p-97, -0x1.65a68p-17
> +0x1.f56598p+25, 0x1.7b9886p+107
> +-0x1.66fc52p+49, 0x1.7c2b54p+85
> +-0x1.d865fcp+103, 0x1.ae157ap+3
> +-0x1.869a84p-115, 0x1.df88aep+121
> +-0x1.204d96p+105, -0x1.98615ap-3
> +0x1.99c632p+83, -0x1.356ff2p-3
> +-0x1.942766p+21, -0x1.c9c3dap-59
> +-0x1.8f4cbap-25, -0x1.1ac256p+91
> +0x1.2e3818p+71, 0x1.c46da6p-113
> +-0x1.d49f5p-15, 0x1.6b14aep+95
> +0x1.cb54a2p+15, 0x1.7eff3ap-79
> +0x1.6121fap+7, -0x1.678eccp+31
> +0x1.60e6b6p+41, -0x1.03e69cp-43
> +0x1.c0ffd6p-121, 0x1.1bf6cap-35
> +-0x1.4761cp-17, -0x1.8b110ep+53
> +-0x1.22cf08p+83, -0x1.f44ae8p+73
> +-0x1.72da22p-101, 0x1.ba090ap+37
> +0x1.8d9544p+71, -0x1.fc81bcp+103
> +0x1.a3d01ap+35, -0x1.d9a1ecp-27
> +0x1.7b045ap+105, 0x1.4284fap+67
> +0x1.602dfep+35, 0x1.975a5p-3
> +-0x1.63f9f4p-83, 0x1.8680fep+113
> +-0x1.449876p-49, 0x1.cbdb7p-23
> +-0x1.23ed8ap+61, -0x1.598c22p+3
> +-0x1.be1436p-93, 0x1.8daecep-107
> +0x1.72ef3ap+13, 0x1.673e5p+73
> +-0x1.cfbb2ap-17, -0x1.6b4816p-49
> +-0x1.fb09e6p-57, -0x1.d8c9cp+5
> +0x1.17414ap-77, -0x1.e92a6cp-11
> +0x1.7920aep+105, 0x1.76d182p+111
> +-0x1.a13e56p+113, -0x1.406fep+11
> +-0x1.e50abp-33, -0x1.7b1848p-105
> +-0x1.1f51f6p-17, 0x1.041c08p+117
> +-0x1.6a11c6p-45, -0x1.83026p-87
> +0x1.666086p-97, 0x1.8cbd5p-79
> +-0x1.aa3498p+13, -0x1.402e66p-49
> +-0x1.e2fad8p+37, 0x1.d34ab6p+33
> +-0x1.418994p+27, 0x1.c51a9p-65
> +0x1.5c8fc8p-27, -0x1.94c6b2p-67
> +0x1.f1e8f2p+7, 0x1.a3b4acp-109
> +-0x1.1acfdp-121, -0x1.ce6602p-113
> +0x1.3f5ca6p-55, 0x1.adc242p+3
> +0x1.2458e6p+53, -0x1.0fa1p-131
> +-0x1.c388ap+105, -0x1.b6c36p-71
> +-0x1.6093dap+61, -0x1.376b5p+21
> +0x1.29257p-31, -0x1.aee0f6p+93
> +-0x1.272ecep+105, -0x1.6dafd2p-107
> +0x1.f43e0cp-5, 0x1.6cd27cp-43
> +0x1.8042a4p-55, -0x1.6da866p-41
> +-0x1.7159fp-123, 0x1.df4f3ap+107
> +-0x1.4f362ap-39, 0x1.2674dap-93
> +0x1.1f13eep+1, 0x1.5ece9ep-47
> +0x1.4d3446p+89, 0x1.23b582p-111
> +0x1.58c272p+105, -0x1.64741cp-23
> +-0x1.4fe306p-49, -0x1.835d2p-7
> +0x1.5938f6p-109, 0x1.061fdcp+49
> +-0x1.b11c38p+19, -0x1.0d83fp-79
> +-0x1.566824p-107, 0x1.edb3a2p-123
> +0x1.ebfbc6p-109, 0x1.a2a774p-75
> +-0x1.100f22p-117, 0x1.8d3e8ep+9
> +0x1.af1b94p+93, 0x1.fce9b2p-69
> +-0x1.8ea8dap+31, 0x1.9dc148p-105
> +0x1.8bab62p-85, -0x1.29cc3cp+39
> +-0x1.c8cd4cp+9, 0x1.5c72aep-105
> +0x1.e93a32p+77, -0x1.5ab5cp-97
> +-0x1.44406cp-35, -0x1.e5bb92p-35
> +-0x1.c1d34p-111, -0x1.27795ep-59
> +-0x1.4d308ep+77, -0x1.14561p+115
> +0x1.4b6ce2p+79, 0x1.ba72d4p-65
> +-0x1.ef5848p-39, -0x1.20068p+65
> +-0x1.71d6bap-117, -0x1.b17c14p-81
> +0x1.c36762p-41, -0x1.d62752p+3
> +-0x1.d31984p-7, 0x1.475858p+13
> +-0x1.f331d4p-67, 0x1.d93012p-95
> +-0x1.99ef64p+71, 0x1.e4b4ap+85
> +-0x1.2fe67ap-13, -0x1.708084p-77
> +-0x1.37830ap-27, -0x1.321c9ap+75
> +0x1.87940cp+31, -0x1.05f03ep-43
> +0x1.0d57c4p+3, 0x1.ecd0bap-119
> +-0x1.0213cep-33, -0x1.2b1644p-91
> +0x1.b4a67p-77, 0x1.678712p-39
> +0x1.b5f7d6p-61, -0x1.cfc79ap+23
> +-0x1.3e56dep+75, -0x1.3ac524p+73
> +-0x1.9ed65ep+1, 0x1.464796p-125
> +-0x1.c1e02ep-123, 0x1.13db4ep+41
> +0x1.ce3fb8p+53, -0x1.9490acp-31
> +0x1.c778c2p-95, 0x1.05edeep-31
> +0x1.b38b74p-11, 0x1.65c87ep-71
> +-0x1.bd1d3cp-103, 0x1.5b1652p-125
> +0x1.6328ccp+53, 0x1.a60028p-33
> +-0x1.9fd63cp-57, 0x1.e46198p+67
> +0x1.83f1aep+43, 0x1.d2a79p-123
> +-0x1.fe615p-17, 0x1.9fcc74p-53
> +-0x1.d1bf5ep-121, -0x1.815becp+65
> +0x1.a5ee1p-101, 0x1.7985f2p-89
> +-0x1.2ea18cp-111, -0x1.89e4fap-3
> +0x1.bd543p-109, 0x1.17feb6p+79
> +-0x1.6521ap+115, -0x1.5c66cap-47
> +-0x1.1fe92ap+89, 0x1.23c9fep+87
> +-0x1.6e6c22p-17, 0x1.eb8bd4p-75
> +0x1.e27734p+17, 0x1.8ce362p+65
> +-0x1.0a721ep-121, -0x1.2f2828p+61
> +0x1.04d5fp+21, -0x1.012dfcp+111
> +0x1.3369cap+127, 0x1.0c9d7p-91
> +0x1.790e34p-79, 0x1.4346d6p+27
> +-0x1.d18cbcp+85, 0x1.712288p-33
> +-0x1.b93b3ap-99, -0x1.a7075cp-89
> +0x1.09abfcp+85, 0x1.dce29cp+17
> +-0x1.eabefep-7, -0x1.941f08p-103
> +0x1.f3dee6p+13, 0x1.fc996ep+35
> +0x1.f4e5fep-29, 0x1.db6f58p+57
> +0x1.0a0dfep+59, -0x1.10773ap+27
> +0x1.60f24ep+71, -0x1.61094p+9
> +0x1.e2910ep-81, 0x1.ef33c4p+33
> +0x1.04d916p+75, -0x1.7ba58ep-29
> +0x1.e3f162p+15, 0x1.a82c06p+95
> +-0x1.8a1fd6p+27, 0x1.a3416ap-25
> +0x1.b52486p-15, -0x1.b90882p+109
> +0x1.2866fep+15, -0x1.0ed1bap-13
> +-0x1.900a3cp-115, -0x1.560702p+109
> +-0x1.c085c2p+77, -0x1.9241aap+77
> +-0x1.af9834p-81, 0x1.df2384p+113
> +0x1.e76b4ap+105, -0x1.d879a8p-39
> +0x1.d4afd2p+83, -0x1.3c1326p+43
> +-0x1.badafp+71, -0x1.32ede4p+33
> +0x1.b0c35ep+71, 0x1.4713f8p+59
> +-0x1.483cbep+97, -0x1.ebdc86p-35
> +0x1.3ca30ep+43, -0x1.0b17f8p-23
> +-0x1.daf4aep+101, -0x1.75bbfep-23
> +0x1.4a974p-129, 0x1.970dccp-31
> +-0x1.8e530ap+43, -0x1.d347aep-83
> +0x1.d7a9bcp+19, 0x1.8ca676p-103
> +-0x1.b29a1ep+79, 0x1.506d6cp+111
> +-0x1.35106ap-71, -0x1.f1121ap+1
> +-0x1.f3a346p+125, -0x1.33c34ep+123
> +0x1.9ffacap-79, -0x1.dd3e06p+31
> +-0x1.231e7p+11, 0x1.44fe6p-33
> +-0x1.f5ddd6p+11, -0x1.561922p+43
> +-0x1.37f04p+95, 0x1.c1976ep+69
> +-0x1.f1863ep-73, -0x1.df437ep+5
> +0x1.2ef32ap-5, -0x1.256c1ap+115
> +0x1.d4f998p-65, -0x1.76929p+113
> +-0x1.08b9b2p+15, -0x1.f365a6p+3
> +-0x1.5bdf8ep-125, -0x1.5dbfd4p+81
> +0x1.0f3836p+45, 0x1.29aff2p-47
> +-0x1.4e7f2cp+125, 0x1.cfe3f6p+27
> +0x1.9033d6p+39, -0x1.e2115p-95
> +-0x1.032ed4p+49, -0x1.94b94cp-111
> +-0x1.352ec4p+117, 0x1.917fap-71
> +-0x1.1c252p-43, 0x1.cb9bf6p-121
> +0x1.9dc1dap-53, -0x1.bd2de2p+21
> +-0x1.657a4p-107, -0x1.c14c22p-19
> +-0x1.de162ep+117, 0x1.bf60f8p-87
> +-0x1.c9fe4ap-101, 0x1.6f7338p+81
> +0x1.defa7cp+43, -0x1.e7b40ap+83
> +-0x1.964ae6p+61, 0x1.ac578cp-93
> +-0x1.f971eep+21, 0x1.f83814p+45
> +0x1.f3aafep-51, -0x1.80fba4p-53
> +0x1.2f1188p-107, -0x1.dca372p-29
> +0x1.58757ep+87, -0x1.e7643ap-93
> +0x1.f491p-69, -0x1.fd7ebap-67
> +0x1.3534d2p+69, -0x1.120c8ep-119
> +0x1.12fcb4p-13, -0x1.e93c22p-61
> +0x1.15662ap-111, 0x1.094fc4p+53
> +0x1.0bbdf2p+127, -0x1.0d556p+5
> +0x1.4829e8p+49, -0x1.963766p+125
> +0x1.81de1p-5, -0x1.9b3b5ap-59
> +-0x1.4856aep-69, 0x1.d281p+19
> +0x1.f3a778p-89, 0x1.893f86p+107
> +-0x1.b6bf1ep+81, 0x1.6515c8p-33
> +-0x1.62d04p-79, 0x1.1d9148p-95
> +-0x1.92aeeep-39, 0x1.c70a94p-13
> +0x1.46af7p-79, 0x1.18c2d4p+69
> +0x1.b51e6p-35, 0x1.985aep+57
> +0x1.9b2884p-15, -0x1.ca315ep+89
> +0x1.28094p-37, 0x1.8a6cf2p-17
> +0x1.f2ee5cp-29, 0x1.ebccdp+5
> +-0x1.ac937cp+115, -0x1.5af87cp+31
> +0x1.722b94p-123, -0x1.f3d534p-125
> +0x1.6a648ep+91, 0x1.c62fb8p+103
> +-0x1.c554ecp-83, 0x1.24310cp-45
> +-0x1.1c6082p-115, 0x1.30656p-47
> +-0x1.f65e24p+49, 0x1.858c5cp+19
> +-0x1.a5324ap+81, 0x1.4d296p-93
> +-0x1.c1d6c4p-9, 0x1.a4c4c6p-117
> +0x1.c254eep+7, -0x1.85958ap+119
> +-0x1.1bcbf6p-9, -0x1.5561bcp+73
> +0x1.641de6p-21, -0x1.382bf4p+13
> +-0x1.3f47eep-71, -0x1.0df502p+17
> +-0x1.590604p-95, 0x1.8937d2p-93
> +-0x1.8abfbap-15, -0x1.7c186ep+21
> +-0x1.9a413ep-31, 0x1.224c28p-119
> +-0x1.b2bc96p-97, 0x1.b59c58p-11
> +0x1.8e221p+83, -0x1.80a652p+81
> +0x1.f518e4p+117, -0x1.25995ep+75
> +0x1.20695ep+59, 0x1.eb49bep+121
> +0x1.e3f242p+61, 0x1.143006p-53
> +0x1.124e78p-63, -0x1.0da3f6p+41
> +0x1.6826e2p-27, -0x1.deb7p-17
> +-0x1.4de7f6p-11, -0x1.789f5p-25
> +-0x1.a2c5b8p-41, 0x1.75a1ep-1
> +-0x1.c47a1p+79, -0x1.931ac6p+77
> +0x1.04047ep+5, -0x1.a9a5bp+79
> +0x1.e64c68p-57, 0x1.69777ap+97
> +-0x1.9e4d9ap-115, -0x1.71d8dp+59
> +-0x1.184612p-117, -0x1.11842ap-109
> +-0x1.c7e90ep-47, 0x1.652c38p-95
> +-0x1.c8eb98p+81, 0x1.81445cp+61
> +0x1.824782p+7, -0x1.76564p+25
> +0x1.59d554p-73, 0x1.55b028p-13
> +0x1.cc07dap-115, 0x1.e77516p-59
> +-0x1.e78ca2p+107, 0x1.dfb3bp+51
> +-0x1.102296p+41, -0x1.287cbcp-119
> +0x1.6c016ep+13, -0x1.04513cp+43
> +0x1.c210f8p-19, -0x1.3ecbfep-67
> +-0x1.bf407ep+87, -0x1.04050ap+49
> +-0x1.8d1c7ap+79, 0x1.727708p+7
> +0x1.ca3058p-95, 0x1.add62ep+121
> +0x1.220162p-51, -0x1.9830f2p+71
> +-0x1.0563ecp-103, 0x1.3ee13cp-105
> +-0x1.3522e2p+9, 0x1.10ffc8p+53
> +0x1.8fbc92p+17, 0x1.b0d97cp-81
> +-0x1.fb808ep-75, -0x1.8c68d8p-115
> +0x1.b46728p+33, 0x1.025168p+127
> +-0x1.7fcdc2p-87, 0x1.583c3ep+115
> +0x1.3c3e9ep+49, -0x1.740244p+67
> +0x1.f1a56ap-69, 0x1.5a34aep+15
> +0x1.e28902p-101, 0x1.7ce36cp-89
> +-0x1.7ffb88p+105, 0x1.a60e8cp-43
> +0x1.d250c8p-127, -0x1.10f99cp-75
> +-0x1.cfab7cp+119, -0x1.db9d4cp+83
> +0x1.185b1ap-35, -0x1.ca048p+7
> +-0x1.da6032p+73, 0x1.df716cp-1
> +0x1.88c95ap+1, 0x1.fa5506p+5
> +-0x1.0d327ep-113, -0x1.ce01b2p+41
> +0x1.ab6032p-55, 0x1.2eb6e4p+107
> +-0x1.62c7bcp-37, -0x1.03f2e6p+9
> +0x1.c88eaap-113, -0x1.e0db88p+43
> +-0x1.cdb8ep-107, 0x1.9474b6p-69
> +-0x1.d564e4p-87, 0x1.c7105ap+19
> +-0x1.dfebe8p-35, 0x1.6c32fp+41
> +0x1.0d0e82p-19, -0x1.de610cp-39
> +0x1.af637ap+43, -0x1.8b5f6ep-7
> +-0x1.fb3944p+13, -0x1.87b74cp+49
> +-0x1.75c644p+59, 0x1.95bbc6p-81
> +-0x1.cf341p-39, -0x1.85e31cp+15
> +0x1.acc342p-93, 0x1.545fdap+85
> +-0x1.5296e2p+25, -0x1.84f9eap+113
> +-0x1.fc305p+107, 0x1.d22fd4p-43
> +-0x1.d1401p+59, 0x1.d5e566p+31
> +-0x1.8b35a4p-31, -0x1.6ee6d8p-97
> +-0x1.a3110ep-117, -0x1.178354p-119
> +0x1.31dc1ep-59, -0x1.2006a8p-59
> +0x1.c76718p-25, 0x1.43003p+39
> +0x1.78c26ep-11, 0x1.ed928ap-51
> +0x1.7c326cp-55, -0x1.b47e52p+61
> +0x1.abc998p+51, 0x1.2f5b4cp+13
> +0x1.50a2d6p+63, -0x1.c3d728p+27
> +0x1.139cdp+37, -0x1.978fdap-27
> +-0x1.952d6ep+123, 0x1.9b34cp-117
> +-0x1.9f0012p+1, -0x1.029e14p-115
> +-0x1.ca0838p-39, -0x1.a321e4p+89
> +0x1.381c48p+25, -0x1.adec28p-23
> +0x1.0cd4ecp+1, 0x1.1315ccp+55
> +0x1.09685ep+61, -0x1.1a2b8ep-61
> +0x1.cba66cp-103, 0x1.804acp+47
> +-0x1.1c716p+91, -0x1.bc6c68p+95
> +-0x1.471a44p-43, 0x1.fbf18cp-57
> +0x1.f0fc7p-93, -0x1.6442e6p-29
> +0x1.971db4p-83, 0x1.940b9p+7
> +0x1.ac1126p+61, 0x1.8bcbdcp+105
> +0x1.269932p+43, 0x1.4475c2p+97
> +0x1.e2cb16p+117, 0x1.cf977p-103
> +0x1.762b06p+113, 0x1.1ca6eep+69
> +-0x1.0017fp-81, 0x1.823d88p-43
> +-0x1.bdaae6p-61, 0x1.f1ef72p-63
> +-0x1.fe198ap+111, 0x1.85d9ccp-67
> +-0x1.11bfa4p-65, 0x1.8d22d4p+25
> +-0x1.e7bb16p+43, 0x1.43602p+49
> +-0x1.d686e8p-93, 0x1.45a892p-49
> +0x1.ed541p-1, -0x1.cc85a6p-39
> +-0x1.2f03fcp-71, -0x1.6b351ep-31
> +-0x1.71b314p-29, -0x1.e2b898p-17
> +-0x1.ebd5f8p-85, -0x1.8db56ap+57
> +-0x1.e3d15ap+71, -0x1.020b74p+39
> +0x1.d8f59ep-9, -0x1.267c8ep-91
> +0x1.38d794p+11, 0x1.4d4e5cp+103
> +0x1.7dd7a2p-31, 0x1.be6a9cp+73
> +-0x1.1408d8p-121, 0x1.10f37p+99
> +-0x1.ef03dp-125, 0x1.70a31ap-99
> +-0x1.8dff72p-67, 0x1.ba6d14p+97
> +-0x1.c424a8p+105, 0x1.b6575ap+51
> +-0x1.26bb2p+35, -0x1.6c4f48p-37
> +-0x1.d7331p-101, -0x1.cfc016p-65
> +-0x1.804164p-103, 0x1.aa1dep+107
> +0x1.03e6d6p+63, 0x1.a822e6p-27
> +0x1.e3352cp-35, 0x1.257ed8p-109
> +-0x1.f50ca6p+13, -0x1.c72accp-63
> +0x1.c33f4cp+21, -0x1.d90b22p-57
> +0x1.6b0642p-85, 0x1.ba928ap-123
> +0x1.7ec6ap-119, 0x1.3dca8p-9
> +0x1.661fc2p+53, -0x1.9075c4p+27
> +-0x1.2ab95ap-31, 0x1.6bcd72p+65
> +0x1.95ba5cp+11, -0x1.63a46p-85
> +-0x1.00709ap-91, 0x1.1c759p-21
> +0x1.9c04c2p+121, 0x1.5608ccp+95
> +-0x1.9db026p+93, -0x1.684d46p-51
> +0x1.082ed2p+21, 0x1.5f2adap+63
> +-0x1.efbff8p-117, -0x1.15cb7ep-77
> +0x1.748f3p-37, -0x1.af1c74p-65
> +-0x1.e13dc4p-85, 0x1.37f1cp+21
> +-0x1.7b50b8p-128, -0x1.c5a7d4p+61
> +0x1.f9cfecp-51, 0x1.a0a80ap-93
> +0x1.87b578p-41, 0x1.b17798p+93
> +-0x1.fde6fp-81, -0x1.968196p+43
> +0x1.5e5faep+33, -0x1.073b8cp-19
> +0x1.e74636p+55, 0x1.e44c24p-69
> +-0x1.b92de2p+75, 0x1.f1854ep-89
> +0x1.e3e554p-43, 0x1.7e0164p-7
> +0x1.18d6c8p+115, 0x1.ce9cf4p+23
> +0x1.00de28p-107, 0x1.4371a8p-61
> +-0x1.a29ab2p-45, -0x1.d0c916p+89
> +-0x1.d2543ap+67, 0x1.1aa5acp-27
> +-0x1.bcf608p-57, 0x1.fcaa06p+45
> +0x1.a97ea6p-11, 0x1.40f9cap-93
> +-0x1.6f3bfcp+123, 0x1.fcb72ap+105
> +0x1.583b2cp-49, -0x1.8b86a2p+19
> +-0x1.7a2d5ep+109, -0x1.27ed68p+87
> +-0x1.512144p+51, 0x1.7a2b24p-93
> +-0x1.740cc4p+67, 0x1.5c58bcp+51
> +-0x1.9c60dap+101, -0x1.b07f2ep-65
> +-0x1.d7162p-91, 0x1.0608a4p+61
> +-0x1.971bap-55, 0x1.79c728p-123
> +0x1.e04514p+103, -0x1.c5711cp-31
> +0x1.5d4f7ep-87, 0x1.65e0aep+27
> +0x1.ec298cp-49, 0x1.9685d2p-123
> +0x1.b79deep-37, -0x1.87a16ap+1
> +-0x1.af9c1p+119, -0x1.cdff8cp-127
> +-0x1.c102f4p+103, 0x1.3f8e74p+87
> +0x1.99ba8p-63, -0x1.9a0d3ep+75
> +-0x1.77941ep-79, 0x1.10c348p+11
> +0x1.4ffa9p+121, 0x1.de8f58p+41
> +-0x1.793116p+119, -0x1.c1461ep-85
> +-0x1.2e3156p-49, -0x1.e75af4p-61
> +0x1.95aa7ap-117, -0x1.77fa6cp+43
> +-0x1.6be95ep-95, -0x1.946cfp-37
> +0x1.f710eep-51, 0x1.d66fd6p-97
> +0x1.5883dap+125, -0x1.8ceb64p-107
> +0x1.22e6b8p-47, -0x1.884312p+35
> +0x1.c6b7c4p+97, -0x1.077fcap+93
> +0x1.db1bd2p-1, 0x1.b58a9ep+49
> +0x1.77ae1ep-27, 0x1.69b66ep+115
> +-0x1.836058p+123, 0x1.230e6cp+121
> +-0x1.400382p-39, 0x1.dff776p-95
> +-0x1.3b109cp-17, -0x1.78eddep-101
> +0x1.f4c808p+83, 0x1.5226dep-89
> +0x1.a49f02p+9, -0x1.83dd7cp+55
> +-0x1.59d4c4p+59, -0x1.5a23bcp-15
> -- 
> 2.30.2
> 
> 

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 0/9] Improve hypot()
  2021-10-06 18:05 [PATCH 0/9] Improve hypot() Adhemerval Zanella
                   ` (8 preceding siblings ...)
  2021-10-06 18:05 ` [PATCH 9/9] math: Remove the error handling wrapper from hypot and hypotf Adhemerval Zanella
@ 2021-10-07 11:03 ` Paul Zimmermann
  2021-10-07 12:39   ` Adhemerval Zanella
  9 siblings, 1 reply; 31+ messages in thread
From: Paul Zimmermann @ 2021-10-07 11:03 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

>  With a random 1e9 inputs for different float format I see:
> 
>   - An improvement from 3427362 to 18457 results with 1 ulp of
>     error for Binary64.
>   - An improvement from 233442 to 1274 results with 1 ulp of
>     error for Binary96 (x86_64).
>   - An improvement from 453045 to 1294 results with 1 ulp of
>     error for Binary96 (x86_64).

I guess the last one should read Binary128.

Another comparison is to check for the maximal known error.
For glibc-2.34 the maximal known errors are as follows (in ulps, with
corresponding inputs), determined with [1]:

binary32  0.500 0x1.3ac98p+67,-0x1.ba5ec2p+77
binary64  0.987 -0x0.5a934b7eac967p-1022,-0x0.b5265a7e06b82p-1022
binary96  0.981 0x1.73f339f61eda21dp-16384l,0x2.e45f9f9500877e2p-16384l
binary128 0.985 -0x2.d8311789103b76133ea1d5bc38c4p-16384,-0x1.6d85492006d7dcc6cc52938684p-16384

With the new code I get (with threshold 1000000, except for binary128 where I
used 200000):

binary32  0.500 0x1.3ac98p+67,-0x1.ba5ec2p+77 [same]
binary64  0.792 0x0.603e52daf0bfdp-1022,-0x0.a622d0a9a433bp-1022
binary96  0.584 -0x2.97b86706043d619p+7240l,0x1.8256bdd12d2e163ep+7240l
binary128 0.749 0x2.2d5faf4036d6e68566f01054612p-8192,0x3.5738e8e2505f5d1fc2973716f05p-8192

Paul

[1] https://gitlab.inria.fr/zimmerma/math_accuracy/-/blob/master/binary64/check_sample2.c

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 1/9] benchtests: Make hypot input random
  2021-10-07  9:48   ` Paul Zimmermann
@ 2021-10-07 11:20     ` Adhemerval Zanella
  2021-10-07 17:08     ` Joseph Myers
  1 sibling, 0 replies; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-07 11:20 UTC (permalink / raw)
  To: Paul Zimmermann; +Cc: libc-alpha



On 07/10/2021 06:48, Paul Zimmermann wrote:
>        Dear Adhemerval,
> 
>> From: Adhemerval Zanella <adhemerval.zanella@linaro.org>
>> Cc: Paul Zimmermann <Paul.Zimmermann@inria.fr>
>> Date: Wed,  6 Oct 2021 15:05:49 -0300
>>
>> Instead of inputs based on the algorithm implementation details.
>> ---
>>  benchtests/hypot-inputs | 1014 ++++++++++++++++++++++++++++++++++++++-
>>  1 file changed, 1002 insertions(+), 12 deletions(-)
>>
>> diff --git a/benchtests/hypot-inputs b/benchtests/hypot-inputs
>> index e987e5dd1b..b3c8762ef3 100644
>> --- a/benchtests/hypot-inputs
>> +++ b/benchtests/hypot-inputs
>> @@ -2,15 +2,1005 @@
>>  ## args: double:double
>>  ## ret: double
>>  
>> -## name: overflow
>> -0x3.ffffffffffffcp-1024, 0x8p-152
>> -## name: higher_two500
>> -0x1.000002027941dp+500,  0x1.0000000000001p+500
>> -## name: subnormal
>> -0x0.fffffffffffffp-1022, 0x0.fffffffffffffp-1022
>> -## name: less_two500
>> -0x1.fffffffffffffp-501,  0x1.fffffffffffffp-501
>> -
>> -## name: default
>> -3.0                   , 4.0
>> -5.0                   , 4.0
>> +# Random inputs in [DBL_MIN, DBL_MAX]
> 
> should be Random inputs with absolute value in [DBL_MIN, DBL_MAX]

Ack.

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 3/9] math: Simplify hypotf implementation
  2021-10-07  9:44   ` Paul Zimmermann
@ 2021-10-07 11:37     ` Adhemerval Zanella
  2021-10-07 12:08       ` Paul Zimmermann
  0 siblings, 1 reply; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-07 11:37 UTC (permalink / raw)
  To: Paul Zimmermann; +Cc: libc-alpha



On 07/10/2021 06:44, Paul Zimmermann wrote:
>        Dear Adhemerval,
> 
>> Use isnan()/isinf() instead of GET_FLOAT_WORD and interger operations.
> 
> interger -> integer

Ack.

> 
>> There is also no need to check for 0.0.
>>
>> The file Copyright is also change to use  GPL, the implementation was
> 
> change -> changed

Ack.

> 
>> complete change by 7c10fd3515f to use double precision instead of
> 
> complete change -> completely changed ?

Ack.

> 
>> scaling and this change removes all the GET_FLOAT_WORD usage.
>>
>> Checked on x86_64-linux-gnu.
>> ---
>>  sysdeps/ieee754/flt-32/e_hypotf.c | 57 +++++++++++++------------------
>>  1 file changed, 23 insertions(+), 34 deletions(-)
>>
>> diff --git a/sysdeps/ieee754/flt-32/e_hypotf.c b/sysdeps/ieee754/flt-32/e_hypotf.c
>> index e770947dc1..6495a91cd4 100644
>> --- a/sysdeps/ieee754/flt-32/e_hypotf.c
>> +++ b/sysdeps/ieee754/flt-32/e_hypotf.c
>> @@ -1,46 +1,35 @@
>> -/* e_hypotf.c -- float version of e_hypot.c.
>> - */
>> +/* Euclidean distance function.  Float/Binary32 version.
>> +   Copyright (C) 2012-2021 Free Software Foundation, Inc.
>> +   This file is part of the GNU C Library.
>>  
>> -/*
>> - * ====================================================
>> - * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
>> - *
>> - * Developed at SunPro, a Sun Microsystems, Inc. business.
>> - * Permission to use, copy, modify, and distribute this
>> - * software is freely granted, provided that this notice
>> - * is preserved.
>> - * ====================================================
>> - */
>> +   The GNU C Library is free software; you can redistribute it and/or
>> +   modify it under the terms of the GNU Lesser General Public
>> +   License as published by the Free Software Foundation; either
>> +   version 2.1 of the License, or (at your option) any later version.
>> +
>> +   The GNU C Library is distributed in the hope that it will be useful,
>> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>> +   Lesser General Public License for more details.
>> +
>> +   You should have received a copy of the GNU Lesser General Public
>> +   License along with the GNU C Library; if not, see
>> +   <https://www.gnu.org/licenses/>.  */
>>  
>>  #include <math.h>
>>  #include <math_private.h>
>>  #include <libm-alias-finite.h>
>>  
>>  float
>> -__ieee754_hypotf(float x, float y)
>> +__ieee754_hypotf (float x, float y)
>>  {
>> -	double d_x, d_y;
>> -	int32_t ha, hb;
>> -
>> -	GET_FLOAT_WORD(ha,x);
>> -	ha &= 0x7fffffff;
>> -	GET_FLOAT_WORD(hb,y);
>> -	hb &= 0x7fffffff;
>> -	if (ha == 0x7f800000 && !issignaling (y))
>> -	  return fabsf(x);
>> -	else if (hb == 0x7f800000 && !issignaling (x))
>> -	  return fabsf(y);
>> -	else if (ha > 0x7f800000 || hb > 0x7f800000)
>> -	  return fabsf(x) * fabsf(y);
>> -	else if (ha == 0)
>> -	  return fabsf(y);
>> -	else if (hb == 0)
>> -	  return fabsf(x);
>> -
>> -	d_x = (double) x;
>> -	d_y = (double) y;
>> +  if ((isinf (x) || isinf (y))
>> +      && !issignaling (x) && !issignaling (y))
>> +    return INFINITY;
>> +  if (isnan (x) || isnan (y))
>> +    return x + y;
> 
> why not test NaN before +/-Inf, to avoid the issignaling test?

Because NaN should be returned iff there is a signaling one, for 
instance hypot (qNaN, Inf) should return Inf.  To test NaN before
Inf we would need to:

  if ((isnan (x) || isnan (y))
      && (issignaling (x) || issignaling (y)))
    return x + y;
  if (isinf (x) || isinf (y))
    return INFINITY;

Which is essentially the same.

> 
>> -	return (float) sqrt(d_x * d_x + d_y * d_y);
>> +  return sqrt ((double) x * (double) x + (double) y * (double) y);
> 
> a double-rounding problem can happen here, but anyway the function is not
> correctly rounded

Yeah, but I think this is preexisting issue in the current approach.

> 
>>  }
>>  #ifndef __ieee754_hypotf
>>  libm_alias_finite (__ieee754_hypotf, __hypotf)
>> -- 
>> 2.30.2
>>
>>
> 
> Paul
> 

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 3/9] math: Simplify hypotf implementation
  2021-10-07 11:37     ` Adhemerval Zanella
@ 2021-10-07 12:08       ` Paul Zimmermann
  0 siblings, 0 replies; 31+ messages in thread
From: Paul Zimmermann @ 2021-10-07 12:08 UTC (permalink / raw)
  To: Adhemerval Zanella; +Cc: libc-alpha

       Dear Adhemerval,

> >> +  if ((isinf (x) || isinf (y))
> >> +      && !issignaling (x) && !issignaling (y))
> >> +    return INFINITY;
> >> +  if (isnan (x) || isnan (y))
> >> +    return x + y;
> > 
> > why not test NaN before +/-Inf, to avoid the issignaling test?
> 
> Because NaN should be returned iff there is a signaling one, for 
> instance hypot (qNaN, Inf) should return Inf.

thank you, I forgot that special case.

Paul

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 0/9] Improve hypot()
  2021-10-07 11:03 ` [PATCH 0/9] Improve hypot() Paul Zimmermann
@ 2021-10-07 12:39   ` Adhemerval Zanella
  0 siblings, 0 replies; 31+ messages in thread
From: Adhemerval Zanella @ 2021-10-07 12:39 UTC (permalink / raw)
  To: Paul Zimmermann; +Cc: libc-alpha



On 07/10/2021 08:03, Paul Zimmermann wrote:
>>  With a random 1e9 inputs for different float format I see:
>>
>>   - An improvement from 3427362 to 18457 results with 1 ulp of
>>     error for Binary64.
>>   - An improvement from 233442 to 1274 results with 1 ulp of
>>     error for Binary96 (x86_64).
>>   - An improvement from 453045 to 1294 results with 1 ulp of
>>     error for Binary96 (x86_64).
> 
> I guess the last one should read Binary128.

Yeap.

> 
> Another comparison is to check for the maximal known error.
> For glibc-2.34 the maximal known errors are as follows (in ulps, with
> corresponding inputs), determined with [1]:
> 
> binary32  0.500 0x1.3ac98p+67,-0x1.ba5ec2p+77
> binary64  0.987 -0x0.5a934b7eac967p-1022,-0x0.b5265a7e06b82p-1022
> binary96  0.981 0x1.73f339f61eda21dp-16384l,0x2.e45f9f9500877e2p-16384l
> binary128 0.985 -0x2.d8311789103b76133ea1d5bc38c4p-16384,-0x1.6d85492006d7dcc6cc52938684p-16384
> 
> With the new code I get (with threshold 1000000, except for binary128 where I
> used 200000):
> 
> binary32  0.500 0x1.3ac98p+67,-0x1.ba5ec2p+77 [same]
> binary64  0.792 0x0.603e52daf0bfdp-1022,-0x0.a622d0a9a433bp-1022
> binary96  0.584 -0x2.97b86706043d619p+7240l,0x1.8256bdd12d2e163ep+7240l
> binary128 0.749 0x2.2d5faf4036d6e68566f01054612p-8192,0x3.5738e8e2505f5d1fc2973716f05p-8192

Thanks to double check that precision does improve in all cases.

> 
> Paul
> 
> [1] https://gitlab.inria.fr/zimmerma/math_accuracy/-/blob/master/binary64/check_sample2.c
> 

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 8/9] i386: Move hypot implementation to C
  2021-10-07  8:28           ` Paul Zimmermann
@ 2021-10-07 17:05             ` Joseph Myers
  0 siblings, 0 replies; 31+ messages in thread
From: Joseph Myers @ 2021-10-07 17:05 UTC (permalink / raw)
  To: Paul Zimmermann; +Cc: libc-alpha

On Thu, 7 Oct 2021, Paul Zimmermann wrote:

> > > In fact we need to handle underflow:
> > > 
> > >   long double lx = x;
> > >   long double ly = y;
> > >   double r = sqrtl (lx * lx + ly * ly);
> > 
> > You probably also need a math_narrow_eval here to ensure the value checked 
> > for overflow and returned has definitely been properly narrowed to double 
> > first.
> 
> right, If x = y = 0x1.fffffffffffffp1023, then lx * lx + ly * ly will not
> overflow as long double, nor sqrtl(.), but the conversion to double will.
> This should probably be added as a test case (if not already).

This is the sort of test that could be represented simply by a line

hypot max max

in auto-libm-test-in (which would then include all pairs of the maximum 
values of supported floating-point formats), but is problematic to add in 
practice because of limitations of the libm test machinery.

For example, that line would generate tests including hypot (DBL_MAX, 
FLT_MAX) for double.  Logically, by the rules glibc follows about 
acceptable errors (that most libm functions should act like they compute 
an infinite-precision result close to the mathematical value, then round 
it to the relevant type):

* If, for round-to-nearest, this overflows (generates Inf as the result 
with FE_OVERFLOW raised), that's a small (1ulp) error and so OK.

* If, for round-upward, this does not overflow (generates DBL_MAX as the 
result without FE_OVERFLOW raised), again that's a 1ulp error and so OK.

But the libm-test machinery isn't able to represent the information that a 
small error might result in overflowing when a correctly rounded result 
does not, or vice versa (a similar issue can also arise for underflow).  
And if the mathematical result in an overflow case is more than a few ulp 
above the overflow threshold, such a variation becomes a large error which 
is no longer OK.

We have a few cases close to the overflow threshold that are XFAILed in 
auto-libm-test-in (for lgamma, for example).  But XFAILing like that is 
problematic for "hypot max max", because that line generates lots of 
different tests, and only a few of them are appropriate to XFAIL.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 1/9] benchtests: Make hypot input random
  2021-10-07  9:48   ` Paul Zimmermann
  2021-10-07 11:20     ` Adhemerval Zanella
@ 2021-10-07 17:08     ` Joseph Myers
  1 sibling, 0 replies; 31+ messages in thread
From: Joseph Myers @ 2021-10-07 17:08 UTC (permalink / raw)
  To: Paul Zimmermann; +Cc: Adhemerval Zanella, libc-alpha

On Thu, 7 Oct 2021, Paul Zimmermann wrote:

> should be Random inputs with absolute value in [DBL_MIN, DBL_MAX]

Random inputs aren't very good benchmarks for hypot.  You want a large 
proportion of the inputs to have the exponents of the two arguments close 
together, because hypot has essentially nothing to do (just computing the 
absolute value of the argument with larger absolute value) otherwise.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 31+ messages in thread

* Re: [PATCH 7/9] math: Remove powerpc e_hypot
  2021-10-06 19:51       ` Paul E Murphy
@ 2021-10-12 12:17         ` Paul A. Clarke
  0 siblings, 0 replies; 31+ messages in thread
From: Paul A. Clarke @ 2021-10-12 12:17 UTC (permalink / raw)
  To: adhemerval.zanella; +Cc: libc-alpha, murphyp

On Wed, Oct 06, 2021 at 02:51:50PM -0500, Paul E Murphy via Libc-alpha wrote:
> On 10/6/21 2:46 PM, Adhemerval Zanella wrote:
> > On 06/10/2021 16:43, Paul E Murphy wrote:
> > > On 10/6/21 1:05 PM, Adhemerval Zanella via Libc-alpha wrote:
> > > > power9 master:
> > > > 
> > > >     "hypot": {
> > > >      "workload-random": {
> > > >       "duration": 5.20744e+08,
> > > >       "iterations": 5.6e+07,
> > > >       "reciprocal-throughput": 9.27604,
> > > >       "latency": 9.32194,
> > > >       "max-throughput": 1.07805e+08,
> > > >       "min-throughput": 1.07274e+08
> > > >      }
> > > >     }
> > > > 
> > > > power9 patched:
> > > > 
> > > >     "hypot": {
> > > >      "workload-random": {
> > > >       "duration": 5.23124e+08,
> > > >       "iterations": 5.4e+07,
> > > >       "reciprocal-throughput": 9.51892,
> > > >       "latency": 9.85606,
> > > >       "max-throughput": 1.05054e+08,
> > > >       "min-throughput": 1.0146e+08
> > > >      }
> > > >     }
> > > > 
> > > > Checked on powerpc64-linux-gnu (power8) and powerpc64le-linux-gnu
> > > > (power9).
> > > > ---
> > > 
> > > This also removes the ppc specific hypotf too. Have you had a chance to measure the difference?
> > > 
> > > I think it is OK if the performance difference is negligible. Though, I don't speak for the other ppc contributors in that regard. They may want to double-check the results.
> > 
> > I would expect the performance difference to be similar to 64-bit,
> > at least on the hardware I checked (since most of the time would
> > be spent in FPU calculations).
> > 
> > In any case, I don't see much gain in keeping a 32-bit powerpc
> > implementation that deviates from generic implementation.
> > 
> 
> Oops, I read this patch in isolation to the series. There probably isn't any
> difference. Sorry for the noise.
> 
> Anyhow, in the context of the series, this looks OK to me.

[Accidentally dropped the mailing list from this post. Resending...]

The results above showed over 5% performance degradation.
I'm not sure how rigorous those results are, and while arguably "close",
they were a bit concerning.

I ran the results on a local Power9 system, and see much better performance
with the new code. I thought I should share in case anyone else had similar
concerns.

glibc-master on Power9 with patch 1/9 (to get "workload-random"):
  "hypot": {
   "workload-random": {
    "duration": 5.1525e+08,
    "iterations": 8e+07,
    "reciprocal-throughput": 6.2956,
    "latency": 6.58564,
    "max-throughput": 1.58841e+08,
    "min-throughput": 1.51846e+08
   }
  }

glibc-master on Power9 with patches 1-9/9:
  "hypot": {
   "workload-random": {
    "duration": 5.20747e+08,
    "iterations": 9.8e+07,
    "reciprocal-throughput": 5.10696,
    "latency": 5.52053,
    "max-throughput": 1.95811e+08,
    "min-throughput": 1.81142e+08
   }
  }

Tested-by: Paul A. Clarke <pc@us.ibm.com>

PC

^ permalink raw reply	[flat|nested] 31+ messages in thread

end of thread, other threads:[~2021-10-12 12:17 UTC | newest]

Thread overview: 31+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-06 18:05 [PATCH 0/9] Improve hypot() Adhemerval Zanella
2021-10-06 18:05 ` [PATCH 1/9] benchtests: Make hypot input random Adhemerval Zanella
2021-10-07  9:48   ` Paul Zimmermann
2021-10-07 11:20     ` Adhemerval Zanella
2021-10-07 17:08     ` Joseph Myers
2021-10-06 18:05 ` [PATCH 2/9] benchtests: Add hypotf Adhemerval Zanella
2021-10-07 10:40   ` Paul Zimmermann
2021-10-06 18:05 ` [PATCH 3/9] math: Simplify hypotf implementation Adhemerval Zanella
2021-10-07  9:44   ` Paul Zimmermann
2021-10-07 11:37     ` Adhemerval Zanella
2021-10-07 12:08       ` Paul Zimmermann
2021-10-06 18:05 ` [PATCH 4/9] math: Use an improved algorithm for hypot (dbl-64) Adhemerval Zanella
2021-10-06 18:05 ` [PATCH 5/9] math: Use an improved algorithm for hypotl (ldbl-96) Adhemerval Zanella
2021-10-06 18:05 ` [PATCH 6/9] math: Use an improved algorithm for hypotl (ldbl-128) Adhemerval Zanella
2021-10-06 18:05 ` [PATCH 7/9] math: Remove powerpc e_hypot Adhemerval Zanella
2021-10-06 19:43   ` Paul E Murphy
2021-10-06 19:46     ` Adhemerval Zanella
2021-10-06 19:51       ` Paul E Murphy
2021-10-12 12:17         ` Paul A. Clarke
2021-10-06 18:05 ` [PATCH 8/9] i386: Move hypot implementation to C Adhemerval Zanella
2021-10-06 18:37   ` Joseph Myers
2021-10-06 19:19     ` Adhemerval Zanella
2021-10-06 19:20       ` Adhemerval Zanella
2021-10-06 19:52         ` Joseph Myers
2021-10-07  8:28           ` Paul Zimmermann
2021-10-07 17:05             ` Joseph Myers
2021-10-06 18:05 ` [PATCH 9/9] math: Remove the error handling wrapper from hypot and hypotf Adhemerval Zanella
2021-10-06 18:38   ` Joseph Myers
2021-10-06 19:23     ` Adhemerval Zanella
2021-10-07 11:03 ` [PATCH 0/9] Improve hypot() Paul Zimmermann
2021-10-07 12:39   ` Adhemerval Zanella

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).