aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlex Richardson <arichardson@FreeBSD.org>2021-02-22 11:59:12 +0000
committerAlex Richardson <arichardson@FreeBSD.org>2021-02-22 11:59:12 +0000
commitf9f37c002ab5a580accfe26b731eef45e798b435 (patch)
tree6c5f3a7746c1d8a0d7a04012d47b6428c7b3057e
-rw-r--r--.gitignore3
-rw-r--r--LICENSE21
-rw-r--r--Makefile89
-rw-r--r--README56
-rw-r--r--config.mk.dist73
-rw-r--r--contributor-agreement.pdfbin0 -> 104680 bytes
-rw-r--r--math/Dir.mk110
-rw-r--r--math/cosf.c63
-rw-r--r--math/erf.c244
-rw-r--r--math/erf_data.c85
-rw-r--r--math/erff.c104
-rw-r--r--math/erff_data.c22
-rw-r--r--math/exp.c176
-rw-r--r--math/exp2.c143
-rw-r--r--math/exp2f.c80
-rw-r--r--math/exp2f_data.c78
-rw-r--r--math/exp_data.c1120
-rw-r--r--math/expf.c91
-rw-r--r--math/include/mathlib.h100
-rw-r--r--math/log.c162
-rw-r--r--math/log2.c141
-rw-r--r--math/log2_data.c209
-rw-r--r--math/log2f.c80
-rw-r--r--math/log2f_data.c33
-rw-r--r--math/log_data.c511
-rw-r--r--math/logf.c79
-rw-r--r--math/logf_data.c33
-rw-r--r--math/math_config.h462
-rw-r--r--math/math_err.c80
-rw-r--r--math/math_errf.c80
-rw-r--r--math/pow.c380
-rw-r--r--math/pow_log_data.c184
-rw-r--r--math/powf.c221
-rw-r--r--math/powf_log2_data.c34
-rw-r--r--math/s_cos.c6
-rw-r--r--math/s_cosf.c6
-rw-r--r--math/s_exp.c6
-rw-r--r--math/s_exp2f.c6
-rw-r--r--math/s_exp2f_1u.c6
-rw-r--r--math/s_expf.c6
-rw-r--r--math/s_expf_1u.c6
-rw-r--r--math/s_log.c6
-rw-r--r--math/s_logf.c6
-rw-r--r--math/s_pow.c6
-rw-r--r--math/s_powf.c6
-rw-r--r--math/s_sin.c6
-rw-r--r--math/s_sinf.c6
-rw-r--r--math/sincosf.c79
-rw-r--r--math/sincosf.h153
-rw-r--r--math/sincosf_data.c63
-rw-r--r--math/sinf.c67
-rw-r--r--math/test/mathbench.c773
-rw-r--r--math/test/mathtest.c1701
-rw-r--r--math/test/rtest/dotest.c2167
-rw-r--r--math/test/rtest/intern.h91
-rw-r--r--math/test/rtest/main.c334
-rw-r--r--math/test/rtest/random.c99
-rw-r--r--math/test/rtest/random.h12
-rw-r--r--math/test/rtest/semi.c905
-rw-r--r--math/test/rtest/semi.h53
-rw-r--r--math/test/rtest/types.h25
-rw-r--r--math/test/rtest/wrappers.c261
-rw-r--r--math/test/rtest/wrappers.h114
-rwxr-xr-xmath/test/runulp.sh315
-rw-r--r--math/test/testcases/directed/cosf.tst25
-rw-r--r--math/test/testcases/directed/erf.tst17
-rw-r--r--math/test/testcases/directed/erff.tst17
-rw-r--r--math/test/testcases/directed/exp.tst31
-rw-r--r--math/test/testcases/directed/exp2.tst30
-rw-r--r--math/test/testcases/directed/exp2f.tst25
-rw-r--r--math/test/testcases/directed/expf.tst23
-rw-r--r--math/test/testcases/directed/log.tst21
-rw-r--r--math/test/testcases/directed/log2.tst21
-rw-r--r--math/test/testcases/directed/log2f.tst27
-rw-r--r--math/test/testcases/directed/logf.tst69
-rw-r--r--math/test/testcases/directed/pow.tst1418
-rw-r--r--math/test/testcases/directed/powf.tst246
-rw-r--r--math/test/testcases/directed/sincosf.tst51
-rw-r--r--math/test/testcases/directed/sinf.tst28
-rw-r--r--math/test/testcases/random/double.tst10
-rw-r--r--math/test/testcases/random/float.tst15
-rw-r--r--math/test/traces/exp.txt16000
-rw-r--r--math/test/traces/sincosf.txt31999
-rw-r--r--math/test/ulp.c853
-rw-r--r--math/test/ulp.h362
-rw-r--r--math/tools/cos.sollya31
-rw-r--r--math/tools/exp.sollya35
-rw-r--r--math/tools/exp2.sollya48
-rw-r--r--math/tools/log.sollya35
-rw-r--r--math/tools/log2.sollya42
-rw-r--r--math/tools/log2_abs.sollya41
-rw-r--r--math/tools/log_abs.sollya35
-rwxr-xr-xmath/tools/plot.py61
-rwxr-xr-xmath/tools/remez.jl1334
-rw-r--r--math/tools/sin.sollya37
-rw-r--r--math/tools/v_exp.sollya30
-rw-r--r--math/tools/v_log.sollya34
-rw-r--r--math/tools/v_sin.sollya36
-rw-r--r--math/v_cos.c87
-rw-r--r--math/v_cosf.c76
-rw-r--r--math/v_exp.c94
-rw-r--r--math/v_exp.h14
-rw-r--r--math/v_exp2f.c78
-rw-r--r--math/v_exp2f_1u.c75
-rw-r--r--math/v_exp_data.c403
-rw-r--r--math/v_expf.c83
-rw-r--r--math/v_expf_1u.c80
-rw-r--r--math/v_log.c104
-rw-r--r--math/v_log.h18
-rw-r--r--math/v_log_data.c158
-rw-r--r--math/v_logf.c73
-rw-r--r--math/v_math.h641
-rw-r--r--math/v_pow.c27
-rw-r--r--math/v_powf.c235
-rw-r--r--math/v_sin.c86
-rw-r--r--math/v_sinf.c75
-rw-r--r--math/vn_cos.c12
-rw-r--r--math/vn_cosf.c12
-rw-r--r--math/vn_exp.c12
-rw-r--r--math/vn_exp2f.c12
-rw-r--r--math/vn_exp2f_1u.c11
-rw-r--r--math/vn_expf.c12
-rw-r--r--math/vn_expf_1u.c11
-rw-r--r--math/vn_log.c12
-rw-r--r--math/vn_logf.c12
-rw-r--r--math/vn_pow.c12
-rw-r--r--math/vn_powf.c12
-rw-r--r--math/vn_sin.c12
-rw-r--r--math/vn_sinf.c12
-rw-r--r--networking/Dir.mk76
-rw-r--r--networking/aarch64/chksum_simd.c146
-rw-r--r--networking/arm/chksum_simd.c149
-rw-r--r--networking/chksum.c81
-rw-r--r--networking/chksum_common.h132
-rw-r--r--networking/include/networking.h14
-rw-r--r--networking/test/chksum.c381
-rw-r--r--string/Dir.mk113
-rw-r--r--string/aarch64/__mtag_tag_region.S100
-rw-r--r--string/aarch64/__mtag_tag_zero_region.S100
-rw-r--r--string/aarch64/check-arch.S13
-rw-r--r--string/aarch64/memchr-mte.S116
-rw-r--r--string/aarch64/memchr-sve.S64
-rw-r--r--string/aarch64/memchr.S146
-rw-r--r--string/aarch64/memcmp-sve.S51
-rw-r--r--string/aarch64/memcmp.S137
-rw-r--r--string/aarch64/memcpy-advsimd.S206
-rw-r--r--string/aarch64/memcpy.S243
-rw-r--r--string/aarch64/memrchr.S117
-rw-r--r--string/aarch64/memset.S117
-rw-r--r--string/aarch64/stpcpy-mte.S10
-rw-r--r--string/aarch64/stpcpy-sve.S10
-rw-r--r--string/aarch64/stpcpy.S10
-rw-r--r--string/aarch64/strchr-mte.S105
-rw-r--r--string/aarch64/strchr-sve.S70
-rw-r--r--string/aarch64/strchr.S126
-rw-r--r--string/aarch64/strchrnul-mte.S84
-rw-r--r--string/aarch64/strchrnul-sve.S9
-rw-r--r--string/aarch64/strchrnul.S114
-rw-r--r--string/aarch64/strcmp-mte.S189
-rw-r--r--string/aarch64/strcmp-sve.S59
-rw-r--r--string/aarch64/strcmp.S173
-rw-r--r--string/aarch64/strcpy-mte.S161
-rw-r--r--string/aarch64/strcpy-sve.S71
-rw-r--r--string/aarch64/strcpy.S311
-rw-r--r--string/aarch64/strlen-mte.S80
-rw-r--r--string/aarch64/strlen-sve.S55
-rw-r--r--string/aarch64/strlen.S200
-rw-r--r--string/aarch64/strncmp-mte.S307
-rw-r--r--string/aarch64/strncmp-sve.S69
-rw-r--r--string/aarch64/strncmp.S260
-rw-r--r--string/aarch64/strnlen-sve.S74
-rw-r--r--string/aarch64/strnlen.S112
-rw-r--r--string/aarch64/strrchr-mte.S127
-rw-r--r--string/aarch64/strrchr-sve.S84
-rw-r--r--string/aarch64/strrchr.S149
-rw-r--r--string/arm/check-arch.S10
-rw-r--r--string/arm/memchr.S132
-rw-r--r--string/arm/memcpy.S587
-rw-r--r--string/arm/memset.S98
-rw-r--r--string/arm/strcmp-armv6m.S117
-rw-r--r--string/arm/strcmp.S475
-rw-r--r--string/arm/strcpy.c133
-rw-r--r--string/arm/strlen-armv6t2.S124
-rw-r--r--string/asmdefs.h98
-rw-r--r--string/bench/memcpy.c260
-rw-r--r--string/bench/strlen.c221
-rw-r--r--string/include/benchlib.h33
-rw-r--r--string/include/stringlib.h69
-rw-r--r--string/test/__mtag_tag_region.c147
-rw-r--r--string/test/__mtag_tag_zero_region.c147
-rw-r--r--string/test/memchr.c110
-rw-r--r--string/test/memcmp.c125
-rw-r--r--string/test/memcpy.c120
-rw-r--r--string/test/memmove.c164
-rw-r--r--string/test/memrchr.c106
-rw-r--r--string/test/memset.c129
-rw-r--r--string/test/mte.h142
-rw-r--r--string/test/stpcpy.c125
-rw-r--r--string/test/strchr.c121
-rw-r--r--string/test/strchrnul.c126
-rw-r--r--string/test/strcmp.c132
-rw-r--r--string/test/strcpy.c123
-rw-r--r--string/test/stringtest.h55
-rw-r--r--string/test/strlen.c103
-rw-r--r--string/test/strncmp.c139
-rw-r--r--string/test/strnlen.c109
-rw-r--r--string/test/strrchr.c121
-rw-r--r--string/x86_64/check-arch.S10
208 files changed, 78517 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 000000000000..a814c1418935
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+build/
+.DS_Store
+config.mk
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 000000000000..2543b82ed92d
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 1999-2019, Arm Limited.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/Makefile b/Makefile
new file mode 100644
index 000000000000..169f89e2c9d6
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,89 @@
+# Makefile - requires GNU make
+#
+# Copyright (c) 2018-2020, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+srcdir = .
+prefix = /usr
+bindir = $(prefix)/bin
+libdir = $(prefix)/lib
+includedir = $(prefix)/include
+
+# Configure these in config.mk, do not make changes in this file.
+SUBS = math string networking
+HOST_CC = cc
+HOST_CFLAGS = -std=c99 -O2
+HOST_LDFLAGS =
+HOST_LDLIBS =
+EMULATOR =
+CPPFLAGS =
+CFLAGS = -std=c99 -O2
+CFLAGS_SHARED = -fPIC
+CFLAGS_ALL = -Ibuild/include $(CPPFLAGS) $(CFLAGS)
+LDFLAGS =
+LDLIBS =
+AR = $(CROSS_COMPILE)ar
+RANLIB = $(CROSS_COMPILE)ranlib
+INSTALL = install
+
+all:
+
+-include config.mk
+
+$(foreach sub,$(SUBS),$(eval include $(srcdir)/$(sub)/Dir.mk))
+
+# Required targets of subproject foo:
+# all-foo
+# check-foo
+# clean-foo
+# install-foo
+# Required make variables of subproject foo:
+# foo-files: Built files (all in build/).
+# Make variables used by subproject foo:
+# foo-...: Variables defined in foo/Dir.mk or by config.mk.
+
+all: $(SUBS:%=all-%)
+
+ALL_FILES = $(foreach sub,$(SUBS),$($(sub)-files))
+DIRS = $(sort $(patsubst %/,%,$(dir $(ALL_FILES))))
+$(ALL_FILES): | $(DIRS)
+$(DIRS):
+ mkdir -p $@
+
+$(filter %.os,$(ALL_FILES)): CFLAGS_ALL += $(CFLAGS_SHARED)
+
+build/%.o: $(srcdir)/%.S
+ $(CC) $(CFLAGS_ALL) -c -o $@ $<
+
+build/%.o: $(srcdir)/%.c
+ $(CC) $(CFLAGS_ALL) -c -o $@ $<
+
+build/%.os: $(srcdir)/%.S
+ $(CC) $(CFLAGS_ALL) -c -o $@ $<
+
+build/%.os: $(srcdir)/%.c
+ $(CC) $(CFLAGS_ALL) -c -o $@ $<
+
+clean: $(SUBS:%=clean-%)
+ rm -rf build
+
+distclean: clean
+ rm -f config.mk
+
+$(DESTDIR)$(bindir)/%: build/bin/%
+ $(INSTALL) -D $< $@
+
+$(DESTDIR)$(libdir)/%.so: build/lib/%.so
+ $(INSTALL) -D $< $@
+
+$(DESTDIR)$(libdir)/%: build/lib/%
+ $(INSTALL) -m 644 -D $< $@
+
+$(DESTDIR)$(includedir)/%: build/include/%
+ $(INSTALL) -m 644 -D $< $@
+
+install: $(SUBS:%=install-%)
+
+check: $(SUBS:%=check-%)
+
+.PHONY: all clean distclean install check
diff --git a/README b/README
new file mode 100644
index 000000000000..ae465e93fea7
--- /dev/null
+++ b/README
@@ -0,0 +1,56 @@
+Arm Optimized Routines
+----------------------
+
+This repository contains implementations of library functions
+provided by Arm under MIT License (See LICENSE). Contributions
+to this project are accepted, but Contributors have to sign an
+Assignment Agreement, please follow the instructions in
+contributor-agreement.pdf. This is needed so upstreaming code
+to projects that require copyright assignment is possible.
+
+Regular quarterly releases are tagged as vYY.MM, the latest
+release is v20.11.
+
+Source code layout:
+
+build/ - build directory (created by make).
+math/ - math subproject sources.
+math/include/ - math library public headers.
+math/test/ - math test and benchmark related sources.
+math/tools/ - tools used for designing the algorithms.
+networking/ - networking subproject sources.
+networking/include/ - networking library public headers.
+networking/test/ - networking test and benchmark related sources.
+string/ - string routines subproject sources.
+string/include/ - string library public headers.
+string/test/ - string test and benchmark related sources.
+
+The steps to build the target libraries and run the tests:
+
+cp config.mk.dist config.mk
+# edit config.mk if necessary ...
+make
+make check
+
+Or building outside of the source directory:
+
+ln -s path/to/src/Makefile Makefile
+cp path/to/src/config.mk.dist config.mk
+echo 'srcdir = path/to/src' >> config.mk
+# further edits to config.mk
+make
+make check
+
+Or building and testing the math subproject only:
+
+make all-math
+make check-math
+
+The test system requires libmpfr and libmpc.
+For example on debian linux they can be installed as:
+
+sudo apt-get install libmpfr-dev libmpc-dev
+
+For cross build, CROSS_COMPILE should be set in config.mk and EMULATOR
+should be set for cross testing (e.g. using qemu-user or remote access
+to a target machine), see the examples in config.mk.dist.
diff --git a/config.mk.dist b/config.mk.dist
new file mode 100644
index 000000000000..177e1ac4f53a
--- /dev/null
+++ b/config.mk.dist
@@ -0,0 +1,73 @@
+# Example config.mk
+#
+# Copyright (c) 2018-2020, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+# Subprojects to build
+SUBS = math string networking
+
+# Target architecture: aarch64, arm or x86_64
+ARCH = aarch64
+
+# Use for cross compilation with gcc.
+#CROSS_COMPILE = aarch64-none-linux-gnu-
+
+# Compiler for the target
+CC = $(CROSS_COMPILE)gcc
+CFLAGS = -std=c99 -pipe -O3
+CFLAGS += -Wall -Wno-missing-braces
+CFLAGS += -Werror=implicit-function-declaration
+
+# Used for test case generator that is executed on the host
+HOST_CC = gcc
+HOST_CFLAGS = -std=c99 -O2
+HOST_CFLAGS += -Wall -Wno-unused-function
+
+# Enable debug info.
+HOST_CFLAGS += -g
+CFLAGS += -g
+
+# Optimize the shared libraries on aarch64 assuming they fit in 1M.
+#CFLAGS_SHARED = -fPIC -mcmodel=tiny
+
+# Enable MTE support.
+#CFLAGS += -march=armv8.5-a+memtag -DWANT_MTE_TEST=1
+
+# Use with cross testing.
+#EMULATOR = qemu-aarch64-static
+#EMULATOR = sh -c 'scp $$1 user@host:/dir && ssh user@host /dir/"$$@"' --
+
+# Additional flags for subprojects.
+math-cflags =
+math-ldlibs =
+math-ulpflags =
+math-testflags =
+string-cflags =
+networking-cflags =
+
+# Use if mpfr is available on the target for ulp error checking.
+#math-ldlibs += -lmpfr -lgmp
+#math-cflags += -DUSE_MPFR
+
+# Use with gcc.
+math-cflags += -frounding-math -fexcess-precision=standard -fno-stack-protector
+math-cflags += -ffp-contract=fast -fno-math-errno
+
+# Use with clang.
+#math-cflags += -ffp-contract=fast
+
+# Disable vector math code
+#math-cflags += -DWANT_VMATH=0
+
+# Disable fenv checks
+#math-ulpflags = -q -f
+#math-testflags = -nostatus
+
+# Remove GNU Property Notes from asm files.
+#string-cflags += -DWANT_GNU_PROPERTY=0
+
+# Enable assertion checks.
+#networking-cflags += -DWANT_ASSERT
+
+# Avoid auto-vectorization of scalar code and unroll loops
+networking-cflags += -O2 -fno-tree-vectorize -funroll-loops
diff --git a/contributor-agreement.pdf b/contributor-agreement.pdf
new file mode 100644
index 000000000000..f42c3ae975d9
--- /dev/null
+++ b/contributor-agreement.pdf
Binary files differ
diff --git a/math/Dir.mk b/math/Dir.mk
new file mode 100644
index 000000000000..3b841ab71955
--- /dev/null
+++ b/math/Dir.mk
@@ -0,0 +1,110 @@
+# Makefile fragment - requires GNU make
+#
+# Copyright (c) 2019, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+S := $(srcdir)/math
+B := build/math
+
+math-lib-srcs := $(wildcard $(S)/*.[cS])
+math-test-srcs := \
+ $(S)/test/mathtest.c \
+ $(S)/test/mathbench.c \
+ $(S)/test/ulp.c \
+
+math-test-host-srcs := $(wildcard $(S)/test/rtest/*.[cS])
+
+math-includes := $(patsubst $(S)/%,build/%,$(wildcard $(S)/include/*.h))
+
+math-libs := \
+ build/lib/libmathlib.so \
+ build/lib/libmathlib.a \
+
+math-tools := \
+ build/bin/mathtest \
+ build/bin/mathbench \
+ build/bin/mathbench_libc \
+ build/bin/runulp.sh \
+ build/bin/ulp \
+
+math-host-tools := \
+ build/bin/rtest \
+
+math-lib-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(math-lib-srcs)))
+math-test-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(math-test-srcs)))
+math-host-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(math-test-host-srcs)))
+math-target-objs := $(math-lib-objs) $(math-test-objs)
+math-objs := $(math-target-objs) $(math-target-objs:%.o=%.os) $(math-host-objs)
+
+math-files := \
+ $(math-objs) \
+ $(math-libs) \
+ $(math-tools) \
+ $(math-host-tools) \
+ $(math-includes) \
+
+all-math: $(math-libs) $(math-tools) $(math-includes)
+
+$(math-objs): $(math-includes)
+$(math-objs): CFLAGS_ALL += $(math-cflags)
+$(B)/test/mathtest.o: CFLAGS_ALL += -fmath-errno
+$(math-host-objs): CC = $(HOST_CC)
+$(math-host-objs): CFLAGS_ALL = $(HOST_CFLAGS)
+
+$(B)/test/ulp.o: $(S)/test/ulp.h
+
+build/lib/libmathlib.so: $(math-lib-objs:%.o=%.os)
+ $(CC) $(CFLAGS_ALL) $(LDFLAGS) -shared -o $@ $^
+
+build/lib/libmathlib.a: $(math-lib-objs)
+ rm -f $@
+ $(AR) rc $@ $^
+ $(RANLIB) $@
+
+$(math-host-tools): HOST_LDLIBS += -lm -lmpfr -lmpc
+$(math-tools): LDLIBS += $(math-ldlibs) -lm
+
+build/bin/rtest: $(math-host-objs)
+ $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o $@ $^ $(HOST_LDLIBS)
+
+build/bin/mathtest: $(B)/test/mathtest.o build/lib/libmathlib.a
+ $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
+
+build/bin/mathbench: $(B)/test/mathbench.o build/lib/libmathlib.a
+ $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
+
+# This is not ideal, but allows custom symbols in mathbench to get resolved.
+build/bin/mathbench_libc: $(B)/test/mathbench.o build/lib/libmathlib.a
+ $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $< $(LDLIBS) -lc build/lib/libmathlib.a -lm
+
+build/bin/ulp: $(B)/test/ulp.o build/lib/libmathlib.a
+ $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
+
+build/include/%.h: $(S)/include/%.h
+ cp $< $@
+
+build/bin/%.sh: $(S)/test/%.sh
+ cp $< $@
+
+math-tests := $(wildcard $(S)/test/testcases/directed/*.tst)
+math-rtests := $(wildcard $(S)/test/testcases/random/*.tst)
+
+check-math-test: $(math-tools)
+ cat $(math-tests) | $(EMULATOR) build/bin/mathtest $(math-testflags)
+
+check-math-rtest: $(math-host-tools) $(math-tools)
+ cat $(math-rtests) | build/bin/rtest | $(EMULATOR) build/bin/mathtest $(math-testflags)
+
+check-math-ulp: $(math-tools)
+ ULPFLAGS="$(math-ulpflags)" build/bin/runulp.sh $(EMULATOR)
+
+check-math: check-math-test check-math-rtest check-math-ulp
+
+install-math: \
+ $(math-libs:build/lib/%=$(DESTDIR)$(libdir)/%) \
+ $(math-includes:build/include/%=$(DESTDIR)$(includedir)/%)
+
+clean-math:
+ rm -f $(math-files)
+
+.PHONY: all-math check-math-test check-math-rtest check-math-ulp check-math install-math clean-math
diff --git a/math/cosf.c b/math/cosf.c
new file mode 100644
index 000000000000..f29f19474e23
--- /dev/null
+++ b/math/cosf.c
@@ -0,0 +1,63 @@
+/*
+ * Single-precision cos function.
+ *
+ * Copyright (c) 2018-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <math.h>
+#include "math_config.h"
+#include "sincosf.h"
+
+/* Fast cosf implementation. Worst-case ULP is 0.5607, maximum relative
+ error is 0.5303 * 2^-23. A single-step range reduction is used for
+ small values. Large inputs have their range reduced using fast integer
+ arithmetic. */
+float
+cosf (float y)
+{
+ double x = y;
+ double s;
+ int n;
+ const sincos_t *p = &__sincosf_table[0];
+
+ if (abstop12 (y) < abstop12 (pio4))
+ {
+ double x2 = x * x;
+
+ if (unlikely (abstop12 (y) < abstop12 (0x1p-12f)))
+ return 1.0f;
+
+ return sinf_poly (x, x2, p, 1);
+ }
+ else if (likely (abstop12 (y) < abstop12 (120.0f)))
+ {
+ x = reduce_fast (x, p, &n);
+
+ /* Setup the signs for sin and cos. */
+ s = p->sign[n & 3];
+
+ if (n & 2)
+ p = &__sincosf_table[1];
+
+ return sinf_poly (x * s, x * x, p, n ^ 1);
+ }
+ else if (abstop12 (y) < abstop12 (INFINITY))
+ {
+ uint32_t xi = asuint (y);
+ int sign = xi >> 31;
+
+ x = reduce_large (xi, &n);
+
+ /* Setup signs for sin and cos - include original sign. */
+ s = p->sign[(n + sign) & 3];
+
+ if ((n + sign) & 2)
+ p = &__sincosf_table[1];
+
+ return sinf_poly (x * s, x * x, p, n ^ 1);
+ }
+ else
+ return __math_invalidf (y);
+}
diff --git a/math/erf.c b/math/erf.c
new file mode 100644
index 000000000000..12d7e5160df7
--- /dev/null
+++ b/math/erf.c
@@ -0,0 +1,244 @@
+/*
+ * Double-precision erf(x) function.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+#include <math.h>
+#include <stdint.h>
+
+#define TwoOverSqrtPiMinusOne 0x1.06eba8214db69p-3
+#define C 0x1.b0ac16p-1
+#define PA __erf_data.erf_poly_A
+#define NA __erf_data.erf_ratio_N_A
+#define DA __erf_data.erf_ratio_D_A
+#define NB __erf_data.erf_ratio_N_B
+#define DB __erf_data.erf_ratio_D_B
+#define PC __erf_data.erfc_poly_C
+#define PD __erf_data.erfc_poly_D
+#define PE __erf_data.erfc_poly_E
+#define PF __erf_data.erfc_poly_F
+
+/* Top 32 bits of a double. */
+static inline uint32_t
+top32 (double x)
+{
+ return asuint64 (x) >> 32;
+}
+
+/* Fast erf implementation using a mix of
+ rational and polynomial approximations.
+ Highest measured error is 1.01 ULPs at 0x1.39956ac43382fp+0. */
+double
+erf (double x)
+{
+ /* Get top word and sign. */
+ uint32_t ix = top32 (x);
+ uint32_t ia = ix & 0x7fffffff;
+ uint32_t sign = ix >> 31;
+
+ /* Normalized and subnormal cases */
+ if (ia < 0x3feb0000)
+ { /* a = |x| < 0.84375. */
+
+ if (ia < 0x3e300000)
+ { /* a < 2^(-28). */
+ if (ia < 0x00800000)
+ { /* a < 2^(-1015). */
+ double y = fma (TwoOverSqrtPiMinusOne, x, x);
+ return check_uflow (y);
+ }
+ return x + TwoOverSqrtPiMinusOne * x;
+ }
+
+ double x2 = x * x;
+
+ if (ia < 0x3fe00000)
+ { /* a < 0.5 - Use polynomial approximation. */
+ double r1 = fma (x2, PA[1], PA[0]);
+ double r2 = fma (x2, PA[3], PA[2]);
+ double r3 = fma (x2, PA[5], PA[4]);
+ double r4 = fma (x2, PA[7], PA[6]);
+ double r5 = fma (x2, PA[9], PA[8]);
+ double x4 = x2 * x2;
+ double r = r5;
+ r = fma (x4, r, r4);
+ r = fma (x4, r, r3);
+ r = fma (x4, r, r2);
+ r = fma (x4, r, r1);
+ return fma (r, x, x); /* This fma is crucial for accuracy. */
+ }
+ else
+ { /* 0.5 <= a < 0.84375 - Use rational approximation. */
+ double x4, x8, r1n, r2n, r1d, r2d, r3d;
+
+ r1n = fma (x2, NA[1], NA[0]);
+ x4 = x2 * x2;
+ r2n = fma (x2, NA[3], NA[2]);
+ x8 = x4 * x4;
+ r1d = fma (x2, DA[0], 1.0);
+ r2d = fma (x2, DA[2], DA[1]);
+ r3d = fma (x2, DA[4], DA[3]);
+ double P = r1n + x4 * r2n + x8 * NA[4];
+ double Q = r1d + x4 * r2d + x8 * r3d;
+ return fma (P / Q, x, x);
+ }
+ }
+ else if (ia < 0x3ff40000)
+ { /* 0.84375 <= |x| < 1.25. */
+ double a2, a4, a6, r1n, r2n, r3n, r4n, r1d, r2d, r3d, r4d;
+ double a = fabs (x) - 1.0;
+ r1n = fma (a, NB[1], NB[0]);
+ a2 = a * a;
+ r1d = fma (a, DB[0], 1.0);
+ a4 = a2 * a2;
+ r2n = fma (a, NB[3], NB[2]);
+ a6 = a4 * a2;
+ r2d = fma (a, DB[2], DB[1]);
+ r3n = fma (a, NB[5], NB[4]);
+ r3d = fma (a, DB[4], DB[3]);
+ r4n = NB[6];
+ r4d = DB[5];
+ double P = r1n + a2 * r2n + a4 * r3n + a6 * r4n;
+ double Q = r1d + a2 * r2d + a4 * r3d + a6 * r4d;
+ if (sign)
+ return -C - P / Q;
+ else
+ return C + P / Q;
+ }
+ else if (ia < 0x40000000)
+ { /* 1.25 <= |x| < 2.0. */
+ double a = fabs (x);
+ a = a - 1.25;
+
+ double r1 = fma (a, PC[1], PC[0]);
+ double r2 = fma (a, PC[3], PC[2]);
+ double r3 = fma (a, PC[5], PC[4]);
+ double r4 = fma (a, PC[7], PC[6]);
+ double r5 = fma (a, PC[9], PC[8]);
+ double r6 = fma (a, PC[11], PC[10]);
+ double r7 = fma (a, PC[13], PC[12]);
+ double r8 = fma (a, PC[15], PC[14]);
+
+ double a2 = a * a;
+
+ double r = r8;
+ r = fma (a2, r, r7);
+ r = fma (a2, r, r6);
+ r = fma (a2, r, r5);
+ r = fma (a2, r, r4);
+ r = fma (a2, r, r3);
+ r = fma (a2, r, r2);
+ r = fma (a2, r, r1);
+
+ if (sign)
+ return -1.0 + r;
+ else
+ return 1.0 - r;
+ }
+ else if (ia < 0x400a0000)
+ { /* 2 <= |x| < 3.25. */
+ double a = fabs (x);
+ a = fma (0.5, a, -1.0);
+
+ double r1 = fma (a, PD[1], PD[0]);
+ double r2 = fma (a, PD[3], PD[2]);
+ double r3 = fma (a, PD[5], PD[4]);
+ double r4 = fma (a, PD[7], PD[6]);
+ double r5 = fma (a, PD[9], PD[8]);
+ double r6 = fma (a, PD[11], PD[10]);
+ double r7 = fma (a, PD[13], PD[12]);
+ double r8 = fma (a, PD[15], PD[14]);
+ double r9 = fma (a, PD[17], PD[16]);
+
+ double a2 = a * a;
+
+ double r = r9;
+ r = fma (a2, r, r8);
+ r = fma (a2, r, r7);
+ r = fma (a2, r, r6);
+ r = fma (a2, r, r5);
+ r = fma (a2, r, r4);
+ r = fma (a2, r, r3);
+ r = fma (a2, r, r2);
+ r = fma (a2, r, r1);
+
+ if (sign)
+ return -1.0 + r;
+ else
+ return 1.0 - r;
+ }
+ else if (ia < 0x40100000)
+ { /* 3.25 <= |x| < 4.0. */
+ double a = fabs (x);
+ a = a - 3.25;
+
+ double r1 = fma (a, PE[1], PE[0]);
+ double r2 = fma (a, PE[3], PE[2]);
+ double r3 = fma (a, PE[5], PE[4]);
+ double r4 = fma (a, PE[7], PE[6]);
+ double r5 = fma (a, PE[9], PE[8]);
+ double r6 = fma (a, PE[11], PE[10]);
+ double r7 = fma (a, PE[13], PE[12]);
+
+ double a2 = a * a;
+
+ double r = r7;
+ r = fma (a2, r, r6);
+ r = fma (a2, r, r5);
+ r = fma (a2, r, r4);
+ r = fma (a2, r, r3);
+ r = fma (a2, r, r2);
+ r = fma (a2, r, r1);
+
+ if (sign)
+ return -1.0 + r;
+ else
+ return 1.0 - r;
+ }
+ else if (ia < 0x4017a000)
+ { /* 4 <= |x| < 5.90625. */
+ double a = fabs (x);
+ a = fma (0.5, a, -2.0);
+
+ double r1 = fma (a, PF[1], PF[0]);
+ double r2 = fma (a, PF[3], PF[2]);
+ double r3 = fma (a, PF[5], PF[4]);
+ double r4 = fma (a, PF[7], PF[6]);
+ double r5 = fma (a, PF[9], PF[8]);
+ double r6 = fma (a, PF[11], PF[10]);
+ double r7 = fma (a, PF[13], PF[12]);
+ double r8 = fma (a, PF[15], PF[14]);
+ double r9 = PF[16];
+
+ double a2 = a * a;
+
+ double r = r9;
+ r = fma (a2, r, r8);
+ r = fma (a2, r, r7);
+ r = fma (a2, r, r6);
+ r = fma (a2, r, r5);
+ r = fma (a2, r, r4);
+ r = fma (a2, r, r3);
+ r = fma (a2, r, r2);
+ r = fma (a2, r, r1);
+
+ if (sign)
+ return -1.0 + r;
+ else
+ return 1.0 - r;
+ }
+ else
+ {
+ /* Special cases : erf(nan)=nan, erf(+inf)=+1 and erf(-inf)=-1. */
+ if (unlikely (ia >= 0x7ff00000))
+ return (double) (1.0 - (sign << 1)) + 1.0 / x;
+
+ if (sign)
+ return -1.0;
+ else
+ return 1.0;
+ }
+}
diff --git a/math/erf_data.c b/math/erf_data.c
new file mode 100644
index 000000000000..807875bdd7f5
--- /dev/null
+++ b/math/erf_data.c
@@ -0,0 +1,85 @@
+/*
+ * Shared data between erf and erfc.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+/*
+Minimax approximation of erf
+*/
+const struct erf_data __erf_data = {
+.erf_poly_A = {
+#if ERF_POLY_A_NCOEFFS == 10
+0x1.06eba8214db68p-3, -0x1.812746b037948p-2, 0x1.ce2f21a03872p-4,
+-0x1.b82ce30e6548p-6, 0x1.565bcc360a2f2p-8, -0x1.c02d812bc979ap-11,
+0x1.f99bddfc1ebe9p-14, -0x1.f42c457cee912p-17, 0x1.b0e414ec20ee9p-20,
+-0x1.18c47fd143c5ep-23
+#endif
+},
+/* Rational approximation on [0x1p-28, 0.84375] */
+.erf_ratio_N_A = {
+0x1.06eba8214db68p-3, -0x1.4cd7d691cb913p-2, -0x1.d2a51dbd7194fp-6,
+-0x1.7a291236668e4p-8, -0x1.8ead6120016acp-16
+},
+.erf_ratio_D_A = {
+0x1.97779cddadc09p-2, 0x1.0a54c5536cebap-4, 0x1.4d022c4d36b0fp-8,
+0x1.15dc9221c1a1p-13, -0x1.09c4342a2612p-18
+},
+/* Rational approximation on [0.84375, 1.25] */
+.erf_ratio_N_B = {
+-0x1.359b8bef77538p-9, 0x1.a8d00ad92b34dp-2, -0x1.7d240fbb8c3f1p-2,
+0x1.45fca805120e4p-2, -0x1.c63983d3e28ecp-4, 0x1.22a36599795ebp-5,
+-0x1.1bf380a96073fp-9
+},
+.erf_ratio_D_B = {
+0x1.b3e6618eee323p-4, 0x1.14af092eb6f33p-1, 0x1.2635cd99fe9a7p-4,
+0x1.02660e763351fp-3, 0x1.bedc26b51dd1cp-7, 0x1.88b545735151dp-7
+},
+.erfc_poly_C = {
+#if ERFC_POLY_C_NCOEFFS == 16
+/* Generated using Sollya::remez(f(c*x+d), deg, [(a-d)/c;(b-d)/c], 1, 1e-16), [|D ...|] with deg=15 a=1.25 b=2 c=1 d=1.25 */
+0x1.3bcd133aa0ffcp-4, -0x1.e4652fadcb702p-3, 0x1.2ebf3dcca0446p-2,
+-0x1.571d01c62d66p-3, 0x1.93a9a8f5b3413p-8, 0x1.8281cbcc2cd52p-5,
+-0x1.5cffd86b4de16p-6, -0x1.db4ccf595053ep-9, 0x1.757cbf8684edap-8,
+-0x1.ce7dfd2a9e56ap-11, -0x1.99ee3bc5a3263p-11, 0x1.3c57cf9213f5fp-12,
+0x1.60692996bf254p-14, -0x1.6e44cb7c1fa2ap-14, 0x1.9d4484ac482b2p-16,
+-0x1.578c9e375d37p-19
+#endif
+},
+.erfc_poly_D = {
+#if ERFC_POLY_D_NCOEFFS == 18
+/* Generated using Sollya::remez(f(c*x+d), deg, [(a-d)/c;(b-d)/c], 1, 1e-16), [|D ...|] with deg=17 a=2 b=3.25 c=2 d=2 */
+0x1.328f5ec350e5p-8, -0x1.529b9e8cf8e99p-5, 0x1.529b9e8cd9e71p-3,
+-0x1.8b0ae3a023bf2p-2, 0x1.1a2c592599d82p-1, -0x1.ace732477e494p-2,
+-0x1.e1a06a27920ffp-6, 0x1.bae92a6d27af6p-2, -0x1.a15470fcf5ce7p-2,
+0x1.bafe45d18e213p-6, 0x1.0d950680d199ap-2, -0x1.8c9481e8f22e3p-3,
+-0x1.158450ed5c899p-4, 0x1.c01f2973b44p-3, -0x1.73ed2827546a7p-3,
+0x1.47733687d1ff7p-4, -0x1.2dec70d00b8e1p-6, 0x1.a947ab83cd4fp-10
+#endif
+},
+.erfc_poly_E = {
+#if ERFC_POLY_E_NCOEFFS == 14
+/* Generated using Sollya::remez(f(c*x+d), deg, [(a-d)/c;(b-d)/c], 1, 1e-16), [|D ...|] with deg=13 a=3.25 b=4 c=1 d=3.25 */
+0x1.20c13035539e4p-18, -0x1.e9b5e8d16df7ep-16, 0x1.8de3cd4733bf9p-14,
+-0x1.9aa48beb8382fp-13, 0x1.2c7d713370a9fp-12, -0x1.490b12110b9e2p-12,
+0x1.1459c5d989d23p-12, -0x1.64b28e9f1269p-13, 0x1.57c76d9d05cf8p-14,
+-0x1.bf271d9951cf8p-16, 0x1.db7ea4d4535c9p-19, 0x1.91c2e102d5e49p-20,
+-0x1.e9f0826c2149ep-21, 0x1.60eebaea236e1p-23
+#endif
+},
+.erfc_poly_F = {
+#if ERFC_POLY_F_NCOEFFS == 17
+/* Generated using Sollya::remez(f(c*x+d), deg, [(a-d)/c;(b-d)/c], 1, 1e-16), [|D ...|] with deg=16 a=4 b=5.90625 c=2 d=4 */
+0x1.08ddd130d1fa6p-26, -0x1.10b146f59ff06p-22, 0x1.10b135328b7b2p-19,
+-0x1.6039988e7575fp-17, 0x1.497d365e19367p-15, -0x1.da48d9afac83ep-14,
+0x1.1024c9b1fbb48p-12, -0x1.fc962e7066272p-12, 0x1.87297282d4651p-11,
+-0x1.f057b255f8c59p-11, 0x1.0228d0eee063p-10, -0x1.b1b21b84ec41cp-11,
+0x1.1ead8ae9e1253p-11, -0x1.1e708fba37fccp-12, 0x1.9559363991edap-14,
+-0x1.68c827b783d9cp-16, 0x1.2ec4adeccf4a2p-19
+#endif
+}
+};
+
diff --git a/math/erff.c b/math/erff.c
new file mode 100644
index 000000000000..a58e82565dc3
--- /dev/null
+++ b/math/erff.c
@@ -0,0 +1,104 @@
+/*
+ * Single-precision erf(x) function.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <math.h>
+#include "math_config.h"
+
+#define TwoOverSqrtPiMinusOne 0x1.06eba8p-3f
+#define A __erff_data.erff_poly_A
+#define B __erff_data.erff_poly_B
+
+/* Top 12 bits of a float. */
+static inline uint32_t
+top12 (float x)
+{
+ return asuint (x) >> 20;
+}
+
+/* Efficient implementation of erff
+ using either a pure polynomial approximation or
+ the exponential of a polynomial.
+ Worst-case error is 1.09ulps at 0x1.c111acp-1. */
+float
+erff (float x)
+{
+ float r, x2, u;
+
+ /* Get top word. */
+ uint32_t ix = asuint (x);
+ uint32_t sign = ix >> 31;
+ uint32_t ia12 = top12 (x) & 0x7ff;
+
+ /* Limit of both intervals is 0.875 for performance reasons but coefficients
+ computed on [0.0, 0.921875] and [0.921875, 4.0], which brought accuracy
+ from 0.94 to 1.1ulps. */
+ if (ia12 < 0x3f6)
+ { /* a = |x| < 0.875. */
+
+ /* Tiny and subnormal cases. */
+ if (unlikely (ia12 < 0x318))
+ { /* |x| < 2^(-28). */
+ if (unlikely (ia12 < 0x040))
+ { /* |x| < 2^(-119). */
+ float y = fmaf (TwoOverSqrtPiMinusOne, x, x);
+ return check_uflowf (y);
+ }
+ return x + TwoOverSqrtPiMinusOne * x;
+ }
+
+ x2 = x * x;
+
+ /* Normalized cases (|x| < 0.921875). Use Horner scheme for x+x*P(x^2). */
+ r = A[5];
+ r = fmaf (r, x2, A[4]);
+ r = fmaf (r, x2, A[3]);
+ r = fmaf (r, x2, A[2]);
+ r = fmaf (r, x2, A[1]);
+ r = fmaf (r, x2, A[0]);
+ r = fmaf (r, x, x);
+ }
+ else if (ia12 < 0x408)
+ { /* |x| < 4.0 - Use a custom Estrin scheme. */
+
+ float a = fabsf (x);
+ /* Start with Estrin scheme on high order (small magnitude) coefficients. */
+ r = fmaf (B[6], a, B[5]);
+ u = fmaf (B[4], a, B[3]);
+ x2 = x * x;
+ r = fmaf (r, x2, u);
+ /* Then switch to pure Horner scheme. */
+ r = fmaf (r, a, B[2]);
+ r = fmaf (r, a, B[1]);
+ r = fmaf (r, a, B[0]);
+ r = fmaf (r, a, a);
+ /* Single precision exponential with ~0.5ulps,
+ ensures erff has max. rel. error
+ < 1ulp on [0.921875, 4.0],
+ < 1.1ulps on [0.875, 4.0]. */
+ r = expf (-r);
+ /* Explicit copysign (calling copysignf increases latency). */
+ if (sign)
+ r = -1.0f + r;
+ else
+ r = 1.0f - r;
+ }
+ else
+ { /* |x| >= 4.0. */
+
+ /* Special cases : erff(nan)=nan, erff(+inf)=+1 and erff(-inf)=-1. */
+ if (unlikely (ia12 >= 0x7f8))
+ return (1.f - (float) ((ix >> 31) << 1)) + 1.f / x;
+
+ /* Explicit copysign (calling copysignf increases latency). */
+ if (sign)
+ r = -1.0f;
+ else
+ r = 1.0f;
+ }
+ return r;
+}
diff --git a/math/erff_data.c b/math/erff_data.c
new file mode 100644
index 000000000000..fa6b1ef4dedb
--- /dev/null
+++ b/math/erff_data.c
@@ -0,0 +1,22 @@
+/*
+ * Data for approximation of erff.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+/* Minimax approximation of erff. */
+const struct erff_data __erff_data = {
+.erff_poly_A = {
+0x1.06eba6p-03f, -0x1.8126e0p-02f, 0x1.ce1a46p-04f,
+-0x1.b68bd2p-06f, 0x1.473f48p-08f, -0x1.3a1a82p-11f
+},
+.erff_poly_B = {
+0x1.079d0cp-3f, 0x1.450aa0p-1f, 0x1.b55cb0p-4f,
+-0x1.8d6300p-6f, 0x1.fd1336p-9f, -0x1.91d2ccp-12f,
+0x1.222900p-16f
+}
+};
+
diff --git a/math/exp.c b/math/exp.c
new file mode 100644
index 000000000000..7f5024cd8792
--- /dev/null
+++ b/math/exp.c
@@ -0,0 +1,176 @@
+/*
+ * Double-precision e^x function.
+ *
+ * Copyright (c) 2018-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <float.h>
+#include <math.h>
+#include <stdint.h>
+#include "math_config.h"
+
+#define N (1 << EXP_TABLE_BITS)
+#define InvLn2N __exp_data.invln2N
+#define NegLn2hiN __exp_data.negln2hiN
+#define NegLn2loN __exp_data.negln2loN
+#define Shift __exp_data.shift
+#define T __exp_data.tab
+#define C2 __exp_data.poly[5 - EXP_POLY_ORDER]
+#define C3 __exp_data.poly[6 - EXP_POLY_ORDER]
+#define C4 __exp_data.poly[7 - EXP_POLY_ORDER]
+#define C5 __exp_data.poly[8 - EXP_POLY_ORDER]
+#define C6 __exp_data.poly[9 - EXP_POLY_ORDER]
+
+/* Handle cases that may overflow or underflow when computing the result that
+ is scale*(1+TMP) without intermediate rounding. The bit representation of
+ scale is in SBITS, however it has a computed exponent that may have
+ overflown into the sign bit so that needs to be adjusted before using it as
+ a double. (int32_t)KI is the k used in the argument reduction and exponent
+ adjustment of scale, positive k here means the result may overflow and
+ negative k means the result may underflow. */
+static inline double
+specialcase (double_t tmp, uint64_t sbits, uint64_t ki)
+{
+ double_t scale, y;
+
+ if ((ki & 0x80000000) == 0)
+ {
+ /* k > 0, the exponent of scale might have overflowed by <= 460. */
+ sbits -= 1009ull << 52;
+ scale = asdouble (sbits);
+ y = 0x1p1009 * (scale + scale * tmp);
+ return check_oflow (eval_as_double (y));
+ }
+ /* k < 0, need special care in the subnormal range. */
+ sbits += 1022ull << 52;
+ scale = asdouble (sbits);
+ y = scale + scale * tmp;
+ if (y < 1.0)
+ {
+ /* Round y to the right precision before scaling it into the subnormal
+ range to avoid double rounding that can cause 0.5+E/2 ulp error where
+ E is the worst-case ulp error outside the subnormal range. So this
+ is only useful if the goal is better than 1 ulp worst-case error. */
+ double_t hi, lo;
+ lo = scale - y + scale * tmp;
+ hi = 1.0 + y;
+ lo = 1.0 - hi + y + lo;
+ y = eval_as_double (hi + lo) - 1.0;
+ /* Avoid -0.0 with downward rounding. */
+ if (WANT_ROUNDING && y == 0.0)
+ y = 0.0;
+ /* The underflow exception needs to be signaled explicitly. */
+ force_eval_double (opt_barrier_double (0x1p-1022) * 0x1p-1022);
+ }
+ y = 0x1p-1022 * y;
+ return check_uflow (eval_as_double (y));
+}
+
+/* Top 12 bits of a double (sign and exponent bits). */
+static inline uint32_t
+top12 (double x)
+{
+ return asuint64 (x) >> 52;
+}
+
+/* Computes exp(x+xtail) where |xtail| < 2^-8/N and |xtail| <= |x|.
+ If hastail is 0 then xtail is assumed to be 0 too. */
+static inline double
+exp_inline (double x, double xtail, int hastail)
+{
+ uint32_t abstop;
+ uint64_t ki, idx, top, sbits;
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t kd, z, r, r2, scale, tail, tmp;
+
+ abstop = top12 (x) & 0x7ff;
+ if (unlikely (abstop - top12 (0x1p-54) >= top12 (512.0) - top12 (0x1p-54)))
+ {
+ if (abstop - top12 (0x1p-54) >= 0x80000000)
+ /* Avoid spurious underflow for tiny x. */
+ /* Note: 0 is common input. */
+ return WANT_ROUNDING ? 1.0 + x : 1.0;
+ if (abstop >= top12 (1024.0))
+ {
+ if (asuint64 (x) == asuint64 (-INFINITY))
+ return 0.0;
+ if (abstop >= top12 (INFINITY))
+ return 1.0 + x;
+ if (asuint64 (x) >> 63)
+ return __math_uflow (0);
+ else
+ return __math_oflow (0);
+ }
+ /* Large x is special cased below. */
+ abstop = 0;
+ }
+
+ /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */
+ /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */
+ z = InvLn2N * x;
+#if TOINT_INTRINSICS
+ kd = roundtoint (z);
+ ki = converttoint (z);
+#elif EXP_USE_TOINT_NARROW
+ /* z - kd is in [-0.5-2^-16, 0.5] in all rounding modes. */
+ kd = eval_as_double (z + Shift);
+ ki = asuint64 (kd) >> 16;
+ kd = (double_t) (int32_t) ki;
+#else
+ /* z - kd is in [-1, 1] in non-nearest rounding modes. */
+ kd = eval_as_double (z + Shift);
+ ki = asuint64 (kd);
+ kd -= Shift;
+#endif
+ r = x + kd * NegLn2hiN + kd * NegLn2loN;
+ /* The code assumes 2^-200 < |xtail| < 2^-8/N. */
+ if (hastail)
+ r += xtail;
+ /* 2^(k/N) ~= scale * (1 + tail). */
+ idx = 2 * (ki % N);
+ top = ki << (52 - EXP_TABLE_BITS);
+ tail = asdouble (T[idx]);
+ /* This is only a valid scale when -1023*N < k < 1024*N. */
+ sbits = T[idx + 1] + top;
+ /* exp(x) = 2^(k/N) * exp(r) ~= scale + scale * (tail + exp(r) - 1). */
+ /* Evaluation is optimized assuming superscalar pipelined execution. */
+ r2 = r * r;
+ /* Without fma the worst case error is 0.25/N ulp larger. */
+ /* Worst case error is less than 0.5+1.11/N+(abs poly error * 2^53) ulp. */
+#if EXP_POLY_ORDER == 4
+ tmp = tail + r + r2 * C2 + r * r2 * (C3 + r * C4);
+#elif EXP_POLY_ORDER == 5
+ tmp = tail + r + r2 * (C2 + r * C3) + r2 * r2 * (C4 + r * C5);
+#elif EXP_POLY_ORDER == 6
+ tmp = tail + r + r2 * (0.5 + r * C3) + r2 * r2 * (C4 + r * C5 + r2 * C6);
+#endif
+ if (unlikely (abstop == 0))
+ return specialcase (tmp, sbits, ki);
+ scale = asdouble (sbits);
+ /* Note: tmp == 0 or |tmp| > 2^-200 and scale > 2^-739, so there
+ is no spurious underflow here even without fma. */
+ return eval_as_double (scale + scale * tmp);
+}
+
+double
+exp (double x)
+{
+ return exp_inline (x, 0, 0);
+}
+
+/* May be useful for implementing pow where more than double
+ precision input is needed. */
+double
+__exp_dd (double x, double xtail)
+{
+ return exp_inline (x, xtail, 1);
+}
+#if USE_GLIBC_ABI
+strong_alias (exp, __exp_finite)
+hidden_alias (exp, __ieee754_exp)
+hidden_alias (__exp_dd, __exp1)
+# if LDBL_MANT_DIG == 53
+long double expl (long double x) { return exp (x); }
+# endif
+#endif
diff --git a/math/exp2.c b/math/exp2.c
new file mode 100644
index 000000000000..35ab39f22ed5
--- /dev/null
+++ b/math/exp2.c
@@ -0,0 +1,143 @@
+/*
+ * Double-precision 2^x function.
+ *
+ * Copyright (c) 2018-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <float.h>
+#include <math.h>
+#include <stdint.h>
+#include "math_config.h"
+
+#define N (1 << EXP_TABLE_BITS)
+#define Shift __exp_data.exp2_shift
+#define T __exp_data.tab
+#define C1 __exp_data.exp2_poly[0]
+#define C2 __exp_data.exp2_poly[1]
+#define C3 __exp_data.exp2_poly[2]
+#define C4 __exp_data.exp2_poly[3]
+#define C5 __exp_data.exp2_poly[4]
+#define C6 __exp_data.exp2_poly[5]
+
+/* Handle cases that may overflow or underflow when computing the result that
+ is scale*(1+TMP) without intermediate rounding. The bit representation of
+ scale is in SBITS, however it has a computed exponent that may have
+ overflown into the sign bit so that needs to be adjusted before using it as
+ a double. (int32_t)KI is the k used in the argument reduction and exponent
+ adjustment of scale, positive k here means the result may overflow and
+ negative k means the result may underflow. */
+static inline double
+specialcase (double_t tmp, uint64_t sbits, uint64_t ki)
+{
+ double_t scale, y;
+
+ if ((ki & 0x80000000) == 0)
+ {
+ /* k > 0, the exponent of scale might have overflowed by 1. */
+ sbits -= 1ull << 52;
+ scale = asdouble (sbits);
+ y = 2 * (scale + scale * tmp);
+ return check_oflow (eval_as_double (y));
+ }
+ /* k < 0, need special care in the subnormal range. */
+ sbits += 1022ull << 52;
+ scale = asdouble (sbits);
+ y = scale + scale * tmp;
+ if (y < 1.0)
+ {
+ /* Round y to the right precision before scaling it into the subnormal
+ range to avoid double rounding that can cause 0.5+E/2 ulp error where
+ E is the worst-case ulp error outside the subnormal range. So this
+ is only useful if the goal is better than 1 ulp worst-case error. */
+ double_t hi, lo;
+ lo = scale - y + scale * tmp;
+ hi = 1.0 + y;
+ lo = 1.0 - hi + y + lo;
+ y = eval_as_double (hi + lo) - 1.0;
+ /* Avoid -0.0 with downward rounding. */
+ if (WANT_ROUNDING && y == 0.0)
+ y = 0.0;
+ /* The underflow exception needs to be signaled explicitly. */
+ force_eval_double (opt_barrier_double (0x1p-1022) * 0x1p-1022);
+ }
+ y = 0x1p-1022 * y;
+ return check_uflow (eval_as_double (y));
+}
+
+/* Top 12 bits of a double (sign and exponent bits). */
+static inline uint32_t
+top12 (double x)
+{
+ return asuint64 (x) >> 52;
+}
+
+double
+exp2 (double x)
+{
+ uint32_t abstop;
+ uint64_t ki, idx, top, sbits;
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t kd, r, r2, scale, tail, tmp;
+
+ abstop = top12 (x) & 0x7ff;
+ if (unlikely (abstop - top12 (0x1p-54) >= top12 (512.0) - top12 (0x1p-54)))
+ {
+ if (abstop - top12 (0x1p-54) >= 0x80000000)
+ /* Avoid spurious underflow for tiny x. */
+ /* Note: 0 is common input. */
+ return WANT_ROUNDING ? 1.0 + x : 1.0;
+ if (abstop >= top12 (1024.0))
+ {
+ if (asuint64 (x) == asuint64 (-INFINITY))
+ return 0.0;
+ if (abstop >= top12 (INFINITY))
+ return 1.0 + x;
+ if (!(asuint64 (x) >> 63))
+ return __math_oflow (0);
+ else if (asuint64 (x) >= asuint64 (-1075.0))
+ return __math_uflow (0);
+ }
+ if (2 * asuint64 (x) > 2 * asuint64 (928.0))
+ /* Large x is special cased below. */
+ abstop = 0;
+ }
+
+ /* exp2(x) = 2^(k/N) * 2^r, with 2^r in [2^(-1/2N),2^(1/2N)]. */
+ /* x = k/N + r, with int k and r in [-1/2N, 1/2N]. */
+ kd = eval_as_double (x + Shift);
+ ki = asuint64 (kd); /* k. */
+ kd -= Shift; /* k/N for int k. */
+ r = x - kd;
+ /* 2^(k/N) ~= scale * (1 + tail). */
+ idx = 2 * (ki % N);
+ top = ki << (52 - EXP_TABLE_BITS);
+ tail = asdouble (T[idx]);
+ /* This is only a valid scale when -1023*N < k < 1024*N. */
+ sbits = T[idx + 1] + top;
+ /* exp2(x) = 2^(k/N) * 2^r ~= scale + scale * (tail + 2^r - 1). */
+ /* Evaluation is optimized assuming superscalar pipelined execution. */
+ r2 = r * r;
+ /* Without fma the worst case error is 0.5/N ulp larger. */
+ /* Worst case error is less than 0.5+0.86/N+(abs poly error * 2^53) ulp. */
+#if EXP2_POLY_ORDER == 4
+ tmp = tail + r * C1 + r2 * C2 + r * r2 * (C3 + r * C4);
+#elif EXP2_POLY_ORDER == 5
+ tmp = tail + r * C1 + r2 * (C2 + r * C3) + r2 * r2 * (C4 + r * C5);
+#elif EXP2_POLY_ORDER == 6
+ tmp = tail + r * C1 + r2 * (0.5 + r * C3) + r2 * r2 * (C4 + r * C5 + r2 * C6);
+#endif
+ if (unlikely (abstop == 0))
+ return specialcase (tmp, sbits, ki);
+ scale = asdouble (sbits);
+ /* Note: tmp == 0 or |tmp| > 2^-65 and scale > 2^-928, so there
+ is no spurious underflow here even without fma. */
+ return eval_as_double (scale + scale * tmp);
+}
+#if USE_GLIBC_ABI
+strong_alias (exp2, __exp2_finite)
+hidden_alias (exp2, __ieee754_exp2)
+# if LDBL_MANT_DIG == 53
+long double exp2l (long double x) { return exp2 (x); }
+# endif
+#endif
diff --git a/math/exp2f.c b/math/exp2f.c
new file mode 100644
index 000000000000..94b32538aa0d
--- /dev/null
+++ b/math/exp2f.c
@@ -0,0 +1,80 @@
+/*
+ * Single-precision 2^x function.
+ *
+ * Copyright (c) 2017-2018, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <math.h>
+#include <stdint.h>
+#include "math_config.h"
+
+/*
+EXP2F_TABLE_BITS = 5
+EXP2F_POLY_ORDER = 3
+
+ULP error: 0.502 (nearest rounding.)
+Relative error: 1.69 * 2^-34 in [-1/64, 1/64] (before rounding.)
+Wrong count: 168353 (all nearest rounding wrong results with fma.)
+Non-nearest ULP error: 1 (rounded ULP error)
+*/
+
+#define N (1 << EXP2F_TABLE_BITS)
+#define T __exp2f_data.tab
+#define C __exp2f_data.poly
+#define SHIFT __exp2f_data.shift_scaled
+
+static inline uint32_t
+top12 (float x)
+{
+ return asuint (x) >> 20;
+}
+
+float
+exp2f (float x)
+{
+ uint32_t abstop;
+ uint64_t ki, t;
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t kd, xd, z, r, r2, y, s;
+
+ xd = (double_t) x;
+ abstop = top12 (x) & 0x7ff;
+ if (unlikely (abstop >= top12 (128.0f)))
+ {
+ /* |x| >= 128 or x is nan. */
+ if (asuint (x) == asuint (-INFINITY))
+ return 0.0f;
+ if (abstop >= top12 (INFINITY))
+ return x + x;
+ if (x > 0.0f)
+ return __math_oflowf (0);
+ if (x <= -150.0f)
+ return __math_uflowf (0);
+#if WANT_ERRNO_UFLOW
+ if (x < -149.0f)
+ return __math_may_uflowf (0);
+#endif
+ }
+
+ /* x = k/N + r with r in [-1/(2N), 1/(2N)] and int k. */
+ kd = eval_as_double (xd + SHIFT);
+ ki = asuint64 (kd);
+ kd -= SHIFT; /* k/N for int k. */
+ r = xd - kd;
+
+ /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */
+ t = T[ki % N];
+ t += ki << (52 - EXP2F_TABLE_BITS);
+ s = asdouble (t);
+ z = C[0] * r + C[1];
+ r2 = r * r;
+ y = C[2] * r + 1;
+ y = z * r2 + y;
+ y = y * s;
+ return eval_as_float (y);
+}
+#if USE_GLIBC_ABI
+strong_alias (exp2f, __exp2f_finite)
+hidden_alias (exp2f, __ieee754_exp2f)
+#endif
diff --git a/math/exp2f_data.c b/math/exp2f_data.c
new file mode 100644
index 000000000000..3fb0ad11b15a
--- /dev/null
+++ b/math/exp2f_data.c
@@ -0,0 +1,78 @@
+/*
+ * Shared data between expf, exp2f and powf.
+ *
+ * Copyright (c) 2017-2018, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+#define N (1 << EXP2F_TABLE_BITS)
+
+const struct exp2f_data __exp2f_data = {
+ /* tab[i] = uint(2^(i/N)) - (i << 52-BITS)
+ used for computing 2^(k/N) for an int |k| < 150 N as
+ double(tab[k%N] + (k << 52-BITS)) */
+ .tab = {
+#if N == 8
+0x3ff0000000000000, 0x3fef72b83c7d517b, 0x3fef06fe0a31b715, 0x3feebfdad5362a27,
+0x3feea09e667f3bcd, 0x3feeace5422aa0db, 0x3feee89f995ad3ad, 0x3fef5818dcfba487,
+#elif N == 16
+0x3ff0000000000000, 0x3fefb5586cf9890f, 0x3fef72b83c7d517b, 0x3fef387a6e756238,
+0x3fef06fe0a31b715, 0x3feedea64c123422, 0x3feebfdad5362a27, 0x3feeab07dd485429,
+0x3feea09e667f3bcd, 0x3feea11473eb0187, 0x3feeace5422aa0db, 0x3feec49182a3f090,
+0x3feee89f995ad3ad, 0x3fef199bdd85529c, 0x3fef5818dcfba487, 0x3fefa4afa2a490da,
+#elif N == 32
+0x3ff0000000000000, 0x3fefd9b0d3158574, 0x3fefb5586cf9890f, 0x3fef9301d0125b51,
+0x3fef72b83c7d517b, 0x3fef54873168b9aa, 0x3fef387a6e756238, 0x3fef1e9df51fdee1,
+0x3fef06fe0a31b715, 0x3feef1a7373aa9cb, 0x3feedea64c123422, 0x3feece086061892d,
+0x3feebfdad5362a27, 0x3feeb42b569d4f82, 0x3feeab07dd485429, 0x3feea47eb03a5585,
+0x3feea09e667f3bcd, 0x3fee9f75e8ec5f74, 0x3feea11473eb0187, 0x3feea589994cce13,
+0x3feeace5422aa0db, 0x3feeb737b0cdc5e5, 0x3feec49182a3f090, 0x3feed503b23e255d,
+0x3feee89f995ad3ad, 0x3feeff76f2fb5e47, 0x3fef199bdd85529c, 0x3fef3720dcef9069,
+0x3fef5818dcfba487, 0x3fef7c97337b9b5f, 0x3fefa4afa2a490da, 0x3fefd0765b6e4540,
+#elif N == 64
+0x3ff0000000000000, 0x3fefec9a3e778061, 0x3fefd9b0d3158574, 0x3fefc74518759bc8,
+0x3fefb5586cf9890f, 0x3fefa3ec32d3d1a2, 0x3fef9301d0125b51, 0x3fef829aaea92de0,
+0x3fef72b83c7d517b, 0x3fef635beb6fcb75, 0x3fef54873168b9aa, 0x3fef463b88628cd6,
+0x3fef387a6e756238, 0x3fef2b4565e27cdd, 0x3fef1e9df51fdee1, 0x3fef1285a6e4030b,
+0x3fef06fe0a31b715, 0x3feefc08b26416ff, 0x3feef1a7373aa9cb, 0x3feee7db34e59ff7,
+0x3feedea64c123422, 0x3feed60a21f72e2a, 0x3feece086061892d, 0x3feec6a2b5c13cd0,
+0x3feebfdad5362a27, 0x3feeb9b2769d2ca7, 0x3feeb42b569d4f82, 0x3feeaf4736b527da,
+0x3feeab07dd485429, 0x3feea76f15ad2148, 0x3feea47eb03a5585, 0x3feea23882552225,
+0x3feea09e667f3bcd, 0x3fee9fb23c651a2f, 0x3fee9f75e8ec5f74, 0x3fee9feb564267c9,
+0x3feea11473eb0187, 0x3feea2f336cf4e62, 0x3feea589994cce13, 0x3feea8d99b4492ed,
+0x3feeace5422aa0db, 0x3feeb1ae99157736, 0x3feeb737b0cdc5e5, 0x3feebd829fde4e50,
+0x3feec49182a3f090, 0x3feecc667b5de565, 0x3feed503b23e255d, 0x3feede6b5579fdbf,
+0x3feee89f995ad3ad, 0x3feef3a2b84f15fb, 0x3feeff76f2fb5e47, 0x3fef0c1e904bc1d2,
+0x3fef199bdd85529c, 0x3fef27f12e57d14b, 0x3fef3720dcef9069, 0x3fef472d4a07897c,
+0x3fef5818dcfba487, 0x3fef69e603db3285, 0x3fef7c97337b9b5f, 0x3fef902ee78b3ff6,
+0x3fefa4afa2a490da, 0x3fefba1bee615a27, 0x3fefd0765b6e4540, 0x3fefe7c1819e90d8,
+#endif
+ },
+ .shift_scaled = 0x1.8p+52 / N,
+ .poly = {
+#if N == 8
+ 0x1.c6a00335106e2p-5, 0x1.ec0c313449f55p-3, 0x1.62e431111f69fp-1,
+#elif N == 16
+ 0x1.c6ac6aa313963p-5, 0x1.ebfff4532d9bap-3, 0x1.62e43001bc49fp-1,
+#elif N == 32
+ 0x1.c6af84b912394p-5, 0x1.ebfce50fac4f3p-3, 0x1.62e42ff0c52d6p-1,
+#elif N == 64
+ 0x1.c6b04b4221b2ap-5, 0x1.ebfc213e184d7p-3, 0x1.62e42fefb5b7fp-1,
+#endif
+ },
+ .shift = 0x1.8p+52,
+ .invln2_scaled = 0x1.71547652b82fep+0 * N,
+ .poly_scaled = {
+#if N == 8
+ 0x1.c6a00335106e2p-5/N/N/N, 0x1.ec0c313449f55p-3/N/N, 0x1.62e431111f69fp-1/N,
+#elif N == 16
+ 0x1.c6ac6aa313963p-5/N/N/N, 0x1.ebfff4532d9bap-3/N/N, 0x1.62e43001bc49fp-1/N,
+#elif N == 32
+ 0x1.c6af84b912394p-5/N/N/N, 0x1.ebfce50fac4f3p-3/N/N, 0x1.62e42ff0c52d6p-1/N,
+#elif N == 64
+ 0x1.c6b04b4221b2ap-5/N/N/N, 0x1.ebfc213e184d7p-3/N/N, 0x1.62e42fefb5b7fp-1/N,
+#endif
+ },
+};
diff --git a/math/exp_data.c b/math/exp_data.c
new file mode 100644
index 000000000000..cba76832566f
--- /dev/null
+++ b/math/exp_data.c
@@ -0,0 +1,1120 @@
+/*
+ * Shared data between exp, exp2 and pow.
+ *
+ * Copyright (c) 2018, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+#define N (1 << EXP_TABLE_BITS)
+
+const struct exp_data __exp_data = {
+// N/ln2
+.invln2N = 0x1.71547652b82fep0 * N,
+// -ln2/N
+#if N == 64
+.negln2hiN = -0x1.62e42fefa0000p-7,
+.negln2loN = -0x1.cf79abc9e3b3ap-46,
+#elif N == 128
+.negln2hiN = -0x1.62e42fefa0000p-8,
+.negln2loN = -0x1.cf79abc9e3b3ap-47,
+#elif N == 256
+.negln2hiN = -0x1.62e42fefc0000p-9,
+.negln2loN = 0x1.c610ca86c3899p-45,
+#elif N == 512
+.negln2hiN = -0x1.62e42fef80000p-10,
+.negln2loN = -0x1.1cf79abc9e3b4p-45,
+#endif
+// Used for rounding when !TOINT_INTRINSICS
+#if EXP_USE_TOINT_NARROW
+.shift = 0x1800000000.8p0,
+#else
+.shift = 0x1.8p52,
+#endif
+// exp polynomial coefficients.
+.poly = {
+#if N == 64 && EXP_POLY_ORDER == 5 && !EXP_POLY_WIDE
+// abs error: 1.5543*2^-60
+// ulp error: 0.529 (0.533 without fma)
+// if |x| < ln2/128+eps
+// abs error if |x| < ln2/64: 1.7157*2^-50
+0x1.fffffffffdbcdp-2,
+0x1.555555555444cp-3,
+0x1.555573c6a9f7dp-5,
+0x1.1111266d28935p-7,
+#elif N == 64 && EXP_POLY_ORDER == 6 && EXP_POLY_WIDE
+// abs error: 1.6735*2^-64
+// ulp error: 0.518 (0.522 without fma)
+// if |x| < ln2/64
+0x1.5555555548f9ap-3,
+0x1.555555554bf5dp-5,
+0x1.11115b75f0f4dp-7,
+0x1.6c171a6b6303ep-10,
+#elif N == 128 && EXP_POLY_ORDER == 5 && !EXP_POLY_WIDE
+// abs error: 1.555*2^-66
+// ulp error: 0.509 (0.511 without fma)
+// if |x| < ln2/256+eps
+// abs error if |x| < ln2/256+0x1p-15: 1.09*2^-65
+// abs error if |x| < ln2/128: 1.7145*2^-56
+0x1.ffffffffffdbdp-2,
+0x1.555555555543cp-3,
+0x1.55555cf172b91p-5,
+0x1.1111167a4d017p-7,
+#elif N == 128 && EXP_POLY_ORDER == 5 && EXP_POLY_WIDE
+// abs error: 1.5542*2^-60
+// ulp error: 0.521 (0.523 without fma)
+// if |x| < ln2/128
+0x1.fffffffffdbcep-2,
+0x1.55555555543c2p-3,
+0x1.555573c64f2e3p-5,
+0x1.111126b4eff73p-7,
+#elif N == 128 && EXP_POLY_ORDER == 6 && EXP_POLY_WIDE
+// abs error: 1.6861*2^-71
+// ulp error: 0.509 (0.511 without fma)
+// if |x| < ln2/128
+0x1.55555555548fdp-3,
+0x1.555555555658fp-5,
+0x1.111123a859bb6p-7,
+0x1.6c16ba6920cabp-10,
+#elif N == 256 && EXP_POLY_ORDER == 4 && !EXP_POLY_WIDE
+// abs error: 1.43*2^-58
+// ulp error: 0.549 (0.550 without fma)
+// if |x| < ln2/512
+0x1p0, // unused
+0x1.fffffffffffd4p-2,
+0x1.5555571d6ef9p-3,
+0x1.5555576a5adcep-5,
+#elif N == 256 && EXP_POLY_ORDER == 5 && EXP_POLY_WIDE
+// abs error: 1.5547*2^-66
+// ulp error: 0.505 (0.506 without fma)
+// if |x| < ln2/256
+0x1.ffffffffffdbdp-2,
+0x1.555555555543cp-3,
+0x1.55555cf16e1edp-5,
+0x1.1111167a4b553p-7,
+#elif N == 512 && EXP_POLY_ORDER == 4 && !EXP_POLY_WIDE
+// abs error: 1.4300*2^-63
+// ulp error: 0.504
+// if |x| < ln2/1024
+// abs error if |x| < ln2/512: 1.0689*2^-55
+0x1p0, // unused
+0x1.ffffffffffffdp-2,
+0x1.555555c75bb6p-3,
+0x1.555555dec04a8p-5,
+#endif
+},
+.exp2_shift = 0x1.8p52 / N,
+// exp2 polynomial coefficients.
+.exp2_poly = {
+#if N == 64 && EXP2_POLY_ORDER == 6 && EXP2_POLY_WIDE
+// abs error: 1.3054*2^-63
+// ulp error: 0.515
+// if |x| < 1/64
+0x1.62e42fefa39efp-1,
+0x1.ebfbdff82c58fp-3,
+0x1.c6b08d7045cf1p-5,
+0x1.3b2ab6fb8fd0ep-7,
+0x1.5d884afec48d7p-10,
+0x1.43097dc684ae1p-13,
+#elif N == 128 && EXP2_POLY_ORDER == 5 && !EXP2_POLY_WIDE
+// abs error: 1.2195*2^-65
+// ulp error: 0.507 (0.511 without fma)
+// if |x| < 1/256
+// abs error if |x| < 1/128: 1.9941*2^-56
+0x1.62e42fefa39efp-1,
+0x1.ebfbdff82c424p-3,
+0x1.c6b08d70cf4b5p-5,
+0x1.3b2abd24650ccp-7,
+0x1.5d7e09b4e3a84p-10,
+#elif N == 256 && EXP2_POLY_ORDER == 5 && EXP2_POLY_WIDE
+// abs error: 1.2195*2^-65
+// ulp error: 0.504 (0.508 without fma)
+// if |x| < 1/256
+0x1.62e42fefa39efp-1,
+0x1.ebfbdff82c424p-3,
+0x1.c6b08d70cf4b5p-5,
+0x1.3b2abd24650ccp-7,
+0x1.5d7e09b4e3a84p-10,
+#elif N == 512 && EXP2_POLY_ORDER == 4 && !EXP2_POLY_WIDE
+// abs error: 1.4411*2^-64
+// ulp error: 0.5024 (0.5063 without fma)
+// if |x| < 1/1024
+// abs error if |x| < 1/512: 1.9430*2^-56
+0x1.62e42fefa39ecp-1,
+0x1.ebfbdff82c58bp-3,
+0x1.c6b08e46de41fp-5,
+0x1.3b2ab786ee1dap-7,
+#endif
+},
+// 2^(k/N) ~= H[k]*(1 + T[k]) for int k in [0,N)
+// tab[2*k] = asuint64(T[k])
+// tab[2*k+1] = asuint64(H[k]) - (k << 52)/N
+.tab = {
+#if N == 64
+0x0, 0x3ff0000000000000,
+0xbc7160139cd8dc5d, 0x3fefec9a3e778061,
+0x3c8cd2523567f613, 0x3fefd9b0d3158574,
+0x3c60f74e61e6c861, 0x3fefc74518759bc8,
+0x3c979aa65d837b6d, 0x3fefb5586cf9890f,
+0x3c3ebe3d702f9cd1, 0x3fefa3ec32d3d1a2,
+0xbc9556522a2fbd0e, 0x3fef9301d0125b51,
+0xbc91c923b9d5f416, 0x3fef829aaea92de0,
+0xbc801b15eaa59348, 0x3fef72b83c7d517b,
+0x3c8b898c3f1353bf, 0x3fef635beb6fcb75,
+0x3c9aecf73e3a2f60, 0x3fef54873168b9aa,
+0x3c8a6f4144a6c38d, 0x3fef463b88628cd6,
+0x3c968efde3a8a894, 0x3fef387a6e756238,
+0x3c80472b981fe7f2, 0x3fef2b4565e27cdd,
+0x3c82f7e16d09ab31, 0x3fef1e9df51fdee1,
+0x3c8b3782720c0ab4, 0x3fef1285a6e4030b,
+0x3c834d754db0abb6, 0x3fef06fe0a31b715,
+0x3c8fdd395dd3f84a, 0x3feefc08b26416ff,
+0xbc924aedcc4b5068, 0x3feef1a7373aa9cb,
+0xbc71d1e83e9436d2, 0x3feee7db34e59ff7,
+0x3c859f48a72a4c6d, 0x3feedea64c123422,
+0xbc58a78f4817895b, 0x3feed60a21f72e2a,
+0x3c4363ed60c2ac11, 0x3feece086061892d,
+0x3c6ecce1daa10379, 0x3feec6a2b5c13cd0,
+0x3c7690cebb7aafb0, 0x3feebfdad5362a27,
+0xbc8f94340071a38e, 0x3feeb9b2769d2ca7,
+0xbc78dec6bd0f385f, 0x3feeb42b569d4f82,
+0x3c93350518fdd78e, 0x3feeaf4736b527da,
+0x3c9063e1e21c5409, 0x3feeab07dd485429,
+0x3c9432e62b64c035, 0x3feea76f15ad2148,
+0xbc8c33c53bef4da8, 0x3feea47eb03a5585,
+0xbc93cedd78565858, 0x3feea23882552225,
+0xbc93b3efbf5e2228, 0x3feea09e667f3bcd,
+0xbc6367efb86da9ee, 0x3fee9fb23c651a2f,
+0xbc781f647e5a3ecf, 0x3fee9f75e8ec5f74,
+0xbc8619321e55e68a, 0x3fee9feb564267c9,
+0xbc7b32dcb94da51d, 0x3feea11473eb0187,
+0x3c65ebe1abd66c55, 0x3feea2f336cf4e62,
+0xbc9369b6f13b3734, 0x3feea589994cce13,
+0xbc94d450d872576e, 0x3feea8d99b4492ed,
+0x3c8db72fc1f0eab4, 0x3feeace5422aa0db,
+0x3c7bf68359f35f44, 0x3feeb1ae99157736,
+0xbc5da9b88b6c1e29, 0x3feeb737b0cdc5e5,
+0xbc92434322f4f9aa, 0x3feebd829fde4e50,
+0x3c71affc2b91ce27, 0x3feec49182a3f090,
+0xbc87c50422622263, 0x3feecc667b5de565,
+0xbc91bbd1d3bcbb15, 0x3feed503b23e255d,
+0x3c8469846e735ab3, 0x3feede6b5579fdbf,
+0x3c8c1a7792cb3387, 0x3feee89f995ad3ad,
+0xbc55c3d956dcaeba, 0x3feef3a2b84f15fb,
+0xbc68d6f438ad9334, 0x3feeff76f2fb5e47,
+0x3c74ffd70a5fddcd, 0x3fef0c1e904bc1d2,
+0x3c736eae30af0cb3, 0x3fef199bdd85529c,
+0x3c84e08fd10959ac, 0x3fef27f12e57d14b,
+0x3c676b2c6c921968, 0x3fef3720dcef9069,
+0xbc8fad5d3ffffa6f, 0x3fef472d4a07897c,
+0x3c74a385a63d07a7, 0x3fef5818dcfba487,
+0x3c8e5a50d5c192ac, 0x3fef69e603db3285,
+0xbc82d52107b43e1f, 0x3fef7c97337b9b5f,
+0x3c74b604603a88d3, 0x3fef902ee78b3ff6,
+0xbc8ff7128fd391f0, 0x3fefa4afa2a490da,
+0x3c8ec3bc41aa2008, 0x3fefba1bee615a27,
+0x3c8a64a931d185ee, 0x3fefd0765b6e4540,
+0x3c77893b4d91cd9d, 0x3fefe7c1819e90d8,
+#elif N == 128
+0x0, 0x3ff0000000000000,
+0x3c9b3b4f1a88bf6e, 0x3feff63da9fb3335,
+0xbc7160139cd8dc5d, 0x3fefec9a3e778061,
+0xbc905e7a108766d1, 0x3fefe315e86e7f85,
+0x3c8cd2523567f613, 0x3fefd9b0d3158574,
+0xbc8bce8023f98efa, 0x3fefd06b29ddf6de,
+0x3c60f74e61e6c861, 0x3fefc74518759bc8,
+0x3c90a3e45b33d399, 0x3fefbe3ecac6f383,
+0x3c979aa65d837b6d, 0x3fefb5586cf9890f,
+0x3c8eb51a92fdeffc, 0x3fefac922b7247f7,
+0x3c3ebe3d702f9cd1, 0x3fefa3ec32d3d1a2,
+0xbc6a033489906e0b, 0x3fef9b66affed31b,
+0xbc9556522a2fbd0e, 0x3fef9301d0125b51,
+0xbc5080ef8c4eea55, 0x3fef8abdc06c31cc,
+0xbc91c923b9d5f416, 0x3fef829aaea92de0,
+0x3c80d3e3e95c55af, 0x3fef7a98c8a58e51,
+0xbc801b15eaa59348, 0x3fef72b83c7d517b,
+0xbc8f1ff055de323d, 0x3fef6af9388c8dea,
+0x3c8b898c3f1353bf, 0x3fef635beb6fcb75,
+0xbc96d99c7611eb26, 0x3fef5be084045cd4,
+0x3c9aecf73e3a2f60, 0x3fef54873168b9aa,
+0xbc8fe782cb86389d, 0x3fef4d5022fcd91d,
+0x3c8a6f4144a6c38d, 0x3fef463b88628cd6,
+0x3c807a05b0e4047d, 0x3fef3f49917ddc96,
+0x3c968efde3a8a894, 0x3fef387a6e756238,
+0x3c875e18f274487d, 0x3fef31ce4fb2a63f,
+0x3c80472b981fe7f2, 0x3fef2b4565e27cdd,
+0xbc96b87b3f71085e, 0x3fef24dfe1f56381,
+0x3c82f7e16d09ab31, 0x3fef1e9df51fdee1,
+0xbc3d219b1a6fbffa, 0x3fef187fd0dad990,
+0x3c8b3782720c0ab4, 0x3fef1285a6e4030b,
+0x3c6e149289cecb8f, 0x3fef0cafa93e2f56,
+0x3c834d754db0abb6, 0x3fef06fe0a31b715,
+0x3c864201e2ac744c, 0x3fef0170fc4cd831,
+0x3c8fdd395dd3f84a, 0x3feefc08b26416ff,
+0xbc86a3803b8e5b04, 0x3feef6c55f929ff1,
+0xbc924aedcc4b5068, 0x3feef1a7373aa9cb,
+0xbc9907f81b512d8e, 0x3feeecae6d05d866,
+0xbc71d1e83e9436d2, 0x3feee7db34e59ff7,
+0xbc991919b3ce1b15, 0x3feee32dc313a8e5,
+0x3c859f48a72a4c6d, 0x3feedea64c123422,
+0xbc9312607a28698a, 0x3feeda4504ac801c,
+0xbc58a78f4817895b, 0x3feed60a21f72e2a,
+0xbc7c2c9b67499a1b, 0x3feed1f5d950a897,
+0x3c4363ed60c2ac11, 0x3feece086061892d,
+0x3c9666093b0664ef, 0x3feeca41ed1d0057,
+0x3c6ecce1daa10379, 0x3feec6a2b5c13cd0,
+0x3c93ff8e3f0f1230, 0x3feec32af0d7d3de,
+0x3c7690cebb7aafb0, 0x3feebfdad5362a27,
+0x3c931dbdeb54e077, 0x3feebcb299fddd0d,
+0xbc8f94340071a38e, 0x3feeb9b2769d2ca7,
+0xbc87deccdc93a349, 0x3feeb6daa2cf6642,
+0xbc78dec6bd0f385f, 0x3feeb42b569d4f82,
+0xbc861246ec7b5cf6, 0x3feeb1a4ca5d920f,
+0x3c93350518fdd78e, 0x3feeaf4736b527da,
+0x3c7b98b72f8a9b05, 0x3feead12d497c7fd,
+0x3c9063e1e21c5409, 0x3feeab07dd485429,
+0x3c34c7855019c6ea, 0x3feea9268a5946b7,
+0x3c9432e62b64c035, 0x3feea76f15ad2148,
+0xbc8ce44a6199769f, 0x3feea5e1b976dc09,
+0xbc8c33c53bef4da8, 0x3feea47eb03a5585,
+0xbc845378892be9ae, 0x3feea34634ccc320,
+0xbc93cedd78565858, 0x3feea23882552225,
+0x3c5710aa807e1964, 0x3feea155d44ca973,
+0xbc93b3efbf5e2228, 0x3feea09e667f3bcd,
+0xbc6a12ad8734b982, 0x3feea012750bdabf,
+0xbc6367efb86da9ee, 0x3fee9fb23c651a2f,
+0xbc80dc3d54e08851, 0x3fee9f7df9519484,
+0xbc781f647e5a3ecf, 0x3fee9f75e8ec5f74,
+0xbc86ee4ac08b7db0, 0x3fee9f9a48a58174,
+0xbc8619321e55e68a, 0x3fee9feb564267c9,
+0x3c909ccb5e09d4d3, 0x3feea0694fde5d3f,
+0xbc7b32dcb94da51d, 0x3feea11473eb0187,
+0x3c94ecfd5467c06b, 0x3feea1ed0130c132,
+0x3c65ebe1abd66c55, 0x3feea2f336cf4e62,
+0xbc88a1c52fb3cf42, 0x3feea427543e1a12,
+0xbc9369b6f13b3734, 0x3feea589994cce13,
+0xbc805e843a19ff1e, 0x3feea71a4623c7ad,
+0xbc94d450d872576e, 0x3feea8d99b4492ed,
+0x3c90ad675b0e8a00, 0x3feeaac7d98a6699,
+0x3c8db72fc1f0eab4, 0x3feeace5422aa0db,
+0xbc65b6609cc5e7ff, 0x3feeaf3216b5448c,
+0x3c7bf68359f35f44, 0x3feeb1ae99157736,
+0xbc93091fa71e3d83, 0x3feeb45b0b91ffc6,
+0xbc5da9b88b6c1e29, 0x3feeb737b0cdc5e5,
+0xbc6c23f97c90b959, 0x3feeba44cbc8520f,
+0xbc92434322f4f9aa, 0x3feebd829fde4e50,
+0xbc85ca6cd7668e4b, 0x3feec0f170ca07ba,
+0x3c71affc2b91ce27, 0x3feec49182a3f090,
+0x3c6dd235e10a73bb, 0x3feec86319e32323,
+0xbc87c50422622263, 0x3feecc667b5de565,
+0x3c8b1c86e3e231d5, 0x3feed09bec4a2d33,
+0xbc91bbd1d3bcbb15, 0x3feed503b23e255d,
+0x3c90cc319cee31d2, 0x3feed99e1330b358,
+0x3c8469846e735ab3, 0x3feede6b5579fdbf,
+0xbc82dfcd978e9db4, 0x3feee36bbfd3f37a,
+0x3c8c1a7792cb3387, 0x3feee89f995ad3ad,
+0xbc907b8f4ad1d9fa, 0x3feeee07298db666,
+0xbc55c3d956dcaeba, 0x3feef3a2b84f15fb,
+0xbc90a40e3da6f640, 0x3feef9728de5593a,
+0xbc68d6f438ad9334, 0x3feeff76f2fb5e47,
+0xbc91eee26b588a35, 0x3fef05b030a1064a,
+0x3c74ffd70a5fddcd, 0x3fef0c1e904bc1d2,
+0xbc91bdfbfa9298ac, 0x3fef12c25bd71e09,
+0x3c736eae30af0cb3, 0x3fef199bdd85529c,
+0x3c8ee3325c9ffd94, 0x3fef20ab5fffd07a,
+0x3c84e08fd10959ac, 0x3fef27f12e57d14b,
+0x3c63cdaf384e1a67, 0x3fef2f6d9406e7b5,
+0x3c676b2c6c921968, 0x3fef3720dcef9069,
+0xbc808a1883ccb5d2, 0x3fef3f0b555dc3fa,
+0xbc8fad5d3ffffa6f, 0x3fef472d4a07897c,
+0xbc900dae3875a949, 0x3fef4f87080d89f2,
+0x3c74a385a63d07a7, 0x3fef5818dcfba487,
+0xbc82919e2040220f, 0x3fef60e316c98398,
+0x3c8e5a50d5c192ac, 0x3fef69e603db3285,
+0x3c843a59ac016b4b, 0x3fef7321f301b460,
+0xbc82d52107b43e1f, 0x3fef7c97337b9b5f,
+0xbc892ab93b470dc9, 0x3fef864614f5a129,
+0x3c74b604603a88d3, 0x3fef902ee78b3ff6,
+0x3c83c5ec519d7271, 0x3fef9a51fbc74c83,
+0xbc8ff7128fd391f0, 0x3fefa4afa2a490da,
+0xbc8dae98e223747d, 0x3fefaf482d8e67f1,
+0x3c8ec3bc41aa2008, 0x3fefba1bee615a27,
+0x3c842b94c3a9eb32, 0x3fefc52b376bba97,
+0x3c8a64a931d185ee, 0x3fefd0765b6e4540,
+0xbc8e37bae43be3ed, 0x3fefdbfdad9cbe14,
+0x3c77893b4d91cd9d, 0x3fefe7c1819e90d8,
+0x3c5305c14160cc89, 0x3feff3c22b8f71f1,
+#elif N == 256
+0x0, 0x3ff0000000000000,
+0xbc84e82fc61851ac, 0x3feffb1afa5abcbf,
+0x3c9b3b4f1a88bf6e, 0x3feff63da9fb3335,
+0xbc82985dd8521d32, 0x3feff168143b0281,
+0xbc7160139cd8dc5d, 0x3fefec9a3e778061,
+0x3c651e617061bfbd, 0x3fefe7d42e11bbcc,
+0xbc905e7a108766d1, 0x3fefe315e86e7f85,
+0x3c845fad437fa426, 0x3fefde5f72f654b1,
+0x3c8cd2523567f613, 0x3fefd9b0d3158574,
+0xbc954529642b232f, 0x3fefd50a0e3c1f89,
+0xbc8bce8023f98efa, 0x3fefd06b29ddf6de,
+0x3c8293708ef5c32e, 0x3fefcbd42b72a836,
+0x3c60f74e61e6c861, 0x3fefc74518759bc8,
+0xbc95b9280905b2a4, 0x3fefc2bdf66607e0,
+0x3c90a3e45b33d399, 0x3fefbe3ecac6f383,
+0x3c84f31f32c4b7e7, 0x3fefb9c79b1f3919,
+0x3c979aa65d837b6d, 0x3fefb5586cf9890f,
+0x3c9407fb30d06420, 0x3fefb0f145e46c85,
+0x3c8eb51a92fdeffc, 0x3fefac922b7247f7,
+0xbc9a5d04b3b9911b, 0x3fefa83b23395dec,
+0x3c3ebe3d702f9cd1, 0x3fefa3ec32d3d1a2,
+0xbc937a01f0739546, 0x3fef9fa55fdfa9c5,
+0xbc6a033489906e0b, 0x3fef9b66affed31b,
+0x3c8b8268b04ef0a5, 0x3fef973028d7233e,
+0xbc9556522a2fbd0e, 0x3fef9301d0125b51,
+0xbc9ac46e44a2ebcc, 0x3fef8edbab5e2ab6,
+0xbc5080ef8c4eea55, 0x3fef8abdc06c31cc,
+0xbc65704e90c9f860, 0x3fef86a814f204ab,
+0xbc91c923b9d5f416, 0x3fef829aaea92de0,
+0xbc897cea57e46280, 0x3fef7e95934f312e,
+0x3c80d3e3e95c55af, 0x3fef7a98c8a58e51,
+0x3c56f01429e2b9d2, 0x3fef76a45471c3c2,
+0xbc801b15eaa59348, 0x3fef72b83c7d517b,
+0x3c6e653b2459034b, 0x3fef6ed48695bbc0,
+0xbc8f1ff055de323d, 0x3fef6af9388c8dea,
+0x3c92cc7ea345b7dc, 0x3fef672658375d2f,
+0x3c8b898c3f1353bf, 0x3fef635beb6fcb75,
+0x3c957bfb2876ea9e, 0x3fef5f99f8138a1c,
+0xbc96d99c7611eb26, 0x3fef5be084045cd4,
+0x3c8cdc1873af2155, 0x3fef582f95281c6b,
+0x3c9aecf73e3a2f60, 0x3fef54873168b9aa,
+0xbc9493684653a131, 0x3fef50e75eb44027,
+0xbc8fe782cb86389d, 0x3fef4d5022fcd91d,
+0xbc98e2899077520a, 0x3fef49c18438ce4d,
+0x3c8a6f4144a6c38d, 0x3fef463b88628cd6,
+0x3c9120fcd4f59273, 0x3fef42be3578a819,
+0x3c807a05b0e4047d, 0x3fef3f49917ddc96,
+0x3c89b788c188c9b8, 0x3fef3bdda27912d1,
+0x3c968efde3a8a894, 0x3fef387a6e756238,
+0x3c877afbca90ef84, 0x3fef351ffb82140a,
+0x3c875e18f274487d, 0x3fef31ce4fb2a63f,
+0x3c91512f082876ee, 0x3fef2e85711ece75,
+0x3c80472b981fe7f2, 0x3fef2b4565e27cdd,
+0x3c9a02f0c7d75ec6, 0x3fef280e341ddf29,
+0xbc96b87b3f71085e, 0x3fef24dfe1f56381,
+0xbc803297e78260bf, 0x3fef21ba7591bb70,
+0x3c82f7e16d09ab31, 0x3fef1e9df51fdee1,
+0xbc95b77e5ccd9fbf, 0x3fef1b8a66d10f13,
+0xbc3d219b1a6fbffa, 0x3fef187fd0dad990,
+0xbc91e75c40b4251e, 0x3fef157e39771b2f,
+0x3c8b3782720c0ab4, 0x3fef1285a6e4030b,
+0x3c98a911f1f7785a, 0x3fef0f961f641589,
+0x3c6e149289cecb8f, 0x3fef0cafa93e2f56,
+0xbc61e7c998db7dbb, 0x3fef09d24abd886b,
+0x3c834d754db0abb6, 0x3fef06fe0a31b715,
+0x3c85425c11faadf4, 0x3fef0432edeeb2fd,
+0x3c864201e2ac744c, 0x3fef0170fc4cd831,
+0xbc979517a03e2847, 0x3feefeb83ba8ea32,
+0x3c8fdd395dd3f84a, 0x3feefc08b26416ff,
+0xbc800e2a46da4bee, 0x3feef96266e3fa2d,
+0xbc86a3803b8e5b04, 0x3feef6c55f929ff1,
+0xbc87430803972b34, 0x3feef431a2de883b,
+0xbc924aedcc4b5068, 0x3feef1a7373aa9cb,
+0xbc954de30ae02d94, 0x3feeef26231e754a,
+0xbc9907f81b512d8e, 0x3feeecae6d05d866,
+0xbc94f2487e1c03ec, 0x3feeea401b7140ef,
+0xbc71d1e83e9436d2, 0x3feee7db34e59ff7,
+0x3c914a5432fcb2f4, 0x3feee57fbfec6cf4,
+0xbc991919b3ce1b15, 0x3feee32dc313a8e5,
+0x3c79c3bba5562a2f, 0x3feee0e544ede173,
+0x3c859f48a72a4c6d, 0x3feedea64c123422,
+0xbc85a71612e21658, 0x3feedc70df1c5175,
+0xbc9312607a28698a, 0x3feeda4504ac801c,
+0x3c86421f6f1d24d6, 0x3feed822c367a024,
+0xbc58a78f4817895b, 0x3feed60a21f72e2a,
+0xbc9348a6815fce65, 0x3feed3fb2709468a,
+0xbc7c2c9b67499a1b, 0x3feed1f5d950a897,
+0x3c835c43984d9871, 0x3feecffa3f84b9d4,
+0x3c4363ed60c2ac11, 0x3feece086061892d,
+0xbc632afc8d9473a0, 0x3feecc2042a7d232,
+0x3c9666093b0664ef, 0x3feeca41ed1d0057,
+0xbc95fc5e44de020e, 0x3feec86d668b3237,
+0x3c6ecce1daa10379, 0x3feec6a2b5c13cd0,
+0xbc7ea0148327c42f, 0x3feec4e1e192aed2,
+0x3c93ff8e3f0f1230, 0x3feec32af0d7d3de,
+0xbc7a843ad1a88022, 0x3feec17dea6db7d7,
+0x3c7690cebb7aafb0, 0x3feebfdad5362a27,
+0x3c892ca3bf144e63, 0x3feebe41b817c114,
+0x3c931dbdeb54e077, 0x3feebcb299fddd0d,
+0xbc902c99b04aa8b0, 0x3feebb2d81d8abff,
+0xbc8f94340071a38e, 0x3feeb9b2769d2ca7,
+0x3c73e34f67e67118, 0x3feeb8417f4531ee,
+0xbc87deccdc93a349, 0x3feeb6daa2cf6642,
+0xbc75a3b1197ba0f0, 0x3feeb57de83f4eef,
+0xbc78dec6bd0f385f, 0x3feeb42b569d4f82,
+0x3c81bd2888075068, 0x3feeb2e2f4f6ad27,
+0xbc861246ec7b5cf6, 0x3feeb1a4ca5d920f,
+0xbc896be8ae89ef8f, 0x3feeb070dde910d2,
+0x3c93350518fdd78e, 0x3feeaf4736b527da,
+0xbc88e6ac90348602, 0x3feeae27dbe2c4cf,
+0x3c7b98b72f8a9b05, 0x3feead12d497c7fd,
+0xbc91af7f1365c3ac, 0x3feeac0827ff07cc,
+0x3c9063e1e21c5409, 0x3feeab07dd485429,
+0xbc943a3540d1898a, 0x3feeaa11fba87a03,
+0x3c34c7855019c6ea, 0x3feea9268a5946b7,
+0xbc951f58ddaa8090, 0x3feea84590998b93,
+0x3c9432e62b64c035, 0x3feea76f15ad2148,
+0xbc82e1648e50a17c, 0x3feea6a320dceb71,
+0xbc8ce44a6199769f, 0x3feea5e1b976dc09,
+0x3c95f30eda98a575, 0x3feea52ae6cdf6f4,
+0xbc8c33c53bef4da8, 0x3feea47eb03a5585,
+0x3c917ecda8a72159, 0x3feea3dd1d1929fd,
+0xbc845378892be9ae, 0x3feea34634ccc320,
+0xbc9345f3cee1ae6e, 0x3feea2b9febc8fb7,
+0xbc93cedd78565858, 0x3feea23882552225,
+0xbc85c33fdf910406, 0x3feea1c1c70833f6,
+0x3c5710aa807e1964, 0x3feea155d44ca973,
+0x3c81079ab5789604, 0x3feea0f4b19e9538,
+0xbc93b3efbf5e2228, 0x3feea09e667f3bcd,
+0x3c727df161cd7778, 0x3feea052fa75173e,
+0xbc6a12ad8734b982, 0x3feea012750bdabf,
+0x3c93f9924a05b767, 0x3fee9fdcddd47645,
+0xbc6367efb86da9ee, 0x3fee9fb23c651a2f,
+0xbc87557939a8b5ef, 0x3fee9f9298593ae5,
+0xbc80dc3d54e08851, 0x3fee9f7df9519484,
+0x3c51ed2f56fa9d1a, 0x3fee9f7466f42e87,
+0xbc781f647e5a3ecf, 0x3fee9f75e8ec5f74,
+0xbc88e67a9006c909, 0x3fee9f8286ead08a,
+0xbc86ee4ac08b7db0, 0x3fee9f9a48a58174,
+0x3c86597566977ac8, 0x3fee9fbd35d7cbfd,
+0xbc8619321e55e68a, 0x3fee9feb564267c9,
+0x3c92c0b7028a5c3a, 0x3feea024b1ab6e09,
+0x3c909ccb5e09d4d3, 0x3feea0694fde5d3f,
+0x3c8a30faf49cc78c, 0x3feea0b938ac1cf6,
+0xbc7b32dcb94da51d, 0x3feea11473eb0187,
+0xbc92dad3519d7b5b, 0x3feea17b0976cfdb,
+0x3c94ecfd5467c06b, 0x3feea1ed0130c132,
+0x3c87d51410fd15c2, 0x3feea26a62ff86f0,
+0x3c65ebe1abd66c55, 0x3feea2f336cf4e62,
+0xbc760a3629969871, 0x3feea3878491c491,
+0xbc88a1c52fb3cf42, 0x3feea427543e1a12,
+0x3c8b18c6e3fdef5d, 0x3feea4d2add106d9,
+0xbc9369b6f13b3734, 0x3feea589994cce13,
+0x3c90ec1ddcb1390a, 0x3feea64c1eb941f7,
+0xbc805e843a19ff1e, 0x3feea71a4623c7ad,
+0xbc522cea4f3afa1e, 0x3feea7f4179f5b21,
+0xbc94d450d872576e, 0x3feea8d99b4492ed,
+0x3c7c88549b958471, 0x3feea9cad931a436,
+0x3c90ad675b0e8a00, 0x3feeaac7d98a6699,
+0x3c931143962f7877, 0x3feeabd0a478580f,
+0x3c8db72fc1f0eab4, 0x3feeace5422aa0db,
+0x3c93e9e96f112479, 0x3feeae05bad61778,
+0xbc65b6609cc5e7ff, 0x3feeaf3216b5448c,
+0xbc8dac42a4a38df0, 0x3feeb06a5e0866d9,
+0x3c7bf68359f35f44, 0x3feeb1ae99157736,
+0x3c8b99dd98b1ed84, 0x3feeb2fed0282c8a,
+0xbc93091fa71e3d83, 0x3feeb45b0b91ffc6,
+0xbc7885ad50cbb750, 0x3feeb5c353aa2fe2,
+0xbc5da9b88b6c1e29, 0x3feeb737b0cdc5e5,
+0xbc82d5e85f3e0301, 0x3feeb8b82b5f98e5,
+0xbc6c23f97c90b959, 0x3feeba44cbc8520f,
+0xbc51669428996971, 0x3feebbdd9a7670b3,
+0xbc92434322f4f9aa, 0x3feebd829fde4e50,
+0x3c71f2b2c1c4c014, 0x3feebf33e47a22a2,
+0xbc85ca6cd7668e4b, 0x3feec0f170ca07ba,
+0xbc9294f304f166b6, 0x3feec2bb4d53fe0d,
+0x3c71affc2b91ce27, 0x3feec49182a3f090,
+0xbc8a1e58414c07d3, 0x3feec674194bb8d5,
+0x3c6dd235e10a73bb, 0x3feec86319e32323,
+0xbc79740b58a20091, 0x3feeca5e8d07f29e,
+0xbc87c50422622263, 0x3feecc667b5de565,
+0x3c9165830a2b96c2, 0x3feece7aed8eb8bb,
+0x3c8b1c86e3e231d5, 0x3feed09bec4a2d33,
+0xbc903d5cbe27874b, 0x3feed2c980460ad8,
+0xbc91bbd1d3bcbb15, 0x3feed503b23e255d,
+0x3c5986178980fce0, 0x3feed74a8af46052,
+0x3c90cc319cee31d2, 0x3feed99e1330b358,
+0xbc89472975b1f2a5, 0x3feedbfe53c12e59,
+0x3c8469846e735ab3, 0x3feede6b5579fdbf,
+0x3c7d8157a34b7e7f, 0x3feee0e521356eba,
+0xbc82dfcd978e9db4, 0x3feee36bbfd3f37a,
+0x3c8c8a4e231ebb7d, 0x3feee5ff3a3c2774,
+0x3c8c1a7792cb3387, 0x3feee89f995ad3ad,
+0xbc888c8d11a142e5, 0x3feeeb4ce622f2ff,
+0xbc907b8f4ad1d9fa, 0x3feeee07298db666,
+0x3c889c2ea41433c7, 0x3feef0ce6c9a8952,
+0xbc55c3d956dcaeba, 0x3feef3a2b84f15fb,
+0xbc7274aedac8ff80, 0x3feef68415b749b1,
+0xbc90a40e3da6f640, 0x3feef9728de5593a,
+0x3c85c620ce76df06, 0x3feefc6e29f1c52a,
+0xbc68d6f438ad9334, 0x3feeff76f2fb5e47,
+0xbc8fda52e1b51e41, 0x3fef028cf22749e4,
+0xbc91eee26b588a35, 0x3fef05b030a1064a,
+0xbc32141a7b3e2cd8, 0x3fef08e0b79a6f1f,
+0x3c74ffd70a5fddcd, 0x3fef0c1e904bc1d2,
+0xbc302899507554e5, 0x3fef0f69c3f3a207,
+0xbc91bdfbfa9298ac, 0x3fef12c25bd71e09,
+0xbc80dda2d4c0010c, 0x3fef16286141b33d,
+0x3c736eae30af0cb3, 0x3fef199bdd85529c,
+0xbc8a007daadf8d68, 0x3fef1d1cd9fa652c,
+0x3c8ee3325c9ffd94, 0x3fef20ab5fffd07a,
+0x3c836909391181d3, 0x3fef244778fafb22,
+0x3c84e08fd10959ac, 0x3fef27f12e57d14b,
+0xbc811cd7dbdf9547, 0x3fef2ba88988c933,
+0x3c63cdaf384e1a67, 0x3fef2f6d9406e7b5,
+0xbc7ac28b7bef6621, 0x3fef33405751c4db,
+0x3c676b2c6c921968, 0x3fef3720dcef9069,
+0xbc7030587207b9e1, 0x3fef3b0f2e6d1675,
+0xbc808a1883ccb5d2, 0x3fef3f0b555dc3fa,
+0xbc8cc734592af7fc, 0x3fef43155b5bab74,
+0xbc8fad5d3ffffa6f, 0x3fef472d4a07897c,
+0x3c87752a44f587e8, 0x3fef4b532b08c968,
+0xbc900dae3875a949, 0x3fef4f87080d89f2,
+0x3c85b66fefeef52e, 0x3fef53c8eacaa1d6,
+0x3c74a385a63d07a7, 0x3fef5818dcfba487,
+0x3c5159d9d908a96e, 0x3fef5c76e862e6d3,
+0xbc82919e2040220f, 0x3fef60e316c98398,
+0x3c8c254d16117a68, 0x3fef655d71ff6075,
+0x3c8e5a50d5c192ac, 0x3fef69e603db3285,
+0xbc8d8c329fbd0e03, 0x3fef6e7cd63a8315,
+0x3c843a59ac016b4b, 0x3fef7321f301b460,
+0xbc8ea6e6fbd5f2a6, 0x3fef77d5641c0658,
+0xbc82d52107b43e1f, 0x3fef7c97337b9b5f,
+0xbc63e8e3eab2cbb4, 0x3fef81676b197d17,
+0xbc892ab93b470dc9, 0x3fef864614f5a129,
+0xbc8b7966cd0d2cd9, 0x3fef8b333b16ee12,
+0x3c74b604603a88d3, 0x3fef902ee78b3ff6,
+0xbc776caa4c2ff1cf, 0x3fef953924676d76,
+0x3c83c5ec519d7271, 0x3fef9a51fbc74c83,
+0xbc81d5fc525d9940, 0x3fef9f7977cdb740,
+0xbc8ff7128fd391f0, 0x3fefa4afa2a490da,
+0x3c855cd8aaea3d21, 0x3fefa9f4867cca6e,
+0xbc8dae98e223747d, 0x3fefaf482d8e67f1,
+0x3c8269947c2bed4a, 0x3fefb4aaa2188510,
+0x3c8ec3bc41aa2008, 0x3fefba1bee615a27,
+0xbc83b6137e9afe9e, 0x3fefbf9c1cb6412a,
+0x3c842b94c3a9eb32, 0x3fefc52b376bba97,
+0xbc69fa74878ba7c7, 0x3fefcac948dd7274,
+0x3c8a64a931d185ee, 0x3fefd0765b6e4540,
+0x3c901f3a75ee0efe, 0x3fefd632798844f8,
+0xbc8e37bae43be3ed, 0x3fefdbfdad9cbe14,
+0xbc516a9ce6ed84fa, 0x3fefe1d802243c89,
+0x3c77893b4d91cd9d, 0x3fefe7c1819e90d8,
+0xbc699c7db2effc76, 0x3fefedba3692d514,
+0x3c5305c14160cc89, 0x3feff3c22b8f71f1,
+0x3c64b458677f9840, 0x3feff9d96b2a23d9,
+#elif N == 512
+0x0, 0x3ff0000000000000,
+0xbc75d87ade1f60d5, 0x3feffd8c86da1c0a,
+0xbc84e82fc61851ac, 0x3feffb1afa5abcbf,
+0x3c9bffdaa7ac4bac, 0x3feff8ab5b2cbd11,
+0x3c9b3b4f1a88bf6e, 0x3feff63da9fb3335,
+0x3c75c18e5ae0563a, 0x3feff3d1e77170b4,
+0xbc82985dd8521d32, 0x3feff168143b0281,
+0xbc705b1125cf49a5, 0x3fefef003103b10e,
+0xbc7160139cd8dc5d, 0x3fefec9a3e778061,
+0x3c9f879abbff3f87, 0x3fefea363d42b027,
+0x3c651e617061bfbd, 0x3fefe7d42e11bbcc,
+0x3c9b14003824712a, 0x3fefe57411915a8a,
+0xbc905e7a108766d1, 0x3fefe315e86e7f85,
+0x3c61cbf0f38af658, 0x3fefe0b9b35659d8,
+0x3c845fad437fa426, 0x3fefde5f72f654b1,
+0xbc9a3316383dcbc5, 0x3fefdc0727fc1762,
+0x3c8cd2523567f613, 0x3fefd9b0d3158574,
+0x3c9901c9e0e797fd, 0x3fefd75c74f0bec2,
+0xbc954529642b232f, 0x3fefd50a0e3c1f89,
+0xbc89b3236d111646, 0x3fefd2b99fa6407c,
+0xbc8bce8023f98efa, 0x3fefd06b29ddf6de,
+0xbc8cb191be99b1b0, 0x3fefce1ead925493,
+0x3c8293708ef5c32e, 0x3fefcbd42b72a836,
+0xbc9acb71e83765b7, 0x3fefc98ba42e7d30,
+0x3c60f74e61e6c861, 0x3fefc74518759bc8,
+0x3c5cd3e58b03697e, 0x3fefc50088f8093f,
+0xbc95b9280905b2a4, 0x3fefc2bdf66607e0,
+0xbc8bfb07d4755452, 0x3fefc07d61701716,
+0x3c90a3e45b33d399, 0x3fefbe3ecac6f383,
+0x3c8aedeb3e7b14cd, 0x3fefbc02331b9715,
+0x3c84f31f32c4b7e7, 0x3fefb9c79b1f3919,
+0x3c9a8eb1f3d914b4, 0x3fefb78f03834e52,
+0x3c979aa65d837b6d, 0x3fefb5586cf9890f,
+0xbc85b9eb0402507b, 0x3fefb323d833d93f,
+0x3c9407fb30d06420, 0x3fefb0f145e46c85,
+0xbc93f0f225bbf3ee, 0x3fefaec0b6bdae53,
+0x3c8eb51a92fdeffc, 0x3fefac922b7247f7,
+0xbc9c3fe7282d1784, 0x3fefaa65a4b520ba,
+0xbc9a5d04b3b9911b, 0x3fefa83b23395dec,
+0x3c9c8be44bf4cde8, 0x3fefa612a7b26300,
+0x3c3ebe3d702f9cd1, 0x3fefa3ec32d3d1a2,
+0x3c820c5444c93c44, 0x3fefa1c7c55189c6,
+0xbc937a01f0739546, 0x3fef9fa55fdfa9c5,
+0xbc84c6baeb580d7a, 0x3fef9d8503328e6d,
+0xbc6a033489906e0b, 0x3fef9b66affed31b,
+0x3c8657aa1b0d9f83, 0x3fef994a66f951ce,
+0x3c8b8268b04ef0a5, 0x3fef973028d7233e,
+0x3c62f2c7fd6ee145, 0x3fef9517f64d9ef1,
+0xbc9556522a2fbd0e, 0x3fef9301d0125b51,
+0xbc6b0b2789925e90, 0x3fef90edb6db2dc1,
+0xbc9ac46e44a2ebcc, 0x3fef8edbab5e2ab6,
+0xbc93aad17d197fae, 0x3fef8ccbae51a5c8,
+0xbc5080ef8c4eea55, 0x3fef8abdc06c31cc,
+0xbc989c464a07ad70, 0x3fef88b1e264a0e9,
+0xbc65704e90c9f860, 0x3fef86a814f204ab,
+0xbc72c338fce197f4, 0x3fef84a058cbae1e,
+0xbc91c923b9d5f416, 0x3fef829aaea92de0,
+0xbc6dca724cea0eb6, 0x3fef809717425438,
+0xbc897cea57e46280, 0x3fef7e95934f312e,
+0x3c464770b955d34d, 0x3fef7c962388149e,
+0x3c80d3e3e95c55af, 0x3fef7a98c8a58e51,
+0xbc962811c114424f, 0x3fef789d83606e12,
+0x3c56f01429e2b9d2, 0x3fef76a45471c3c2,
+0x3c8ec58e74904dd4, 0x3fef74ad3c92df73,
+0xbc801b15eaa59348, 0x3fef72b83c7d517b,
+0x3c8d63b0ab2d5bbf, 0x3fef70c554eaea89,
+0x3c6e653b2459034b, 0x3fef6ed48695bbc0,
+0xbc9ca9effbeeac92, 0x3fef6ce5d23816c9,
+0xbc8f1ff055de323d, 0x3fef6af9388c8dea,
+0x3c8bda920de0f6e2, 0x3fef690eba4df41f,
+0x3c92cc7ea345b7dc, 0x3fef672658375d2f,
+0xbc9a597f9a5ff71c, 0x3fef654013041dc2,
+0x3c8b898c3f1353bf, 0x3fef635beb6fcb75,
+0x3c50835b125aa573, 0x3fef6179e2363cf8,
+0x3c957bfb2876ea9e, 0x3fef5f99f8138a1c,
+0x3c8aaa13d61aec1f, 0x3fef5dbc2dc40bf0,
+0xbc96d99c7611eb26, 0x3fef5be084045cd4,
+0x3c8a4f81aa7110bd, 0x3fef5a06fb91588f,
+0x3c8cdc1873af2155, 0x3fef582f95281c6b,
+0xbc6817fd6a313e3e, 0x3fef565a51860746,
+0x3c9aecf73e3a2f60, 0x3fef54873168b9aa,
+0xbc96236af85fd26a, 0x3fef52b6358e15e8,
+0xbc9493684653a131, 0x3fef50e75eb44027,
+0x3c7795eb4523abe7, 0x3fef4f1aad999e82,
+0xbc8fe782cb86389d, 0x3fef4d5022fcd91d,
+0x3c8fe58b91b40095, 0x3fef4b87bf9cda38,
+0xbc98e2899077520a, 0x3fef49c18438ce4d,
+0x3c91ecaa860c614a, 0x3fef47fd7190241e,
+0x3c8a6f4144a6c38d, 0x3fef463b88628cd6,
+0xbc3e45c83ba0bbcb, 0x3fef447bc96ffc18,
+0x3c9120fcd4f59273, 0x3fef42be3578a819,
+0xbc29fd3bea07b4ee, 0x3fef4102cd3d09b9,
+0x3c807a05b0e4047d, 0x3fef3f49917ddc96,
+0x3c87f1c7350e256d, 0x3fef3d9282fc1f27,
+0x3c89b788c188c9b8, 0x3fef3bdda27912d1,
+0x3c420dac6c124f4f, 0x3fef3a2af0b63bff,
+0x3c968efde3a8a894, 0x3fef387a6e756238,
+0xbc99501d09bc09fd, 0x3fef36cc1c78903a,
+0x3c877afbca90ef84, 0x3fef351ffb82140a,
+0x3c73baf864dc8675, 0x3fef33760c547f15,
+0x3c875e18f274487d, 0x3fef31ce4fb2a63f,
+0x3c91b0575c1eaf54, 0x3fef3028c65fa1ff,
+0x3c91512f082876ee, 0x3fef2e85711ece75,
+0xbc90364bc9ce33ab, 0x3fef2ce450b3cb82,
+0x3c80472b981fe7f2, 0x3fef2b4565e27cdd,
+0xbc7548165d85ed32, 0x3fef29a8b16f0a30,
+0x3c9a02f0c7d75ec6, 0x3fef280e341ddf29,
+0x3c7c3b977a68e32c, 0x3fef2675eeb3ab98,
+0xbc96b87b3f71085e, 0x3fef24dfe1f56381,
+0xbc93a255f697ecfe, 0x3fef234c0ea83f36,
+0xbc803297e78260bf, 0x3fef21ba7591bb70,
+0x3c8d2d19edc1e550, 0x3fef202b17779965,
+0x3c82f7e16d09ab31, 0x3fef1e9df51fdee1,
+0xbc76b2173113dd8c, 0x3fef1d130f50d65c,
+0xbc95b77e5ccd9fbf, 0x3fef1b8a66d10f13,
+0x3c811aa5f853590b, 0x3fef1a03fc675d1f,
+0xbc3d219b1a6fbffa, 0x3fef187fd0dad990,
+0x3c61d61a34c8aa02, 0x3fef16fde4f2e280,
+0xbc91e75c40b4251e, 0x3fef157e39771b2f,
+0xbc91f892bf6b286d, 0x3fef1400cf2f6c18,
+0x3c8b3782720c0ab4, 0x3fef1285a6e4030b,
+0x3c7590c65c20e680, 0x3fef110cc15d5346,
+0x3c98a911f1f7785a, 0x3fef0f961f641589,
+0x3c86fe320b5c1e9d, 0x3fef0e21c1c14833,
+0x3c6e149289cecb8f, 0x3fef0cafa93e2f56,
+0xbc903cd8b2f25790, 0x3fef0b3fd6a454d2,
+0xbc61e7c998db7dbb, 0x3fef09d24abd886b,
+0x3c7b3bf786a54a87, 0x3fef08670653dfe4,
+0x3c834d754db0abb6, 0x3fef06fe0a31b715,
+0x3c74bb6c41732885, 0x3fef05975721b004,
+0x3c85425c11faadf4, 0x3fef0432edeeb2fd,
+0xbc99d7399abb9a8b, 0x3fef02d0cf63eeac,
+0x3c864201e2ac744c, 0x3fef0170fc4cd831,
+0xbc5451d60c6ac9eb, 0x3fef001375752b40,
+0xbc979517a03e2847, 0x3feefeb83ba8ea32,
+0x3c8787a210ceafd9, 0x3feefd5f4fb45e20,
+0x3c8fdd395dd3f84a, 0x3feefc08b26416ff,
+0xbc888d1e4629943d, 0x3feefab46484ebb4,
+0xbc800e2a46da4bee, 0x3feef96266e3fa2d,
+0xbc93369c544088b6, 0x3feef812ba4ea77d,
+0xbc86a3803b8e5b04, 0x3feef6c55f929ff1,
+0x3c85373ce4eb6dfb, 0x3feef57a577dd72b,
+0xbc87430803972b34, 0x3feef431a2de883b,
+0x3c83adec8265a67f, 0x3feef2eb428335b4,
+0xbc924aedcc4b5068, 0x3feef1a7373aa9cb,
+0xbc835388bcac6bc5, 0x3feef06581d3f669,
+0xbc954de30ae02d94, 0x3feeef26231e754a,
+0x3c727cdb4e4b6640, 0x3feeede91be9c811,
+0xbc9907f81b512d8e, 0x3feeecae6d05d866,
+0x3c86c2696a26af35, 0x3feeeb761742d808,
+0xbc94f2487e1c03ec, 0x3feeea401b7140ef,
+0x3c888f6ff06b979a, 0x3feee90c7a61d55b,
+0xbc71d1e83e9436d2, 0x3feee7db34e59ff7,
+0xbc89d5efaabc2030, 0x3feee6ac4bcdf3ea,
+0x3c914a5432fcb2f4, 0x3feee57fbfec6cf4,
+0xbc76b8867f91c9d6, 0x3feee4559212ef89,
+0xbc991919b3ce1b15, 0x3feee32dc313a8e5,
+0x3c94c9c0b5157fe6, 0x3feee20853c10f28,
+0x3c79c3bba5562a2f, 0x3feee0e544ede173,
+0xbc62455345b51c8e, 0x3feedfc4976d27fa,
+0x3c859f48a72a4c6d, 0x3feedea64c123422,
+0xbc93331de45477d0, 0x3feedd8a63b0a09b,
+0xbc85a71612e21658, 0x3feedc70df1c5175,
+0xbc95f84d39b39b16, 0x3feedb59bf29743f,
+0xbc9312607a28698a, 0x3feeda4504ac801c,
+0xbc72ba4dc7c4d562, 0x3feed932b07a35df,
+0x3c86421f6f1d24d6, 0x3feed822c367a024,
+0xbc844f25dc02691f, 0x3feed7153e4a136a,
+0xbc58a78f4817895b, 0x3feed60a21f72e2a,
+0xbc888d328eb9b501, 0x3feed5016f44d8f5,
+0xbc9348a6815fce65, 0x3feed3fb2709468a,
+0x3c7f0bec42ddb15a, 0x3feed2f74a1af3f1,
+0xbc7c2c9b67499a1b, 0x3feed1f5d950a897,
+0xbc615f0a2b9cd452, 0x3feed0f6d5817663,
+0x3c835c43984d9871, 0x3feecffa3f84b9d4,
+0xbc8c2e465a919e1d, 0x3feecf0018321a1a,
+0x3c4363ed60c2ac11, 0x3feece086061892d,
+0xbc865dfd02bd08f1, 0x3feecd1318eb43ec,
+0xbc632afc8d9473a0, 0x3feecc2042a7d232,
+0xbc8e68cec89b1762, 0x3feecb2fde7006f4,
+0x3c9666093b0664ef, 0x3feeca41ed1d0057,
+0xbc48ae858eb682ca, 0x3feec9566f8827d0,
+0xbc95fc5e44de020e, 0x3feec86d668b3237,
+0x3c5dd71277c0915f, 0x3feec786d3001fe5,
+0x3c6ecce1daa10379, 0x3feec6a2b5c13cd0,
+0x3c92001325ecd7fb, 0x3feec5c10fa920a1,
+0xbc7ea0148327c42f, 0x3feec4e1e192aed2,
+0x3c65ace6e2870332, 0x3feec4052c5916c4,
+0x3c93ff8e3f0f1230, 0x3feec32af0d7d3de,
+0xbc9595c55690ffaf, 0x3feec2532feaada6,
+0xbc7a843ad1a88022, 0x3feec17dea6db7d7,
+0xbc8b401ba9fb5199, 0x3feec0ab213d5283,
+0x3c7690cebb7aafb0, 0x3feebfdad5362a27,
+0x3c6df82bf324cc57, 0x3feebf0d073537ca,
+0x3c892ca3bf144e63, 0x3feebe41b817c114,
+0x3c97cae38641c7bb, 0x3feebd78e8bb586b,
+0x3c931dbdeb54e077, 0x3feebcb299fddd0d,
+0x3c62d80c5c4a2b67, 0x3feebbeeccbd7b2a,
+0xbc902c99b04aa8b0, 0x3feebb2d81d8abff,
+0x3c8f39c10d12eaf0, 0x3feeba6eba2e35f0,
+0xbc8f94340071a38e, 0x3feeb9b2769d2ca7,
+0xbc80b582d74a55d9, 0x3feeb8f8b804f127,
+0x3c73e34f67e67118, 0x3feeb8417f4531ee,
+0xbc6b4e327ff434ca, 0x3feeb78ccd3deb0d,
+0xbc87deccdc93a349, 0x3feeb6daa2cf6642,
+0xbc592dca38593e20, 0x3feeb62b00da3b14,
+0xbc75a3b1197ba0f0, 0x3feeb57de83f4eef,
+0xbc85daca9994833e, 0x3feeb4d359dfd53d,
+0xbc78dec6bd0f385f, 0x3feeb42b569d4f82,
+0xbc980b4321bc6dae, 0x3feeb385df598d78,
+0x3c81bd2888075068, 0x3feeb2e2f4f6ad27,
+0xbc8390afec5241c5, 0x3feeb24298571b06,
+0xbc861246ec7b5cf6, 0x3feeb1a4ca5d920f,
+0x3c8f15cdafe7d586, 0x3feeb1098bed1bdf,
+0xbc896be8ae89ef8f, 0x3feeb070dde910d2,
+0xbc910aa91ae9b67f, 0x3feeafdac1351819,
+0x3c93350518fdd78e, 0x3feeaf4736b527da,
+0x3c957e1b67462375, 0x3feeaeb63f4d854c,
+0xbc88e6ac90348602, 0x3feeae27dbe2c4cf,
+0x3c8124d5051552a7, 0x3feead9c0d59ca07,
+0x3c7b98b72f8a9b05, 0x3feead12d497c7fd,
+0xbc3ca103952ecf1f, 0x3feeac8c32824135,
+0xbc91af7f1365c3ac, 0x3feeac0827ff07cc,
+0x3c773345c02a4fd6, 0x3feeab86b5f43d92,
+0x3c9063e1e21c5409, 0x3feeab07dd485429,
+0xbc909d2a0fce20f2, 0x3feeaa8b9ee20d1e,
+0xbc943a3540d1898a, 0x3feeaa11fba87a03,
+0xbc924f2cb4f81746, 0x3feea99af482fc8f,
+0x3c34c7855019c6ea, 0x3feea9268a5946b7,
+0xbc943592a0a9846b, 0x3feea8b4be135acc,
+0xbc951f58ddaa8090, 0x3feea84590998b93,
+0xbc956bc85d444f4f, 0x3feea7d902d47c65,
+0x3c9432e62b64c035, 0x3feea76f15ad2148,
+0x3c914d1e4218319f, 0x3feea707ca0cbf0f,
+0xbc82e1648e50a17c, 0x3feea6a320dceb71,
+0x3c971c93709313f4, 0x3feea6411b078d26,
+0xbc8ce44a6199769f, 0x3feea5e1b976dc09,
+0x3c7f88303b60d222, 0x3feea584fd15612a,
+0x3c95f30eda98a575, 0x3feea52ae6cdf6f4,
+0x3c70125ca18d4b5b, 0x3feea4d3778bc944,
+0xbc8c33c53bef4da8, 0x3feea47eb03a5585,
+0x3c9592ea73798b11, 0x3feea42c91c56acd,
+0x3c917ecda8a72159, 0x3feea3dd1d1929fd,
+0xbc9371d6d7d75739, 0x3feea390532205d8,
+0xbc845378892be9ae, 0x3feea34634ccc320,
+0xbc8ac05fd996f807, 0x3feea2fec30678b7,
+0xbc9345f3cee1ae6e, 0x3feea2b9febc8fb7,
+0xbc91f5067d03653a, 0x3feea277e8dcc390,
+0xbc93cedd78565858, 0x3feea23882552225,
+0x3c917339c86ce3ad, 0x3feea1fbcc140be7,
+0xbc85c33fdf910406, 0x3feea1c1c70833f6,
+0xbc77e66065ba2500, 0x3feea18a7420a036,
+0x3c5710aa807e1964, 0x3feea155d44ca973,
+0x3c964c827ee6b49a, 0x3feea123e87bfb7a,
+0x3c81079ab5789604, 0x3feea0f4b19e9538,
+0xbc928311a3c73480, 0x3feea0c830a4c8d4,
+0xbc93b3efbf5e2228, 0x3feea09e667f3bcd,
+0x3c882c79e185e981, 0x3feea077541ee718,
+0x3c727df161cd7778, 0x3feea052fa75173e,
+0xbc8b48cea80b043b, 0x3feea0315a736c75,
+0xbc6a12ad8734b982, 0x3feea012750bdabf,
+0xbc4f4863bc8e5180, 0x3fee9ff64b30aa09,
+0x3c93f9924a05b767, 0x3fee9fdcddd47645,
+0x3c954835dd4b7548, 0x3fee9fc62dea2f8a,
+0xbc6367efb86da9ee, 0x3fee9fb23c651a2f,
+0xbc8bf41f59b59f8a, 0x3fee9fa10a38cee8,
+0xbc87557939a8b5ef, 0x3fee9f9298593ae5,
+0xbc8f652fde52775c, 0x3fee9f86e7ba9fef,
+0xbc80dc3d54e08851, 0x3fee9f7df9519484,
+0xbc7b0300defbcf98, 0x3fee9f77ce1303f6,
+0x3c51ed2f56fa9d1a, 0x3fee9f7466f42e87,
+0xbc89dab646035dc0, 0x3fee9f73c4eaa988,
+0xbc781f647e5a3ecf, 0x3fee9f75e8ec5f74,
+0xbc91f0c230588dde, 0x3fee9f7ad3ef9011,
+0xbc88e67a9006c909, 0x3fee9f8286ead08a,
+0x3c9106450507a28c, 0x3fee9f8d02d50b8f,
+0xbc86ee4ac08b7db0, 0x3fee9f9a48a58174,
+0xbc9129729a10f3a0, 0x3fee9faa5953c849,
+0x3c86597566977ac8, 0x3fee9fbd35d7cbfd,
+0x3c781a70a5124f67, 0x3fee9fd2df29ce7c,
+0xbc8619321e55e68a, 0x3fee9feb564267c9,
+0x3c941626ea62646d, 0x3feea0069c1a861d,
+0x3c92c0b7028a5c3a, 0x3feea024b1ab6e09,
+0xbc940b9f54365b7c, 0x3feea04597eeba8f,
+0x3c909ccb5e09d4d3, 0x3feea0694fde5d3f,
+0x3c873455e0e826c1, 0x3feea08fda749e5d,
+0x3c8a30faf49cc78c, 0x3feea0b938ac1cf6,
+0x3c94f006ad874e3e, 0x3feea0e56b7fcf03,
+0xbc7b32dcb94da51d, 0x3feea11473eb0187,
+0xbc8f6d693d0973bb, 0x3feea14652e958aa,
+0xbc92dad3519d7b5b, 0x3feea17b0976cfdb,
+0x3c58c5ee2b7e7848, 0x3feea1b2988fb9ec,
+0x3c94ecfd5467c06b, 0x3feea1ed0130c132,
+0xbc88b25e045d207b, 0x3feea22a4456e7a3,
+0x3c87d51410fd15c2, 0x3feea26a62ff86f0,
+0xbc69cb3314060ca7, 0x3feea2ad5e2850ac,
+0x3c65ebe1abd66c55, 0x3feea2f336cf4e62,
+0x3c87a0b15d19e0bb, 0x3feea33bedf2e1b9,
+0xbc760a3629969871, 0x3feea3878491c491,
+0x3c94aa7212bfa73c, 0x3feea3d5fbab091f,
+0xbc88a1c52fb3cf42, 0x3feea427543e1a12,
+0xbc81e688272a8a12, 0x3feea47b8f4abaa9,
+0x3c8b18c6e3fdef5d, 0x3feea4d2add106d9,
+0x3c4ab7b7112ec9d5, 0x3feea52cb0d1736a,
+0xbc9369b6f13b3734, 0x3feea589994cce13,
+0x3c8a1e274eed4476, 0x3feea5e968443d9a,
+0x3c90ec1ddcb1390a, 0x3feea64c1eb941f7,
+0x3c94a533a59324da, 0x3feea6b1bdadb46d,
+0xbc805e843a19ff1e, 0x3feea71a4623c7ad,
+0x3c7a56d2760d087d, 0x3feea785b91e07f1,
+0xbc522cea4f3afa1e, 0x3feea7f4179f5b21,
+0x3c91682c1c6e8b05, 0x3feea86562ab00ec,
+0xbc94d450d872576e, 0x3feea8d99b4492ed,
+0x3c89ea99cf7a9591, 0x3feea950c27004c2,
+0x3c7c88549b958471, 0x3feea9cad931a436,
+0xbc59e57d8f92ff8e, 0x3feeaa47e08e1957,
+0x3c90ad675b0e8a00, 0x3feeaac7d98a6699,
+0x3c909b176e05a9cd, 0x3feeab4ac52be8f7,
+0x3c931143962f7877, 0x3feeabd0a478580f,
+0x3c711607f1952c95, 0x3feeac597875c644,
+0x3c8db72fc1f0eab4, 0x3feeace5422aa0db,
+0x3c869608f0f86431, 0x3feead74029db01e,
+0x3c93e9e96f112479, 0x3feeae05bad61778,
+0xbc7f1ced15c5c5c0, 0x3feeae9a6bdb5598,
+0xbc65b6609cc5e7ff, 0x3feeaf3216b5448c,
+0x3c614b97be3f7b4e, 0x3feeafccbc6c19e6,
+0xbc8dac42a4a38df0, 0x3feeb06a5e0866d9,
+0x3c81c1701c359530, 0x3feeb10afc931857,
+0x3c7bf68359f35f44, 0x3feeb1ae99157736,
+0xbc8edb1bf6809287, 0x3feeb2553499284b,
+0x3c8b99dd98b1ed84, 0x3feeb2fed0282c8a,
+0xbc8ba58ce7a736d3, 0x3feeb3ab6ccce12c,
+0xbc93091fa71e3d83, 0x3feeb45b0b91ffc6,
+0xbc93fc025e1db9ce, 0x3feeb50dad829e70,
+0xbc7885ad50cbb750, 0x3feeb5c353aa2fe2,
+0xbc8d737c7d71382e, 0x3feeb67bff148396,
+0xbc5da9b88b6c1e29, 0x3feeb737b0cdc5e5,
+0x3c6ae88c43905293, 0x3feeb7f669e2802b,
+0xbc82d5e85f3e0301, 0x3feeb8b82b5f98e5,
+0xbc93d1f7661fe51b, 0x3feeb97cf65253d1,
+0xbc6c23f97c90b959, 0x3feeba44cbc8520f,
+0x3c651b68797ffc1c, 0x3feebb0faccf9243,
+0xbc51669428996971, 0x3feebbdd9a7670b3,
+0x3c54579c5ceed70b, 0x3feebcae95cba768,
+0xbc92434322f4f9aa, 0x3feebd829fde4e50,
+0x3c87298413381667, 0x3feebe59b9bddb5b,
+0x3c71f2b2c1c4c014, 0x3feebf33e47a22a2,
+0xbc905000be64e965, 0x3feec01121235681,
+0xbc85ca6cd7668e4b, 0x3feec0f170ca07ba,
+0xbc89fb12e3454b73, 0x3feec1d4d47f2598,
+0xbc9294f304f166b6, 0x3feec2bb4d53fe0d,
+0x3c7be2a03697693b, 0x3feec3a4dc5a3dd3,
+0x3c71affc2b91ce27, 0x3feec49182a3f090,
+0x3c90622b15810eea, 0x3feec581414380f2,
+0xbc8a1e58414c07d3, 0x3feec674194bb8d5,
+0x3be9a5ecc875d327, 0x3feec76a0bcfc15e,
+0x3c6dd235e10a73bb, 0x3feec86319e32323,
+0x3c88ea486a3350ef, 0x3feec95f4499c647,
+0xbc79740b58a20091, 0x3feeca5e8d07f29e,
+0xbc7a2ee551d4c40f, 0x3feecb60f4424fcb,
+0xbc87c50422622263, 0x3feecc667b5de565,
+0x3c89c31f7e38028b, 0x3feecd6f23701b15,
+0x3c9165830a2b96c2, 0x3feece7aed8eb8bb,
+0xbc5fac13f4e005a3, 0x3feecf89dacfe68c,
+0x3c8b1c86e3e231d5, 0x3feed09bec4a2d33,
+0x3c7d8aced7162e89, 0x3feed1b1231475f7,
+0xbc903d5cbe27874b, 0x3feed2c980460ad8,
+0xbc848f50cea7269f, 0x3feed3e504f696b1,
+0xbc91bbd1d3bcbb15, 0x3feed503b23e255d,
+0x3c821eb9a08a0542, 0x3feed625893523d4,
+0x3c5986178980fce0, 0x3feed74a8af46052,
+0xbc6133a953131cfd, 0x3feed872b8950a73,
+0x3c90cc319cee31d2, 0x3feed99e1330b358,
+0x3c89e95e6f4a0ae4, 0x3feedacc9be14dca,
+0xbc89472975b1f2a5, 0x3feedbfe53c12e59,
+0xbc90260cf07cb311, 0x3feedd333beb0b7e,
+0x3c8469846e735ab3, 0x3feede6b5579fdbf,
+0x3c1bca400a7b939d, 0x3feedfa6a1897fd2,
+0x3c7d8157a34b7e7f, 0x3feee0e521356eba,
+0x3c9140bc34dfc19f, 0x3feee226d59a09ee,
+0xbc82dfcd978e9db4, 0x3feee36bbfd3f37a,
+0xbc8c9b1da461ab87, 0x3feee4b3e100301e,
+0x3c8c8a4e231ebb7d, 0x3feee5ff3a3c2774,
+0x3c8c115f23ebea8e, 0x3feee74dcca5a413,
+0x3c8c1a7792cb3387, 0x3feee89f995ad3ad,
+0xbc6dcab99f23f84e, 0x3feee9f4a17a4735,
+0xbc888c8d11a142e5, 0x3feeeb4ce622f2ff,
+0x3c60a43e8b7e4bfe, 0x3feeeca868742ee4,
+0xbc907b8f4ad1d9fa, 0x3feeee07298db666,
+0x3c915b1397075f04, 0x3feeef692a8fa8cd,
+0x3c889c2ea41433c7, 0x3feef0ce6c9a8952,
+0xbc839f7a1f04d2b0, 0x3feef236f0cf3f3a,
+0xbc55c3d956dcaeba, 0x3feef3a2b84f15fb,
+0xbc86a510f31e13e6, 0x3feef511c43bbd62,
+0xbc7274aedac8ff80, 0x3feef68415b749b1,
+0xbc92887ea88e7340, 0x3feef7f9ade433c6,
+0xbc90a40e3da6f640, 0x3feef9728de5593a,
+0xbc6e57ac604759ba, 0x3feefaeeb6ddfc87,
+0x3c85c620ce76df06, 0x3feefc6e29f1c52a,
+0x3c8e6c6db4f83226, 0x3feefdf0e844bfc6,
+0xbc68d6f438ad9334, 0x3feeff76f2fb5e47,
+0xbc8d1bf10460dba0, 0x3fef01004b3a7804,
+0xbc8fda52e1b51e41, 0x3fef028cf22749e4,
+0x3c8e5d80813dddfc, 0x3fef041ce8e77680,
+0xbc91eee26b588a35, 0x3fef05b030a1064a,
+0x3c8caff9640f2dcb, 0x3fef0746ca7a67a7,
+0xbc32141a7b3e2cd8, 0x3fef08e0b79a6f1f,
+0x3c7a77557fd62db3, 0x3fef0a7df9285775,
+0x3c74ffd70a5fddcd, 0x3fef0c1e904bc1d2,
+0xbc651ba6128db749, 0x3fef0dc27e2cb5e5,
+0xbc302899507554e5, 0x3fef0f69c3f3a207,
+0xbc7c0ffefdc5e251, 0x3fef111462c95b60,
+0xbc91bdfbfa9298ac, 0x3fef12c25bd71e09,
+0xbc8b6cd058bfd6fa, 0x3fef1473b0468d30,
+0xbc80dda2d4c0010c, 0x3fef16286141b33d,
+0x3c923759b8aca76d, 0x3fef17e06ff301f4,
+0x3c736eae30af0cb3, 0x3fef199bdd85529c,
+0xbc895498a73dac7d, 0x3fef1b5aab23e61e,
+0xbc8a007daadf8d68, 0x3fef1d1cd9fa652c,
+0x3c851de924583108, 0x3fef1ee26b34e065,
+0x3c8ee3325c9ffd94, 0x3fef20ab5fffd07a,
+0xbc8c5fe4051ba06c, 0x3fef2277b9881650,
+0x3c836909391181d3, 0x3fef244778fafb22,
+0xbc6d1816c0a9ac07, 0x3fef261a9f8630ad,
+0x3c84e08fd10959ac, 0x3fef27f12e57d14b,
+0xbc7af5c67c4e8235, 0x3fef29cb269e601f,
+0xbc811cd7dbdf9547, 0x3fef2ba88988c933,
+0xbc8304ef0045d575, 0x3fef2d89584661a1,
+0x3c63cdaf384e1a67, 0x3fef2f6d9406e7b5,
+0x3c8725f94f910375, 0x3fef31553dfa8313,
+0xbc7ac28b7bef6621, 0x3fef33405751c4db,
+0x3c7b53e99f9191e8, 0x3fef352ee13da7cb,
+0x3c676b2c6c921968, 0x3fef3720dcef9069,
+0xbc810a79e6d7e2b8, 0x3fef39164b994d23,
+0xbc7030587207b9e1, 0x3fef3b0f2e6d1675,
+0x3c840635f6d2a9c0, 0x3fef3d0b869d8f0f,
+0xbc808a1883ccb5d2, 0x3fef3f0b555dc3fa,
+0x3c549eeef9ec910c, 0x3fef410e9be12cb9,
+0xbc8cc734592af7fc, 0x3fef43155b5bab74,
+0xbc8335827ffb9dce, 0x3fef451f95018d17,
+0xbc8fad5d3ffffa6f, 0x3fef472d4a07897c,
+0x3c645563980ef762, 0x3fef493e7ba2c38c,
+0x3c87752a44f587e8, 0x3fef4b532b08c968,
+0xbc8cd0205eb2aab2, 0x3fef4d6b596f948c,
+0xbc900dae3875a949, 0x3fef4f87080d89f2,
+0xbc8aab80ceab2b4a, 0x3fef51a638197a3c,
+0x3c85b66fefeef52e, 0x3fef53c8eacaa1d6,
+0xbc8f870f40a8ba1b, 0x3fef55ef2158a91f,
+0x3c74a385a63d07a7, 0x3fef5818dcfba487,
+0x3c83c119f18464c5, 0x3fef5a461eec14be,
+0x3c5159d9d908a96e, 0x3fef5c76e862e6d3,
+0xbc5a628c2be4e7c7, 0x3fef5eab3a99745b,
+0xbc82919e2040220f, 0x3fef60e316c98398,
+0xbc72550d76be719a, 0x3fef631e7e2d479d,
+0x3c8c254d16117a68, 0x3fef655d71ff6075,
+0xbc82090274667d12, 0x3fef679ff37adb4a,
+0x3c8e5a50d5c192ac, 0x3fef69e603db3285,
+0x3c75f7d28150cac4, 0x3fef6c2fa45c4dfd,
+0xbc8d8c329fbd0e03, 0x3fef6e7cd63a8315,
+0x3c890de9296f4cd1, 0x3fef70cd9ab294e4,
+0x3c843a59ac016b4b, 0x3fef7321f301b460,
+0x3c832ff9978b34bc, 0x3fef7579e065807d,
+0xbc8ea6e6fbd5f2a6, 0x3fef77d5641c0658,
+0xbc7303b63dda1980, 0x3fef7a347f63c159,
+0xbc82d52107b43e1f, 0x3fef7c97337b9b5f,
+0xbc81f2ba385f2f95, 0x3fef7efd81a2ece1,
+0xbc63e8e3eab2cbb4, 0x3fef81676b197d17,
+0x3c768d9144ae12fc, 0x3fef83d4f11f8220,
+0xbc892ab93b470dc9, 0x3fef864614f5a129,
+0x3c853687f542403b, 0x3fef88bad7dcee90,
+0xbc8b7966cd0d2cd9, 0x3fef8b333b16ee12,
+0xbc736ed2de40b407, 0x3fef8daf3fe592e8,
+0x3c74b604603a88d3, 0x3fef902ee78b3ff6,
+0xbc614ef56c770f3b, 0x3fef92b2334ac7ee,
+0xbc776caa4c2ff1cf, 0x3fef953924676d76,
+0x3c8df7d1353d8e88, 0x3fef97c3bc24e350,
+0x3c83c5ec519d7271, 0x3fef9a51fbc74c83,
+0xbc850bed64091b8a, 0x3fef9ce3e4933c7e,
+0xbc81d5fc525d9940, 0x3fef9f7977cdb740,
+0x3c89d852381c317f, 0x3fefa212b6bc3181,
+0xbc8ff7128fd391f0, 0x3fefa4afa2a490da,
+0x3c68a00e3cca04c4, 0x3fefa7503ccd2be5,
+0x3c855cd8aaea3d21, 0x3fefa9f4867cca6e,
+0xbc5a1f25ce94cae7, 0x3fefac9c80faa594,
+0xbc8dae98e223747d, 0x3fefaf482d8e67f1,
+0xbc6fb5f3ee307976, 0x3fefb1f78d802dc2,
+0x3c8269947c2bed4a, 0x3fefb4aaa2188510,
+0x3c737e8ae802b851, 0x3fefb7616ca06dd6,
+0x3c8ec3bc41aa2008, 0x3fefba1bee615a27,
+0x3c875119560e34af, 0x3fefbcda28a52e59,
+0xbc83b6137e9afe9e, 0x3fefbf9c1cb6412a,
+0xbc7431c3840929c6, 0x3fefc261cbdf5be7,
+0x3c842b94c3a9eb32, 0x3fefc52b376bba97,
+0xbc8cb472d2e86b99, 0x3fefc7f860a70c22,
+0xbc69fa74878ba7c7, 0x3fefcac948dd7274,
+0x3c83f5df2fde16a8, 0x3fefcd9df15b82ac,
+0x3c8a64a931d185ee, 0x3fefd0765b6e4540,
+0x3c8eef18336b62e3, 0x3fefd35288633625,
+0x3c901f3a75ee0efe, 0x3fefd632798844f8,
+0x3c80d23f87b50a2a, 0x3fefd916302bd526,
+0xbc8e37bae43be3ed, 0x3fefdbfdad9cbe14,
+0x3c8302dee657c8e6, 0x3fefdee8f32a4b45,
+0xbc516a9ce6ed84fa, 0x3fefe1d802243c89,
+0xbc7b0caa080df170, 0x3fefe4cadbdac61d,
+0x3c77893b4d91cd9d, 0x3fefe7c1819e90d8,
+0x3c7617a9f2fd24e5, 0x3fefeabbf4c0ba54,
+0xbc699c7db2effc76, 0x3fefedba3692d514,
+0x3c75f103b8fd5ca7, 0x3feff0bc4866e8ad,
+0x3c5305c14160cc89, 0x3feff3c22b8f71f1,
+0x3c8e70b094fa075a, 0x3feff6cbe15f6314,
+0x3c64b458677f9840, 0x3feff9d96b2a23d9,
+0xbc72ec9a3e5d680a, 0x3feffceaca4391b6,
+#endif
+},
+};
diff --git a/math/expf.c b/math/expf.c
new file mode 100644
index 000000000000..9b2f0c3d8c56
--- /dev/null
+++ b/math/expf.c
@@ -0,0 +1,91 @@
+/*
+ * Single-precision e^x function.
+ *
+ * Copyright (c) 2017-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <math.h>
+#include <stdint.h>
+#include "math_config.h"
+
+/*
+EXP2F_TABLE_BITS = 5
+EXP2F_POLY_ORDER = 3
+
+ULP error: 0.502 (nearest rounding.)
+Relative error: 1.69 * 2^-34 in [-ln2/64, ln2/64] (before rounding.)
+Wrong count: 170635 (all nearest rounding wrong results with fma.)
+Non-nearest ULP error: 1 (rounded ULP error)
+*/
+
+#define N (1 << EXP2F_TABLE_BITS)
+#define InvLn2N __exp2f_data.invln2_scaled
+#define T __exp2f_data.tab
+#define C __exp2f_data.poly_scaled
+
+static inline uint32_t
+top12 (float x)
+{
+ return asuint (x) >> 20;
+}
+
+float
+expf (float x)
+{
+ uint32_t abstop;
+ uint64_t ki, t;
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t kd, xd, z, r, r2, y, s;
+
+ xd = (double_t) x;
+ abstop = top12 (x) & 0x7ff;
+ if (unlikely (abstop >= top12 (88.0f)))
+ {
+ /* |x| >= 88 or x is nan. */
+ if (asuint (x) == asuint (-INFINITY))
+ return 0.0f;
+ if (abstop >= top12 (INFINITY))
+ return x + x;
+ if (x > 0x1.62e42ep6f) /* x > log(0x1p128) ~= 88.72 */
+ return __math_oflowf (0);
+ if (x < -0x1.9fe368p6f) /* x < log(0x1p-150) ~= -103.97 */
+ return __math_uflowf (0);
+#if WANT_ERRNO_UFLOW
+ if (x < -0x1.9d1d9ep6f) /* x < log(0x1p-149) ~= -103.28 */
+ return __math_may_uflowf (0);
+#endif
+ }
+
+ /* x*N/Ln2 = k + r with r in [-1/2, 1/2] and int k. */
+ z = InvLn2N * xd;
+
+ /* Round and convert z to int, the result is in [-150*N, 128*N] and
+ ideally nearest int is used, otherwise the magnitude of r can be
+ bigger which gives larger approximation error. */
+#if TOINT_INTRINSICS
+ kd = roundtoint (z);
+ ki = converttoint (z);
+#else
+# define SHIFT __exp2f_data.shift
+ kd = eval_as_double (z + SHIFT);
+ ki = asuint64 (kd);
+ kd -= SHIFT;
+#endif
+ r = z - kd;
+
+ /* exp(x) = 2^(k/N) * 2^(r/N) ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */
+ t = T[ki % N];
+ t += ki << (52 - EXP2F_TABLE_BITS);
+ s = asdouble (t);
+ z = C[0] * r + C[1];
+ r2 = r * r;
+ y = C[2] * r + 1;
+ y = z * r2 + y;
+ y = y * s;
+ return eval_as_float (y);
+}
+#if USE_GLIBC_ABI
+strong_alias (expf, __expf_finite)
+hidden_alias (expf, __ieee754_expf)
+#endif
diff --git a/math/include/mathlib.h b/math/include/mathlib.h
new file mode 100644
index 000000000000..279d829d8ea1
--- /dev/null
+++ b/math/include/mathlib.h
@@ -0,0 +1,100 @@
+/*
+ * Public API.
+ *
+ * Copyright (c) 2015-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef _MATHLIB_H
+#define _MATHLIB_H
+
+float expf (float);
+float exp2f (float);
+float logf (float);
+float log2f (float);
+float powf (float, float);
+float sinf (float);
+float cosf (float);
+void sincosf (float, float*, float*);
+
+double exp (double);
+double exp2 (double);
+double log (double);
+double log2 (double);
+double pow (double, double);
+
+/* Scalar functions using the vector algorithm with identical result. */
+float __s_sinf (float);
+float __s_cosf (float);
+float __s_expf (float);
+float __s_expf_1u (float);
+float __s_exp2f (float);
+float __s_exp2f_1u (float);
+float __s_logf (float);
+float __s_powf (float, float);
+double __s_sin (double);
+double __s_cos (double);
+double __s_exp (double);
+double __s_log (double);
+double __s_pow (double, double);
+
+#if __aarch64__
+#if __GNUC__ >= 5
+typedef __Float32x4_t __f32x4_t;
+typedef __Float64x2_t __f64x2_t;
+#elif __clang_major__*100+__clang_minor__ >= 305
+typedef __attribute__((__neon_vector_type__(4))) float __f32x4_t;
+typedef __attribute__((__neon_vector_type__(2))) double __f64x2_t;
+#else
+#error Unsupported compiler
+#endif
+
+/* Vector functions following the base PCS. */
+__f32x4_t __v_sinf (__f32x4_t);
+__f32x4_t __v_cosf (__f32x4_t);
+__f32x4_t __v_expf (__f32x4_t);
+__f32x4_t __v_expf_1u (__f32x4_t);
+__f32x4_t __v_exp2f (__f32x4_t);
+__f32x4_t __v_exp2f_1u (__f32x4_t);
+__f32x4_t __v_logf (__f32x4_t);
+__f32x4_t __v_powf (__f32x4_t, __f32x4_t);
+__f64x2_t __v_sin (__f64x2_t);
+__f64x2_t __v_cos (__f64x2_t);
+__f64x2_t __v_exp (__f64x2_t);
+__f64x2_t __v_log (__f64x2_t);
+__f64x2_t __v_pow (__f64x2_t, __f64x2_t);
+
+#if __GNUC__ >= 9 || __clang_major__ >= 8
+#define __vpcs __attribute__((__aarch64_vector_pcs__))
+
+/* Vector functions following the vector PCS. */
+__vpcs __f32x4_t __vn_sinf (__f32x4_t);
+__vpcs __f32x4_t __vn_cosf (__f32x4_t);
+__vpcs __f32x4_t __vn_expf (__f32x4_t);
+__vpcs __f32x4_t __vn_expf_1u (__f32x4_t);
+__vpcs __f32x4_t __vn_exp2f (__f32x4_t);
+__vpcs __f32x4_t __vn_exp2f_1u (__f32x4_t);
+__vpcs __f32x4_t __vn_logf (__f32x4_t);
+__vpcs __f32x4_t __vn_powf (__f32x4_t, __f32x4_t);
+__vpcs __f64x2_t __vn_sin (__f64x2_t);
+__vpcs __f64x2_t __vn_cos (__f64x2_t);
+__vpcs __f64x2_t __vn_exp (__f64x2_t);
+__vpcs __f64x2_t __vn_log (__f64x2_t);
+__vpcs __f64x2_t __vn_pow (__f64x2_t, __f64x2_t);
+
+/* Vector functions following the vector PCS using ABI names. */
+__vpcs __f32x4_t _ZGVnN4v_sinf (__f32x4_t);
+__vpcs __f32x4_t _ZGVnN4v_cosf (__f32x4_t);
+__vpcs __f32x4_t _ZGVnN4v_expf (__f32x4_t);
+__vpcs __f32x4_t _ZGVnN4v_exp2f (__f32x4_t);
+__vpcs __f32x4_t _ZGVnN4v_logf (__f32x4_t);
+__vpcs __f32x4_t _ZGVnN4vv_powf (__f32x4_t, __f32x4_t);
+__vpcs __f64x2_t _ZGVnN2v_sin (__f64x2_t);
+__vpcs __f64x2_t _ZGVnN2v_cos (__f64x2_t);
+__vpcs __f64x2_t _ZGVnN2v_exp (__f64x2_t);
+__vpcs __f64x2_t _ZGVnN2v_log (__f64x2_t);
+__vpcs __f64x2_t _ZGVnN2vv_pow (__f64x2_t, __f64x2_t);
+#endif
+#endif
+
+#endif
diff --git a/math/log.c b/math/log.c
new file mode 100644
index 000000000000..d3b7bc60747c
--- /dev/null
+++ b/math/log.c
@@ -0,0 +1,162 @@
+/*
+ * Double-precision log(x) function.
+ *
+ * Copyright (c) 2018-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <float.h>
+#include <math.h>
+#include <stdint.h>
+#include "math_config.h"
+
+#define T __log_data.tab
+#define T2 __log_data.tab2
+#define B __log_data.poly1
+#define A __log_data.poly
+#define Ln2hi __log_data.ln2hi
+#define Ln2lo __log_data.ln2lo
+#define N (1 << LOG_TABLE_BITS)
+#define OFF 0x3fe6000000000000
+
+/* Top 16 bits of a double. */
+static inline uint32_t
+top16 (double x)
+{
+ return asuint64 (x) >> 48;
+}
+
+double
+log (double x)
+{
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t w, z, r, r2, r3, y, invc, logc, kd, hi, lo;
+ uint64_t ix, iz, tmp;
+ uint32_t top;
+ int k, i;
+
+ ix = asuint64 (x);
+ top = top16 (x);
+
+#if LOG_POLY1_ORDER == 10 || LOG_POLY1_ORDER == 11
+# define LO asuint64 (1.0 - 0x1p-5)
+# define HI asuint64 (1.0 + 0x1.1p-5)
+#elif LOG_POLY1_ORDER == 12
+# define LO asuint64 (1.0 - 0x1p-4)
+# define HI asuint64 (1.0 + 0x1.09p-4)
+#endif
+ if (unlikely (ix - LO < HI - LO))
+ {
+ /* Handle close to 1.0 inputs separately. */
+ /* Fix sign of zero with downward rounding when x==1. */
+ if (WANT_ROUNDING && unlikely (ix == asuint64 (1.0)))
+ return 0;
+ r = x - 1.0;
+ r2 = r * r;
+ r3 = r * r2;
+#if LOG_POLY1_ORDER == 10
+ /* Worst-case error is around 0.516 ULP. */
+ y = r3 * (B[1] + r * B[2] + r2 * B[3]
+ + r3 * (B[4] + r * B[5] + r2 * B[6] + r3 * (B[7] + r * B[8])));
+ w = B[0] * r2; /* B[0] == -0.5. */
+ hi = r + w;
+ y += r - hi + w;
+ y += hi;
+#elif LOG_POLY1_ORDER == 11
+ /* Worst-case error is around 0.516 ULP. */
+ y = r3 * (B[1] + r * B[2]
+ + r2 * (B[3] + r * B[4] + r2 * B[5]
+ + r3 * (B[6] + r * B[7] + r2 * B[8] + r3 * B[9])));
+ w = B[0] * r2; /* B[0] == -0.5. */
+ hi = r + w;
+ y += r - hi + w;
+ y += hi;
+#elif LOG_POLY1_ORDER == 12
+ y = r3 * (B[1] + r * B[2] + r2 * B[3]
+ + r3 * (B[4] + r * B[5] + r2 * B[6]
+ + r3 * (B[7] + r * B[8] + r2 * B[9] + r3 * B[10])));
+# if N <= 64
+ /* Worst-case error is around 0.532 ULP. */
+ w = B[0] * r2; /* B[0] == -0.5. */
+ hi = r + w;
+ y += r - hi + w;
+ y += hi;
+# else
+ /* Worst-case error is around 0.507 ULP. */
+ w = r * 0x1p27;
+ double_t rhi = r + w - w;
+ double_t rlo = r - rhi;
+ w = rhi * rhi * B[0]; /* B[0] == -0.5. */
+ hi = r + w;
+ lo = r - hi + w;
+ lo += B[0] * rlo * (rhi + r);
+ y += lo;
+ y += hi;
+# endif
+#endif
+ return eval_as_double (y);
+ }
+ if (unlikely (top - 0x0010 >= 0x7ff0 - 0x0010))
+ {
+ /* x < 0x1p-1022 or inf or nan. */
+ if (ix * 2 == 0)
+ return __math_divzero (1);
+ if (ix == asuint64 (INFINITY)) /* log(inf) == inf. */
+ return x;
+ if ((top & 0x8000) || (top & 0x7ff0) == 0x7ff0)
+ return __math_invalid (x);
+ /* x is subnormal, normalize it. */
+ ix = asuint64 (x * 0x1p52);
+ ix -= 52ULL << 52;
+ }
+
+ /* x = 2^k z; where z is in range [OFF,2*OFF) and exact.
+ The range is split into N subintervals.
+ The ith subinterval contains z and c is near its center. */
+ tmp = ix - OFF;
+ i = (tmp >> (52 - LOG_TABLE_BITS)) % N;
+ k = (int64_t) tmp >> 52; /* arithmetic shift */
+ iz = ix - (tmp & 0xfffULL << 52);
+ invc = T[i].invc;
+ logc = T[i].logc;
+ z = asdouble (iz);
+
+ /* log(x) = log1p(z/c-1) + log(c) + k*Ln2. */
+ /* r ~= z/c - 1, |r| < 1/(2*N). */
+#if HAVE_FAST_FMA
+ /* rounding error: 0x1p-55/N. */
+ r = fma (z, invc, -1.0);
+#else
+ /* rounding error: 0x1p-55/N + 0x1p-66. */
+ r = (z - T2[i].chi - T2[i].clo) * invc;
+#endif
+ kd = (double_t) k;
+
+ /* hi + lo = r + log(c) + k*Ln2. */
+ w = kd * Ln2hi + logc;
+ hi = w + r;
+ lo = w - hi + r + kd * Ln2lo;
+
+ /* log(x) = lo + (log1p(r) - r) + hi. */
+ r2 = r * r; /* rounding error: 0x1p-54/N^2. */
+ /* Worst case error if |y| > 0x1p-5:
+ 0.5 + 4.13/N + abs-poly-error*2^57 ULP (+ 0.002 ULP without fma)
+ Worst case error if |y| > 0x1p-4:
+ 0.5 + 2.06/N + abs-poly-error*2^56 ULP (+ 0.001 ULP without fma). */
+#if LOG_POLY_ORDER == 6
+ y = lo + r2 * A[0] + r * r2 * (A[1] + r * A[2] + r2 * (A[3] + r * A[4])) + hi;
+#elif LOG_POLY_ORDER == 7
+ y = lo
+ + r2 * (A[0] + r * A[1] + r2 * (A[2] + r * A[3])
+ + r2 * r2 * (A[4] + r * A[5]))
+ + hi;
+#endif
+ return eval_as_double (y);
+}
+#if USE_GLIBC_ABI
+strong_alias (log, __log_finite)
+hidden_alias (log, __ieee754_log)
+# if LDBL_MANT_DIG == 53
+long double logl (long double x) { return log (x); }
+# endif
+#endif
diff --git a/math/log2.c b/math/log2.c
new file mode 100644
index 000000000000..55102b772969
--- /dev/null
+++ b/math/log2.c
@@ -0,0 +1,141 @@
+/*
+ * Double-precision log2(x) function.
+ *
+ * Copyright (c) 2018-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <float.h>
+#include <math.h>
+#include <stdint.h>
+#include "math_config.h"
+
+#define T __log2_data.tab
+#define T2 __log2_data.tab2
+#define B __log2_data.poly1
+#define A __log2_data.poly
+#define InvLn2hi __log2_data.invln2hi
+#define InvLn2lo __log2_data.invln2lo
+#define N (1 << LOG2_TABLE_BITS)
+#define OFF 0x3fe6000000000000
+
+/* Top 16 bits of a double. */
+static inline uint32_t
+top16 (double x)
+{
+ return asuint64 (x) >> 48;
+}
+
+double
+log2 (double x)
+{
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t z, r, r2, r4, y, invc, logc, kd, hi, lo, t1, t2, t3, p;
+ uint64_t ix, iz, tmp;
+ uint32_t top;
+ int k, i;
+
+ ix = asuint64 (x);
+ top = top16 (x);
+
+#if LOG2_POLY1_ORDER == 11
+# define LO asuint64 (1.0 - 0x1.5b51p-5)
+# define HI asuint64 (1.0 + 0x1.6ab2p-5)
+#endif
+ if (unlikely (ix - LO < HI - LO))
+ {
+ /* Handle close to 1.0 inputs separately. */
+ /* Fix sign of zero with downward rounding when x==1. */
+ if (WANT_ROUNDING && unlikely (ix == asuint64 (1.0)))
+ return 0;
+ r = x - 1.0;
+#if HAVE_FAST_FMA
+ hi = r * InvLn2hi;
+ lo = r * InvLn2lo + fma (r, InvLn2hi, -hi);
+#else
+ double_t rhi, rlo;
+ rhi = asdouble (asuint64 (r) & -1ULL << 32);
+ rlo = r - rhi;
+ hi = rhi * InvLn2hi;
+ lo = rlo * InvLn2hi + r * InvLn2lo;
+#endif
+ r2 = r * r; /* rounding error: 0x1p-62. */
+ r4 = r2 * r2;
+#if LOG2_POLY1_ORDER == 11
+ /* Worst-case error is less than 0.54 ULP (0.55 ULP without fma). */
+ p = r2 * (B[0] + r * B[1]);
+ y = hi + p;
+ lo += hi - y + p;
+ lo += r4 * (B[2] + r * B[3] + r2 * (B[4] + r * B[5])
+ + r4 * (B[6] + r * B[7] + r2 * (B[8] + r * B[9])));
+ y += lo;
+#endif
+ return eval_as_double (y);
+ }
+ if (unlikely (top - 0x0010 >= 0x7ff0 - 0x0010))
+ {
+ /* x < 0x1p-1022 or inf or nan. */
+ if (ix * 2 == 0)
+ return __math_divzero (1);
+ if (ix == asuint64 (INFINITY)) /* log(inf) == inf. */
+ return x;
+ if ((top & 0x8000) || (top & 0x7ff0) == 0x7ff0)
+ return __math_invalid (x);
+ /* x is subnormal, normalize it. */
+ ix = asuint64 (x * 0x1p52);
+ ix -= 52ULL << 52;
+ }
+
+ /* x = 2^k z; where z is in range [OFF,2*OFF) and exact.
+ The range is split into N subintervals.
+ The ith subinterval contains z and c is near its center. */
+ tmp = ix - OFF;
+ i = (tmp >> (52 - LOG2_TABLE_BITS)) % N;
+ k = (int64_t) tmp >> 52; /* arithmetic shift */
+ iz = ix - (tmp & 0xfffULL << 52);
+ invc = T[i].invc;
+ logc = T[i].logc;
+ z = asdouble (iz);
+ kd = (double_t) k;
+
+ /* log2(x) = log2(z/c) + log2(c) + k. */
+ /* r ~= z/c - 1, |r| < 1/(2*N). */
+#if HAVE_FAST_FMA
+ /* rounding error: 0x1p-55/N. */
+ r = fma (z, invc, -1.0);
+ t1 = r * InvLn2hi;
+ t2 = r * InvLn2lo + fma (r, InvLn2hi, -t1);
+#else
+ double_t rhi, rlo;
+ /* rounding error: 0x1p-55/N + 0x1p-65. */
+ r = (z - T2[i].chi - T2[i].clo) * invc;
+ rhi = asdouble (asuint64 (r) & -1ULL << 32);
+ rlo = r - rhi;
+ t1 = rhi * InvLn2hi;
+ t2 = rlo * InvLn2hi + r * InvLn2lo;
+#endif
+
+ /* hi + lo = r/ln2 + log2(c) + k. */
+ t3 = kd + logc;
+ hi = t3 + t1;
+ lo = t3 - hi + t1 + t2;
+
+ /* log2(r+1) = r/ln2 + r^2*poly(r). */
+ /* Evaluation is optimized assuming superscalar pipelined execution. */
+ r2 = r * r; /* rounding error: 0x1p-54/N^2. */
+ r4 = r2 * r2;
+#if LOG2_POLY_ORDER == 7
+ /* Worst-case error if |y| > 0x1p-4: 0.547 ULP (0.550 ULP without fma).
+ ~ 0.5 + 2/N/ln2 + abs-poly-error*0x1p56 ULP (+ 0.003 ULP without fma). */
+ p = A[0] + r * A[1] + r2 * (A[2] + r * A[3]) + r4 * (A[4] + r * A[5]);
+ y = lo + r2 * p + hi;
+#endif
+ return eval_as_double (y);
+}
+#if USE_GLIBC_ABI
+strong_alias (log2, __log2_finite)
+hidden_alias (log2, __ieee754_log2)
+# if LDBL_MANT_DIG == 53
+long double log2l (long double x) { return log2 (x); }
+# endif
+#endif
diff --git a/math/log2_data.c b/math/log2_data.c
new file mode 100644
index 000000000000..3fc9b47c1f03
--- /dev/null
+++ b/math/log2_data.c
@@ -0,0 +1,209 @@
+/*
+ * Data for log2.
+ *
+ * Copyright (c) 2018, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+#define N (1 << LOG2_TABLE_BITS)
+
+const struct log2_data __log2_data = {
+// First coefficient: 0x1.71547652b82fe1777d0ffda0d24p0
+.invln2hi = 0x1.7154765200000p+0,
+.invln2lo = 0x1.705fc2eefa200p-33,
+.poly1 = {
+#if LOG2_POLY1_ORDER == 11
+// relative error: 0x1.2fad8188p-63
+// in -0x1.5b51p-5 0x1.6ab2p-5
+-0x1.71547652b82fep-1,
+0x1.ec709dc3a03f7p-2,
+-0x1.71547652b7c3fp-2,
+0x1.2776c50f05be4p-2,
+-0x1.ec709dd768fe5p-3,
+0x1.a61761ec4e736p-3,
+-0x1.7153fbc64a79bp-3,
+0x1.484d154f01b4ap-3,
+-0x1.289e4a72c383cp-3,
+0x1.0b32f285aee66p-3,
+#endif
+},
+.poly = {
+#if N == 64 && LOG2_POLY_ORDER == 7
+// relative error: 0x1.a72c2bf8p-58
+// abs error: 0x1.67a552c8p-66
+// in -0x1.f45p-8 0x1.f45p-8
+-0x1.71547652b8339p-1,
+0x1.ec709dc3a04bep-2,
+-0x1.7154764702ffbp-2,
+0x1.2776c50034c48p-2,
+-0x1.ec7b328ea92bcp-3,
+0x1.a6225e117f92ep-3,
+#endif
+},
+/* Algorithm:
+
+ x = 2^k z
+ log2(x) = k + log2(c) + log2(z/c)
+ log2(z/c) = poly(z/c - 1)
+
+where z is in [1.6p-1; 1.6p0] which is split into N subintervals and z falls
+into the ith one, then table entries are computed as
+
+ tab[i].invc = 1/c
+ tab[i].logc = (double)log2(c)
+ tab2[i].chi = (double)c
+ tab2[i].clo = (double)(c - (double)c)
+
+where c is near the center of the subinterval and is chosen by trying +-2^29
+floating point invc candidates around 1/center and selecting one for which
+
+ 1) the rounding error in 0x1.8p10 + logc is 0,
+ 2) the rounding error in z - chi - clo is < 0x1p-64 and
+ 3) the rounding error in (double)log2(c) is minimized (< 0x1p-68).
+
+Note: 1) ensures that k + logc can be computed without rounding error, 2)
+ensures that z/c - 1 can be computed as (z - chi - clo)*invc with close to a
+single rounding error when there is no fast fma for z*invc - 1, 3) ensures
+that logc + poly(z/c - 1) has small error, however near x == 1 when
+|log2(x)| < 0x1p-4, this is not enough so that is special cased. */
+.tab = {
+#if N == 64
+{0x1.724286bb1acf8p+0, -0x1.1095feecdb000p-1},
+{0x1.6e1f766d2cca1p+0, -0x1.08494bd76d000p-1},
+{0x1.6a13d0e30d48ap+0, -0x1.00143aee8f800p-1},
+{0x1.661ec32d06c85p+0, -0x1.efec5360b4000p-2},
+{0x1.623fa951198f8p+0, -0x1.dfdd91ab7e000p-2},
+{0x1.5e75ba4cf026cp+0, -0x1.cffae0cc79000p-2},
+{0x1.5ac055a214fb8p+0, -0x1.c043811fda000p-2},
+{0x1.571ed0f166e1ep+0, -0x1.b0b67323ae000p-2},
+{0x1.53909590bf835p+0, -0x1.a152f5a2db000p-2},
+{0x1.5014fed61adddp+0, -0x1.9217f5af86000p-2},
+{0x1.4cab88e487bd0p+0, -0x1.8304db0719000p-2},
+{0x1.49539b4334feep+0, -0x1.74189f9a9e000p-2},
+{0x1.460cbdfafd569p+0, -0x1.6552bb5199000p-2},
+{0x1.42d664ee4b953p+0, -0x1.56b23a29b1000p-2},
+{0x1.3fb01111dd8a6p+0, -0x1.483650f5fa000p-2},
+{0x1.3c995b70c5836p+0, -0x1.39de937f6a000p-2},
+{0x1.3991c4ab6fd4ap+0, -0x1.2baa1538d6000p-2},
+{0x1.3698e0ce099b5p+0, -0x1.1d98340ca4000p-2},
+{0x1.33ae48213e7b2p+0, -0x1.0fa853a40e000p-2},
+{0x1.30d191985bdb1p+0, -0x1.01d9c32e73000p-2},
+{0x1.2e025cab271d7p+0, -0x1.e857da2fa6000p-3},
+{0x1.2b404cf13cd82p+0, -0x1.cd3c8633d8000p-3},
+{0x1.288b02c7ccb50p+0, -0x1.b26034c14a000p-3},
+{0x1.25e2263944de5p+0, -0x1.97c1c2f4fe000p-3},
+{0x1.234563d8615b1p+0, -0x1.7d6023f800000p-3},
+{0x1.20b46e33eaf38p+0, -0x1.633a71a05e000p-3},
+{0x1.1e2eefdcda3ddp+0, -0x1.494f5e9570000p-3},
+{0x1.1bb4a580b3930p+0, -0x1.2f9e424e0a000p-3},
+{0x1.19453847f2200p+0, -0x1.162595afdc000p-3},
+{0x1.16e06c0d5d73cp+0, -0x1.f9c9a75bd8000p-4},
+{0x1.1485f47b7e4c2p+0, -0x1.c7b575bf9c000p-4},
+{0x1.12358ad0085d1p+0, -0x1.960c60ff48000p-4},
+{0x1.0fef00f532227p+0, -0x1.64ce247b60000p-4},
+{0x1.0db2077d03a8fp+0, -0x1.33f78b2014000p-4},
+{0x1.0b7e6d65980d9p+0, -0x1.0387d1a42c000p-4},
+{0x1.0953efe7b408dp+0, -0x1.a6f9208b50000p-5},
+{0x1.07325cac53b83p+0, -0x1.47a954f770000p-5},
+{0x1.05197e40d1b5cp+0, -0x1.d23a8c50c0000p-6},
+{0x1.03091c1208ea2p+0, -0x1.16a2629780000p-6},
+{0x1.0101025b37e21p+0, -0x1.720f8d8e80000p-8},
+{0x1.fc07ef9caa76bp-1, 0x1.6fe53b1500000p-7},
+{0x1.f4465d3f6f184p-1, 0x1.11ccce10f8000p-5},
+{0x1.ecc079f84107fp-1, 0x1.c4dfc8c8b8000p-5},
+{0x1.e573a99975ae8p-1, 0x1.3aa321e574000p-4},
+{0x1.de5d6f0bd3de6p-1, 0x1.918a0d08b8000p-4},
+{0x1.d77b681ff38b3p-1, 0x1.e72e9da044000p-4},
+{0x1.d0cb5724de943p-1, 0x1.1dcd2507f6000p-3},
+{0x1.ca4b2dc0e7563p-1, 0x1.476ab03dea000p-3},
+{0x1.c3f8ee8d6cb51p-1, 0x1.7074377e22000p-3},
+{0x1.bdd2b4f020c4cp-1, 0x1.98ede8ba94000p-3},
+{0x1.b7d6c006015cap-1, 0x1.c0db86ad2e000p-3},
+{0x1.b20366e2e338fp-1, 0x1.e840aafcee000p-3},
+{0x1.ac57026295039p-1, 0x1.0790ab4678000p-2},
+{0x1.a6d01bc2731ddp-1, 0x1.1ac056801c000p-2},
+{0x1.a16d3bc3ff18bp-1, 0x1.2db11d4fee000p-2},
+{0x1.9c2d14967feadp-1, 0x1.406464ec58000p-2},
+{0x1.970e4f47c9902p-1, 0x1.52dbe093af000p-2},
+{0x1.920fb3982bcf2p-1, 0x1.651902050d000p-2},
+{0x1.8d30187f759f1p-1, 0x1.771d2cdeaf000p-2},
+{0x1.886e5ebb9f66dp-1, 0x1.88e9c857d9000p-2},
+{0x1.83c97b658b994p-1, 0x1.9a80155e16000p-2},
+{0x1.7f405ffc61022p-1, 0x1.abe186ed3d000p-2},
+{0x1.7ad22181415cap-1, 0x1.bd0f2aea0e000p-2},
+{0x1.767dcf99eff8cp-1, 0x1.ce0a43dbf4000p-2},
+#endif
+},
+#if !HAVE_FAST_FMA
+.tab2 = {
+# if N == 64
+{0x1.6200012b90a8ep-1, 0x1.904ab0644b605p-55},
+{0x1.66000045734a6p-1, 0x1.1ff9bea62f7a9p-57},
+{0x1.69fffc325f2c5p-1, 0x1.27ecfcb3c90bap-55},
+{0x1.6e00038b95a04p-1, 0x1.8ff8856739326p-55},
+{0x1.71fffe09994e3p-1, 0x1.afd40275f82b1p-55},
+{0x1.7600015590e1p-1, -0x1.2fd75b4238341p-56},
+{0x1.7a00012655bd5p-1, 0x1.808e67c242b76p-56},
+{0x1.7e0003259e9a6p-1, -0x1.208e426f622b7p-57},
+{0x1.81fffedb4b2d2p-1, -0x1.402461ea5c92fp-55},
+{0x1.860002dfafcc3p-1, 0x1.df7f4a2f29a1fp-57},
+{0x1.89ffff78c6b5p-1, -0x1.e0453094995fdp-55},
+{0x1.8e00039671566p-1, -0x1.a04f3bec77b45p-55},
+{0x1.91fffe2bf1745p-1, -0x1.7fa34400e203cp-56},
+{0x1.95fffcc5c9fd1p-1, -0x1.6ff8005a0695dp-56},
+{0x1.9a0003bba4767p-1, 0x1.0f8c4c4ec7e03p-56},
+{0x1.9dfffe7b92da5p-1, 0x1.e7fd9478c4602p-55},
+{0x1.a1fffd72efdafp-1, -0x1.a0c554dcdae7ep-57},
+{0x1.a5fffde04ff95p-1, 0x1.67da98ce9b26bp-55},
+{0x1.a9fffca5e8d2bp-1, -0x1.284c9b54c13dep-55},
+{0x1.adfffddad03eap-1, 0x1.812c8ea602e3cp-58},
+{0x1.b1ffff10d3d4dp-1, -0x1.efaddad27789cp-55},
+{0x1.b5fffce21165ap-1, 0x1.3cb1719c61237p-58},
+{0x1.b9fffd950e674p-1, 0x1.3f7d94194cep-56},
+{0x1.be000139ca8afp-1, 0x1.50ac4215d9bcp-56},
+{0x1.c20005b46df99p-1, 0x1.beea653e9c1c9p-57},
+{0x1.c600040b9f7aep-1, -0x1.c079f274a70d6p-56},
+{0x1.ca0006255fd8ap-1, -0x1.a0b4076e84c1fp-56},
+{0x1.cdfffd94c095dp-1, 0x1.8f933f99ab5d7p-55},
+{0x1.d1ffff975d6cfp-1, -0x1.82c08665fe1bep-58},
+{0x1.d5fffa2561c93p-1, -0x1.b04289bd295f3p-56},
+{0x1.d9fff9d228b0cp-1, 0x1.70251340fa236p-55},
+{0x1.de00065bc7e16p-1, -0x1.5011e16a4d80cp-56},
+{0x1.e200002f64791p-1, 0x1.9802f09ef62ep-55},
+{0x1.e600057d7a6d8p-1, -0x1.e0b75580cf7fap-56},
+{0x1.ea00027edc00cp-1, -0x1.c848309459811p-55},
+{0x1.ee0006cf5cb7cp-1, -0x1.f8027951576f4p-55},
+{0x1.f2000782b7dccp-1, -0x1.f81d97274538fp-55},
+{0x1.f6000260c450ap-1, -0x1.071002727ffdcp-59},
+{0x1.f9fffe88cd533p-1, -0x1.81bdce1fda8bp-58},
+{0x1.fdfffd50f8689p-1, 0x1.7f91acb918e6ep-55},
+{0x1.0200004292367p+0, 0x1.b7ff365324681p-54},
+{0x1.05fffe3e3d668p+0, 0x1.6fa08ddae957bp-55},
+{0x1.0a0000a85a757p+0, -0x1.7e2de80d3fb91p-58},
+{0x1.0e0001a5f3fccp+0, -0x1.1823305c5f014p-54},
+{0x1.11ffff8afbaf5p+0, -0x1.bfabb6680bac2p-55},
+{0x1.15fffe54d91adp+0, -0x1.d7f121737e7efp-54},
+{0x1.1a00011ac36e1p+0, 0x1.c000a0516f5ffp-54},
+{0x1.1e00019c84248p+0, -0x1.082fbe4da5dap-54},
+{0x1.220000ffe5e6ep+0, -0x1.8fdd04c9cfb43p-55},
+{0x1.26000269fd891p+0, 0x1.cfe2a7994d182p-55},
+{0x1.2a00029a6e6dap+0, -0x1.00273715e8bc5p-56},
+{0x1.2dfffe0293e39p+0, 0x1.b7c39dab2a6f9p-54},
+{0x1.31ffff7dcf082p+0, 0x1.df1336edc5254p-56},
+{0x1.35ffff05a8b6p+0, -0x1.e03564ccd31ebp-54},
+{0x1.3a0002e0eaeccp+0, 0x1.5f0e74bd3a477p-56},
+{0x1.3e000043bb236p+0, 0x1.c7dcb149d8833p-54},
+{0x1.4200002d187ffp+0, 0x1.e08afcf2d3d28p-56},
+{0x1.460000d387cb1p+0, 0x1.20837856599a6p-55},
+{0x1.4a00004569f89p+0, -0x1.9fa5c904fbcd2p-55},
+{0x1.4e000043543f3p+0, -0x1.81125ed175329p-56},
+{0x1.51fffcc027f0fp+0, 0x1.883d8847754dcp-54},
+{0x1.55ffffd87b36fp+0, -0x1.709e731d02807p-55},
+{0x1.59ffff21df7bap+0, 0x1.7f79f68727b02p-55},
+{0x1.5dfffebfc3481p+0, -0x1.180902e30e93ep-54},
+# endif
+},
+#endif /* !HAVE_FAST_FMA */
+};
diff --git a/math/log2f.c b/math/log2f.c
new file mode 100644
index 000000000000..acb629e6846c
--- /dev/null
+++ b/math/log2f.c
@@ -0,0 +1,80 @@
+/*
+ * Single-precision log2 function.
+ *
+ * Copyright (c) 2017-2018, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <math.h>
+#include <stdint.h>
+#include "math_config.h"
+
+/*
+LOG2F_TABLE_BITS = 4
+LOG2F_POLY_ORDER = 4
+
+ULP error: 0.752 (nearest rounding.)
+Relative error: 1.9 * 2^-26 (before rounding.)
+*/
+
+#define N (1 << LOG2F_TABLE_BITS)
+#define T __log2f_data.tab
+#define A __log2f_data.poly
+#define OFF 0x3f330000
+
+float
+log2f (float x)
+{
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t z, r, r2, p, y, y0, invc, logc;
+ uint32_t ix, iz, top, tmp;
+ int k, i;
+
+ ix = asuint (x);
+#if WANT_ROUNDING
+ /* Fix sign of zero with downward rounding when x==1. */
+ if (unlikely (ix == 0x3f800000))
+ return 0;
+#endif
+ if (unlikely (ix - 0x00800000 >= 0x7f800000 - 0x00800000))
+ {
+ /* x < 0x1p-126 or inf or nan. */
+ if (ix * 2 == 0)
+ return __math_divzerof (1);
+ if (ix == 0x7f800000) /* log2(inf) == inf. */
+ return x;
+ if ((ix & 0x80000000) || ix * 2 >= 0xff000000)
+ return __math_invalidf (x);
+ /* x is subnormal, normalize it. */
+ ix = asuint (x * 0x1p23f);
+ ix -= 23 << 23;
+ }
+
+ /* x = 2^k z; where z is in range [OFF,2*OFF] and exact.
+ The range is split into N subintervals.
+ The ith subinterval contains z and c is near its center. */
+ tmp = ix - OFF;
+ i = (tmp >> (23 - LOG2F_TABLE_BITS)) % N;
+ top = tmp & 0xff800000;
+ iz = ix - top;
+ k = (int32_t) tmp >> 23; /* arithmetic shift */
+ invc = T[i].invc;
+ logc = T[i].logc;
+ z = (double_t) asfloat (iz);
+
+ /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */
+ r = z * invc - 1;
+ y0 = logc + (double_t) k;
+
+ /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */
+ r2 = r * r;
+ y = A[1] * r + A[2];
+ y = A[0] * r2 + y;
+ p = A[3] * r + y0;
+ y = y * r2 + p;
+ return eval_as_float (y);
+}
+#if USE_GLIBC_ABI
+strong_alias (log2f, __log2f_finite)
+hidden_alias (log2f, __ieee754_log2f)
+#endif
diff --git a/math/log2f_data.c b/math/log2f_data.c
new file mode 100644
index 000000000000..f3546d730aba
--- /dev/null
+++ b/math/log2f_data.c
@@ -0,0 +1,33 @@
+/*
+ * Data definition for log2f.
+ *
+ * Copyright (c) 2017-2018, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+const struct log2f_data __log2f_data = {
+ .tab = {
+ { 0x1.661ec79f8f3bep+0, -0x1.efec65b963019p-2 },
+ { 0x1.571ed4aaf883dp+0, -0x1.b0b6832d4fca4p-2 },
+ { 0x1.49539f0f010bp+0, -0x1.7418b0a1fb77bp-2 },
+ { 0x1.3c995b0b80385p+0, -0x1.39de91a6dcf7bp-2 },
+ { 0x1.30d190c8864a5p+0, -0x1.01d9bf3f2b631p-2 },
+ { 0x1.25e227b0b8eap+0, -0x1.97c1d1b3b7afp-3 },
+ { 0x1.1bb4a4a1a343fp+0, -0x1.2f9e393af3c9fp-3 },
+ { 0x1.12358f08ae5bap+0, -0x1.960cbbf788d5cp-4 },
+ { 0x1.0953f419900a7p+0, -0x1.a6f9db6475fcep-5 },
+ { 0x1p+0, 0x0p+0 },
+ { 0x1.e608cfd9a47acp-1, 0x1.338ca9f24f53dp-4 },
+ { 0x1.ca4b31f026aap-1, 0x1.476a9543891bap-3 },
+ { 0x1.b2036576afce6p-1, 0x1.e840b4ac4e4d2p-3 },
+ { 0x1.9c2d163a1aa2dp-1, 0x1.40645f0c6651cp-2 },
+ { 0x1.886e6037841edp-1, 0x1.88e9c2c1b9ff8p-2 },
+ { 0x1.767dcf5534862p-1, 0x1.ce0a44eb17bccp-2 },
+ },
+ .poly = {
+ -0x1.712b6f70a7e4dp-2, 0x1.ecabf496832ep-2, -0x1.715479ffae3dep-1,
+ 0x1.715475f35c8b8p0,
+ }
+};
diff --git a/math/log_data.c b/math/log_data.c
new file mode 100644
index 000000000000..96a098d42c16
--- /dev/null
+++ b/math/log_data.c
@@ -0,0 +1,511 @@
+/*
+ * Data for log.
+ *
+ * Copyright (c) 2018, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+#define N (1 << LOG_TABLE_BITS)
+
+const struct log_data __log_data = {
+.ln2hi = 0x1.62e42fefa3800p-1,
+.ln2lo = 0x1.ef35793c76730p-45,
+.poly1 = {
+#if LOG_POLY1_ORDER == 10
+// relative error: 0x1.32eccc6p-62
+// in -0x1p-5 0x1.1p-5 (|log(1+x)| > 0x1p-5 outside this interval)
+-0x1p-1,
+0x1.55555555554e5p-2,
+-0x1.0000000000af2p-2,
+0x1.9999999bbe436p-3,
+-0x1.55555537f9cdep-3,
+0x1.24922fc8127cfp-3,
+-0x1.0000b7d6bb612p-3,
+0x1.c806ee1ddbcafp-4,
+-0x1.972335a9c2d6ep-4,
+#elif LOG_POLY1_ORDER == 11
+// relative error: 0x1.52c8b708p-68
+// in -0x1p-5 0x1.1p-5 (|log(1+x)| > 0x1p-5 outside this interval)
+-0x1p-1,
+0x1.5555555555555p-2,
+-0x1.ffffffffffea9p-3,
+0x1.999999999c4d4p-3,
+-0x1.55555557f5541p-3,
+0x1.249248fbe33e4p-3,
+-0x1.ffffc9a3c825bp-4,
+0x1.c71e1f204435dp-4,
+-0x1.9a7f26377d06ep-4,
+0x1.71c30cf8f7364p-4,
+#elif LOG_POLY1_ORDER == 12
+// relative error: 0x1.c04d76cp-63
+// in -0x1p-4 0x1.09p-4 (|log(1+x)| > 0x1p-4 outside the interval)
+-0x1p-1,
+0x1.5555555555577p-2,
+-0x1.ffffffffffdcbp-3,
+0x1.999999995dd0cp-3,
+-0x1.55555556745a7p-3,
+0x1.24924a344de3p-3,
+-0x1.fffffa4423d65p-4,
+0x1.c7184282ad6cap-4,
+-0x1.999eb43b068ffp-4,
+0x1.78182f7afd085p-4,
+-0x1.5521375d145cdp-4,
+#endif
+},
+.poly = {
+#if N == 64 && LOG_POLY_ORDER == 7
+// relative error: 0x1.906eb8ap-58
+// abs error: 0x1.d2cad5a8p-67
+// in -0x1.fp-8 0x1.fp-8
+-0x1.0000000000027p-1,
+0x1.555555555556ap-2,
+-0x1.fffffff0440bap-3,
+0x1.99999991906c3p-3,
+-0x1.555c8d7e8201ep-3,
+0x1.24978c59151fap-3,
+#elif N == 128 && LOG_POLY_ORDER == 6
+// relative error: 0x1.926199e8p-56
+// abs error: 0x1.882ff33p-65
+// in -0x1.fp-9 0x1.fp-9
+-0x1.0000000000001p-1,
+0x1.555555551305bp-2,
+-0x1.fffffffeb459p-3,
+0x1.999b324f10111p-3,
+-0x1.55575e506c89fp-3,
+#elif N == 128 && LOG_POLY_ORDER == 7
+// relative error: 0x1.649fc4bp-64
+// abs error: 0x1.c3b5769p-74
+// in -0x1.fp-9 0x1.fp-9
+-0x1.0000000000001p-1,
+0x1.5555555555556p-2,
+-0x1.fffffffea1a8p-3,
+0x1.99999998e9139p-3,
+-0x1.555776801b968p-3,
+0x1.2493c29331a5cp-3,
+#endif
+},
+/* Algorithm:
+
+ x = 2^k z
+ log(x) = k ln2 + log(c) + log(z/c)
+ log(z/c) = poly(z/c - 1)
+
+where z is in [1.6p-1; 1.6p0] which is split into N subintervals and z falls
+into the ith one, then table entries are computed as
+
+ tab[i].invc = 1/c
+ tab[i].logc = (double)log(c)
+ tab2[i].chi = (double)c
+ tab2[i].clo = (double)(c - (double)c)
+
+where c is near the center of the subinterval and is chosen by trying +-2^29
+floating point invc candidates around 1/center and selecting one for which
+
+ 1) the rounding error in 0x1.8p9 + logc is 0,
+ 2) the rounding error in z - chi - clo is < 0x1p-66 and
+ 3) the rounding error in (double)log(c) is minimized (< 0x1p-66).
+
+Note: 1) ensures that k*ln2hi + logc can be computed without rounding error,
+2) ensures that z/c - 1 can be computed as (z - chi - clo)*invc with close to
+a single rounding error when there is no fast fma for z*invc - 1, 3) ensures
+that logc + poly(z/c - 1) has small error, however near x == 1 when
+|log(x)| < 0x1p-4, this is not enough so that is special cased. */
+.tab = {
+#if N == 64
+{0x1.7242886495cd8p+0, -0x1.79e267bdfe000p-2},
+{0x1.6e1f769340dc9p+0, -0x1.6e60ee0ecb000p-2},
+{0x1.6a13ccc8f195cp+0, -0x1.63002fdbf6000p-2},
+{0x1.661ec72e86f3ap+0, -0x1.57bf76c597000p-2},
+{0x1.623fa6c447b16p+0, -0x1.4c9e07f0d2000p-2},
+{0x1.5e75bbca31702p+0, -0x1.419b42f027000p-2},
+{0x1.5ac05655adb10p+0, -0x1.36b67660e6000p-2},
+{0x1.571ed3e940191p+0, -0x1.2bef0839e4800p-2},
+{0x1.539094ac0fbbfp+0, -0x1.21445727cb000p-2},
+{0x1.5015007e7fc42p+0, -0x1.16b5ca3c3d000p-2},
+{0x1.4cab877c31cf9p+0, -0x1.0c42d3805f800p-2},
+{0x1.49539e76a88d3p+0, -0x1.01eae61b60800p-2},
+{0x1.460cbc12211dap+0, -0x1.ef5adb9fb0000p-3},
+{0x1.42d6624debe3ap+0, -0x1.db13daab99000p-3},
+{0x1.3fb0144f0d462p+0, -0x1.c6ffbe896e000p-3},
+{0x1.3c995a1f9a9b4p+0, -0x1.b31d84722d000p-3},
+{0x1.3991c23952500p+0, -0x1.9f6c3cf6eb000p-3},
+{0x1.3698df35eaa14p+0, -0x1.8beafe7f13000p-3},
+{0x1.33ae463091760p+0, -0x1.7898db878d000p-3},
+{0x1.30d190aae3d72p+0, -0x1.6574efe4ec000p-3},
+{0x1.2e025c9203c89p+0, -0x1.527e620845000p-3},
+{0x1.2b404a7244988p+0, -0x1.3fb457d798000p-3},
+{0x1.288b01dc19544p+0, -0x1.2d1615a077000p-3},
+{0x1.25e2268085f69p+0, -0x1.1aa2b431e5000p-3},
+{0x1.23456812abb74p+0, -0x1.08598f1d2b000p-3},
+{0x1.20b4703174157p+0, -0x1.ec738fee40000p-4},
+{0x1.1e2ef308b4e9bp+0, -0x1.c885768862000p-4},
+{0x1.1bb4a36b70a3fp+0, -0x1.a4e75b6a46000p-4},
+{0x1.194538e960658p+0, -0x1.8197efba9a000p-4},
+{0x1.16e0692a10ac8p+0, -0x1.5e95ad734e000p-4},
+{0x1.1485f1ba1568bp+0, -0x1.3bdf67117c000p-4},
+{0x1.12358e123ed6fp+0, -0x1.1973b744f0000p-4},
+{0x1.0fef01de37c8dp+0, -0x1.eea33446bc000p-5},
+{0x1.0db20b82be414p+0, -0x1.aaef4ab304000p-5},
+{0x1.0b7e6f67f69b3p+0, -0x1.67c962fd2c000p-5},
+{0x1.0953f342fc108p+0, -0x1.252f29acf8000p-5},
+{0x1.0732604ec956bp+0, -0x1.c63d19e9c0000p-6},
+{0x1.051980117f9b0p+0, -0x1.432ab6a388000p-6},
+{0x1.03091aa6810f1p+0, -0x1.8244357f50000p-7},
+{0x1.01010152cf066p+0, -0x1.0080a711c0000p-8},
+{0x1.fc07ef6b6e30bp-1, 0x1.fe03018e80000p-8},
+{0x1.f4465aa1024afp-1, 0x1.7b91986450000p-6},
+{0x1.ecc07a8fd3f5ep-1, 0x1.39e88608c8000p-5},
+{0x1.e573ad856b537p-1, 0x1.b42dc6e624000p-5},
+{0x1.de5d6dc7b8057p-1, 0x1.165372ec20000p-4},
+{0x1.d77b6498bddf7p-1, 0x1.51b07a0170000p-4},
+{0x1.d0cb580315c0fp-1, 0x1.8c3465c7ea000p-4},
+{0x1.ca4b30d1cf449p-1, 0x1.c5e544a290000p-4},
+{0x1.c3f8ef4810d8ep-1, 0x1.fec91aa0a6000p-4},
+{0x1.bdd2b8b311f44p-1, 0x1.1b72acdc5c000p-3},
+{0x1.b7d6c2eeac054p-1, 0x1.371fc65a98000p-3},
+{0x1.b20363474c8f5p-1, 0x1.526e61c1aa000p-3},
+{0x1.ac570165eeab1p-1, 0x1.6d60ffc240000p-3},
+{0x1.a6d019f331df4p-1, 0x1.87fa08a013000p-3},
+{0x1.a16d3ebc9e3c3p-1, 0x1.a23bc630c3000p-3},
+{0x1.9c2d14567ef45p-1, 0x1.bc286a3512000p-3},
+{0x1.970e4efae9169p-1, 0x1.d5c2195697000p-3},
+{0x1.920fb3bd0b802p-1, 0x1.ef0ae132d3000p-3},
+{0x1.8d3018b58699ap-1, 0x1.040259974e000p-2},
+{0x1.886e5ff170ee6p-1, 0x1.1058bd40e2000p-2},
+{0x1.83c977ad35d27p-1, 0x1.1c898c1137800p-2},
+{0x1.7f405ed16c520p-1, 0x1.2895a3e65b000p-2},
+{0x1.7ad220d0335c4p-1, 0x1.347dd8f6bd000p-2},
+{0x1.767dce53474fdp-1, 0x1.4043083cb3800p-2},
+#elif N == 128
+{0x1.734f0c3e0de9fp+0, -0x1.7cc7f79e69000p-2},
+{0x1.713786a2ce91fp+0, -0x1.76feec20d0000p-2},
+{0x1.6f26008fab5a0p+0, -0x1.713e31351e000p-2},
+{0x1.6d1a61f138c7dp+0, -0x1.6b85b38287800p-2},
+{0x1.6b1490bc5b4d1p+0, -0x1.65d5590807800p-2},
+{0x1.69147332f0cbap+0, -0x1.602d076180000p-2},
+{0x1.6719f18224223p+0, -0x1.5a8ca86909000p-2},
+{0x1.6524f99a51ed9p+0, -0x1.54f4356035000p-2},
+{0x1.63356aa8f24c4p+0, -0x1.4f637c36b4000p-2},
+{0x1.614b36b9ddc14p+0, -0x1.49da7fda85000p-2},
+{0x1.5f66452c65c4cp+0, -0x1.445923989a800p-2},
+{0x1.5d867b5912c4fp+0, -0x1.3edf439b0b800p-2},
+{0x1.5babccb5b90dep+0, -0x1.396ce448f7000p-2},
+{0x1.59d61f2d91a78p+0, -0x1.3401e17bda000p-2},
+{0x1.5805612465687p+0, -0x1.2e9e2ef468000p-2},
+{0x1.56397cee76bd3p+0, -0x1.2941b3830e000p-2},
+{0x1.54725e2a77f93p+0, -0x1.23ec58cda8800p-2},
+{0x1.52aff42064583p+0, -0x1.1e9e129279000p-2},
+{0x1.50f22dbb2bddfp+0, -0x1.1956d2b48f800p-2},
+{0x1.4f38f4734ded7p+0, -0x1.141679ab9f800p-2},
+{0x1.4d843cfde2840p+0, -0x1.0edd094ef9800p-2},
+{0x1.4bd3ec078a3c8p+0, -0x1.09aa518db1000p-2},
+{0x1.4a27fc3e0258ap+0, -0x1.047e65263b800p-2},
+{0x1.4880524d48434p+0, -0x1.feb224586f000p-3},
+{0x1.46dce1b192d0bp+0, -0x1.f474a7517b000p-3},
+{0x1.453d9d3391854p+0, -0x1.ea4443d103000p-3},
+{0x1.43a2744b4845ap+0, -0x1.e020d44e9b000p-3},
+{0x1.420b54115f8fbp+0, -0x1.d60a22977f000p-3},
+{0x1.40782da3ef4b1p+0, -0x1.cc00104959000p-3},
+{0x1.3ee8f5d57fe8fp+0, -0x1.c202956891000p-3},
+{0x1.3d5d9a00b4ce9p+0, -0x1.b81178d811000p-3},
+{0x1.3bd60c010c12bp+0, -0x1.ae2c9ccd3d000p-3},
+{0x1.3a5242b75dab8p+0, -0x1.a45402e129000p-3},
+{0x1.38d22cd9fd002p+0, -0x1.9a877681df000p-3},
+{0x1.3755bc5847a1cp+0, -0x1.90c6d69483000p-3},
+{0x1.35dce49ad36e2p+0, -0x1.87120a645c000p-3},
+{0x1.34679984dd440p+0, -0x1.7d68fb4143000p-3},
+{0x1.32f5cceffcb24p+0, -0x1.73cb83c627000p-3},
+{0x1.3187775a10d49p+0, -0x1.6a39a9b376000p-3},
+{0x1.301c8373e3990p+0, -0x1.60b3154b7a000p-3},
+{0x1.2eb4ebb95f841p+0, -0x1.5737d76243000p-3},
+{0x1.2d50a0219a9d1p+0, -0x1.4dc7b8fc23000p-3},
+{0x1.2bef9a8b7fd2ap+0, -0x1.4462c51d20000p-3},
+{0x1.2a91c7a0c1babp+0, -0x1.3b08abc830000p-3},
+{0x1.293726014b530p+0, -0x1.31b996b490000p-3},
+{0x1.27dfa5757a1f5p+0, -0x1.2875490a44000p-3},
+{0x1.268b39b1d3bbfp+0, -0x1.1f3b9f879a000p-3},
+{0x1.2539d838ff5bdp+0, -0x1.160c8252ca000p-3},
+{0x1.23eb7aac9083bp+0, -0x1.0ce7f57f72000p-3},
+{0x1.22a012ba940b6p+0, -0x1.03cdc49fea000p-3},
+{0x1.2157996cc4132p+0, -0x1.f57bdbc4b8000p-4},
+{0x1.201201dd2fc9bp+0, -0x1.e370896404000p-4},
+{0x1.1ecf4494d480bp+0, -0x1.d17983ef94000p-4},
+{0x1.1d8f5528f6569p+0, -0x1.bf9674ed8a000p-4},
+{0x1.1c52311577e7cp+0, -0x1.adc79202f6000p-4},
+{0x1.1b17c74cb26e9p+0, -0x1.9c0c3e7288000p-4},
+{0x1.19e010c2c1ab6p+0, -0x1.8a646b372c000p-4},
+{0x1.18ab07bb670bdp+0, -0x1.78d01b3ac0000p-4},
+{0x1.1778a25efbcb6p+0, -0x1.674f145380000p-4},
+{0x1.1648d354c31dap+0, -0x1.55e0e6d878000p-4},
+{0x1.151b990275fddp+0, -0x1.4485cdea1e000p-4},
+{0x1.13f0ea432d24cp+0, -0x1.333d94d6aa000p-4},
+{0x1.12c8b7210f9dap+0, -0x1.22079f8c56000p-4},
+{0x1.11a3028ecb531p+0, -0x1.10e4698622000p-4},
+{0x1.107fbda8434afp+0, -0x1.ffa6c6ad20000p-5},
+{0x1.0f5ee0f4e6bb3p+0, -0x1.dda8d4a774000p-5},
+{0x1.0e4065d2a9fcep+0, -0x1.bbcece4850000p-5},
+{0x1.0d244632ca521p+0, -0x1.9a1894012c000p-5},
+{0x1.0c0a77ce2981ap+0, -0x1.788583302c000p-5},
+{0x1.0af2f83c636d1p+0, -0x1.5715e67d68000p-5},
+{0x1.09ddb98a01339p+0, -0x1.35c8a49658000p-5},
+{0x1.08cabaf52e7dfp+0, -0x1.149e364154000p-5},
+{0x1.07b9f2f4e28fbp+0, -0x1.e72c082eb8000p-6},
+{0x1.06ab58c358f19p+0, -0x1.a55f152528000p-6},
+{0x1.059eea5ecf92cp+0, -0x1.63d62cf818000p-6},
+{0x1.04949cdd12c90p+0, -0x1.228fb8caa0000p-6},
+{0x1.038c6c6f0ada9p+0, -0x1.c317b20f90000p-7},
+{0x1.02865137932a9p+0, -0x1.419355daa0000p-7},
+{0x1.0182427ea7348p+0, -0x1.81203c2ec0000p-8},
+{0x1.008040614b195p+0, -0x1.0040979240000p-9},
+{0x1.fe01ff726fa1ap-1, 0x1.feff384900000p-9},
+{0x1.fa11cc261ea74p-1, 0x1.7dc41353d0000p-7},
+{0x1.f6310b081992ep-1, 0x1.3cea3c4c28000p-6},
+{0x1.f25f63ceeadcdp-1, 0x1.b9fc114890000p-6},
+{0x1.ee9c8039113e7p-1, 0x1.1b0d8ce110000p-5},
+{0x1.eae8078cbb1abp-1, 0x1.58a5bd001c000p-5},
+{0x1.e741aa29d0c9bp-1, 0x1.95c8340d88000p-5},
+{0x1.e3a91830a99b5p-1, 0x1.d276aef578000p-5},
+{0x1.e01e009609a56p-1, 0x1.07598e598c000p-4},
+{0x1.dca01e577bb98p-1, 0x1.253f5e30d2000p-4},
+{0x1.d92f20b7c9103p-1, 0x1.42edd8b380000p-4},
+{0x1.d5cac66fb5ccep-1, 0x1.606598757c000p-4},
+{0x1.d272caa5ede9dp-1, 0x1.7da76356a0000p-4},
+{0x1.cf26e3e6b2ccdp-1, 0x1.9ab434e1c6000p-4},
+{0x1.cbe6da2a77902p-1, 0x1.b78c7bb0d6000p-4},
+{0x1.c8b266d37086dp-1, 0x1.d431332e72000p-4},
+{0x1.c5894bd5d5804p-1, 0x1.f0a3171de6000p-4},
+{0x1.c26b533bb9f8cp-1, 0x1.067152b914000p-3},
+{0x1.bf583eeece73fp-1, 0x1.147858292b000p-3},
+{0x1.bc4fd75db96c1p-1, 0x1.2266ecdca3000p-3},
+{0x1.b951e0c864a28p-1, 0x1.303d7a6c55000p-3},
+{0x1.b65e2c5ef3e2cp-1, 0x1.3dfc33c331000p-3},
+{0x1.b374867c9888bp-1, 0x1.4ba366b7a8000p-3},
+{0x1.b094b211d304ap-1, 0x1.5933928d1f000p-3},
+{0x1.adbe885f2ef7ep-1, 0x1.66acd2418f000p-3},
+{0x1.aaf1d31603da2p-1, 0x1.740f8ec669000p-3},
+{0x1.a82e63fd358a7p-1, 0x1.815c0f51af000p-3},
+{0x1.a5740ef09738bp-1, 0x1.8e92954f68000p-3},
+{0x1.a2c2a90ab4b27p-1, 0x1.9bb3602f84000p-3},
+{0x1.a01a01393f2d1p-1, 0x1.a8bed1c2c0000p-3},
+{0x1.9d79f24db3c1bp-1, 0x1.b5b515c01d000p-3},
+{0x1.9ae2505c7b190p-1, 0x1.c2967ccbcc000p-3},
+{0x1.9852ef297ce2fp-1, 0x1.cf635d5486000p-3},
+{0x1.95cbaeea44b75p-1, 0x1.dc1bd3446c000p-3},
+{0x1.934c69de74838p-1, 0x1.e8c01b8cfe000p-3},
+{0x1.90d4f2f6752e6p-1, 0x1.f5509c0179000p-3},
+{0x1.8e6528effd79dp-1, 0x1.00e6c121fb800p-2},
+{0x1.8bfce9fcc007cp-1, 0x1.071b80e93d000p-2},
+{0x1.899c0dabec30ep-1, 0x1.0d46b9e867000p-2},
+{0x1.87427aa2317fbp-1, 0x1.13687334bd000p-2},
+{0x1.84f00acb39a08p-1, 0x1.1980d67234800p-2},
+{0x1.82a49e8653e55p-1, 0x1.1f8ffe0cc8000p-2},
+{0x1.8060195f40260p-1, 0x1.2595fd7636800p-2},
+{0x1.7e22563e0a329p-1, 0x1.2b9300914a800p-2},
+{0x1.7beb377dcb5adp-1, 0x1.3187210436000p-2},
+{0x1.79baa679725c2p-1, 0x1.377266dec1800p-2},
+{0x1.77907f2170657p-1, 0x1.3d54ffbaf3000p-2},
+{0x1.756cadbd6130cp-1, 0x1.432eee32fe000p-2},
+#endif
+},
+#if !HAVE_FAST_FMA
+.tab2 = {
+# if N == 64
+{0x1.61ffff94c4fecp-1, -0x1.9fe4fc998f325p-56},
+{0x1.66000020377ddp-1, 0x1.e804c7a9519f2p-55},
+{0x1.6a00004c41678p-1, 0x1.902c675d9ecfep-55},
+{0x1.6dffff7384f87p-1, -0x1.2fd6b95e55043p-56},
+{0x1.720000b37216ep-1, 0x1.802bc8d437043p-55},
+{0x1.75ffffbeb3c9dp-1, 0x1.6047ad0a0d4e4p-57},
+{0x1.7a0000628daep-1, -0x1.e00434b49313dp-56},
+{0x1.7dffffd7abd1ap-1, -0x1.6015f8a083576p-56},
+{0x1.81ffffdf40c54p-1, 0x1.7f54bf76a42c9p-57},
+{0x1.860000f334e11p-1, 0x1.60054cb5344d7p-56},
+{0x1.8a0001238aca7p-1, 0x1.c03c9bd132f55p-57},
+{0x1.8dffffb81d212p-1, -0x1.001e519f2764fp-55},
+{0x1.92000086adc7cp-1, 0x1.1fe40f88f49c6p-55},
+{0x1.960000135d8eap-1, -0x1.f832268dc3095p-55},
+{0x1.99ffff9435acp-1, 0x1.7031d8b835edcp-56},
+{0x1.9e00003478565p-1, -0x1.0030b221ce3eep-58},
+{0x1.a20000b592948p-1, 0x1.8fd2f1dbd4639p-55},
+{0x1.a600000ad0bcfp-1, 0x1.901d6a974e6bep-55},
+{0x1.a9ffff55953a5p-1, 0x1.a07556192db98p-57},
+{0x1.adffff29ce03dp-1, -0x1.fff0717ec71c2p-56},
+{0x1.b1ffff34f3ac8p-1, 0x1.8005573de89d1p-57},
+{0x1.b60000894c55bp-1, -0x1.ff2fb51b044c7p-57},
+{0x1.b9fffef45ec7dp-1, -0x1.9ff7c4e8730fp-56},
+{0x1.be0000cda7b2ap-1, 0x1.57d058dbf3c1dp-55},
+{0x1.c1ffff2c57917p-1, 0x1.7e66d7e48dbc9p-58},
+{0x1.c60000ea5b82ap-1, -0x1.47f5e132ed4bep-55},
+{0x1.ca0001121ae98p-1, -0x1.40958c8d5e00ap-58},
+{0x1.ce0000f9241cbp-1, -0x1.7da063caa81c8p-59},
+{0x1.d1fffe8be95a4p-1, -0x1.82e3a411afcd9p-59},
+{0x1.d5ffff035932bp-1, -0x1.00f901b3fe87dp-58},
+{0x1.d9fffe8b54ba7p-1, 0x1.ffef55d6e3a4p-55},
+{0x1.de0000ad95d19p-1, 0x1.5feb2efd4c7c7p-55},
+{0x1.e1fffe925ce47p-1, 0x1.c8085484eaf08p-55},
+{0x1.e5fffe3ddf853p-1, -0x1.fd5ed02c5cadp-60},
+{0x1.e9fffed0a0e5fp-1, -0x1.a80aaef411586p-55},
+{0x1.ee00008f82eep-1, -0x1.b000aeaf97276p-55},
+{0x1.f20000a22d2f4p-1, -0x1.8f8906e13eba3p-56},
+{0x1.f5fffee35b57dp-1, 0x1.1fdd33b2d3714p-57},
+{0x1.fa00014eec3a6p-1, -0x1.3ee0b7a18c1a5p-58},
+{0x1.fdffff5daa89fp-1, -0x1.c1e24c8e3b503p-58},
+{0x1.0200005b93349p+0, -0x1.50197fe6bedcap-54},
+{0x1.05ffff9d597acp+0, 0x1.20160d062d0dcp-55},
+{0x1.0a00005687a63p+0, -0x1.27f3f9307696ep-54},
+{0x1.0dffff779164ep+0, 0x1.b7eb40bb9c4f4p-54},
+{0x1.12000044a0aa8p+0, 0x1.efbc914d512c4p-55},
+{0x1.16000069685bcp+0, -0x1.c0bea3eb2d82cp-57},
+{0x1.1a000093f0d78p+0, 0x1.1fecbf1e8c52p-54},
+{0x1.1dffffb2b1457p+0, -0x1.3fc91365637d6p-55},
+{0x1.2200008824a1p+0, -0x1.dff7e9feb578ap-54},
+{0x1.25ffffeef953p+0, -0x1.b00a61ec912f7p-55},
+{0x1.2a0000a1e7783p+0, 0x1.60048318b0483p-56},
+{0x1.2e0000853d4c7p+0, -0x1.77fbedf2c8cf3p-54},
+{0x1.320000324c55bp+0, 0x1.f81983997354fp-54},
+{0x1.360000594f796p+0, -0x1.cfe4beff900a9p-54},
+{0x1.3a0000a4c1c0fp+0, 0x1.07dbb2e268d0ep-54},
+{0x1.3e0000751c61bp+0, 0x1.80583ed1c566ep-56},
+{0x1.42000069e8a9fp+0, 0x1.f01f1edf82045p-54},
+{0x1.460000b5a1e34p+0, -0x1.dfdf0cf45c14ap-55},
+{0x1.4a0000187e513p+0, 0x1.401306b83a98dp-55},
+{0x1.4dffff3ba420bp+0, 0x1.9fc6539a6454ep-56},
+{0x1.51fffffe391c9p+0, -0x1.601ef3353ac83p-54},
+{0x1.560000e342455p+0, 0x1.3fb7fac8ac151p-55},
+{0x1.59ffffc39676fp+0, 0x1.4fe7dd6659cc2p-55},
+{0x1.5dfffff10ef42p+0, -0x1.48154cb592bcbp-54},
+# elif N == 128
+{0x1.61000014fb66bp-1, 0x1.e026c91425b3cp-56},
+{0x1.63000034db495p-1, 0x1.dbfea48005d41p-55},
+{0x1.650000d94d478p-1, 0x1.e7fa786d6a5b7p-55},
+{0x1.67000074e6fadp-1, 0x1.1fcea6b54254cp-57},
+{0x1.68ffffedf0faep-1, -0x1.c7e274c590efdp-56},
+{0x1.6b0000763c5bcp-1, -0x1.ac16848dcda01p-55},
+{0x1.6d0001e5cc1f6p-1, 0x1.33f1c9d499311p-55},
+{0x1.6efffeb05f63ep-1, -0x1.e80041ae22d53p-56},
+{0x1.710000e86978p-1, 0x1.bff6671097952p-56},
+{0x1.72ffffc67e912p-1, 0x1.c00e226bd8724p-55},
+{0x1.74fffdf81116ap-1, -0x1.e02916ef101d2p-57},
+{0x1.770000f679c9p-1, -0x1.7fc71cd549c74p-57},
+{0x1.78ffffa7ec835p-1, 0x1.1bec19ef50483p-55},
+{0x1.7affffe20c2e6p-1, -0x1.07e1729cc6465p-56},
+{0x1.7cfffed3fc9p-1, -0x1.08072087b8b1cp-55},
+{0x1.7efffe9261a76p-1, 0x1.dc0286d9df9aep-55},
+{0x1.81000049ca3e8p-1, 0x1.97fd251e54c33p-55},
+{0x1.8300017932c8fp-1, -0x1.afee9b630f381p-55},
+{0x1.850000633739cp-1, 0x1.9bfbf6b6535bcp-55},
+{0x1.87000204289c6p-1, -0x1.bbf65f3117b75p-55},
+{0x1.88fffebf57904p-1, -0x1.9006ea23dcb57p-55},
+{0x1.8b00022bc04dfp-1, -0x1.d00df38e04b0ap-56},
+{0x1.8cfffe50c1b8ap-1, -0x1.8007146ff9f05p-55},
+{0x1.8effffc918e43p-1, 0x1.3817bd07a7038p-55},
+{0x1.910001efa5fc7p-1, 0x1.93e9176dfb403p-55},
+{0x1.9300013467bb9p-1, 0x1.f804e4b980276p-56},
+{0x1.94fffe6ee076fp-1, -0x1.f7ef0d9ff622ep-55},
+{0x1.96fffde3c12d1p-1, -0x1.082aa962638bap-56},
+{0x1.98ffff4458a0dp-1, -0x1.7801b9164a8efp-55},
+{0x1.9afffdd982e3ep-1, -0x1.740e08a5a9337p-55},
+{0x1.9cfffed49fb66p-1, 0x1.fce08c19bep-60},
+{0x1.9f00020f19c51p-1, -0x1.a3faa27885b0ap-55},
+{0x1.a10001145b006p-1, 0x1.4ff489958da56p-56},
+{0x1.a300007bbf6fap-1, 0x1.cbeab8a2b6d18p-55},
+{0x1.a500010971d79p-1, 0x1.8fecadd78793p-55},
+{0x1.a70001df52e48p-1, -0x1.f41763dd8abdbp-55},
+{0x1.a90001c593352p-1, -0x1.ebf0284c27612p-55},
+{0x1.ab0002a4f3e4bp-1, -0x1.9fd043cff3f5fp-57},
+{0x1.acfffd7ae1ed1p-1, -0x1.23ee7129070b4p-55},
+{0x1.aefffee510478p-1, 0x1.a063ee00edea3p-57},
+{0x1.b0fffdb650d5bp-1, 0x1.a06c8381f0ab9p-58},
+{0x1.b2ffffeaaca57p-1, -0x1.9011e74233c1dp-56},
+{0x1.b4fffd995badcp-1, -0x1.9ff1068862a9fp-56},
+{0x1.b7000249e659cp-1, 0x1.aff45d0864f3ep-55},
+{0x1.b8ffff987164p-1, 0x1.cfe7796c2c3f9p-56},
+{0x1.bafffd204cb4fp-1, -0x1.3ff27eef22bc4p-57},
+{0x1.bcfffd2415c45p-1, -0x1.cffb7ee3bea21p-57},
+{0x1.beffff86309dfp-1, -0x1.14103972e0b5cp-55},
+{0x1.c0fffe1b57653p-1, 0x1.bc16494b76a19p-55},
+{0x1.c2ffff1fa57e3p-1, -0x1.4feef8d30c6edp-57},
+{0x1.c4fffdcbfe424p-1, -0x1.43f68bcec4775p-55},
+{0x1.c6fffed54b9f7p-1, 0x1.47ea3f053e0ecp-55},
+{0x1.c8fffeb998fd5p-1, 0x1.383068df992f1p-56},
+{0x1.cb0002125219ap-1, -0x1.8fd8e64180e04p-57},
+{0x1.ccfffdd94469cp-1, 0x1.e7ebe1cc7ea72p-55},
+{0x1.cefffeafdc476p-1, 0x1.ebe39ad9f88fep-55},
+{0x1.d1000169af82bp-1, 0x1.57d91a8b95a71p-56},
+{0x1.d30000d0ff71dp-1, 0x1.9c1906970c7dap-55},
+{0x1.d4fffea790fc4p-1, -0x1.80e37c558fe0cp-58},
+{0x1.d70002edc87e5p-1, -0x1.f80d64dc10f44p-56},
+{0x1.d900021dc82aap-1, -0x1.47c8f94fd5c5cp-56},
+{0x1.dafffd86b0283p-1, 0x1.c7f1dc521617ep-55},
+{0x1.dd000296c4739p-1, 0x1.8019eb2ffb153p-55},
+{0x1.defffe54490f5p-1, 0x1.e00d2c652cc89p-57},
+{0x1.e0fffcdabf694p-1, -0x1.f8340202d69d2p-56},
+{0x1.e2fffdb52c8ddp-1, 0x1.b00c1ca1b0864p-56},
+{0x1.e4ffff24216efp-1, 0x1.2ffa8b094ab51p-56},
+{0x1.e6fffe88a5e11p-1, -0x1.7f673b1efbe59p-58},
+{0x1.e9000119eff0dp-1, -0x1.4808d5e0bc801p-55},
+{0x1.eafffdfa51744p-1, 0x1.80006d54320b5p-56},
+{0x1.ed0001a127fa1p-1, -0x1.002f860565c92p-58},
+{0x1.ef00007babcc4p-1, -0x1.540445d35e611p-55},
+{0x1.f0ffff57a8d02p-1, -0x1.ffb3139ef9105p-59},
+{0x1.f30001ee58ac7p-1, 0x1.a81acf2731155p-55},
+{0x1.f4ffff5823494p-1, 0x1.a3f41d4d7c743p-55},
+{0x1.f6ffffca94c6bp-1, -0x1.202f41c987875p-57},
+{0x1.f8fffe1f9c441p-1, 0x1.77dd1f477e74bp-56},
+{0x1.fafffd2e0e37ep-1, -0x1.f01199a7ca331p-57},
+{0x1.fd0001c77e49ep-1, 0x1.181ee4bceacb1p-56},
+{0x1.feffff7e0c331p-1, -0x1.e05370170875ap-57},
+{0x1.00ffff465606ep+0, -0x1.a7ead491c0adap-55},
+{0x1.02ffff3867a58p+0, -0x1.77f69c3fcb2ep-54},
+{0x1.04ffffdfc0d17p+0, 0x1.7bffe34cb945bp-54},
+{0x1.0700003cd4d82p+0, 0x1.20083c0e456cbp-55},
+{0x1.08ffff9f2cbe8p+0, -0x1.dffdfbe37751ap-57},
+{0x1.0b000010cda65p+0, -0x1.13f7faee626ebp-54},
+{0x1.0d00001a4d338p+0, 0x1.07dfa79489ff7p-55},
+{0x1.0effffadafdfdp+0, -0x1.7040570d66bcp-56},
+{0x1.110000bbafd96p+0, 0x1.e80d4846d0b62p-55},
+{0x1.12ffffae5f45dp+0, 0x1.dbffa64fd36efp-54},
+{0x1.150000dd59ad9p+0, 0x1.a0077701250aep-54},
+{0x1.170000f21559ap+0, 0x1.dfdf9e2e3deeep-55},
+{0x1.18ffffc275426p+0, 0x1.10030dc3b7273p-54},
+{0x1.1b000123d3c59p+0, 0x1.97f7980030188p-54},
+{0x1.1cffff8299eb7p+0, -0x1.5f932ab9f8c67p-57},
+{0x1.1effff48ad4p+0, 0x1.37fbf9da75bebp-54},
+{0x1.210000c8b86a4p+0, 0x1.f806b91fd5b22p-54},
+{0x1.2300003854303p+0, 0x1.3ffc2eb9fbf33p-54},
+{0x1.24fffffbcf684p+0, 0x1.601e77e2e2e72p-56},
+{0x1.26ffff52921d9p+0, 0x1.ffcbb767f0c61p-56},
+{0x1.2900014933a3cp+0, -0x1.202ca3c02412bp-56},
+{0x1.2b00014556313p+0, -0x1.2808233f21f02p-54},
+{0x1.2cfffebfe523bp+0, -0x1.8ff7e384fdcf2p-55},
+{0x1.2f0000bb8ad96p+0, -0x1.5ff51503041c5p-55},
+{0x1.30ffffb7ae2afp+0, -0x1.10071885e289dp-55},
+{0x1.32ffffeac5f7fp+0, -0x1.1ff5d3fb7b715p-54},
+{0x1.350000ca66756p+0, 0x1.57f82228b82bdp-54},
+{0x1.3700011fbf721p+0, 0x1.000bac40dd5ccp-55},
+{0x1.38ffff9592fb9p+0, -0x1.43f9d2db2a751p-54},
+{0x1.3b00004ddd242p+0, 0x1.57f6b707638e1p-55},
+{0x1.3cffff5b2c957p+0, 0x1.a023a10bf1231p-56},
+{0x1.3efffeab0b418p+0, 0x1.87f6d66b152bp-54},
+{0x1.410001532aff4p+0, 0x1.7f8375f198524p-57},
+{0x1.4300017478b29p+0, 0x1.301e672dc5143p-55},
+{0x1.44fffe795b463p+0, 0x1.9ff69b8b2895ap-55},
+{0x1.46fffe80475ep+0, -0x1.5c0b19bc2f254p-54},
+{0x1.48fffef6fc1e7p+0, 0x1.b4009f23a2a72p-54},
+{0x1.4afffe5bea704p+0, -0x1.4ffb7bf0d7d45p-54},
+{0x1.4d000171027dep+0, -0x1.9c06471dc6a3dp-54},
+{0x1.4f0000ff03ee2p+0, 0x1.77f890b85531cp-54},
+{0x1.5100012dc4bd1p+0, 0x1.004657166a436p-57},
+{0x1.530001605277ap+0, -0x1.6bfcece233209p-54},
+{0x1.54fffecdb704cp+0, -0x1.902720505a1d7p-55},
+{0x1.56fffef5f54a9p+0, 0x1.bbfe60ec96412p-54},
+{0x1.5900017e61012p+0, 0x1.87ec581afef9p-55},
+{0x1.5b00003c93e92p+0, -0x1.f41080abf0ccp-54},
+{0x1.5d0001d4919bcp+0, -0x1.8812afb254729p-54},
+{0x1.5efffe7b87a89p+0, -0x1.47eb780ed6904p-54},
+#endif
+},
+#endif /* !HAVE_FAST_FMA */
+};
diff --git a/math/logf.c b/math/logf.c
new file mode 100644
index 000000000000..cfbaee12df10
--- /dev/null
+++ b/math/logf.c
@@ -0,0 +1,79 @@
+/*
+ * Single-precision log function.
+ *
+ * Copyright (c) 2017-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <math.h>
+#include <stdint.h>
+#include "math_config.h"
+
+/*
+LOGF_TABLE_BITS = 4
+LOGF_POLY_ORDER = 4
+
+ULP error: 0.818 (nearest rounding.)
+Relative error: 1.957 * 2^-26 (before rounding.)
+*/
+
+#define T __logf_data.tab
+#define A __logf_data.poly
+#define Ln2 __logf_data.ln2
+#define N (1 << LOGF_TABLE_BITS)
+#define OFF 0x3f330000
+
+float
+logf (float x)
+{
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t z, r, r2, y, y0, invc, logc;
+ uint32_t ix, iz, tmp;
+ int k, i;
+
+ ix = asuint (x);
+#if WANT_ROUNDING
+ /* Fix sign of zero with downward rounding when x==1. */
+ if (unlikely (ix == 0x3f800000))
+ return 0;
+#endif
+ if (unlikely (ix - 0x00800000 >= 0x7f800000 - 0x00800000))
+ {
+ /* x < 0x1p-126 or inf or nan. */
+ if (ix * 2 == 0)
+ return __math_divzerof (1);
+ if (ix == 0x7f800000) /* log(inf) == inf. */
+ return x;
+ if ((ix & 0x80000000) || ix * 2 >= 0xff000000)
+ return __math_invalidf (x);
+ /* x is subnormal, normalize it. */
+ ix = asuint (x * 0x1p23f);
+ ix -= 23 << 23;
+ }
+
+ /* x = 2^k z; where z is in range [OFF,2*OFF] and exact.
+ The range is split into N subintervals.
+ The ith subinterval contains z and c is near its center. */
+ tmp = ix - OFF;
+ i = (tmp >> (23 - LOGF_TABLE_BITS)) % N;
+ k = (int32_t) tmp >> 23; /* arithmetic shift */
+ iz = ix - (tmp & 0x1ff << 23);
+ invc = T[i].invc;
+ logc = T[i].logc;
+ z = (double_t) asfloat (iz);
+
+ /* log(x) = log1p(z/c-1) + log(c) + k*Ln2 */
+ r = z * invc - 1;
+ y0 = logc + (double_t) k * Ln2;
+
+ /* Pipelined polynomial evaluation to approximate log1p(r). */
+ r2 = r * r;
+ y = A[1] * r + A[2];
+ y = A[0] * r2 + y;
+ y = y * r2 + (y0 + r);
+ return eval_as_float (y);
+}
+#if USE_GLIBC_ABI
+strong_alias (logf, __logf_finite)
+hidden_alias (logf, __ieee754_logf)
+#endif
diff --git a/math/logf_data.c b/math/logf_data.c
new file mode 100644
index 000000000000..e8973ce4fedc
--- /dev/null
+++ b/math/logf_data.c
@@ -0,0 +1,33 @@
+/*
+ * Data definition for logf.
+ *
+ * Copyright (c) 2017-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+const struct logf_data __logf_data = {
+ .tab = {
+ { 0x1.661ec79f8f3bep+0, -0x1.57bf7808caadep-2 },
+ { 0x1.571ed4aaf883dp+0, -0x1.2bef0a7c06ddbp-2 },
+ { 0x1.49539f0f010bp+0, -0x1.01eae7f513a67p-2 },
+ { 0x1.3c995b0b80385p+0, -0x1.b31d8a68224e9p-3 },
+ { 0x1.30d190c8864a5p+0, -0x1.6574f0ac07758p-3 },
+ { 0x1.25e227b0b8eap+0, -0x1.1aa2bc79c81p-3 },
+ { 0x1.1bb4a4a1a343fp+0, -0x1.a4e76ce8c0e5ep-4 },
+ { 0x1.12358f08ae5bap+0, -0x1.1973c5a611cccp-4 },
+ { 0x1.0953f419900a7p+0, -0x1.252f438e10c1ep-5 },
+ { 0x1p+0, 0x0p+0 },
+ { 0x1.e608cfd9a47acp-1, 0x1.aa5aa5df25984p-5 },
+ { 0x1.ca4b31f026aap-1, 0x1.c5e53aa362eb4p-4 },
+ { 0x1.b2036576afce6p-1, 0x1.526e57720db08p-3 },
+ { 0x1.9c2d163a1aa2dp-1, 0x1.bc2860d22477p-3 },
+ { 0x1.886e6037841edp-1, 0x1.1058bc8a07ee1p-2 },
+ { 0x1.767dcf5534862p-1, 0x1.4043057b6ee09p-2 },
+ },
+ .ln2 = 0x1.62e42fefa39efp-1,
+ .poly = {
+ -0x1.00ea348b88334p-2, 0x1.5575b0be00b6ap-2, -0x1.ffffef20a4123p-2,
+ }
+};
diff --git a/math/math_config.h b/math/math_config.h
new file mode 100644
index 000000000000..e85104337048
--- /dev/null
+++ b/math/math_config.h
@@ -0,0 +1,462 @@
+/*
+ * Configuration for math routines.
+ *
+ * Copyright (c) 2017-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef _MATH_CONFIG_H
+#define _MATH_CONFIG_H
+
+#include <math.h>
+#include <stdint.h>
+
+#ifndef WANT_ROUNDING
+/* If defined to 1, return correct results for special cases in non-nearest
+ rounding modes (logf (1.0f) returns 0.0f with FE_DOWNWARD rather than -0.0f).
+ This may be set to 0 if there is no fenv support or if math functions only
+ get called in round to nearest mode. */
+# define WANT_ROUNDING 1
+#endif
+#ifndef WANT_ERRNO
+/* If defined to 1, set errno in math functions according to ISO C. Many math
+ libraries do not set errno, so this is 0 by default. It may need to be
+ set to 1 if math.h has (math_errhandling & MATH_ERRNO) != 0. */
+# define WANT_ERRNO 0
+#endif
+#ifndef WANT_ERRNO_UFLOW
+/* Set errno to ERANGE if result underflows to 0 (in all rounding modes). */
+# define WANT_ERRNO_UFLOW (WANT_ROUNDING && WANT_ERRNO)
+#endif
+
+/* Compiler can inline round as a single instruction. */
+#ifndef HAVE_FAST_ROUND
+# if __aarch64__
+# define HAVE_FAST_ROUND 1
+# else
+# define HAVE_FAST_ROUND 0
+# endif
+#endif
+
+/* Compiler can inline lround, but not (long)round(x). */
+#ifndef HAVE_FAST_LROUND
+# if __aarch64__ && (100*__GNUC__ + __GNUC_MINOR__) >= 408 && __NO_MATH_ERRNO__
+# define HAVE_FAST_LROUND 1
+# else
+# define HAVE_FAST_LROUND 0
+# endif
+#endif
+
+/* Compiler can inline fma as a single instruction. */
+#ifndef HAVE_FAST_FMA
+# if defined FP_FAST_FMA || __aarch64__
+# define HAVE_FAST_FMA 1
+# else
+# define HAVE_FAST_FMA 0
+# endif
+#endif
+
+/* Provide *_finite symbols and some of the glibc hidden symbols
+ so libmathlib can be used with binaries compiled against glibc
+ to interpose math functions with both static and dynamic linking. */
+#ifndef USE_GLIBC_ABI
+# if __GNUC__
+# define USE_GLIBC_ABI 1
+# else
+# define USE_GLIBC_ABI 0
+# endif
+#endif
+
+/* Optionally used extensions. */
+#ifdef __GNUC__
+# define HIDDEN __attribute__ ((__visibility__ ("hidden")))
+# define NOINLINE __attribute__ ((noinline))
+# define UNUSED __attribute__ ((unused))
+# define likely(x) __builtin_expect (!!(x), 1)
+# define unlikely(x) __builtin_expect (x, 0)
+# if __GNUC__ >= 9
+# define attribute_copy(f) __attribute__ ((copy (f)))
+# else
+# define attribute_copy(f)
+# endif
+# define strong_alias(f, a) \
+ extern __typeof (f) a __attribute__ ((alias (#f))) attribute_copy (f);
+# define hidden_alias(f, a) \
+ extern __typeof (f) a __attribute__ ((alias (#f), visibility ("hidden"))) \
+ attribute_copy (f);
+#else
+# define HIDDEN
+# define NOINLINE
+# define UNUSED
+# define likely(x) (x)
+# define unlikely(x) (x)
+#endif
+
+#if HAVE_FAST_ROUND
+/* When set, the roundtoint and converttoint functions are provided with
+ the semantics documented below. */
+# define TOINT_INTRINSICS 1
+
+/* Round x to nearest int in all rounding modes, ties have to be rounded
+ consistently with converttoint so the results match. If the result
+ would be outside of [-2^31, 2^31-1] then the semantics is unspecified. */
+static inline double_t
+roundtoint (double_t x)
+{
+ return round (x);
+}
+
+/* Convert x to nearest int in all rounding modes, ties have to be rounded
+ consistently with roundtoint. If the result is not representible in an
+ int32_t then the semantics is unspecified. */
+static inline int32_t
+converttoint (double_t x)
+{
+# if HAVE_FAST_LROUND
+ return lround (x);
+# else
+ return (long) round (x);
+# endif
+}
+#endif
+
+static inline uint32_t
+asuint (float f)
+{
+ union
+ {
+ float f;
+ uint32_t i;
+ } u = {f};
+ return u.i;
+}
+
+static inline float
+asfloat (uint32_t i)
+{
+ union
+ {
+ uint32_t i;
+ float f;
+ } u = {i};
+ return u.f;
+}
+
+static inline uint64_t
+asuint64 (double f)
+{
+ union
+ {
+ double f;
+ uint64_t i;
+ } u = {f};
+ return u.i;
+}
+
+static inline double
+asdouble (uint64_t i)
+{
+ union
+ {
+ uint64_t i;
+ double f;
+ } u = {i};
+ return u.f;
+}
+
+#ifndef IEEE_754_2008_SNAN
+# define IEEE_754_2008_SNAN 1
+#endif
+static inline int
+issignalingf_inline (float x)
+{
+ uint32_t ix = asuint (x);
+ if (!IEEE_754_2008_SNAN)
+ return (ix & 0x7fc00000) == 0x7fc00000;
+ return 2 * (ix ^ 0x00400000) > 2u * 0x7fc00000;
+}
+
+static inline int
+issignaling_inline (double x)
+{
+ uint64_t ix = asuint64 (x);
+ if (!IEEE_754_2008_SNAN)
+ return (ix & 0x7ff8000000000000) == 0x7ff8000000000000;
+ return 2 * (ix ^ 0x0008000000000000) > 2 * 0x7ff8000000000000ULL;
+}
+
+#if __aarch64__ && __GNUC__
+/* Prevent the optimization of a floating-point expression. */
+static inline float
+opt_barrier_float (float x)
+{
+ __asm__ __volatile__ ("" : "+w" (x));
+ return x;
+}
+static inline double
+opt_barrier_double (double x)
+{
+ __asm__ __volatile__ ("" : "+w" (x));
+ return x;
+}
+/* Force the evaluation of a floating-point expression for its side-effect. */
+static inline void
+force_eval_float (float x)
+{
+ __asm__ __volatile__ ("" : "+w" (x));
+}
+static inline void
+force_eval_double (double x)
+{
+ __asm__ __volatile__ ("" : "+w" (x));
+}
+#else
+static inline float
+opt_barrier_float (float x)
+{
+ volatile float y = x;
+ return y;
+}
+static inline double
+opt_barrier_double (double x)
+{
+ volatile double y = x;
+ return y;
+}
+static inline void
+force_eval_float (float x)
+{
+ volatile float y UNUSED = x;
+}
+static inline void
+force_eval_double (double x)
+{
+ volatile double y UNUSED = x;
+}
+#endif
+
+/* Evaluate an expression as the specified type, normally a type
+ cast should be enough, but compilers implement non-standard
+ excess-precision handling, so when FLT_EVAL_METHOD != 0 then
+ these functions may need to be customized. */
+static inline float
+eval_as_float (float x)
+{
+ return x;
+}
+static inline double
+eval_as_double (double x)
+{
+ return x;
+}
+
+/* Error handling tail calls for special cases, with a sign argument.
+ The sign of the return value is set if the argument is non-zero. */
+
+/* The result overflows. */
+HIDDEN float __math_oflowf (uint32_t);
+/* The result underflows to 0 in nearest rounding mode. */
+HIDDEN float __math_uflowf (uint32_t);
+/* The result underflows to 0 in some directed rounding mode only. */
+HIDDEN float __math_may_uflowf (uint32_t);
+/* Division by zero. */
+HIDDEN float __math_divzerof (uint32_t);
+/* The result overflows. */
+HIDDEN double __math_oflow (uint32_t);
+/* The result underflows to 0 in nearest rounding mode. */
+HIDDEN double __math_uflow (uint32_t);
+/* The result underflows to 0 in some directed rounding mode only. */
+HIDDEN double __math_may_uflow (uint32_t);
+/* Division by zero. */
+HIDDEN double __math_divzero (uint32_t);
+
+/* Error handling using input checking. */
+
+/* Invalid input unless it is a quiet NaN. */
+HIDDEN float __math_invalidf (float);
+/* Invalid input unless it is a quiet NaN. */
+HIDDEN double __math_invalid (double);
+
+/* Error handling using output checking, only for errno setting. */
+
+/* Check if the result overflowed to infinity. */
+HIDDEN double __math_check_oflow (double);
+/* Check if the result underflowed to 0. */
+HIDDEN double __math_check_uflow (double);
+
+/* Check if the result overflowed to infinity. */
+static inline double
+check_oflow (double x)
+{
+ return WANT_ERRNO ? __math_check_oflow (x) : x;
+}
+
+/* Check if the result underflowed to 0. */
+static inline double
+check_uflow (double x)
+{
+ return WANT_ERRNO ? __math_check_uflow (x) : x;
+}
+
+/* Check if the result overflowed to infinity. */
+HIDDEN float __math_check_oflowf (float);
+/* Check if the result underflowed to 0. */
+HIDDEN float __math_check_uflowf (float);
+
+/* Check if the result overflowed to infinity. */
+static inline float
+check_oflowf (float x)
+{
+ return WANT_ERRNO ? __math_check_oflowf (x) : x;
+}
+
+/* Check if the result underflowed to 0. */
+static inline float
+check_uflowf (float x)
+{
+ return WANT_ERRNO ? __math_check_uflowf (x) : x;
+}
+
+/* Shared between expf, exp2f and powf. */
+#define EXP2F_TABLE_BITS 5
+#define EXP2F_POLY_ORDER 3
+extern const struct exp2f_data
+{
+ uint64_t tab[1 << EXP2F_TABLE_BITS];
+ double shift_scaled;
+ double poly[EXP2F_POLY_ORDER];
+ double shift;
+ double invln2_scaled;
+ double poly_scaled[EXP2F_POLY_ORDER];
+} __exp2f_data HIDDEN;
+
+#define LOGF_TABLE_BITS 4
+#define LOGF_POLY_ORDER 4
+extern const struct logf_data
+{
+ struct
+ {
+ double invc, logc;
+ } tab[1 << LOGF_TABLE_BITS];
+ double ln2;
+ double poly[LOGF_POLY_ORDER - 1]; /* First order coefficient is 1. */
+} __logf_data HIDDEN;
+
+#define LOG2F_TABLE_BITS 4
+#define LOG2F_POLY_ORDER 4
+extern const struct log2f_data
+{
+ struct
+ {
+ double invc, logc;
+ } tab[1 << LOG2F_TABLE_BITS];
+ double poly[LOG2F_POLY_ORDER];
+} __log2f_data HIDDEN;
+
+#define POWF_LOG2_TABLE_BITS 4
+#define POWF_LOG2_POLY_ORDER 5
+#if TOINT_INTRINSICS
+# define POWF_SCALE_BITS EXP2F_TABLE_BITS
+#else
+# define POWF_SCALE_BITS 0
+#endif
+#define POWF_SCALE ((double) (1 << POWF_SCALE_BITS))
+extern const struct powf_log2_data
+{
+ struct
+ {
+ double invc, logc;
+ } tab[1 << POWF_LOG2_TABLE_BITS];
+ double poly[POWF_LOG2_POLY_ORDER];
+} __powf_log2_data HIDDEN;
+
+
+#define EXP_TABLE_BITS 7
+#define EXP_POLY_ORDER 5
+/* Use polynomial that is optimized for a wider input range. This may be
+ needed for good precision in non-nearest rounding and !TOINT_INTRINSICS. */
+#define EXP_POLY_WIDE 0
+/* Use close to nearest rounding toint when !TOINT_INTRINSICS. This may be
+ needed for good precision in non-nearest rouning and !EXP_POLY_WIDE. */
+#define EXP_USE_TOINT_NARROW 0
+#define EXP2_POLY_ORDER 5
+#define EXP2_POLY_WIDE 0
+extern const struct exp_data
+{
+ double invln2N;
+ double shift;
+ double negln2hiN;
+ double negln2loN;
+ double poly[4]; /* Last four coefficients. */
+ double exp2_shift;
+ double exp2_poly[EXP2_POLY_ORDER];
+ uint64_t tab[2*(1 << EXP_TABLE_BITS)];
+} __exp_data HIDDEN;
+
+#define LOG_TABLE_BITS 7
+#define LOG_POLY_ORDER 6
+#define LOG_POLY1_ORDER 12
+extern const struct log_data
+{
+ double ln2hi;
+ double ln2lo;
+ double poly[LOG_POLY_ORDER - 1]; /* First coefficient is 1. */
+ double poly1[LOG_POLY1_ORDER - 1];
+ struct {double invc, logc;} tab[1 << LOG_TABLE_BITS];
+#if !HAVE_FAST_FMA
+ struct {double chi, clo;} tab2[1 << LOG_TABLE_BITS];
+#endif
+} __log_data HIDDEN;
+
+#define LOG2_TABLE_BITS 6
+#define LOG2_POLY_ORDER 7
+#define LOG2_POLY1_ORDER 11
+extern const struct log2_data
+{
+ double invln2hi;
+ double invln2lo;
+ double poly[LOG2_POLY_ORDER - 1];
+ double poly1[LOG2_POLY1_ORDER - 1];
+ struct {double invc, logc;} tab[1 << LOG2_TABLE_BITS];
+#if !HAVE_FAST_FMA
+ struct {double chi, clo;} tab2[1 << LOG2_TABLE_BITS];
+#endif
+} __log2_data HIDDEN;
+
+#define POW_LOG_TABLE_BITS 7
+#define POW_LOG_POLY_ORDER 8
+extern const struct pow_log_data
+{
+ double ln2hi;
+ double ln2lo;
+ double poly[POW_LOG_POLY_ORDER - 1]; /* First coefficient is 1. */
+ /* Note: the pad field is unused, but allows slightly faster indexing. */
+ struct {double invc, pad, logc, logctail;} tab[1 << POW_LOG_TABLE_BITS];
+} __pow_log_data HIDDEN;
+
+extern const struct erff_data
+{
+ float erff_poly_A[6];
+ float erff_poly_B[7];
+} __erff_data HIDDEN;
+
+#define ERF_POLY_A_ORDER 19
+#define ERF_POLY_A_NCOEFFS 10
+#define ERFC_POLY_C_NCOEFFS 16
+#define ERFC_POLY_D_NCOEFFS 18
+#define ERFC_POLY_E_NCOEFFS 14
+#define ERFC_POLY_F_NCOEFFS 17
+extern const struct erf_data
+{
+ double erf_poly_A[ERF_POLY_A_NCOEFFS];
+ double erf_ratio_N_A[5];
+ double erf_ratio_D_A[5];
+ double erf_ratio_N_B[7];
+ double erf_ratio_D_B[6];
+ double erfc_poly_C[ERFC_POLY_C_NCOEFFS];
+ double erfc_poly_D[ERFC_POLY_D_NCOEFFS];
+ double erfc_poly_E[ERFC_POLY_E_NCOEFFS];
+ double erfc_poly_F[ERFC_POLY_F_NCOEFFS];
+} __erf_data HIDDEN;
+
+#endif
diff --git a/math/math_err.c b/math/math_err.c
new file mode 100644
index 000000000000..1bf9538a1ab1
--- /dev/null
+++ b/math/math_err.c
@@ -0,0 +1,80 @@
+/*
+ * Double-precision math error handling.
+ *
+ * Copyright (c) 2018, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+#if WANT_ERRNO
+#include <errno.h>
+/* NOINLINE reduces code size and avoids making math functions non-leaf
+ when the error handling is inlined. */
+NOINLINE static double
+with_errno (double y, int e)
+{
+ errno = e;
+ return y;
+}
+#else
+#define with_errno(x, e) (x)
+#endif
+
+/* NOINLINE reduces code size. */
+NOINLINE static double
+xflow (uint32_t sign, double y)
+{
+ y = eval_as_double (opt_barrier_double (sign ? -y : y) * y);
+ return with_errno (y, ERANGE);
+}
+
+HIDDEN double
+__math_uflow (uint32_t sign)
+{
+ return xflow (sign, 0x1p-767);
+}
+
+#if WANT_ERRNO_UFLOW
+/* Underflows to zero in some non-nearest rounding mode, setting errno
+ is valid even if the result is non-zero, but in the subnormal range. */
+HIDDEN double
+__math_may_uflow (uint32_t sign)
+{
+ return xflow (sign, 0x1.8p-538);
+}
+#endif
+
+HIDDEN double
+__math_oflow (uint32_t sign)
+{
+ return xflow (sign, 0x1p769);
+}
+
+HIDDEN double
+__math_divzero (uint32_t sign)
+{
+ double y = opt_barrier_double (sign ? -1.0 : 1.0) / 0.0;
+ return with_errno (y, ERANGE);
+}
+
+HIDDEN double
+__math_invalid (double x)
+{
+ double y = (x - x) / (x - x);
+ return isnan (x) ? y : with_errno (y, EDOM);
+}
+
+/* Check result and set errno if necessary. */
+
+HIDDEN double
+__math_check_uflow (double y)
+{
+ return y == 0.0 ? with_errno (y, ERANGE) : y;
+}
+
+HIDDEN double
+__math_check_oflow (double y)
+{
+ return isinf (y) ? with_errno (y, ERANGE) : y;
+}
diff --git a/math/math_errf.c b/math/math_errf.c
new file mode 100644
index 000000000000..d5350b819ab1
--- /dev/null
+++ b/math/math_errf.c
@@ -0,0 +1,80 @@
+/*
+ * Single-precision math error handling.
+ *
+ * Copyright (c) 2017-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+#if WANT_ERRNO
+#include <errno.h>
+/* NOINLINE reduces code size and avoids making math functions non-leaf
+ when the error handling is inlined. */
+NOINLINE static float
+with_errnof (float y, int e)
+{
+ errno = e;
+ return y;
+}
+#else
+#define with_errnof(x, e) (x)
+#endif
+
+/* NOINLINE reduces code size. */
+NOINLINE static float
+xflowf (uint32_t sign, float y)
+{
+ y = eval_as_float (opt_barrier_float (sign ? -y : y) * y);
+ return with_errnof (y, ERANGE);
+}
+
+HIDDEN float
+__math_uflowf (uint32_t sign)
+{
+ return xflowf (sign, 0x1p-95f);
+}
+
+#if WANT_ERRNO_UFLOW
+/* Underflows to zero in some non-nearest rounding mode, setting errno
+ is valid even if the result is non-zero, but in the subnormal range. */
+HIDDEN float
+__math_may_uflowf (uint32_t sign)
+{
+ return xflowf (sign, 0x1.4p-75f);
+}
+#endif
+
+HIDDEN float
+__math_oflowf (uint32_t sign)
+{
+ return xflowf (sign, 0x1p97f);
+}
+
+HIDDEN float
+__math_divzerof (uint32_t sign)
+{
+ float y = opt_barrier_float (sign ? -1.0f : 1.0f) / 0.0f;
+ return with_errnof (y, ERANGE);
+}
+
+HIDDEN float
+__math_invalidf (float x)
+{
+ float y = (x - x) / (x - x);
+ return isnan (x) ? y : with_errnof (y, EDOM);
+}
+
+/* Check result and set errno if necessary. */
+
+HIDDEN float
+__math_check_uflowf (float y)
+{
+ return y == 0.0f ? with_errnof (y, ERANGE) : y;
+}
+
+HIDDEN float
+__math_check_oflowf (float y)
+{
+ return isinf (y) ? with_errnof (y, ERANGE) : y;
+}
diff --git a/math/pow.c b/math/pow.c
new file mode 100644
index 000000000000..86842c6abacd
--- /dev/null
+++ b/math/pow.c
@@ -0,0 +1,380 @@
+/*
+ * Double-precision x^y function.
+ *
+ * Copyright (c) 2018-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <float.h>
+#include <math.h>
+#include <stdint.h>
+#include "math_config.h"
+
+/*
+Worst-case error: 0.54 ULP (~= ulperr_exp + 1024*Ln2*relerr_log*2^53)
+relerr_log: 1.3 * 2^-68 (Relative error of log, 1.5 * 2^-68 without fma)
+ulperr_exp: 0.509 ULP (ULP error of exp, 0.511 ULP without fma)
+*/
+
+#define T __pow_log_data.tab
+#define A __pow_log_data.poly
+#define Ln2hi __pow_log_data.ln2hi
+#define Ln2lo __pow_log_data.ln2lo
+#define N (1 << POW_LOG_TABLE_BITS)
+#define OFF 0x3fe6955500000000
+
+/* Top 12 bits of a double (sign and exponent bits). */
+static inline uint32_t
+top12 (double x)
+{
+ return asuint64 (x) >> 52;
+}
+
+/* Compute y+TAIL = log(x) where the rounded result is y and TAIL has about
+ additional 15 bits precision. IX is the bit representation of x, but
+ normalized in the subnormal range using the sign bit for the exponent. */
+static inline double_t
+log_inline (uint64_t ix, double_t *tail)
+{
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t z, r, y, invc, logc, logctail, kd, hi, t1, t2, lo, lo1, lo2, p;
+ uint64_t iz, tmp;
+ int k, i;
+
+ /* x = 2^k z; where z is in range [OFF,2*OFF) and exact.
+ The range is split into N subintervals.
+ The ith subinterval contains z and c is near its center. */
+ tmp = ix - OFF;
+ i = (tmp >> (52 - POW_LOG_TABLE_BITS)) % N;
+ k = (int64_t) tmp >> 52; /* arithmetic shift */
+ iz = ix - (tmp & 0xfffULL << 52);
+ z = asdouble (iz);
+ kd = (double_t) k;
+
+ /* log(x) = k*Ln2 + log(c) + log1p(z/c-1). */
+ invc = T[i].invc;
+ logc = T[i].logc;
+ logctail = T[i].logctail;
+
+ /* Note: 1/c is j/N or j/N/2 where j is an integer in [N,2N) and
+ |z/c - 1| < 1/N, so r = z/c - 1 is exactly representible. */
+#if HAVE_FAST_FMA
+ r = fma (z, invc, -1.0);
+#else
+ /* Split z such that rhi, rlo and rhi*rhi are exact and |rlo| <= |r|. */
+ double_t zhi = asdouble ((iz + (1ULL << 31)) & (-1ULL << 32));
+ double_t zlo = z - zhi;
+ double_t rhi = zhi * invc - 1.0;
+ double_t rlo = zlo * invc;
+ r = rhi + rlo;
+#endif
+
+ /* k*Ln2 + log(c) + r. */
+ t1 = kd * Ln2hi + logc;
+ t2 = t1 + r;
+ lo1 = kd * Ln2lo + logctail;
+ lo2 = t1 - t2 + r;
+
+ /* Evaluation is optimized assuming superscalar pipelined execution. */
+ double_t ar, ar2, ar3, lo3, lo4;
+ ar = A[0] * r; /* A[0] = -0.5. */
+ ar2 = r * ar;
+ ar3 = r * ar2;
+ /* k*Ln2 + log(c) + r + A[0]*r*r. */
+#if HAVE_FAST_FMA
+ hi = t2 + ar2;
+ lo3 = fma (ar, r, -ar2);
+ lo4 = t2 - hi + ar2;
+#else
+ double_t arhi = A[0] * rhi;
+ double_t arhi2 = rhi * arhi;
+ hi = t2 + arhi2;
+ lo3 = rlo * (ar + arhi);
+ lo4 = t2 - hi + arhi2;
+#endif
+ /* p = log1p(r) - r - A[0]*r*r. */
+#if POW_LOG_POLY_ORDER == 8
+ p = (ar3
+ * (A[1] + r * A[2] + ar2 * (A[3] + r * A[4] + ar2 * (A[5] + r * A[6]))));
+#endif
+ lo = lo1 + lo2 + lo3 + lo4 + p;
+ y = hi + lo;
+ *tail = hi - y + lo;
+ return y;
+}
+
+#undef N
+#undef T
+#define N (1 << EXP_TABLE_BITS)
+#define InvLn2N __exp_data.invln2N
+#define NegLn2hiN __exp_data.negln2hiN
+#define NegLn2loN __exp_data.negln2loN
+#define Shift __exp_data.shift
+#define T __exp_data.tab
+#define C2 __exp_data.poly[5 - EXP_POLY_ORDER]
+#define C3 __exp_data.poly[6 - EXP_POLY_ORDER]
+#define C4 __exp_data.poly[7 - EXP_POLY_ORDER]
+#define C5 __exp_data.poly[8 - EXP_POLY_ORDER]
+#define C6 __exp_data.poly[9 - EXP_POLY_ORDER]
+
+/* Handle cases that may overflow or underflow when computing the result that
+ is scale*(1+TMP) without intermediate rounding. The bit representation of
+ scale is in SBITS, however it has a computed exponent that may have
+ overflown into the sign bit so that needs to be adjusted before using it as
+ a double. (int32_t)KI is the k used in the argument reduction and exponent
+ adjustment of scale, positive k here means the result may overflow and
+ negative k means the result may underflow. */
+static inline double
+specialcase (double_t tmp, uint64_t sbits, uint64_t ki)
+{
+ double_t scale, y;
+
+ if ((ki & 0x80000000) == 0)
+ {
+ /* k > 0, the exponent of scale might have overflowed by <= 460. */
+ sbits -= 1009ull << 52;
+ scale = asdouble (sbits);
+ y = 0x1p1009 * (scale + scale * tmp);
+ return check_oflow (eval_as_double (y));
+ }
+ /* k < 0, need special care in the subnormal range. */
+ sbits += 1022ull << 52;
+ /* Note: sbits is signed scale. */
+ scale = asdouble (sbits);
+ y = scale + scale * tmp;
+ if (fabs (y) < 1.0)
+ {
+ /* Round y to the right precision before scaling it into the subnormal
+ range to avoid double rounding that can cause 0.5+E/2 ulp error where
+ E is the worst-case ulp error outside the subnormal range. So this
+ is only useful if the goal is better than 1 ulp worst-case error. */
+ double_t hi, lo, one = 1.0;
+ if (y < 0.0)
+ one = -1.0;
+ lo = scale - y + scale * tmp;
+ hi = one + y;
+ lo = one - hi + y + lo;
+ y = eval_as_double (hi + lo) - one;
+ /* Fix the sign of 0. */
+ if (y == 0.0)
+ y = asdouble (sbits & 0x8000000000000000);
+ /* The underflow exception needs to be signaled explicitly. */
+ force_eval_double (opt_barrier_double (0x1p-1022) * 0x1p-1022);
+ }
+ y = 0x1p-1022 * y;
+ return check_uflow (eval_as_double (y));
+}
+
+#define SIGN_BIAS (0x800 << EXP_TABLE_BITS)
+
+/* Computes sign*exp(x+xtail) where |xtail| < 2^-8/N and |xtail| <= |x|.
+ The sign_bias argument is SIGN_BIAS or 0 and sets the sign to -1 or 1. */
+static inline double
+exp_inline (double_t x, double_t xtail, uint32_t sign_bias)
+{
+ uint32_t abstop;
+ uint64_t ki, idx, top, sbits;
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t kd, z, r, r2, scale, tail, tmp;
+
+ abstop = top12 (x) & 0x7ff;
+ if (unlikely (abstop - top12 (0x1p-54) >= top12 (512.0) - top12 (0x1p-54)))
+ {
+ if (abstop - top12 (0x1p-54) >= 0x80000000)
+ {
+ /* Avoid spurious underflow for tiny x. */
+ /* Note: 0 is common input. */
+ double_t one = WANT_ROUNDING ? 1.0 + x : 1.0;
+ return sign_bias ? -one : one;
+ }
+ if (abstop >= top12 (1024.0))
+ {
+ /* Note: inf and nan are already handled. */
+ if (asuint64 (x) >> 63)
+ return __math_uflow (sign_bias);
+ else
+ return __math_oflow (sign_bias);
+ }
+ /* Large x is special cased below. */
+ abstop = 0;
+ }
+
+ /* exp(x) = 2^(k/N) * exp(r), with exp(r) in [2^(-1/2N),2^(1/2N)]. */
+ /* x = ln2/N*k + r, with int k and r in [-ln2/2N, ln2/2N]. */
+ z = InvLn2N * x;
+#if TOINT_INTRINSICS
+ kd = roundtoint (z);
+ ki = converttoint (z);
+#elif EXP_USE_TOINT_NARROW
+ /* z - kd is in [-0.5-2^-16, 0.5] in all rounding modes. */
+ kd = eval_as_double (z + Shift);
+ ki = asuint64 (kd) >> 16;
+ kd = (double_t) (int32_t) ki;
+#else
+ /* z - kd is in [-1, 1] in non-nearest rounding modes. */
+ kd = eval_as_double (z + Shift);
+ ki = asuint64 (kd);
+ kd -= Shift;
+#endif
+ r = x + kd * NegLn2hiN + kd * NegLn2loN;
+ /* The code assumes 2^-200 < |xtail| < 2^-8/N. */
+ r += xtail;
+ /* 2^(k/N) ~= scale * (1 + tail). */
+ idx = 2 * (ki % N);
+ top = (ki + sign_bias) << (52 - EXP_TABLE_BITS);
+ tail = asdouble (T[idx]);
+ /* This is only a valid scale when -1023*N < k < 1024*N. */
+ sbits = T[idx + 1] + top;
+ /* exp(x) = 2^(k/N) * exp(r) ~= scale + scale * (tail + exp(r) - 1). */
+ /* Evaluation is optimized assuming superscalar pipelined execution. */
+ r2 = r * r;
+ /* Without fma the worst case error is 0.25/N ulp larger. */
+ /* Worst case error is less than 0.5+1.11/N+(abs poly error * 2^53) ulp. */
+#if EXP_POLY_ORDER == 4
+ tmp = tail + r + r2 * C2 + r * r2 * (C3 + r * C4);
+#elif EXP_POLY_ORDER == 5
+ tmp = tail + r + r2 * (C2 + r * C3) + r2 * r2 * (C4 + r * C5);
+#elif EXP_POLY_ORDER == 6
+ tmp = tail + r + r2 * (0.5 + r * C3) + r2 * r2 * (C4 + r * C5 + r2 * C6);
+#endif
+ if (unlikely (abstop == 0))
+ return specialcase (tmp, sbits, ki);
+ scale = asdouble (sbits);
+ /* Note: tmp == 0 or |tmp| > 2^-200 and scale > 2^-739, so there
+ is no spurious underflow here even without fma. */
+ return eval_as_double (scale + scale * tmp);
+}
+
+/* Returns 0 if not int, 1 if odd int, 2 if even int. The argument is
+ the bit representation of a non-zero finite floating-point value. */
+static inline int
+checkint (uint64_t iy)
+{
+ int e = iy >> 52 & 0x7ff;
+ if (e < 0x3ff)
+ return 0;
+ if (e > 0x3ff + 52)
+ return 2;
+ if (iy & ((1ULL << (0x3ff + 52 - e)) - 1))
+ return 0;
+ if (iy & (1ULL << (0x3ff + 52 - e)))
+ return 1;
+ return 2;
+}
+
+/* Returns 1 if input is the bit representation of 0, infinity or nan. */
+static inline int
+zeroinfnan (uint64_t i)
+{
+ return 2 * i - 1 >= 2 * asuint64 (INFINITY) - 1;
+}
+
+double
+pow (double x, double y)
+{
+ uint32_t sign_bias = 0;
+ uint64_t ix, iy;
+ uint32_t topx, topy;
+
+ ix = asuint64 (x);
+ iy = asuint64 (y);
+ topx = top12 (x);
+ topy = top12 (y);
+ if (unlikely (topx - 0x001 >= 0x7ff - 0x001
+ || (topy & 0x7ff) - 0x3be >= 0x43e - 0x3be))
+ {
+ /* Note: if |y| > 1075 * ln2 * 2^53 ~= 0x1.749p62 then pow(x,y) = inf/0
+ and if |y| < 2^-54 / 1075 ~= 0x1.e7b6p-65 then pow(x,y) = +-1. */
+ /* Special cases: (x < 0x1p-126 or inf or nan) or
+ (|y| < 0x1p-65 or |y| >= 0x1p63 or nan). */
+ if (unlikely (zeroinfnan (iy)))
+ {
+ if (2 * iy == 0)
+ return issignaling_inline (x) ? x + y : 1.0;
+ if (ix == asuint64 (1.0))
+ return issignaling_inline (y) ? x + y : 1.0;
+ if (2 * ix > 2 * asuint64 (INFINITY)
+ || 2 * iy > 2 * asuint64 (INFINITY))
+ return x + y;
+ if (2 * ix == 2 * asuint64 (1.0))
+ return 1.0;
+ if ((2 * ix < 2 * asuint64 (1.0)) == !(iy >> 63))
+ return 0.0; /* |x|<1 && y==inf or |x|>1 && y==-inf. */
+ return y * y;
+ }
+ if (unlikely (zeroinfnan (ix)))
+ {
+ double_t x2 = x * x;
+ if (ix >> 63 && checkint (iy) == 1)
+ {
+ x2 = -x2;
+ sign_bias = 1;
+ }
+ if (WANT_ERRNO && 2 * ix == 0 && iy >> 63)
+ return __math_divzero (sign_bias);
+ /* Without the barrier some versions of clang hoist the 1/x2 and
+ thus division by zero exception can be signaled spuriously. */
+ return iy >> 63 ? opt_barrier_double (1 / x2) : x2;
+ }
+ /* Here x and y are non-zero finite. */
+ if (ix >> 63)
+ {
+ /* Finite x < 0. */
+ int yint = checkint (iy);
+ if (yint == 0)
+ return __math_invalid (x);
+ if (yint == 1)
+ sign_bias = SIGN_BIAS;
+ ix &= 0x7fffffffffffffff;
+ topx &= 0x7ff;
+ }
+ if ((topy & 0x7ff) - 0x3be >= 0x43e - 0x3be)
+ {
+ /* Note: sign_bias == 0 here because y is not odd. */
+ if (ix == asuint64 (1.0))
+ return 1.0;
+ if ((topy & 0x7ff) < 0x3be)
+ {
+ /* |y| < 2^-65, x^y ~= 1 + y*log(x). */
+ if (WANT_ROUNDING)
+ return ix > asuint64 (1.0) ? 1.0 + y : 1.0 - y;
+ else
+ return 1.0;
+ }
+ return (ix > asuint64 (1.0)) == (topy < 0x800) ? __math_oflow (0)
+ : __math_uflow (0);
+ }
+ if (topx == 0)
+ {
+ /* Normalize subnormal x so exponent becomes negative. */
+ /* Without the barrier some versions of clang evalutate the mul
+ unconditionally causing spurious overflow exceptions. */
+ ix = asuint64 (opt_barrier_double (x) * 0x1p52);
+ ix &= 0x7fffffffffffffff;
+ ix -= 52ULL << 52;
+ }
+ }
+
+ double_t lo;
+ double_t hi = log_inline (ix, &lo);
+ double_t ehi, elo;
+#if HAVE_FAST_FMA
+ ehi = y * hi;
+ elo = y * lo + fma (y, hi, -ehi);
+#else
+ double_t yhi = asdouble (iy & -1ULL << 27);
+ double_t ylo = y - yhi;
+ double_t lhi = asdouble (asuint64 (hi) & -1ULL << 27);
+ double_t llo = hi - lhi + lo;
+ ehi = yhi * lhi;
+ elo = ylo * lhi + y * llo; /* |elo| < |ehi| * 2^-25. */
+#endif
+ return exp_inline (ehi, elo, sign_bias);
+}
+#if USE_GLIBC_ABI
+strong_alias (pow, __pow_finite)
+hidden_alias (pow, __ieee754_pow)
+# if LDBL_MANT_DIG == 53
+long double powl (long double x, long double y) { return pow (x, y); }
+# endif
+#endif
diff --git a/math/pow_log_data.c b/math/pow_log_data.c
new file mode 100644
index 000000000000..45569c5cc064
--- /dev/null
+++ b/math/pow_log_data.c
@@ -0,0 +1,184 @@
+/*
+ * Data for the log part of pow.
+ *
+ * Copyright (c) 2018, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+#define N (1 << POW_LOG_TABLE_BITS)
+
+const struct pow_log_data __pow_log_data = {
+.ln2hi = 0x1.62e42fefa3800p-1,
+.ln2lo = 0x1.ef35793c76730p-45,
+.poly = {
+#if N == 128 && POW_LOG_POLY_ORDER == 8
+// relative error: 0x1.11922ap-70
+// in -0x1.6bp-8 0x1.6bp-8
+// Coefficients are scaled to match the scaling during evaluation.
+-0x1p-1,
+0x1.555555555556p-2 * -2,
+-0x1.0000000000006p-2 * -2,
+0x1.999999959554ep-3 * 4,
+-0x1.555555529a47ap-3 * 4,
+0x1.2495b9b4845e9p-3 * -8,
+-0x1.0002b8b263fc3p-3 * -8,
+#endif
+},
+/* Algorithm:
+
+ x = 2^k z
+ log(x) = k ln2 + log(c) + log(z/c)
+ log(z/c) = poly(z/c - 1)
+
+where z is in [0x1.69555p-1; 0x1.69555p0] which is split into N subintervals
+and z falls into the ith one, then table entries are computed as
+
+ tab[i].invc = 1/c
+ tab[i].logc = round(0x1p43*log(c))/0x1p43
+ tab[i].logctail = (double)(log(c) - logc)
+
+where c is chosen near the center of the subinterval such that 1/c has only a
+few precision bits so z/c - 1 is exactly representible as double:
+
+ 1/c = center < 1 ? round(N/center)/N : round(2*N/center)/N/2
+
+Note: |z/c - 1| < 1/N for the chosen c, |log(c) - logc - logctail| < 0x1p-97,
+the last few bits of logc are rounded away so k*ln2hi + logc has no rounding
+error and the interval for z is selected such that near x == 1, where log(x)
+is tiny, large cancellation error is avoided in logc + poly(z/c - 1). */
+.tab = {
+#if N == 128
+#define A(a, b, c) {a, 0, b, c},
+A(0x1.6a00000000000p+0, -0x1.62c82f2b9c800p-2, 0x1.ab42428375680p-48)
+A(0x1.6800000000000p+0, -0x1.5d1bdbf580800p-2, -0x1.ca508d8e0f720p-46)
+A(0x1.6600000000000p+0, -0x1.5767717455800p-2, -0x1.362a4d5b6506dp-45)
+A(0x1.6400000000000p+0, -0x1.51aad872df800p-2, -0x1.684e49eb067d5p-49)
+A(0x1.6200000000000p+0, -0x1.4be5f95777800p-2, -0x1.41b6993293ee0p-47)
+A(0x1.6000000000000p+0, -0x1.4618bc21c6000p-2, 0x1.3d82f484c84ccp-46)
+A(0x1.5e00000000000p+0, -0x1.404308686a800p-2, 0x1.c42f3ed820b3ap-50)
+A(0x1.5c00000000000p+0, -0x1.3a64c55694800p-2, 0x1.0b1c686519460p-45)
+A(0x1.5a00000000000p+0, -0x1.347dd9a988000p-2, 0x1.5594dd4c58092p-45)
+A(0x1.5800000000000p+0, -0x1.2e8e2bae12000p-2, 0x1.67b1e99b72bd8p-45)
+A(0x1.5600000000000p+0, -0x1.2895a13de8800p-2, 0x1.5ca14b6cfb03fp-46)
+A(0x1.5600000000000p+0, -0x1.2895a13de8800p-2, 0x1.5ca14b6cfb03fp-46)
+A(0x1.5400000000000p+0, -0x1.22941fbcf7800p-2, -0x1.65a242853da76p-46)
+A(0x1.5200000000000p+0, -0x1.1c898c1699800p-2, -0x1.fafbc68e75404p-46)
+A(0x1.5000000000000p+0, -0x1.1675cababa800p-2, 0x1.f1fc63382a8f0p-46)
+A(0x1.4e00000000000p+0, -0x1.1058bf9ae4800p-2, -0x1.6a8c4fd055a66p-45)
+A(0x1.4c00000000000p+0, -0x1.0a324e2739000p-2, -0x1.c6bee7ef4030ep-47)
+A(0x1.4a00000000000p+0, -0x1.0402594b4d000p-2, -0x1.036b89ef42d7fp-48)
+A(0x1.4a00000000000p+0, -0x1.0402594b4d000p-2, -0x1.036b89ef42d7fp-48)
+A(0x1.4800000000000p+0, -0x1.fb9186d5e4000p-3, 0x1.d572aab993c87p-47)
+A(0x1.4600000000000p+0, -0x1.ef0adcbdc6000p-3, 0x1.b26b79c86af24p-45)
+A(0x1.4400000000000p+0, -0x1.e27076e2af000p-3, -0x1.72f4f543fff10p-46)
+A(0x1.4200000000000p+0, -0x1.d5c216b4fc000p-3, 0x1.1ba91bbca681bp-45)
+A(0x1.4000000000000p+0, -0x1.c8ff7c79aa000p-3, 0x1.7794f689f8434p-45)
+A(0x1.4000000000000p+0, -0x1.c8ff7c79aa000p-3, 0x1.7794f689f8434p-45)
+A(0x1.3e00000000000p+0, -0x1.bc286742d9000p-3, 0x1.94eb0318bb78fp-46)
+A(0x1.3c00000000000p+0, -0x1.af3c94e80c000p-3, 0x1.a4e633fcd9066p-52)
+A(0x1.3a00000000000p+0, -0x1.a23bc1fe2b000p-3, -0x1.58c64dc46c1eap-45)
+A(0x1.3a00000000000p+0, -0x1.a23bc1fe2b000p-3, -0x1.58c64dc46c1eap-45)
+A(0x1.3800000000000p+0, -0x1.9525a9cf45000p-3, -0x1.ad1d904c1d4e3p-45)
+A(0x1.3600000000000p+0, -0x1.87fa06520d000p-3, 0x1.bbdbf7fdbfa09p-45)
+A(0x1.3400000000000p+0, -0x1.7ab890210e000p-3, 0x1.bdb9072534a58p-45)
+A(0x1.3400000000000p+0, -0x1.7ab890210e000p-3, 0x1.bdb9072534a58p-45)
+A(0x1.3200000000000p+0, -0x1.6d60fe719d000p-3, -0x1.0e46aa3b2e266p-46)
+A(0x1.3000000000000p+0, -0x1.5ff3070a79000p-3, -0x1.e9e439f105039p-46)
+A(0x1.3000000000000p+0, -0x1.5ff3070a79000p-3, -0x1.e9e439f105039p-46)
+A(0x1.2e00000000000p+0, -0x1.526e5e3a1b000p-3, -0x1.0de8b90075b8fp-45)
+A(0x1.2c00000000000p+0, -0x1.44d2b6ccb8000p-3, 0x1.70cc16135783cp-46)
+A(0x1.2c00000000000p+0, -0x1.44d2b6ccb8000p-3, 0x1.70cc16135783cp-46)
+A(0x1.2a00000000000p+0, -0x1.371fc201e9000p-3, 0x1.178864d27543ap-48)
+A(0x1.2800000000000p+0, -0x1.29552f81ff000p-3, -0x1.48d301771c408p-45)
+A(0x1.2600000000000p+0, -0x1.1b72ad52f6000p-3, -0x1.e80a41811a396p-45)
+A(0x1.2600000000000p+0, -0x1.1b72ad52f6000p-3, -0x1.e80a41811a396p-45)
+A(0x1.2400000000000p+0, -0x1.0d77e7cd09000p-3, 0x1.a699688e85bf4p-47)
+A(0x1.2400000000000p+0, -0x1.0d77e7cd09000p-3, 0x1.a699688e85bf4p-47)
+A(0x1.2200000000000p+0, -0x1.fec9131dbe000p-4, -0x1.575545ca333f2p-45)
+A(0x1.2000000000000p+0, -0x1.e27076e2b0000p-4, 0x1.a342c2af0003cp-45)
+A(0x1.2000000000000p+0, -0x1.e27076e2b0000p-4, 0x1.a342c2af0003cp-45)
+A(0x1.1e00000000000p+0, -0x1.c5e548f5bc000p-4, -0x1.d0c57585fbe06p-46)
+A(0x1.1c00000000000p+0, -0x1.a926d3a4ae000p-4, 0x1.53935e85baac8p-45)
+A(0x1.1c00000000000p+0, -0x1.a926d3a4ae000p-4, 0x1.53935e85baac8p-45)
+A(0x1.1a00000000000p+0, -0x1.8c345d631a000p-4, 0x1.37c294d2f5668p-46)
+A(0x1.1a00000000000p+0, -0x1.8c345d631a000p-4, 0x1.37c294d2f5668p-46)
+A(0x1.1800000000000p+0, -0x1.6f0d28ae56000p-4, -0x1.69737c93373dap-45)
+A(0x1.1600000000000p+0, -0x1.51b073f062000p-4, 0x1.f025b61c65e57p-46)
+A(0x1.1600000000000p+0, -0x1.51b073f062000p-4, 0x1.f025b61c65e57p-46)
+A(0x1.1400000000000p+0, -0x1.341d7961be000p-4, 0x1.c5edaccf913dfp-45)
+A(0x1.1400000000000p+0, -0x1.341d7961be000p-4, 0x1.c5edaccf913dfp-45)
+A(0x1.1200000000000p+0, -0x1.16536eea38000p-4, 0x1.47c5e768fa309p-46)
+A(0x1.1000000000000p+0, -0x1.f0a30c0118000p-5, 0x1.d599e83368e91p-45)
+A(0x1.1000000000000p+0, -0x1.f0a30c0118000p-5, 0x1.d599e83368e91p-45)
+A(0x1.0e00000000000p+0, -0x1.b42dd71198000p-5, 0x1.c827ae5d6704cp-46)
+A(0x1.0e00000000000p+0, -0x1.b42dd71198000p-5, 0x1.c827ae5d6704cp-46)
+A(0x1.0c00000000000p+0, -0x1.77458f632c000p-5, -0x1.cfc4634f2a1eep-45)
+A(0x1.0c00000000000p+0, -0x1.77458f632c000p-5, -0x1.cfc4634f2a1eep-45)
+A(0x1.0a00000000000p+0, -0x1.39e87b9fec000p-5, 0x1.502b7f526feaap-48)
+A(0x1.0a00000000000p+0, -0x1.39e87b9fec000p-5, 0x1.502b7f526feaap-48)
+A(0x1.0800000000000p+0, -0x1.f829b0e780000p-6, -0x1.980267c7e09e4p-45)
+A(0x1.0800000000000p+0, -0x1.f829b0e780000p-6, -0x1.980267c7e09e4p-45)
+A(0x1.0600000000000p+0, -0x1.7b91b07d58000p-6, -0x1.88d5493faa639p-45)
+A(0x1.0400000000000p+0, -0x1.fc0a8b0fc0000p-7, -0x1.f1e7cf6d3a69cp-50)
+A(0x1.0400000000000p+0, -0x1.fc0a8b0fc0000p-7, -0x1.f1e7cf6d3a69cp-50)
+A(0x1.0200000000000p+0, -0x1.fe02a6b100000p-8, -0x1.9e23f0dda40e4p-46)
+A(0x1.0200000000000p+0, -0x1.fe02a6b100000p-8, -0x1.9e23f0dda40e4p-46)
+A(0x1.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0)
+A(0x1.0000000000000p+0, 0x0.0000000000000p+0, 0x0.0000000000000p+0)
+A(0x1.fc00000000000p-1, 0x1.0101575890000p-7, -0x1.0c76b999d2be8p-46)
+A(0x1.f800000000000p-1, 0x1.0205658938000p-6, -0x1.3dc5b06e2f7d2p-45)
+A(0x1.f400000000000p-1, 0x1.8492528c90000p-6, -0x1.aa0ba325a0c34p-45)
+A(0x1.f000000000000p-1, 0x1.0415d89e74000p-5, 0x1.111c05cf1d753p-47)
+A(0x1.ec00000000000p-1, 0x1.466aed42e0000p-5, -0x1.c167375bdfd28p-45)
+A(0x1.e800000000000p-1, 0x1.894aa149fc000p-5, -0x1.97995d05a267dp-46)
+A(0x1.e400000000000p-1, 0x1.ccb73cdddc000p-5, -0x1.a68f247d82807p-46)
+A(0x1.e200000000000p-1, 0x1.eea31c006c000p-5, -0x1.e113e4fc93b7bp-47)
+A(0x1.de00000000000p-1, 0x1.1973bd1466000p-4, -0x1.5325d560d9e9bp-45)
+A(0x1.da00000000000p-1, 0x1.3bdf5a7d1e000p-4, 0x1.cc85ea5db4ed7p-45)
+A(0x1.d600000000000p-1, 0x1.5e95a4d97a000p-4, -0x1.c69063c5d1d1ep-45)
+A(0x1.d400000000000p-1, 0x1.700d30aeac000p-4, 0x1.c1e8da99ded32p-49)
+A(0x1.d000000000000p-1, 0x1.9335e5d594000p-4, 0x1.3115c3abd47dap-45)
+A(0x1.cc00000000000p-1, 0x1.b6ac88dad6000p-4, -0x1.390802bf768e5p-46)
+A(0x1.ca00000000000p-1, 0x1.c885801bc4000p-4, 0x1.646d1c65aacd3p-45)
+A(0x1.c600000000000p-1, 0x1.ec739830a2000p-4, -0x1.dc068afe645e0p-45)
+A(0x1.c400000000000p-1, 0x1.fe89139dbe000p-4, -0x1.534d64fa10afdp-45)
+A(0x1.c000000000000p-1, 0x1.1178e8227e000p-3, 0x1.1ef78ce2d07f2p-45)
+A(0x1.be00000000000p-1, 0x1.1aa2b7e23f000p-3, 0x1.ca78e44389934p-45)
+A(0x1.ba00000000000p-1, 0x1.2d1610c868000p-3, 0x1.39d6ccb81b4a1p-47)
+A(0x1.b800000000000p-1, 0x1.365fcb0159000p-3, 0x1.62fa8234b7289p-51)
+A(0x1.b400000000000p-1, 0x1.4913d8333b000p-3, 0x1.5837954fdb678p-45)
+A(0x1.b200000000000p-1, 0x1.527e5e4a1b000p-3, 0x1.633e8e5697dc7p-45)
+A(0x1.ae00000000000p-1, 0x1.6574ebe8c1000p-3, 0x1.9cf8b2c3c2e78p-46)
+A(0x1.ac00000000000p-1, 0x1.6f0128b757000p-3, -0x1.5118de59c21e1p-45)
+A(0x1.aa00000000000p-1, 0x1.7898d85445000p-3, -0x1.c661070914305p-46)
+A(0x1.a600000000000p-1, 0x1.8beafeb390000p-3, -0x1.73d54aae92cd1p-47)
+A(0x1.a400000000000p-1, 0x1.95a5adcf70000p-3, 0x1.7f22858a0ff6fp-47)
+A(0x1.a000000000000p-1, 0x1.a93ed3c8ae000p-3, -0x1.8724350562169p-45)
+A(0x1.9e00000000000p-1, 0x1.b31d8575bd000p-3, -0x1.c358d4eace1aap-47)
+A(0x1.9c00000000000p-1, 0x1.bd087383be000p-3, -0x1.d4bc4595412b6p-45)
+A(0x1.9a00000000000p-1, 0x1.c6ffbc6f01000p-3, -0x1.1ec72c5962bd2p-48)
+A(0x1.9600000000000p-1, 0x1.db13db0d49000p-3, -0x1.aff2af715b035p-45)
+A(0x1.9400000000000p-1, 0x1.e530effe71000p-3, 0x1.212276041f430p-51)
+A(0x1.9200000000000p-1, 0x1.ef5ade4dd0000p-3, -0x1.a211565bb8e11p-51)
+A(0x1.9000000000000p-1, 0x1.f991c6cb3b000p-3, 0x1.bcbecca0cdf30p-46)
+A(0x1.8c00000000000p-1, 0x1.07138604d5800p-2, 0x1.89cdb16ed4e91p-48)
+A(0x1.8a00000000000p-1, 0x1.0c42d67616000p-2, 0x1.7188b163ceae9p-45)
+A(0x1.8800000000000p-1, 0x1.1178e8227e800p-2, -0x1.c210e63a5f01cp-45)
+A(0x1.8600000000000p-1, 0x1.16b5ccbacf800p-2, 0x1.b9acdf7a51681p-45)
+A(0x1.8400000000000p-1, 0x1.1bf99635a6800p-2, 0x1.ca6ed5147bdb7p-45)
+A(0x1.8200000000000p-1, 0x1.214456d0eb800p-2, 0x1.a87deba46baeap-47)
+A(0x1.7e00000000000p-1, 0x1.2bef07cdc9000p-2, 0x1.a9cfa4a5004f4p-45)
+A(0x1.7c00000000000p-1, 0x1.314f1e1d36000p-2, -0x1.8e27ad3213cb8p-45)
+A(0x1.7a00000000000p-1, 0x1.36b6776be1000p-2, 0x1.16ecdb0f177c8p-46)
+A(0x1.7800000000000p-1, 0x1.3c25277333000p-2, 0x1.83b54b606bd5cp-46)
+A(0x1.7600000000000p-1, 0x1.419b423d5e800p-2, 0x1.8e436ec90e09dp-47)
+A(0x1.7400000000000p-1, 0x1.4718dc271c800p-2, -0x1.f27ce0967d675p-45)
+A(0x1.7200000000000p-1, 0x1.4c9e09e173000p-2, -0x1.e20891b0ad8a4p-45)
+A(0x1.7000000000000p-1, 0x1.522ae0738a000p-2, 0x1.ebe708164c759p-45)
+A(0x1.6e00000000000p-1, 0x1.57bf753c8d000p-2, 0x1.fadedee5d40efp-46)
+A(0x1.6c00000000000p-1, 0x1.5d5bddf596000p-2, -0x1.a0b2a08a465dcp-47)
+#endif
+},
+};
diff --git a/math/powf.c b/math/powf.c
new file mode 100644
index 000000000000..6ba45d3852a5
--- /dev/null
+++ b/math/powf.c
@@ -0,0 +1,221 @@
+/*
+ * Single-precision pow function.
+ *
+ * Copyright (c) 2017-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <math.h>
+#include <stdint.h>
+#include "math_config.h"
+
+/*
+POWF_LOG2_POLY_ORDER = 5
+EXP2F_TABLE_BITS = 5
+
+ULP error: 0.82 (~ 0.5 + relerr*2^24)
+relerr: 1.27 * 2^-26 (Relative error ~= 128*Ln2*relerr_log2 + relerr_exp2)
+relerr_log2: 1.83 * 2^-33 (Relative error of logx.)
+relerr_exp2: 1.69 * 2^-34 (Relative error of exp2(ylogx).)
+*/
+
+#define N (1 << POWF_LOG2_TABLE_BITS)
+#define T __powf_log2_data.tab
+#define A __powf_log2_data.poly
+#define OFF 0x3f330000
+
+/* Subnormal input is normalized so ix has negative biased exponent.
+ Output is multiplied by N (POWF_SCALE) if TOINT_INTRINICS is set. */
+static inline double_t
+log2_inline (uint32_t ix)
+{
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t z, r, r2, r4, p, q, y, y0, invc, logc;
+ uint32_t iz, top, tmp;
+ int k, i;
+
+ /* x = 2^k z; where z is in range [OFF,2*OFF] and exact.
+ The range is split into N subintervals.
+ The ith subinterval contains z and c is near its center. */
+ tmp = ix - OFF;
+ i = (tmp >> (23 - POWF_LOG2_TABLE_BITS)) % N;
+ top = tmp & 0xff800000;
+ iz = ix - top;
+ k = (int32_t) top >> (23 - POWF_SCALE_BITS); /* arithmetic shift */
+ invc = T[i].invc;
+ logc = T[i].logc;
+ z = (double_t) asfloat (iz);
+
+ /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */
+ r = z * invc - 1;
+ y0 = logc + (double_t) k;
+
+ /* Pipelined polynomial evaluation to approximate log1p(r)/ln2. */
+ r2 = r * r;
+ y = A[0] * r + A[1];
+ p = A[2] * r + A[3];
+ r4 = r2 * r2;
+ q = A[4] * r + y0;
+ q = p * r2 + q;
+ y = y * r4 + q;
+ return y;
+}
+
+#undef N
+#undef T
+#define N (1 << EXP2F_TABLE_BITS)
+#define T __exp2f_data.tab
+#define SIGN_BIAS (1 << (EXP2F_TABLE_BITS + 11))
+
+/* The output of log2 and thus the input of exp2 is either scaled by N
+ (in case of fast toint intrinsics) or not. The unscaled xd must be
+ in [-1021,1023], sign_bias sets the sign of the result. */
+static inline float
+exp2_inline (double_t xd, uint32_t sign_bias)
+{
+ uint64_t ki, ski, t;
+ /* double_t for better performance on targets with FLT_EVAL_METHOD==2. */
+ double_t kd, z, r, r2, y, s;
+
+#if TOINT_INTRINSICS
+# define C __exp2f_data.poly_scaled
+ /* N*x = k + r with r in [-1/2, 1/2] */
+ kd = roundtoint (xd); /* k */
+ ki = converttoint (xd);
+#else
+# define C __exp2f_data.poly
+# define SHIFT __exp2f_data.shift_scaled
+ /* x = k/N + r with r in [-1/(2N), 1/(2N)] */
+ kd = eval_as_double (xd + SHIFT);
+ ki = asuint64 (kd);
+ kd -= SHIFT; /* k/N */
+#endif
+ r = xd - kd;
+
+ /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */
+ t = T[ki % N];
+ ski = ki + sign_bias;
+ t += ski << (52 - EXP2F_TABLE_BITS);
+ s = asdouble (t);
+ z = C[0] * r + C[1];
+ r2 = r * r;
+ y = C[2] * r + 1;
+ y = z * r2 + y;
+ y = y * s;
+ return eval_as_float (y);
+}
+
+/* Returns 0 if not int, 1 if odd int, 2 if even int. The argument is
+ the bit representation of a non-zero finite floating-point value. */
+static inline int
+checkint (uint32_t iy)
+{
+ int e = iy >> 23 & 0xff;
+ if (e < 0x7f)
+ return 0;
+ if (e > 0x7f + 23)
+ return 2;
+ if (iy & ((1 << (0x7f + 23 - e)) - 1))
+ return 0;
+ if (iy & (1 << (0x7f + 23 - e)))
+ return 1;
+ return 2;
+}
+
+static inline int
+zeroinfnan (uint32_t ix)
+{
+ return 2 * ix - 1 >= 2u * 0x7f800000 - 1;
+}
+
+float
+powf (float x, float y)
+{
+ uint32_t sign_bias = 0;
+ uint32_t ix, iy;
+
+ ix = asuint (x);
+ iy = asuint (y);
+ if (unlikely (ix - 0x00800000 >= 0x7f800000 - 0x00800000 || zeroinfnan (iy)))
+ {
+ /* Either (x < 0x1p-126 or inf or nan) or (y is 0 or inf or nan). */
+ if (unlikely (zeroinfnan (iy)))
+ {
+ if (2 * iy == 0)
+ return issignalingf_inline (x) ? x + y : 1.0f;
+ if (ix == 0x3f800000)
+ return issignalingf_inline (y) ? x + y : 1.0f;
+ if (2 * ix > 2u * 0x7f800000 || 2 * iy > 2u * 0x7f800000)
+ return x + y;
+ if (2 * ix == 2 * 0x3f800000)
+ return 1.0f;
+ if ((2 * ix < 2 * 0x3f800000) == !(iy & 0x80000000))
+ return 0.0f; /* |x|<1 && y==inf or |x|>1 && y==-inf. */
+ return y * y;
+ }
+ if (unlikely (zeroinfnan (ix)))
+ {
+ float_t x2 = x * x;
+ if (ix & 0x80000000 && checkint (iy) == 1)
+ {
+ x2 = -x2;
+ sign_bias = 1;
+ }
+#if WANT_ERRNO
+ if (2 * ix == 0 && iy & 0x80000000)
+ return __math_divzerof (sign_bias);
+#endif
+ /* Without the barrier some versions of clang hoist the 1/x2 and
+ thus division by zero exception can be signaled spuriously. */
+ return iy & 0x80000000 ? opt_barrier_float (1 / x2) : x2;
+ }
+ /* x and y are non-zero finite. */
+ if (ix & 0x80000000)
+ {
+ /* Finite x < 0. */
+ int yint = checkint (iy);
+ if (yint == 0)
+ return __math_invalidf (x);
+ if (yint == 1)
+ sign_bias = SIGN_BIAS;
+ ix &= 0x7fffffff;
+ }
+ if (ix < 0x00800000)
+ {
+ /* Normalize subnormal x so exponent becomes negative. */
+ ix = asuint (x * 0x1p23f);
+ ix &= 0x7fffffff;
+ ix -= 23 << 23;
+ }
+ }
+ double_t logx = log2_inline (ix);
+ double_t ylogx = y * logx; /* Note: cannot overflow, y is single prec. */
+ if (unlikely ((asuint64 (ylogx) >> 47 & 0xffff)
+ >= asuint64 (126.0 * POWF_SCALE) >> 47))
+ {
+ /* |y*log(x)| >= 126. */
+ if (ylogx > 0x1.fffffffd1d571p+6 * POWF_SCALE)
+ /* |x^y| > 0x1.ffffffp127. */
+ return __math_oflowf (sign_bias);
+ if (WANT_ROUNDING && WANT_ERRNO
+ && ylogx > 0x1.fffffffa3aae2p+6 * POWF_SCALE)
+ /* |x^y| > 0x1.fffffep127, check if we round away from 0. */
+ if ((!sign_bias
+ && eval_as_float (1.0f + opt_barrier_float (0x1p-25f)) != 1.0f)
+ || (sign_bias
+ && eval_as_float (-1.0f - opt_barrier_float (0x1p-25f))
+ != -1.0f))
+ return __math_oflowf (sign_bias);
+ if (ylogx <= -150.0 * POWF_SCALE)
+ return __math_uflowf (sign_bias);
+#if WANT_ERRNO_UFLOW
+ if (ylogx < -149.0 * POWF_SCALE)
+ return __math_may_uflowf (sign_bias);
+#endif
+ }
+ return exp2_inline (ylogx, sign_bias);
+}
+#if USE_GLIBC_ABI
+strong_alias (powf, __powf_finite)
+hidden_alias (powf, __ieee754_powf)
+#endif
diff --git a/math/powf_log2_data.c b/math/powf_log2_data.c
new file mode 100644
index 000000000000..97e0d98cdbab
--- /dev/null
+++ b/math/powf_log2_data.c
@@ -0,0 +1,34 @@
+/*
+ * Data definition for powf.
+ *
+ * Copyright (c) 2017-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "math_config.h"
+
+const struct powf_log2_data __powf_log2_data = {
+ .tab = {
+ { 0x1.661ec79f8f3bep+0, -0x1.efec65b963019p-2 * POWF_SCALE },
+ { 0x1.571ed4aaf883dp+0, -0x1.b0b6832d4fca4p-2 * POWF_SCALE },
+ { 0x1.49539f0f010bp+0, -0x1.7418b0a1fb77bp-2 * POWF_SCALE },
+ { 0x1.3c995b0b80385p+0, -0x1.39de91a6dcf7bp-2 * POWF_SCALE },
+ { 0x1.30d190c8864a5p+0, -0x1.01d9bf3f2b631p-2 * POWF_SCALE },
+ { 0x1.25e227b0b8eap+0, -0x1.97c1d1b3b7afp-3 * POWF_SCALE },
+ { 0x1.1bb4a4a1a343fp+0, -0x1.2f9e393af3c9fp-3 * POWF_SCALE },
+ { 0x1.12358f08ae5bap+0, -0x1.960cbbf788d5cp-4 * POWF_SCALE },
+ { 0x1.0953f419900a7p+0, -0x1.a6f9db6475fcep-5 * POWF_SCALE },
+ { 0x1p+0, 0x0p+0 * POWF_SCALE },
+ { 0x1.e608cfd9a47acp-1, 0x1.338ca9f24f53dp-4 * POWF_SCALE },
+ { 0x1.ca4b31f026aap-1, 0x1.476a9543891bap-3 * POWF_SCALE },
+ { 0x1.b2036576afce6p-1, 0x1.e840b4ac4e4d2p-3 * POWF_SCALE },
+ { 0x1.9c2d163a1aa2dp-1, 0x1.40645f0c6651cp-2 * POWF_SCALE },
+ { 0x1.886e6037841edp-1, 0x1.88e9c2c1b9ff8p-2 * POWF_SCALE },
+ { 0x1.767dcf5534862p-1, 0x1.ce0a44eb17bccp-2 * POWF_SCALE },
+ },
+ .poly = {
+ 0x1.27616c9496e0bp-2 * POWF_SCALE, -0x1.71969a075c67ap-2 * POWF_SCALE,
+ 0x1.ec70a6ca7baddp-2 * POWF_SCALE, -0x1.7154748bef6c8p-1 * POWF_SCALE,
+ 0x1.71547652ab82bp0 * POWF_SCALE,
+ }
+};
diff --git a/math/s_cos.c b/math/s_cos.c
new file mode 100644
index 000000000000..53a95b0adfde
--- /dev/null
+++ b/math/s_cos.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_cos.c"
diff --git a/math/s_cosf.c b/math/s_cosf.c
new file mode 100644
index 000000000000..914c02eba651
--- /dev/null
+++ b/math/s_cosf.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_cosf.c"
diff --git a/math/s_exp.c b/math/s_exp.c
new file mode 100644
index 000000000000..ac7246b2c100
--- /dev/null
+++ b/math/s_exp.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_exp.c"
diff --git a/math/s_exp2f.c b/math/s_exp2f.c
new file mode 100644
index 000000000000..df7dfd680ff4
--- /dev/null
+++ b/math/s_exp2f.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_exp2f.c"
diff --git a/math/s_exp2f_1u.c b/math/s_exp2f_1u.c
new file mode 100644
index 000000000000..5e3852b41d83
--- /dev/null
+++ b/math/s_exp2f_1u.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_exp2f_1u.c"
diff --git a/math/s_expf.c b/math/s_expf.c
new file mode 100644
index 000000000000..3492c460733d
--- /dev/null
+++ b/math/s_expf.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_expf.c"
diff --git a/math/s_expf_1u.c b/math/s_expf_1u.c
new file mode 100644
index 000000000000..eb7bbcba5566
--- /dev/null
+++ b/math/s_expf_1u.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_expf_1u.c"
diff --git a/math/s_log.c b/math/s_log.c
new file mode 100644
index 000000000000..23289cf948ec
--- /dev/null
+++ b/math/s_log.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_log.c"
diff --git a/math/s_logf.c b/math/s_logf.c
new file mode 100644
index 000000000000..9399350fc1ee
--- /dev/null
+++ b/math/s_logf.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_logf.c"
diff --git a/math/s_pow.c b/math/s_pow.c
new file mode 100644
index 000000000000..2e34c9f896d6
--- /dev/null
+++ b/math/s_pow.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_pow.c"
diff --git a/math/s_powf.c b/math/s_powf.c
new file mode 100644
index 000000000000..6d91a4a72b37
--- /dev/null
+++ b/math/s_powf.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_powf.c"
diff --git a/math/s_sin.c b/math/s_sin.c
new file mode 100644
index 000000000000..06982c2018c6
--- /dev/null
+++ b/math/s_sin.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_sin.c"
diff --git a/math/s_sinf.c b/math/s_sinf.c
new file mode 100644
index 000000000000..68ca90853736
--- /dev/null
+++ b/math/s_sinf.c
@@ -0,0 +1,6 @@
+/*
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#define SCALAR 1
+#include "v_sinf.c"
diff --git a/math/sincosf.c b/math/sincosf.c
new file mode 100644
index 000000000000..9746f1c22e6c
--- /dev/null
+++ b/math/sincosf.c
@@ -0,0 +1,79 @@
+/*
+ * Single-precision sin/cos function.
+ *
+ * Copyright (c) 2018-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <math.h>
+#include "math_config.h"
+#include "sincosf.h"
+
+/* Fast sincosf implementation. Worst-case ULP is 0.5607, maximum relative
+ error is 0.5303 * 2^-23. A single-step range reduction is used for
+ small values. Large inputs have their range reduced using fast integer
+ arithmetic. */
+void
+sincosf (float y, float *sinp, float *cosp)
+{
+ double x = y;
+ double s;
+ int n;
+ const sincos_t *p = &__sincosf_table[0];
+
+ if (abstop12 (y) < abstop12 (pio4))
+ {
+ double x2 = x * x;
+
+ if (unlikely (abstop12 (y) < abstop12 (0x1p-12f)))
+ {
+ if (unlikely (abstop12 (y) < abstop12 (0x1p-126f)))
+ /* Force underflow for tiny y. */
+ force_eval_float (x2);
+ *sinp = y;
+ *cosp = 1.0f;
+ return;
+ }
+
+ sincosf_poly (x, x2, p, 0, sinp, cosp);
+ }
+ else if (abstop12 (y) < abstop12 (120.0f))
+ {
+ x = reduce_fast (x, p, &n);
+
+ /* Setup the signs for sin and cos. */
+ s = p->sign[n & 3];
+
+ if (n & 2)
+ p = &__sincosf_table[1];
+
+ sincosf_poly (x * s, x * x, p, n, sinp, cosp);
+ }
+ else if (likely (abstop12 (y) < abstop12 (INFINITY)))
+ {
+ uint32_t xi = asuint (y);
+ int sign = xi >> 31;
+
+ x = reduce_large (xi, &n);
+
+ /* Setup signs for sin and cos - include original sign. */
+ s = p->sign[(n + sign) & 3];
+
+ if ((n + sign) & 2)
+ p = &__sincosf_table[1];
+
+ sincosf_poly (x * s, x * x, p, n, sinp, cosp);
+ }
+ else
+ {
+ /* Return NaN if Inf or NaN for both sin and cos. */
+ *sinp = *cosp = y - y;
+#if WANT_ERRNO
+ /* Needed to set errno for +-Inf, the add is a hack to work
+ around a gcc register allocation issue: just passing y
+ affects code generation in the fast path. */
+ __math_invalidf (y + y);
+#endif
+ }
+}
diff --git a/math/sincosf.h b/math/sincosf.h
new file mode 100644
index 000000000000..1e80fc9ba8e1
--- /dev/null
+++ b/math/sincosf.h
@@ -0,0 +1,153 @@
+/*
+ * Header for sinf, cosf and sincosf.
+ *
+ * Copyright (c) 2018, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <math.h>
+#include "math_config.h"
+
+/* 2PI * 2^-64. */
+static const double pi63 = 0x1.921FB54442D18p-62;
+/* PI / 4. */
+static const double pio4 = 0x1.921FB54442D18p-1;
+
+/* The constants and polynomials for sine and cosine. */
+typedef struct
+{
+ double sign[4]; /* Sign of sine in quadrants 0..3. */
+ double hpi_inv; /* 2 / PI ( * 2^24 if !TOINT_INTRINSICS). */
+ double hpi; /* PI / 2. */
+ double c0, c1, c2, c3, c4; /* Cosine polynomial. */
+ double s1, s2, s3; /* Sine polynomial. */
+} sincos_t;
+
+/* Polynomial data (the cosine polynomial is negated in the 2nd entry). */
+extern const sincos_t __sincosf_table[2] HIDDEN;
+
+/* Table with 4/PI to 192 bit precision. */
+extern const uint32_t __inv_pio4[] HIDDEN;
+
+/* Top 12 bits of the float representation with the sign bit cleared. */
+static inline uint32_t
+abstop12 (float x)
+{
+ return (asuint (x) >> 20) & 0x7ff;
+}
+
+/* Compute the sine and cosine of inputs X and X2 (X squared), using the
+ polynomial P and store the results in SINP and COSP. N is the quadrant,
+ if odd the cosine and sine polynomials are swapped. */
+static inline void
+sincosf_poly (double x, double x2, const sincos_t *p, int n, float *sinp,
+ float *cosp)
+{
+ double x3, x4, x5, x6, s, c, c1, c2, s1;
+
+ x4 = x2 * x2;
+ x3 = x2 * x;
+ c2 = p->c3 + x2 * p->c4;
+ s1 = p->s2 + x2 * p->s3;
+
+ /* Swap sin/cos result based on quadrant. */
+ float *tmp = (n & 1 ? cosp : sinp);
+ cosp = (n & 1 ? sinp : cosp);
+ sinp = tmp;
+
+ c1 = p->c0 + x2 * p->c1;
+ x5 = x3 * x2;
+ x6 = x4 * x2;
+
+ s = x + x3 * p->s1;
+ c = c1 + x4 * p->c2;
+
+ *sinp = s + x5 * s1;
+ *cosp = c + x6 * c2;
+}
+
+/* Return the sine of inputs X and X2 (X squared) using the polynomial P.
+ N is the quadrant, and if odd the cosine polynomial is used. */
+static inline float
+sinf_poly (double x, double x2, const sincos_t *p, int n)
+{
+ double x3, x4, x6, x7, s, c, c1, c2, s1;
+
+ if ((n & 1) == 0)
+ {
+ x3 = x * x2;
+ s1 = p->s2 + x2 * p->s3;
+
+ x7 = x3 * x2;
+ s = x + x3 * p->s1;
+
+ return s + x7 * s1;
+ }
+ else
+ {
+ x4 = x2 * x2;
+ c2 = p->c3 + x2 * p->c4;
+ c1 = p->c0 + x2 * p->c1;
+
+ x6 = x4 * x2;
+ c = c1 + x4 * p->c2;
+
+ return c + x6 * c2;
+ }
+}
+
+/* Fast range reduction using single multiply-subtract. Return the modulo of
+ X as a value between -PI/4 and PI/4 and store the quadrant in NP.
+ The values for PI/2 and 2/PI are accessed via P. Since PI/2 as a double
+ is accurate to 55 bits and the worst-case cancellation happens at 6 * PI/4,
+ the result is accurate for |X| <= 120.0. */
+static inline double
+reduce_fast (double x, const sincos_t *p, int *np)
+{
+ double r;
+#if TOINT_INTRINSICS
+ /* Use fast round and lround instructions when available. */
+ r = x * p->hpi_inv;
+ *np = converttoint (r);
+ return x - roundtoint (r) * p->hpi;
+#else
+ /* Use scaled float to int conversion with explicit rounding.
+ hpi_inv is prescaled by 2^24 so the quadrant ends up in bits 24..31.
+ This avoids inaccuracies introduced by truncating negative values. */
+ r = x * p->hpi_inv;
+ int n = ((int32_t)r + 0x800000) >> 24;
+ *np = n;
+ return x - n * p->hpi;
+#endif
+}
+
+/* Reduce the range of XI to a multiple of PI/2 using fast integer arithmetic.
+ XI is a reinterpreted float and must be >= 2.0f (the sign bit is ignored).
+ Return the modulo between -PI/4 and PI/4 and store the quadrant in NP.
+ Reduction uses a table of 4/PI with 192 bits of precision. A 32x96->128 bit
+ multiply computes the exact 2.62-bit fixed-point modulo. Since the result
+ can have at most 29 leading zeros after the binary point, the double
+ precision result is accurate to 33 bits. */
+static inline double
+reduce_large (uint32_t xi, int *np)
+{
+ const uint32_t *arr = &__inv_pio4[(xi >> 26) & 15];
+ int shift = (xi >> 23) & 7;
+ uint64_t n, res0, res1, res2;
+
+ xi = (xi & 0xffffff) | 0x800000;
+ xi <<= shift;
+
+ res0 = xi * arr[0];
+ res1 = (uint64_t)xi * arr[4];
+ res2 = (uint64_t)xi * arr[8];
+ res0 = (res2 >> 32) | (res0 << 32);
+ res0 += res1;
+
+ n = (res0 + (1ULL << 61)) >> 62;
+ res0 -= n << 62;
+ double x = (int64_t)res0;
+ *np = n;
+ return x * pi63;
+}
diff --git a/math/sincosf_data.c b/math/sincosf_data.c
new file mode 100644
index 000000000000..ab4ac4710fef
--- /dev/null
+++ b/math/sincosf_data.c
@@ -0,0 +1,63 @@
+/*
+ * Data definition for sinf, cosf and sincosf.
+ *
+ * Copyright (c) 2018-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <math.h>
+#include "math_config.h"
+#include "sincosf.h"
+
+/* The constants and polynomials for sine and cosine. The 2nd entry
+ computes -cos (x) rather than cos (x) to get negation for free. */
+const sincos_t __sincosf_table[2] =
+{
+ {
+ { 1.0, -1.0, -1.0, 1.0 },
+#if TOINT_INTRINSICS
+ 0x1.45F306DC9C883p-1,
+#else
+ 0x1.45F306DC9C883p+23,
+#endif
+ 0x1.921FB54442D18p0,
+ 0x1p0,
+ -0x1.ffffffd0c621cp-2,
+ 0x1.55553e1068f19p-5,
+ -0x1.6c087e89a359dp-10,
+ 0x1.99343027bf8c3p-16,
+ -0x1.555545995a603p-3,
+ 0x1.1107605230bc4p-7,
+ -0x1.994eb3774cf24p-13
+ },
+ {
+ { 1.0, -1.0, -1.0, 1.0 },
+#if TOINT_INTRINSICS
+ 0x1.45F306DC9C883p-1,
+#else
+ 0x1.45F306DC9C883p+23,
+#endif
+ 0x1.921FB54442D18p0,
+ -0x1p0,
+ 0x1.ffffffd0c621cp-2,
+ -0x1.55553e1068f19p-5,
+ 0x1.6c087e89a359dp-10,
+ -0x1.99343027bf8c3p-16,
+ -0x1.555545995a603p-3,
+ 0x1.1107605230bc4p-7,
+ -0x1.994eb3774cf24p-13
+ }
+};
+
+/* Table with 4/PI to 192 bit precision. To avoid unaligned accesses
+ only 8 new bits are added per entry, making the table 4 times larger. */
+const uint32_t __inv_pio4[24] =
+{
+ 0xa2, 0xa2f9, 0xa2f983, 0xa2f9836e,
+ 0xf9836e4e, 0x836e4e44, 0x6e4e4415, 0x4e441529,
+ 0x441529fc, 0x1529fc27, 0x29fc2757, 0xfc2757d1,
+ 0x2757d1f5, 0x57d1f534, 0xd1f534dd, 0xf534ddc0,
+ 0x34ddc0db, 0xddc0db62, 0xc0db6295, 0xdb629599,
+ 0x6295993c, 0x95993c43, 0x993c4390, 0x3c439041
+};
diff --git a/math/sinf.c b/math/sinf.c
new file mode 100644
index 000000000000..ddbc1daf74a9
--- /dev/null
+++ b/math/sinf.c
@@ -0,0 +1,67 @@
+/*
+ * Single-precision sin function.
+ *
+ * Copyright (c) 2018-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <math.h>
+#include "math_config.h"
+#include "sincosf.h"
+
+/* Fast sinf implementation. Worst-case ULP is 0.5607, maximum relative
+ error is 0.5303 * 2^-23. A single-step range reduction is used for
+ small values. Large inputs have their range reduced using fast integer
+ arithmetic. */
+float
+sinf (float y)
+{
+ double x = y;
+ double s;
+ int n;
+ const sincos_t *p = &__sincosf_table[0];
+
+ if (abstop12 (y) < abstop12 (pio4))
+ {
+ s = x * x;
+
+ if (unlikely (abstop12 (y) < abstop12 (0x1p-12f)))
+ {
+ if (unlikely (abstop12 (y) < abstop12 (0x1p-126f)))
+ /* Force underflow for tiny y. */
+ force_eval_float (s);
+ return y;
+ }
+
+ return sinf_poly (x, s, p, 0);
+ }
+ else if (likely (abstop12 (y) < abstop12 (120.0f)))
+ {
+ x = reduce_fast (x, p, &n);
+
+ /* Setup the signs for sin and cos. */
+ s = p->sign[n & 3];
+
+ if (n & 2)
+ p = &__sincosf_table[1];
+
+ return sinf_poly (x * s, x * x, p, n);
+ }
+ else if (abstop12 (y) < abstop12 (INFINITY))
+ {
+ uint32_t xi = asuint (y);
+ int sign = xi >> 31;
+
+ x = reduce_large (xi, &n);
+
+ /* Setup signs for sin and cos - include original sign. */
+ s = p->sign[(n + sign) & 3];
+
+ if ((n + sign) & 2)
+ p = &__sincosf_table[1];
+
+ return sinf_poly (x * s, x * x, p, n);
+ }
+ else
+ return __math_invalidf (y);
+}
diff --git a/math/test/mathbench.c b/math/test/mathbench.c
new file mode 100644
index 000000000000..0c17826e5296
--- /dev/null
+++ b/math/test/mathbench.c
@@ -0,0 +1,773 @@
+/*
+ * Microbenchmark for math functions.
+ *
+ * Copyright (c) 2018-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#undef _GNU_SOURCE
+#define _GNU_SOURCE 1
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <time.h>
+#include <math.h>
+#include "mathlib.h"
+
+#ifndef WANT_VMATH
+/* Enable the build of vector math code. */
+# define WANT_VMATH 1
+#endif
+
+/* Number of measurements, best result is reported. */
+#define MEASURE 60
+/* Array size. */
+#define N 8000
+/* Iterations over the array. */
+#define ITER 125
+
+static double *Trace;
+static size_t trace_size;
+static double A[N];
+static float Af[N];
+static long measurecount = MEASURE;
+static long itercount = ITER;
+
+#if __aarch64__ && WANT_VMATH
+typedef __f64x2_t v_double;
+
+#define v_double_len() 2
+
+static inline v_double
+v_double_load (const double *p)
+{
+ return (v_double){p[0], p[1]};
+}
+
+static inline v_double
+v_double_dup (double x)
+{
+ return (v_double){x, x};
+}
+
+typedef __f32x4_t v_float;
+
+#define v_float_len() 4
+
+static inline v_float
+v_float_load (const float *p)
+{
+ return (v_float){p[0], p[1], p[2], p[3]};
+}
+
+static inline v_float
+v_float_dup (float x)
+{
+ return (v_float){x, x, x, x};
+}
+#else
+/* dummy definitions to make things compile. */
+typedef double v_double;
+typedef float v_float;
+#define v_double_len(x) 1
+#define v_double_load(x) (x)[0]
+#define v_double_dup(x) (x)
+#define v_float_len(x) 1
+#define v_float_load(x) (x)[0]
+#define v_float_dup(x) (x)
+#endif
+
+static double
+dummy (double x)
+{
+ return x;
+}
+
+static float
+dummyf (float x)
+{
+ return x;
+}
+
+#if WANT_VMATH
+#if __aarch64__
+static v_double
+__v_dummy (v_double x)
+{
+ return x;
+}
+
+static v_float
+__v_dummyf (v_float x)
+{
+ return x;
+}
+
+#ifdef __vpcs
+__vpcs static v_double
+__vn_dummy (v_double x)
+{
+ return x;
+}
+
+__vpcs static v_float
+__vn_dummyf (v_float x)
+{
+ return x;
+}
+
+__vpcs static v_float
+xy__vn_powf (v_float x)
+{
+ return __vn_powf (x, x);
+}
+
+__vpcs static v_float
+xy_Z_powf (v_float x)
+{
+ return _ZGVnN4vv_powf (x, x);
+}
+
+__vpcs static v_double
+xy__vn_pow (v_double x)
+{
+ return __vn_pow (x, x);
+}
+
+__vpcs static v_double
+xy_Z_pow (v_double x)
+{
+ return _ZGVnN2vv_pow (x, x);
+}
+#endif
+
+static v_float
+xy__v_powf (v_float x)
+{
+ return __v_powf (x, x);
+}
+
+static v_double
+xy__v_pow (v_double x)
+{
+ return __v_pow (x, x);
+}
+#endif
+
+static float
+xy__s_powf (float x)
+{
+ return __s_powf (x, x);
+}
+
+static double
+xy__s_pow (double x)
+{
+ return __s_pow (x, x);
+}
+#endif
+
+static double
+xypow (double x)
+{
+ return pow (x, x);
+}
+
+static float
+xypowf (float x)
+{
+ return powf (x, x);
+}
+
+static double
+xpow (double x)
+{
+ return pow (x, 23.4);
+}
+
+static float
+xpowf (float x)
+{
+ return powf (x, 23.4f);
+}
+
+static double
+ypow (double x)
+{
+ return pow (2.34, x);
+}
+
+static float
+ypowf (float x)
+{
+ return powf (2.34f, x);
+}
+
+static float
+sincosf_wrap (float x)
+{
+ float s, c;
+ sincosf (x, &s, &c);
+ return s + c;
+}
+
+static const struct fun
+{
+ const char *name;
+ int prec;
+ int vec;
+ double lo;
+ double hi;
+ union
+ {
+ double (*d) (double);
+ float (*f) (float);
+ v_double (*vd) (v_double);
+ v_float (*vf) (v_float);
+#ifdef __vpcs
+ __vpcs v_double (*vnd) (v_double);
+ __vpcs v_float (*vnf) (v_float);
+#endif
+ } fun;
+} funtab[] = {
+#define D(func, lo, hi) {#func, 'd', 0, lo, hi, {.d = func}},
+#define F(func, lo, hi) {#func, 'f', 0, lo, hi, {.f = func}},
+#define VD(func, lo, hi) {#func, 'd', 'v', lo, hi, {.vd = func}},
+#define VF(func, lo, hi) {#func, 'f', 'v', lo, hi, {.vf = func}},
+#define VND(func, lo, hi) {#func, 'd', 'n', lo, hi, {.vnd = func}},
+#define VNF(func, lo, hi) {#func, 'f', 'n', lo, hi, {.vnf = func}},
+D (dummy, 1.0, 2.0)
+D (exp, -9.9, 9.9)
+D (exp, 0.5, 1.0)
+D (exp2, -9.9, 9.9)
+D (log, 0.01, 11.1)
+D (log, 0.999, 1.001)
+D (log2, 0.01, 11.1)
+D (log2, 0.999, 1.001)
+{"pow", 'd', 0, 0.01, 11.1, {.d = xypow}},
+D (xpow, 0.01, 11.1)
+D (ypow, -9.9, 9.9)
+D (erf, -6.0, 6.0)
+
+F (dummyf, 1.0, 2.0)
+F (expf, -9.9, 9.9)
+F (exp2f, -9.9, 9.9)
+F (logf, 0.01, 11.1)
+F (log2f, 0.01, 11.1)
+{"powf", 'f', 0, 0.01, 11.1, {.f = xypowf}},
+F (xpowf, 0.01, 11.1)
+F (ypowf, -9.9, 9.9)
+{"sincosf", 'f', 0, 0.1, 0.7, {.f = sincosf_wrap}},
+{"sincosf", 'f', 0, 0.8, 3.1, {.f = sincosf_wrap}},
+{"sincosf", 'f', 0, -3.1, 3.1, {.f = sincosf_wrap}},
+{"sincosf", 'f', 0, 3.3, 33.3, {.f = sincosf_wrap}},
+{"sincosf", 'f', 0, 100, 1000, {.f = sincosf_wrap}},
+{"sincosf", 'f', 0, 1e6, 1e32, {.f = sincosf_wrap}},
+F (sinf, 0.1, 0.7)
+F (sinf, 0.8, 3.1)
+F (sinf, -3.1, 3.1)
+F (sinf, 3.3, 33.3)
+F (sinf, 100, 1000)
+F (sinf, 1e6, 1e32)
+F (cosf, 0.1, 0.7)
+F (cosf, 0.8, 3.1)
+F (cosf, -3.1, 3.1)
+F (cosf, 3.3, 33.3)
+F (cosf, 100, 1000)
+F (cosf, 1e6, 1e32)
+F (erff, -4.0, 4.0)
+#if WANT_VMATH
+D (__s_sin, -3.1, 3.1)
+D (__s_cos, -3.1, 3.1)
+D (__s_exp, -9.9, 9.9)
+D (__s_log, 0.01, 11.1)
+{"__s_pow", 'd', 0, 0.01, 11.1, {.d = xy__s_pow}},
+F (__s_expf, -9.9, 9.9)
+F (__s_expf_1u, -9.9, 9.9)
+F (__s_exp2f, -9.9, 9.9)
+F (__s_exp2f_1u, -9.9, 9.9)
+F (__s_logf, 0.01, 11.1)
+{"__s_powf", 'f', 0, 0.01, 11.1, {.f = xy__s_powf}},
+F (__s_sinf, -3.1, 3.1)
+F (__s_cosf, -3.1, 3.1)
+#if __aarch64__
+VD (__v_dummy, 1.0, 2.0)
+VD (__v_sin, -3.1, 3.1)
+VD (__v_cos, -3.1, 3.1)
+VD (__v_exp, -9.9, 9.9)
+VD (__v_log, 0.01, 11.1)
+{"__v_pow", 'd', 'v', 0.01, 11.1, {.vd = xy__v_pow}},
+VF (__v_dummyf, 1.0, 2.0)
+VF (__v_expf, -9.9, 9.9)
+VF (__v_expf_1u, -9.9, 9.9)
+VF (__v_exp2f, -9.9, 9.9)
+VF (__v_exp2f_1u, -9.9, 9.9)
+VF (__v_logf, 0.01, 11.1)
+{"__v_powf", 'f', 'v', 0.01, 11.1, {.vf = xy__v_powf}},
+VF (__v_sinf, -3.1, 3.1)
+VF (__v_cosf, -3.1, 3.1)
+#ifdef __vpcs
+VND (__vn_dummy, 1.0, 2.0)
+VND (__vn_exp, -9.9, 9.9)
+VND (_ZGVnN2v_exp, -9.9, 9.9)
+VND (__vn_log, 0.01, 11.1)
+VND (_ZGVnN2v_log, 0.01, 11.1)
+{"__vn_pow", 'd', 'n', 0.01, 11.1, {.vnd = xy__vn_pow}},
+{"_ZGVnN2vv_pow", 'd', 'n', 0.01, 11.1, {.vnd = xy_Z_pow}},
+VND (__vn_sin, -3.1, 3.1)
+VND (_ZGVnN2v_sin, -3.1, 3.1)
+VND (__vn_cos, -3.1, 3.1)
+VND (_ZGVnN2v_cos, -3.1, 3.1)
+VNF (__vn_dummyf, 1.0, 2.0)
+VNF (__vn_expf, -9.9, 9.9)
+VNF (_ZGVnN4v_expf, -9.9, 9.9)
+VNF (__vn_expf_1u, -9.9, 9.9)
+VNF (__vn_exp2f, -9.9, 9.9)
+VNF (_ZGVnN4v_exp2f, -9.9, 9.9)
+VNF (__vn_exp2f_1u, -9.9, 9.9)
+VNF (__vn_logf, 0.01, 11.1)
+VNF (_ZGVnN4v_logf, 0.01, 11.1)
+{"__vn_powf", 'f', 'n', 0.01, 11.1, {.vnf = xy__vn_powf}},
+{"_ZGVnN4vv_powf", 'f', 'n', 0.01, 11.1, {.vnf = xy_Z_powf}},
+VNF (__vn_sinf, -3.1, 3.1)
+VNF (_ZGVnN4v_sinf, -3.1, 3.1)
+VNF (__vn_cosf, -3.1, 3.1)
+VNF (_ZGVnN4v_cosf, -3.1, 3.1)
+#endif
+#endif
+#endif
+{0},
+#undef F
+#undef D
+#undef VF
+#undef VD
+#undef VNF
+#undef VND
+};
+
+static void
+gen_linear (double lo, double hi)
+{
+ for (int i = 0; i < N; i++)
+ A[i] = (lo * (N - i) + hi * i) / N;
+}
+
+static void
+genf_linear (double lo, double hi)
+{
+ for (int i = 0; i < N; i++)
+ Af[i] = (float)(lo * (N - i) + hi * i) / N;
+}
+
+static inline double
+asdouble (uint64_t i)
+{
+ union
+ {
+ uint64_t i;
+ double f;
+ } u = {i};
+ return u.f;
+}
+
+static uint64_t seed = 0x0123456789abcdef;
+
+static double
+frand (double lo, double hi)
+{
+ seed = 6364136223846793005ULL * seed + 1;
+ return lo + (hi - lo) * (asdouble (seed >> 12 | 0x3ffULL << 52) - 1.0);
+}
+
+static void
+gen_rand (double lo, double hi)
+{
+ for (int i = 0; i < N; i++)
+ A[i] = frand (lo, hi);
+}
+
+static void
+genf_rand (double lo, double hi)
+{
+ for (int i = 0; i < N; i++)
+ Af[i] = (float)frand (lo, hi);
+}
+
+static void
+gen_trace (int index)
+{
+ for (int i = 0; i < N; i++)
+ A[i] = Trace[index + i];
+}
+
+static void
+genf_trace (int index)
+{
+ for (int i = 0; i < N; i++)
+ Af[i] = (float)Trace[index + i];
+}
+
+static void
+run_thruput (double f (double))
+{
+ for (int i = 0; i < N; i++)
+ f (A[i]);
+}
+
+static void
+runf_thruput (float f (float))
+{
+ for (int i = 0; i < N; i++)
+ f (Af[i]);
+}
+
+volatile double zero = 0;
+
+static void
+run_latency (double f (double))
+{
+ double z = zero;
+ double prev = z;
+ for (int i = 0; i < N; i++)
+ prev = f (A[i] + prev * z);
+}
+
+static void
+runf_latency (float f (float))
+{
+ float z = (float)zero;
+ float prev = z;
+ for (int i = 0; i < N; i++)
+ prev = f (Af[i] + prev * z);
+}
+
+static void
+run_v_thruput (v_double f (v_double))
+{
+ for (int i = 0; i < N; i += v_double_len ())
+ f (v_double_load (A+i));
+}
+
+static void
+runf_v_thruput (v_float f (v_float))
+{
+ for (int i = 0; i < N; i += v_float_len ())
+ f (v_float_load (Af+i));
+}
+
+static void
+run_v_latency (v_double f (v_double))
+{
+ v_double z = v_double_dup (zero);
+ v_double prev = z;
+ for (int i = 0; i < N; i += v_double_len ())
+ prev = f (v_double_load (A+i) + prev * z);
+}
+
+static void
+runf_v_latency (v_float f (v_float))
+{
+ v_float z = v_float_dup (zero);
+ v_float prev = z;
+ for (int i = 0; i < N; i += v_float_len ())
+ prev = f (v_float_load (Af+i) + prev * z);
+}
+
+#ifdef __vpcs
+static void
+run_vn_thruput (__vpcs v_double f (v_double))
+{
+ for (int i = 0; i < N; i += v_double_len ())
+ f (v_double_load (A+i));
+}
+
+static void
+runf_vn_thruput (__vpcs v_float f (v_float))
+{
+ for (int i = 0; i < N; i += v_float_len ())
+ f (v_float_load (Af+i));
+}
+
+static void
+run_vn_latency (__vpcs v_double f (v_double))
+{
+ v_double z = v_double_dup (zero);
+ v_double prev = z;
+ for (int i = 0; i < N; i += v_double_len ())
+ prev = f (v_double_load (A+i) + prev * z);
+}
+
+static void
+runf_vn_latency (__vpcs v_float f (v_float))
+{
+ v_float z = v_float_dup (zero);
+ v_float prev = z;
+ for (int i = 0; i < N; i += v_float_len ())
+ prev = f (v_float_load (Af+i) + prev * z);
+}
+#endif
+
+static uint64_t
+tic (void)
+{
+ struct timespec ts;
+ if (clock_gettime (CLOCK_REALTIME, &ts))
+ abort ();
+ return ts.tv_sec * 1000000000ULL + ts.tv_nsec;
+}
+
+#define TIMEIT(run, f) do { \
+ dt = -1; \
+ run (f); /* Warm up. */ \
+ for (int j = 0; j < measurecount; j++) \
+ { \
+ uint64_t t0 = tic (); \
+ for (int i = 0; i < itercount; i++) \
+ run (f); \
+ uint64_t t1 = tic (); \
+ if (t1 - t0 < dt) \
+ dt = t1 - t0; \
+ } \
+} while (0)
+
+static void
+bench1 (const struct fun *f, int type, double lo, double hi)
+{
+ uint64_t dt = 0;
+ uint64_t ns100;
+ const char *s = type == 't' ? "rthruput" : "latency";
+ int vlen = 1;
+
+ if (f->vec && f->prec == 'd')
+ vlen = v_double_len();
+ else if (f->vec && f->prec == 'f')
+ vlen = v_float_len();
+
+ if (f->prec == 'd' && type == 't' && f->vec == 0)
+ TIMEIT (run_thruput, f->fun.d);
+ else if (f->prec == 'd' && type == 'l' && f->vec == 0)
+ TIMEIT (run_latency, f->fun.d);
+ else if (f->prec == 'f' && type == 't' && f->vec == 0)
+ TIMEIT (runf_thruput, f->fun.f);
+ else if (f->prec == 'f' && type == 'l' && f->vec == 0)
+ TIMEIT (runf_latency, f->fun.f);
+ else if (f->prec == 'd' && type == 't' && f->vec == 'v')
+ TIMEIT (run_v_thruput, f->fun.vd);
+ else if (f->prec == 'd' && type == 'l' && f->vec == 'v')
+ TIMEIT (run_v_latency, f->fun.vd);
+ else if (f->prec == 'f' && type == 't' && f->vec == 'v')
+ TIMEIT (runf_v_thruput, f->fun.vf);
+ else if (f->prec == 'f' && type == 'l' && f->vec == 'v')
+ TIMEIT (runf_v_latency, f->fun.vf);
+#ifdef __vpcs
+ else if (f->prec == 'd' && type == 't' && f->vec == 'n')
+ TIMEIT (run_vn_thruput, f->fun.vnd);
+ else if (f->prec == 'd' && type == 'l' && f->vec == 'n')
+ TIMEIT (run_vn_latency, f->fun.vnd);
+ else if (f->prec == 'f' && type == 't' && f->vec == 'n')
+ TIMEIT (runf_vn_thruput, f->fun.vnf);
+ else if (f->prec == 'f' && type == 'l' && f->vec == 'n')
+ TIMEIT (runf_vn_latency, f->fun.vnf);
+#endif
+
+ if (type == 't')
+ {
+ ns100 = (100 * dt + itercount * N / 2) / (itercount * N);
+ printf ("%9s %8s: %4u.%02u ns/elem %10llu ns in [%g %g]\n", f->name, s,
+ (unsigned) (ns100 / 100), (unsigned) (ns100 % 100),
+ (unsigned long long) dt, lo, hi);
+ }
+ else if (type == 'l')
+ {
+ ns100 = (100 * dt + itercount * N / vlen / 2) / (itercount * N / vlen);
+ printf ("%9s %8s: %4u.%02u ns/call %10llu ns in [%g %g]\n", f->name, s,
+ (unsigned) (ns100 / 100), (unsigned) (ns100 % 100),
+ (unsigned long long) dt, lo, hi);
+ }
+ fflush (stdout);
+}
+
+static void
+bench (const struct fun *f, double lo, double hi, int type, int gen)
+{
+ if (f->prec == 'd' && gen == 'r')
+ gen_rand (lo, hi);
+ else if (f->prec == 'd' && gen == 'l')
+ gen_linear (lo, hi);
+ else if (f->prec == 'd' && gen == 't')
+ gen_trace (0);
+ else if (f->prec == 'f' && gen == 'r')
+ genf_rand (lo, hi);
+ else if (f->prec == 'f' && gen == 'l')
+ genf_linear (lo, hi);
+ else if (f->prec == 'f' && gen == 't')
+ genf_trace (0);
+
+ if (gen == 't')
+ hi = trace_size / N;
+
+ if (type == 'b' || type == 't')
+ bench1 (f, 't', lo, hi);
+
+ if (type == 'b' || type == 'l')
+ bench1 (f, 'l', lo, hi);
+
+ for (int i = N; i < trace_size; i += N)
+ {
+ if (f->prec == 'd')
+ gen_trace (i);
+ else
+ genf_trace (i);
+
+ lo = i / N;
+ if (type == 'b' || type == 't')
+ bench1 (f, 't', lo, hi);
+
+ if (type == 'b' || type == 'l')
+ bench1 (f, 'l', lo, hi);
+ }
+}
+
+static void
+readtrace (const char *name)
+{
+ int n = 0;
+ FILE *f = strcmp (name, "-") == 0 ? stdin : fopen (name, "r");
+ if (!f)
+ {
+ printf ("openning \"%s\" failed: %m\n", name);
+ exit (1);
+ }
+ for (;;)
+ {
+ if (n >= trace_size)
+ {
+ trace_size += N;
+ Trace = realloc (Trace, trace_size * sizeof (Trace[0]));
+ if (Trace == NULL)
+ {
+ printf ("out of memory\n");
+ exit (1);
+ }
+ }
+ if (fscanf (f, "%lf", Trace + n) != 1)
+ break;
+ n++;
+ }
+ if (ferror (f) || n == 0)
+ {
+ printf ("reading \"%s\" failed: %m\n", name);
+ exit (1);
+ }
+ fclose (f);
+ if (n % N == 0)
+ trace_size = n;
+ for (int i = 0; n < trace_size; n++, i++)
+ Trace[n] = Trace[i];
+}
+
+static void
+usage (void)
+{
+ printf ("usage: ./mathbench [-g rand|linear|trace] [-t latency|thruput|both] "
+ "[-i low high] [-f tracefile] [-m measurements] [-c iterations] func "
+ "[func2 ..]\n");
+ printf ("func:\n");
+ printf ("%7s [run all benchmarks]\n", "all");
+ for (const struct fun *f = funtab; f->name; f++)
+ printf ("%7s [low: %g high: %g]\n", f->name, f->lo, f->hi);
+ exit (1);
+}
+
+int
+main (int argc, char *argv[])
+{
+ int usergen = 0, gen = 'r', type = 'b', all = 0;
+ double lo = 0, hi = 0;
+ const char *tracefile = "-";
+
+ argv++;
+ argc--;
+ for (;;)
+ {
+ if (argc <= 0)
+ usage ();
+ if (argv[0][0] != '-')
+ break;
+ else if (argc >= 3 && strcmp (argv[0], "-i") == 0)
+ {
+ usergen = 1;
+ lo = strtod (argv[1], 0);
+ hi = strtod (argv[2], 0);
+ argv += 3;
+ argc -= 3;
+ }
+ else if (argc >= 2 && strcmp (argv[0], "-m") == 0)
+ {
+ measurecount = strtol (argv[1], 0, 0);
+ argv += 2;
+ argc -= 2;
+ }
+ else if (argc >= 2 && strcmp (argv[0], "-c") == 0)
+ {
+ itercount = strtol (argv[1], 0, 0);
+ argv += 2;
+ argc -= 2;
+ }
+ else if (argc >= 2 && strcmp (argv[0], "-g") == 0)
+ {
+ gen = argv[1][0];
+ if (strchr ("rlt", gen) == 0)
+ usage ();
+ argv += 2;
+ argc -= 2;
+ }
+ else if (argc >= 2 && strcmp (argv[0], "-f") == 0)
+ {
+ gen = 't'; /* -f implies -g trace. */
+ tracefile = argv[1];
+ argv += 2;
+ argc -= 2;
+ }
+ else if (argc >= 2 && strcmp (argv[0], "-t") == 0)
+ {
+ type = argv[1][0];
+ if (strchr ("ltb", type) == 0)
+ usage ();
+ argv += 2;
+ argc -= 2;
+ }
+ else
+ usage ();
+ }
+ if (gen == 't')
+ {
+ readtrace (tracefile);
+ lo = hi = 0;
+ usergen = 1;
+ }
+ while (argc > 0)
+ {
+ int found = 0;
+ all = strcmp (argv[0], "all") == 0;
+ for (const struct fun *f = funtab; f->name; f++)
+ if (all || strcmp (argv[0], f->name) == 0)
+ {
+ found = 1;
+ if (!usergen)
+ {
+ lo = f->lo;
+ hi = f->hi;
+ }
+ bench (f, lo, hi, type, gen);
+ if (usergen && !all)
+ break;
+ }
+ if (!found)
+ printf ("unknown function: %s\n", argv[0]);
+ argv++;
+ argc--;
+ }
+ return 0;
+}
diff --git a/math/test/mathtest.c b/math/test/mathtest.c
new file mode 100644
index 000000000000..310896738e47
--- /dev/null
+++ b/math/test/mathtest.c
@@ -0,0 +1,1701 @@
+/*
+ * mathtest.c - test rig for mathlib
+ *
+ * Copyright (c) 1998-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <assert.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <setjmp.h>
+#include <ctype.h>
+#include <math.h>
+#include <errno.h>
+#include <limits.h>
+#include <fenv.h>
+#include "mathlib.h"
+
+#ifndef math_errhandling
+# define math_errhandling 0
+#endif
+
+#ifdef __cplusplus
+ #define EXTERN_C extern "C"
+#else
+ #define EXTERN_C extern
+#endif
+
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FALSE
+#define FALSE 0
+#endif
+
+#ifdef IMPORT_SYMBOL
+#define STR2(x) #x
+#define STR(x) STR2(x)
+_Pragma(STR(import IMPORT_SYMBOL))
+#endif
+
+int dmsd, dlsd;
+int quiet = 0;
+int doround = 0;
+unsigned statusmask = FE_ALL_EXCEPT;
+
+#define EXTRABITS (12)
+#define ULPUNIT (1<<EXTRABITS)
+
+typedef int (*test) (void);
+
+/*
+ struct to hold info about a function (which could actually be a macro)
+*/
+typedef struct {
+ enum {
+ t_func, t_macro
+ } type;
+ enum {
+ at_d, at_s, /* double or single precision float */
+ at_d2, at_s2, /* same, but taking two args */
+ at_di, at_si, /* double/single and an int */
+ at_dip, at_sip, /* double/single and an int ptr */
+ at_ddp, at_ssp, /* d/s and a d/s ptr */
+ at_dc, at_sc, /* double or single precision complex */
+ at_dc2, at_sc2 /* same, but taking two args */
+ } argtype;
+ enum {
+ rt_d, rt_s, rt_i, /* double, single, int */
+ rt_dc, rt_sc, /* double, single precision complex */
+ rt_d2, rt_s2 /* also use res2 */
+ } rettype;
+ union {
+ void* ptr;
+ double (*d_d_ptr)(double);
+ float (*s_s_ptr)(float);
+ int (*d_i_ptr)(double);
+ int (*s_i_ptr)(float);
+ double (*d2_d_ptr)(double, double);
+ float (*s2_s_ptr)(float, float);
+ double (*di_d_ptr)(double,int);
+ float (*si_s_ptr)(float,int);
+ double (*dip_d_ptr)(double,int*);
+ float (*sip_s_ptr)(float,int*);
+ double (*ddp_d_ptr)(double,double*);
+ float (*ssp_s_ptr)(float,float*);
+ } func;
+ enum {
+ m_none,
+ m_isfinite, m_isfinitef,
+ m_isgreater, m_isgreaterequal,
+ m_isgreaterequalf, m_isgreaterf,
+ m_isinf, m_isinff,
+ m_isless, m_islessequal,
+ m_islessequalf, m_islessf,
+ m_islessgreater, m_islessgreaterf,
+ m_isnan, m_isnanf,
+ m_isnormal, m_isnormalf,
+ m_isunordered, m_isunorderedf,
+ m_fpclassify, m_fpclassifyf,
+ m_signbit, m_signbitf,
+ /* not actually a macro, but makes things easier */
+ m_rred, m_rredf,
+ m_cadd, m_csub, m_cmul, m_cdiv,
+ m_caddf, m_csubf, m_cmulf, m_cdivf
+ } macro_name; /* only used if a macro/something that can't be done using func */
+ long long tolerance;
+ const char* name;
+} test_func;
+
+/* used in qsort */
+int compare_tfuncs(const void* a, const void* b) {
+ return strcmp(((test_func*)a)->name, ((test_func*)b)->name);
+}
+
+int is_double_argtype(int argtype) {
+ switch(argtype) {
+ case at_d:
+ case at_d2:
+ case at_dc:
+ case at_dc2:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+int is_single_argtype(int argtype) {
+ switch(argtype) {
+ case at_s:
+ case at_s2:
+ case at_sc:
+ case at_sc2:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+int is_double_rettype(int rettype) {
+ switch(rettype) {
+ case rt_d:
+ case rt_dc:
+ case rt_d2:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+int is_single_rettype(int rettype) {
+ switch(rettype) {
+ case rt_s:
+ case rt_sc:
+ case rt_s2:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+int is_complex_argtype(int argtype) {
+ switch(argtype) {
+ case at_dc:
+ case at_sc:
+ case at_dc2:
+ case at_sc2:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+int is_complex_rettype(int rettype) {
+ switch(rettype) {
+ case rt_dc:
+ case rt_sc:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+/*
+ * Special-case flags indicating that some functions' error
+ * tolerance handling is more complicated than a fixed relative
+ * error bound.
+ */
+#define ABSLOWERBOUND 0x4000000000000000LL
+#define PLUSMINUSPIO2 0x1000000000000000LL
+
+#define ARM_PREFIX(x) x
+
+#define TFUNC(arg,ret,name,tolerance) { t_func, arg, ret, (void*)&name, m_none, tolerance, #name }
+#define TFUNCARM(arg,ret,name,tolerance) { t_func, arg, ret, (void*)& ARM_PREFIX(name), m_none, tolerance, #name }
+#define MFUNC(arg,ret,name,tolerance) { t_macro, arg, ret, NULL, m_##name, tolerance, #name }
+
+/* sincosf wrappers for easier testing. */
+static float sincosf_sinf(float x) { float s,c; sincosf(x, &s, &c); return s; }
+static float sincosf_cosf(float x) { float s,c; sincosf(x, &s, &c); return c; }
+
+test_func tfuncs[] = {
+ /* trigonometric */
+ TFUNC(at_d,rt_d, acos, 4*ULPUNIT),
+ TFUNC(at_d,rt_d, asin, 4*ULPUNIT),
+ TFUNC(at_d,rt_d, atan, 4*ULPUNIT),
+ TFUNC(at_d2,rt_d, atan2, 4*ULPUNIT),
+
+ TFUNC(at_d,rt_d, tan, 2*ULPUNIT),
+ TFUNC(at_d,rt_d, sin, 2*ULPUNIT),
+ TFUNC(at_d,rt_d, cos, 2*ULPUNIT),
+
+ TFUNC(at_s,rt_s, acosf, 4*ULPUNIT),
+ TFUNC(at_s,rt_s, asinf, 4*ULPUNIT),
+ TFUNC(at_s,rt_s, atanf, 4*ULPUNIT),
+ TFUNC(at_s2,rt_s, atan2f, 4*ULPUNIT),
+ TFUNCARM(at_s,rt_s, tanf, 4*ULPUNIT),
+ TFUNCARM(at_s,rt_s, sinf, 3*ULPUNIT/4),
+ TFUNCARM(at_s,rt_s, cosf, 3*ULPUNIT/4),
+ TFUNCARM(at_s,rt_s, sincosf_sinf, 3*ULPUNIT/4),
+ TFUNCARM(at_s,rt_s, sincosf_cosf, 3*ULPUNIT/4),
+
+ /* hyperbolic */
+ TFUNC(at_d, rt_d, atanh, 4*ULPUNIT),
+ TFUNC(at_d, rt_d, asinh, 4*ULPUNIT),
+ TFUNC(at_d, rt_d, acosh, 4*ULPUNIT),
+ TFUNC(at_d,rt_d, tanh, 4*ULPUNIT),
+ TFUNC(at_d,rt_d, sinh, 4*ULPUNIT),
+ TFUNC(at_d,rt_d, cosh, 4*ULPUNIT),
+
+ TFUNC(at_s, rt_s, atanhf, 4*ULPUNIT),
+ TFUNC(at_s, rt_s, asinhf, 4*ULPUNIT),
+ TFUNC(at_s, rt_s, acoshf, 4*ULPUNIT),
+ TFUNC(at_s,rt_s, tanhf, 4*ULPUNIT),
+ TFUNC(at_s,rt_s, sinhf, 4*ULPUNIT),
+ TFUNC(at_s,rt_s, coshf, 4*ULPUNIT),
+
+ /* exponential and logarithmic */
+ TFUNC(at_d,rt_d, log, 3*ULPUNIT/4),
+ TFUNC(at_d,rt_d, log10, 3*ULPUNIT),
+ TFUNC(at_d,rt_d, log2, 3*ULPUNIT/4),
+ TFUNC(at_d,rt_d, log1p, 2*ULPUNIT),
+ TFUNC(at_d,rt_d, exp, 3*ULPUNIT/4),
+ TFUNC(at_d,rt_d, exp2, 3*ULPUNIT/4),
+ TFUNC(at_d,rt_d, expm1, ULPUNIT),
+ TFUNCARM(at_s,rt_s, logf, ULPUNIT),
+ TFUNC(at_s,rt_s, log10f, 3*ULPUNIT),
+ TFUNCARM(at_s,rt_s, log2f, ULPUNIT),
+ TFUNC(at_s,rt_s, log1pf, 2*ULPUNIT),
+ TFUNCARM(at_s,rt_s, expf, 3*ULPUNIT/4),
+ TFUNCARM(at_s,rt_s, exp2f, 3*ULPUNIT/4),
+ TFUNC(at_s,rt_s, expm1f, ULPUNIT),
+
+ /* power */
+ TFUNC(at_d2,rt_d, pow, 3*ULPUNIT/4),
+ TFUNC(at_d,rt_d, sqrt, ULPUNIT/2),
+ TFUNC(at_d,rt_d, cbrt, 2*ULPUNIT),
+ TFUNC(at_d2, rt_d, hypot, 4*ULPUNIT),
+
+ TFUNCARM(at_s2,rt_s, powf, ULPUNIT),
+ TFUNC(at_s,rt_s, sqrtf, ULPUNIT/2),
+ TFUNC(at_s,rt_s, cbrtf, 2*ULPUNIT),
+ TFUNC(at_s2, rt_s, hypotf, 4*ULPUNIT),
+
+ /* error function */
+ TFUNC(at_d,rt_d, erf, 16*ULPUNIT),
+ TFUNC(at_s,rt_s, erff, 16*ULPUNIT),
+ TFUNC(at_d,rt_d, erfc, 16*ULPUNIT),
+ TFUNC(at_s,rt_s, erfcf, 16*ULPUNIT),
+
+ /* gamma functions */
+ TFUNC(at_d,rt_d, tgamma, 16*ULPUNIT),
+ TFUNC(at_s,rt_s, tgammaf, 16*ULPUNIT),
+ TFUNC(at_d,rt_d, lgamma, 16*ULPUNIT | ABSLOWERBOUND),
+ TFUNC(at_s,rt_s, lgammaf, 16*ULPUNIT | ABSLOWERBOUND),
+
+ TFUNC(at_d,rt_d, ceil, 0),
+ TFUNC(at_s,rt_s, ceilf, 0),
+ TFUNC(at_d2,rt_d, copysign, 0),
+ TFUNC(at_s2,rt_s, copysignf, 0),
+ TFUNC(at_d,rt_d, floor, 0),
+ TFUNC(at_s,rt_s, floorf, 0),
+ TFUNC(at_d2,rt_d, fmax, 0),
+ TFUNC(at_s2,rt_s, fmaxf, 0),
+ TFUNC(at_d2,rt_d, fmin, 0),
+ TFUNC(at_s2,rt_s, fminf, 0),
+ TFUNC(at_d2,rt_d, fmod, 0),
+ TFUNC(at_s2,rt_s, fmodf, 0),
+ MFUNC(at_d, rt_i, fpclassify, 0),
+ MFUNC(at_s, rt_i, fpclassifyf, 0),
+ TFUNC(at_dip,rt_d, frexp, 0),
+ TFUNC(at_sip,rt_s, frexpf, 0),
+ MFUNC(at_d, rt_i, isfinite, 0),
+ MFUNC(at_s, rt_i, isfinitef, 0),
+ MFUNC(at_d, rt_i, isgreater, 0),
+ MFUNC(at_d, rt_i, isgreaterequal, 0),
+ MFUNC(at_s, rt_i, isgreaterequalf, 0),
+ MFUNC(at_s, rt_i, isgreaterf, 0),
+ MFUNC(at_d, rt_i, isinf, 0),
+ MFUNC(at_s, rt_i, isinff, 0),
+ MFUNC(at_d, rt_i, isless, 0),
+ MFUNC(at_d, rt_i, islessequal, 0),
+ MFUNC(at_s, rt_i, islessequalf, 0),
+ MFUNC(at_s, rt_i, islessf, 0),
+ MFUNC(at_d, rt_i, islessgreater, 0),
+ MFUNC(at_s, rt_i, islessgreaterf, 0),
+ MFUNC(at_d, rt_i, isnan, 0),
+ MFUNC(at_s, rt_i, isnanf, 0),
+ MFUNC(at_d, rt_i, isnormal, 0),
+ MFUNC(at_s, rt_i, isnormalf, 0),
+ MFUNC(at_d, rt_i, isunordered, 0),
+ MFUNC(at_s, rt_i, isunorderedf, 0),
+ TFUNC(at_di,rt_d, ldexp, 0),
+ TFUNC(at_si,rt_s, ldexpf, 0),
+ TFUNC(at_ddp,rt_d2, modf, 0),
+ TFUNC(at_ssp,rt_s2, modff, 0),
+#ifndef BIGRANGERED
+ MFUNC(at_d, rt_d, rred, 2*ULPUNIT),
+#else
+ MFUNC(at_d, rt_d, m_rred, ULPUNIT),
+#endif
+ MFUNC(at_d, rt_i, signbit, 0),
+ MFUNC(at_s, rt_i, signbitf, 0),
+};
+
+/*
+ * keywords are: func size op1 op2 result res2 errno op1r op1i op2r op2i resultr resulti
+ * also we ignore: wrongresult wrongres2 wrongerrno
+ * op1 equivalent to op1r, same with op2 and result
+ */
+
+typedef struct {
+ test_func *func;
+ unsigned op1r[2]; /* real part, also used for non-complex numbers */
+ unsigned op1i[2]; /* imaginary part */
+ unsigned op2r[2];
+ unsigned op2i[2];
+ unsigned resultr[3];
+ unsigned resulti[3];
+ enum {
+ rc_none, rc_zero, rc_infinity, rc_nan, rc_finite
+ } resultc; /* special complex results, rc_none means use resultr and resulti as normal */
+ unsigned res2[2];
+ unsigned status; /* IEEE status return, if any */
+ unsigned maybestatus; /* for optional status, or allowance for spurious */
+ int nresult; /* number of result words */
+ int in_err, in_err_limit;
+ int err;
+ int maybeerr;
+ int valid;
+ int comment;
+ int random;
+} testdetail;
+
+enum { /* keywords */
+ k_errno, k_errno_in, k_error, k_func, k_maybeerror, k_maybestatus, k_op1, k_op1i, k_op1r, k_op2, k_op2i, k_op2r,
+ k_random, k_res2, k_result, k_resultc, k_resulti, k_resultr, k_status,
+ k_wrongres2, k_wrongresult, k_wrongstatus, k_wrongerrno
+};
+char *keywords[] = {
+ "errno", "errno_in", "error", "func", "maybeerror", "maybestatus", "op1", "op1i", "op1r", "op2", "op2i", "op2r",
+ "random", "res2", "result", "resultc", "resulti", "resultr", "status",
+ "wrongres2", "wrongresult", "wrongstatus", "wrongerrno"
+};
+
+enum {
+ e_0, e_EDOM, e_ERANGE,
+
+ /*
+ * This enum makes sure that we have the right number of errnos in the
+ * errno[] array
+ */
+ e_number_of_errnos
+};
+char *errnos[] = {
+ "0", "EDOM", "ERANGE"
+};
+
+enum {
+ e_none, e_divbyzero, e_domain, e_overflow, e_underflow
+};
+char *errors[] = {
+ "0", "divbyzero", "domain", "overflow", "underflow"
+};
+
+static int verbose, fo, strict;
+
+/* state toggled by random=on / random=off */
+static int randomstate;
+
+/* Canonify a double NaN: SNaNs all become 7FF00000.00000001 and QNaNs
+ * all become 7FF80000.00000001 */
+void canon_dNaN(unsigned a[2]) {
+ if ((a[0] & 0x7FF00000) != 0x7FF00000)
+ return; /* not Inf or NaN */
+ if (!(a[0] & 0xFFFFF) && !a[1])
+ return; /* Inf */
+ a[0] &= 0x7FF80000; /* canonify top word */
+ a[1] = 0x00000001; /* canonify bottom word */
+}
+
+/* Canonify a single NaN: SNaNs all become 7F800001 and QNaNs
+ * all become 7FC00001. Returns classification of the NaN. */
+void canon_sNaN(unsigned a[1]) {
+ if ((a[0] & 0x7F800000) != 0x7F800000)
+ return; /* not Inf or NaN */
+ if (!(a[0] & 0x7FFFFF))
+ return; /* Inf */
+ a[0] &= 0x7FC00000; /* canonify most bits */
+ a[0] |= 0x00000001; /* canonify bottom bit */
+}
+
+/*
+ * Detect difficult operands for FO mode.
+ */
+int is_dhard(unsigned a[2])
+{
+ if ((a[0] & 0x7FF00000) == 0x7FF00000)
+ return TRUE; /* inf or NaN */
+ if ((a[0] & 0x7FF00000) == 0 &&
+ ((a[0] & 0x7FFFFFFF) | a[1]) != 0)
+ return TRUE; /* denormal */
+ return FALSE;
+}
+int is_shard(unsigned a[1])
+{
+ if ((a[0] & 0x7F800000) == 0x7F800000)
+ return TRUE; /* inf or NaN */
+ if ((a[0] & 0x7F800000) == 0 &&
+ (a[0] & 0x7FFFFFFF) != 0)
+ return TRUE; /* denormal */
+ return FALSE;
+}
+
+/*
+ * Normalise all zeroes into +0, for FO mode.
+ */
+void dnormzero(unsigned a[2])
+{
+ if (a[0] == 0x80000000 && a[1] == 0)
+ a[0] = 0;
+}
+void snormzero(unsigned a[1])
+{
+ if (a[0] == 0x80000000)
+ a[0] = 0;
+}
+
+static int find(char *word, char **array, int asize) {
+ int i, j;
+
+ asize /= sizeof(char *);
+
+ i = -1; j = asize; /* strictly between i and j */
+ while (j-i > 1) {
+ int k = (i+j) / 2;
+ int c = strcmp(word, array[k]);
+ if (c > 0)
+ i = k;
+ else if (c < 0)
+ j = k;
+ else /* found it! */
+ return k;
+ }
+ return -1; /* not found */
+}
+
+static test_func* find_testfunc(char *word) {
+ int i, j, asize;
+
+ asize = sizeof(tfuncs)/sizeof(test_func);
+
+ i = -1; j = asize; /* strictly between i and j */
+ while (j-i > 1) {
+ int k = (i+j) / 2;
+ int c = strcmp(word, tfuncs[k].name);
+ if (c > 0)
+ i = k;
+ else if (c < 0)
+ j = k;
+ else /* found it! */
+ return tfuncs + k;
+ }
+ return NULL; /* not found */
+}
+
+static long long calc_error(unsigned a[2], unsigned b[3], int shift, int rettype) {
+ unsigned r0, r1, r2;
+ int sign, carry;
+ long long result;
+
+ /*
+ * If either number is infinite, require exact equality. If
+ * either number is NaN, require that both are NaN. If either
+ * of these requirements is broken, return INT_MAX.
+ */
+ if (is_double_rettype(rettype)) {
+ if ((a[0] & 0x7FF00000) == 0x7FF00000 ||
+ (b[0] & 0x7FF00000) == 0x7FF00000) {
+ if (((a[0] & 0x800FFFFF) || a[1]) &&
+ ((b[0] & 0x800FFFFF) || b[1]) &&
+ (a[0] & 0x7FF00000) == 0x7FF00000 &&
+ (b[0] & 0x7FF00000) == 0x7FF00000)
+ return 0; /* both NaN - OK */
+ if (!((a[0] & 0xFFFFF) || a[1]) &&
+ !((b[0] & 0xFFFFF) || b[1]) &&
+ a[0] == b[0])
+ return 0; /* both same sign of Inf - OK */
+ return LLONG_MAX;
+ }
+ } else {
+ if ((a[0] & 0x7F800000) == 0x7F800000 ||
+ (b[0] & 0x7F800000) == 0x7F800000) {
+ if ((a[0] & 0x807FFFFF) &&
+ (b[0] & 0x807FFFFF) &&
+ (a[0] & 0x7F800000) == 0x7F800000 &&
+ (b[0] & 0x7F800000) == 0x7F800000)
+ return 0; /* both NaN - OK */
+ if (!(a[0] & 0x7FFFFF) &&
+ !(b[0] & 0x7FFFFF) &&
+ a[0] == b[0])
+ return 0; /* both same sign of Inf - OK */
+ return LLONG_MAX;
+ }
+ }
+
+ /*
+ * Both finite. Return INT_MAX if the signs differ.
+ */
+ if ((a[0] ^ b[0]) & 0x80000000)
+ return LLONG_MAX;
+
+ /*
+ * Now it's just straight multiple-word subtraction.
+ */
+ if (is_double_rettype(rettype)) {
+ r2 = -b[2]; carry = (r2 == 0);
+ r1 = a[1] + ~b[1] + carry; carry = (r1 < a[1] || (carry && r1 == a[1]));
+ r0 = a[0] + ~b[0] + carry;
+ } else {
+ r2 = -b[1]; carry = (r2 == 0);
+ r1 = a[0] + ~b[0] + carry; carry = (r1 < a[0] || (carry && r1 == a[0]));
+ r0 = ~0 + carry;
+ }
+
+ /*
+ * Forgive larger errors in specialised cases.
+ */
+ if (shift > 0) {
+ if (shift > 32*3)
+ return 0; /* all errors are forgiven! */
+ while (shift >= 32) {
+ r2 = r1;
+ r1 = r0;
+ r0 = -(r0 >> 31);
+ shift -= 32;
+ }
+
+ if (shift > 0) {
+ r2 = (r2 >> shift) | (r1 << (32-shift));
+ r1 = (r1 >> shift) | (r0 << (32-shift));
+ r0 = (r0 >> shift) | ((-(r0 >> 31)) << (32-shift));
+ }
+ }
+
+ if (r0 & 0x80000000) {
+ sign = 1;
+ r2 = ~r2; carry = (r2 == 0);
+ r1 = 0 + ~r1 + carry; carry = (carry && (r2 == 0));
+ r0 = 0 + ~r0 + carry;
+ } else {
+ sign = 0;
+ }
+
+ if (r0 >= (1LL<<(31-EXTRABITS)))
+ return LLONG_MAX; /* many ulps out */
+
+ result = (r2 >> (32-EXTRABITS)) & (ULPUNIT-1);
+ result |= r1 << EXTRABITS;
+ result |= (long long)r0 << (32+EXTRABITS);
+ if (sign)
+ result = -result;
+ return result;
+}
+
+/* special named operands */
+
+typedef struct {
+ unsigned op1, op2;
+ char* name;
+} special_op;
+
+static special_op special_ops_double[] = {
+ {0x00000000,0x00000000,"0"},
+ {0x3FF00000,0x00000000,"1"},
+ {0x7FF00000,0x00000000,"inf"},
+ {0x7FF80000,0x00000001,"qnan"},
+ {0x7FF00000,0x00000001,"snan"},
+ {0x3ff921fb,0x54442d18,"pi2"},
+ {0x400921fb,0x54442d18,"pi"},
+ {0x3fe921fb,0x54442d18,"pi4"},
+ {0x4002d97c,0x7f3321d2,"3pi4"},
+};
+
+static special_op special_ops_float[] = {
+ {0x00000000,0,"0"},
+ {0x3f800000,0,"1"},
+ {0x7f800000,0,"inf"},
+ {0x7fc00000,0,"qnan"},
+ {0x7f800001,0,"snan"},
+ {0x3fc90fdb,0,"pi2"},
+ {0x40490fdb,0,"pi"},
+ {0x3f490fdb,0,"pi4"},
+ {0x4016cbe4,0,"3pi4"},
+};
+
+/*
+ This is what is returned by the below functions.
+ We need it to handle the sign of the number
+*/
+static special_op tmp_op = {0,0,0};
+
+special_op* find_special_op_from_op(unsigned op1, unsigned op2, int is_double) {
+ int i;
+ special_op* sop;
+ if(is_double) {
+ sop = special_ops_double;
+ } else {
+ sop = special_ops_float;
+ }
+ for(i = 0; i < sizeof(special_ops_double)/sizeof(special_op); i++) {
+ if(sop->op1 == (op1&0x7fffffff) && sop->op2 == op2) {
+ if(tmp_op.name) free(tmp_op.name);
+ tmp_op.name = malloc(strlen(sop->name)+2);
+ if(op1>>31) {
+ sprintf(tmp_op.name,"-%s",sop->name);
+ } else {
+ strcpy(tmp_op.name,sop->name);
+ }
+ return &tmp_op;
+ }
+ sop++;
+ }
+ return NULL;
+}
+
+special_op* find_special_op_from_name(const char* name, int is_double) {
+ int i, neg=0;
+ special_op* sop;
+ if(is_double) {
+ sop = special_ops_double;
+ } else {
+ sop = special_ops_float;
+ }
+ if(*name=='-') {
+ neg=1;
+ name++;
+ } else if(*name=='+') {
+ name++;
+ }
+ for(i = 0; i < sizeof(special_ops_double)/sizeof(special_op); i++) {
+ if(0 == strcmp(name,sop->name)) {
+ tmp_op.op1 = sop->op1;
+ if(neg) {
+ tmp_op.op1 |= 0x80000000;
+ }
+ tmp_op.op2 = sop->op2;
+ return &tmp_op;
+ }
+ sop++;
+ }
+ return NULL;
+}
+
+/*
+ helper function for the below
+ type=0 for single, 1 for double, 2 for no sop
+*/
+int do_op(char* q, unsigned* op, const char* name, int num, int sop_type) {
+ int i;
+ int n=num;
+ special_op* sop = NULL;
+ for(i = 0; i < num; i++) {
+ op[i] = 0;
+ }
+ if(sop_type<2) {
+ sop = find_special_op_from_name(q,sop_type);
+ }
+ if(sop != NULL) {
+ op[0] = sop->op1;
+ op[1] = sop->op2;
+ } else {
+ switch(num) {
+ case 1: n = sscanf(q, "%x", &op[0]); break;
+ case 2: n = sscanf(q, "%x.%x", &op[0], &op[1]); break;
+ case 3: n = sscanf(q, "%x.%x.%x", &op[0], &op[1], &op[2]); break;
+ default: return -1;
+ }
+ }
+ if (verbose) {
+ printf("%s=",name);
+ for (i = 0; (i < n); ++i) printf("%x.", op[i]);
+ printf(" (n=%d)\n", n);
+ }
+ return n;
+}
+
+testdetail parsetest(char *testbuf, testdetail oldtest) {
+ char *p; /* Current part of line: Option name */
+ char *q; /* Current part of line: Option value */
+ testdetail ret; /* What we return */
+ int k; /* Function enum from k_* */
+ int n; /* Used as returns for scanfs */
+ int argtype=2, rettype=2; /* for do_op */
+
+ /* clear ret */
+ memset(&ret, 0, sizeof(ret));
+
+ if (verbose) printf("Parsing line: %s\n", testbuf);
+ while (*testbuf && isspace(*testbuf)) testbuf++;
+ if (testbuf[0] == ';' || testbuf[0] == '#' || testbuf[0] == '!' ||
+ testbuf[0] == '>' || testbuf[0] == '\0') {
+ ret.comment = 1;
+ if (verbose) printf("Line is a comment\n");
+ return ret;
+ }
+ ret.comment = 0;
+
+ if (*testbuf == '+') {
+ if (oldtest.valid) {
+ ret = oldtest; /* structure copy */
+ } else {
+ fprintf(stderr, "copy from invalid: ignored\n");
+ }
+ testbuf++;
+ }
+
+ ret.random = randomstate;
+
+ ret.in_err = 0;
+ ret.in_err_limit = e_number_of_errnos;
+
+ p = strtok(testbuf, " \t");
+ while (p != NULL) {
+ q = strchr(p, '=');
+ if (!q)
+ goto balderdash;
+ *q++ = '\0';
+ k = find(p, keywords, sizeof(keywords));
+ switch (k) {
+ case k_random:
+ randomstate = (!strcmp(q, "on"));
+ ret.comment = 1;
+ return ret; /* otherwise ignore this line */
+ case k_func:
+ if (verbose) printf("func=%s ", q);
+ //ret.func = find(q, funcs, sizeof(funcs));
+ ret.func = find_testfunc(q);
+ if (ret.func == NULL)
+ {
+ if (verbose) printf("(id=unknown)\n");
+ goto balderdash;
+ }
+ if(is_single_argtype(ret.func->argtype))
+ argtype = 0;
+ else if(is_double_argtype(ret.func->argtype))
+ argtype = 1;
+ if(is_single_rettype(ret.func->rettype))
+ rettype = 0;
+ else if(is_double_rettype(ret.func->rettype))
+ rettype = 1;
+ //ret.size = sizes[ret.func];
+ if (verbose) printf("(name=%s) (size=%d)\n", ret.func->name, ret.func->argtype);
+ break;
+ case k_op1:
+ case k_op1r:
+ n = do_op(q,ret.op1r,"op1r",2,argtype);
+ if (n < 1)
+ goto balderdash;
+ break;
+ case k_op1i:
+ n = do_op(q,ret.op1i,"op1i",2,argtype);
+ if (n < 1)
+ goto balderdash;
+ break;
+ case k_op2:
+ case k_op2r:
+ n = do_op(q,ret.op2r,"op2r",2,argtype);
+ if (n < 1)
+ goto balderdash;
+ break;
+ case k_op2i:
+ n = do_op(q,ret.op2i,"op2i",2,argtype);
+ if (n < 1)
+ goto balderdash;
+ break;
+ case k_resultc:
+ puts(q);
+ if(strncmp(q,"inf",3)==0) {
+ ret.resultc = rc_infinity;
+ } else if(strcmp(q,"zero")==0) {
+ ret.resultc = rc_zero;
+ } else if(strcmp(q,"nan")==0) {
+ ret.resultc = rc_nan;
+ } else if(strcmp(q,"finite")==0) {
+ ret.resultc = rc_finite;
+ } else {
+ goto balderdash;
+ }
+ break;
+ case k_result:
+ case k_resultr:
+ n = (do_op)(q,ret.resultr,"resultr",3,rettype);
+ if (n < 1)
+ goto balderdash;
+ ret.nresult = n; /* assume real and imaginary have same no. words */
+ break;
+ case k_resulti:
+ n = do_op(q,ret.resulti,"resulti",3,rettype);
+ if (n < 1)
+ goto balderdash;
+ break;
+ case k_res2:
+ n = do_op(q,ret.res2,"res2",2,rettype);
+ if (n < 1)
+ goto balderdash;
+ break;
+ case k_status:
+ while (*q) {
+ if (*q == 'i') ret.status |= FE_INVALID;
+ if (*q == 'z') ret.status |= FE_DIVBYZERO;
+ if (*q == 'o') ret.status |= FE_OVERFLOW;
+ if (*q == 'u') ret.status |= FE_UNDERFLOW;
+ q++;
+ }
+ break;
+ case k_maybeerror:
+ n = find(q, errors, sizeof(errors));
+ if (n < 0)
+ goto balderdash;
+ if(math_errhandling&MATH_ERREXCEPT) {
+ switch(n) {
+ case e_domain: ret.maybestatus |= FE_INVALID; break;
+ case e_divbyzero: ret.maybestatus |= FE_DIVBYZERO; break;
+ case e_overflow: ret.maybestatus |= FE_OVERFLOW; break;
+ case e_underflow: ret.maybestatus |= FE_UNDERFLOW; break;
+ }
+ }
+ {
+ switch(n) {
+ case e_domain:
+ ret.maybeerr = e_EDOM; break;
+ case e_divbyzero:
+ case e_overflow:
+ case e_underflow:
+ ret.maybeerr = e_ERANGE; break;
+ }
+ }
+ case k_maybestatus:
+ while (*q) {
+ if (*q == 'i') ret.maybestatus |= FE_INVALID;
+ if (*q == 'z') ret.maybestatus |= FE_DIVBYZERO;
+ if (*q == 'o') ret.maybestatus |= FE_OVERFLOW;
+ if (*q == 'u') ret.maybestatus |= FE_UNDERFLOW;
+ q++;
+ }
+ break;
+ case k_error:
+ n = find(q, errors, sizeof(errors));
+ if (n < 0)
+ goto balderdash;
+ if(math_errhandling&MATH_ERREXCEPT) {
+ switch(n) {
+ case e_domain: ret.status |= FE_INVALID; break;
+ case e_divbyzero: ret.status |= FE_DIVBYZERO; break;
+ case e_overflow: ret.status |= FE_OVERFLOW; break;
+ case e_underflow: ret.status |= FE_UNDERFLOW; break;
+ }
+ }
+ if(math_errhandling&MATH_ERRNO) {
+ switch(n) {
+ case e_domain:
+ ret.err = e_EDOM; break;
+ case e_divbyzero:
+ case e_overflow:
+ case e_underflow:
+ ret.err = e_ERANGE; break;
+ }
+ }
+ if(!(math_errhandling&MATH_ERRNO)) {
+ switch(n) {
+ case e_domain:
+ ret.maybeerr = e_EDOM; break;
+ case e_divbyzero:
+ case e_overflow:
+ case e_underflow:
+ ret.maybeerr = e_ERANGE; break;
+ }
+ }
+ break;
+ case k_errno:
+ ret.err = find(q, errnos, sizeof(errnos));
+ if (ret.err < 0)
+ goto balderdash;
+ break;
+ case k_errno_in:
+ ret.in_err = find(q, errnos, sizeof(errnos));
+ if (ret.err < 0)
+ goto balderdash;
+ ret.in_err_limit = ret.in_err + 1;
+ break;
+ case k_wrongresult:
+ case k_wrongstatus:
+ case k_wrongres2:
+ case k_wrongerrno:
+ /* quietly ignore these keys */
+ break;
+ default:
+ goto balderdash;
+ }
+ p = strtok(NULL, " \t");
+ }
+ ret.valid = 1;
+ return ret;
+
+ /* come here from almost any error */
+ balderdash:
+ ret.valid = 0;
+ return ret;
+}
+
+typedef enum {
+ test_comment, /* deliberately not a test */
+ test_invalid, /* accidentally not a test */
+ test_decline, /* was a test, and wasn't run */
+ test_fail, /* was a test, and failed */
+ test_pass /* was a test, and passed */
+} testresult;
+
+char failtext[512];
+
+typedef union {
+ unsigned i[2];
+ double f;
+ double da[2];
+} dbl;
+
+typedef union {
+ unsigned i;
+ float f;
+ float da[2];
+} sgl;
+
+/* helper function for runtest */
+void print_error(int rettype, unsigned *result, char* text, char** failp) {
+ special_op *sop;
+ char *str;
+
+ if(result) {
+ *failp += sprintf(*failp," %s=",text);
+ sop = find_special_op_from_op(result[0],result[1],is_double_rettype(rettype));
+ if(sop) {
+ *failp += sprintf(*failp,"%s",sop->name);
+ } else {
+ if(is_double_rettype(rettype)) {
+ str="%08x.%08x";
+ } else {
+ str="%08x";
+ }
+ *failp += sprintf(*failp,str,result[0],result[1]);
+ }
+ }
+}
+
+
+void print_ulps_helper(const char *name, long long ulps, char** failp) {
+ if(ulps == LLONG_MAX) {
+ *failp += sprintf(*failp, " %s=HUGE", name);
+ } else {
+ *failp += sprintf(*failp, " %s=%.3f", name, (double)ulps / ULPUNIT);
+ }
+}
+
+/* for complex args make ulpsr or ulpsri = 0 to not print */
+void print_ulps(int rettype, long long ulpsr, long long ulpsi, char** failp) {
+ if(is_complex_rettype(rettype)) {
+ if (ulpsr) print_ulps_helper("ulpsr",ulpsr,failp);
+ if (ulpsi) print_ulps_helper("ulpsi",ulpsi,failp);
+ } else {
+ if (ulpsr) print_ulps_helper("ulps",ulpsr,failp);
+ }
+}
+
+int runtest(testdetail t) {
+ int err, status;
+
+ dbl d_arg1, d_arg2, d_res, d_res2;
+ sgl s_arg1, s_arg2, s_res, s_res2;
+
+ int deferred_decline = FALSE;
+ char *failp = failtext;
+
+ unsigned int intres=0;
+
+ int res2_adjust = 0;
+
+ if (t.comment)
+ return test_comment;
+ if (!t.valid)
+ return test_invalid;
+
+ /* Set IEEE status to mathlib-normal */
+ feclearexcept(FE_ALL_EXCEPT);
+
+ /* Deal with operands */
+#define DO_DOP(arg,op) arg.i[dmsd] = t.op[0]; arg.i[dlsd] = t.op[1]
+ DO_DOP(d_arg1,op1r);
+ DO_DOP(d_arg2,op2r);
+ s_arg1.i = t.op1r[0]; s_arg2.i = t.op2r[0];
+
+ /*
+ * Detect NaNs, infinities and denormals on input, and set a
+ * deferred decline flag if we're in FO mode.
+ *
+ * (We defer the decline rather than doing it immediately
+ * because even in FO mode the operation is not permitted to
+ * crash or tight-loop; so we _run_ the test, and then ignore
+ * all the results.)
+ */
+ if (fo) {
+ if (is_double_argtype(t.func->argtype) && is_dhard(t.op1r))
+ deferred_decline = TRUE;
+ if (t.func->argtype==at_d2 && is_dhard(t.op2r))
+ deferred_decline = TRUE;
+ if (is_single_argtype(t.func->argtype) && is_shard(t.op1r))
+ deferred_decline = TRUE;
+ if (t.func->argtype==at_s2 && is_shard(t.op2r))
+ deferred_decline = TRUE;
+ if (is_double_rettype(t.func->rettype) && is_dhard(t.resultr))
+ deferred_decline = TRUE;
+ if (t.func->rettype==rt_d2 && is_dhard(t.res2))
+ deferred_decline = TRUE;
+ if (is_single_argtype(t.func->rettype) && is_shard(t.resultr))
+ deferred_decline = TRUE;
+ if (t.func->rettype==rt_s2 && is_shard(t.res2))
+ deferred_decline = TRUE;
+ if (t.err == e_ERANGE)
+ deferred_decline = TRUE;
+ }
+
+ /*
+ * Perform the operation
+ */
+
+ errno = t.in_err == e_EDOM ? EDOM : t.in_err == e_ERANGE ? ERANGE : 0;
+ if (t.err == e_0)
+ t.err = t.in_err;
+ if (t.maybeerr == e_0)
+ t.maybeerr = t.in_err;
+
+ if(t.func->type == t_func) {
+ switch(t.func->argtype) {
+ case at_d: d_res.f = t.func->func.d_d_ptr(d_arg1.f); break;
+ case at_s: s_res.f = t.func->func.s_s_ptr(s_arg1.f); break;
+ case at_d2: d_res.f = t.func->func.d2_d_ptr(d_arg1.f, d_arg2.f); break;
+ case at_s2: s_res.f = t.func->func.s2_s_ptr(s_arg1.f, s_arg2.f); break;
+ case at_di: d_res.f = t.func->func.di_d_ptr(d_arg1.f, d_arg2.i[dmsd]); break;
+ case at_si: s_res.f = t.func->func.si_s_ptr(s_arg1.f, s_arg2.i); break;
+ case at_dip: d_res.f = t.func->func.dip_d_ptr(d_arg1.f, (int*)&intres); break;
+ case at_sip: s_res.f = t.func->func.sip_s_ptr(s_arg1.f, (int*)&intres); break;
+ case at_ddp: d_res.f = t.func->func.ddp_d_ptr(d_arg1.f, &d_res2.f); break;
+ case at_ssp: s_res.f = t.func->func.ssp_s_ptr(s_arg1.f, &s_res2.f); break;
+ default:
+ printf("unhandled function: %s\n",t.func->name);
+ return test_fail;
+ }
+ } else {
+ /* printf("macro: name=%s, num=%i, s1.i=0x%08x s1.f=%f\n",t.func->name, t.func->macro_name, s_arg1.i, (double)s_arg1.f); */
+ switch(t.func->macro_name) {
+ case m_isfinite: intres = isfinite(d_arg1.f); break;
+ case m_isinf: intres = isinf(d_arg1.f); break;
+ case m_isnan: intres = isnan(d_arg1.f); break;
+ case m_isnormal: intres = isnormal(d_arg1.f); break;
+ case m_signbit: intres = signbit(d_arg1.f); break;
+ case m_fpclassify: intres = fpclassify(d_arg1.f); break;
+ case m_isgreater: intres = isgreater(d_arg1.f, d_arg2.f); break;
+ case m_isgreaterequal: intres = isgreaterequal(d_arg1.f, d_arg2.f); break;
+ case m_isless: intres = isless(d_arg1.f, d_arg2.f); break;
+ case m_islessequal: intres = islessequal(d_arg1.f, d_arg2.f); break;
+ case m_islessgreater: intres = islessgreater(d_arg1.f, d_arg2.f); break;
+ case m_isunordered: intres = isunordered(d_arg1.f, d_arg2.f); break;
+
+ case m_isfinitef: intres = isfinite(s_arg1.f); break;
+ case m_isinff: intres = isinf(s_arg1.f); break;
+ case m_isnanf: intres = isnan(s_arg1.f); break;
+ case m_isnormalf: intres = isnormal(s_arg1.f); break;
+ case m_signbitf: intres = signbit(s_arg1.f); break;
+ case m_fpclassifyf: intres = fpclassify(s_arg1.f); break;
+ case m_isgreaterf: intres = isgreater(s_arg1.f, s_arg2.f); break;
+ case m_isgreaterequalf: intres = isgreaterequal(s_arg1.f, s_arg2.f); break;
+ case m_islessf: intres = isless(s_arg1.f, s_arg2.f); break;
+ case m_islessequalf: intres = islessequal(s_arg1.f, s_arg2.f); break;
+ case m_islessgreaterf: intres = islessgreater(s_arg1.f, s_arg2.f); break;
+ case m_isunorderedf: intres = isunordered(s_arg1.f, s_arg2.f); break;
+
+ default:
+ printf("unhandled macro: %s\n",t.func->name);
+ return test_fail;
+ }
+ }
+
+ /*
+ * Decline the test if the deferred decline flag was set above.
+ */
+ if (deferred_decline)
+ return test_decline;
+
+ /* printf("intres=%i\n",intres); */
+
+ /* Clear the fail text (indicating a pass unless we change it) */
+ failp[0] = '\0';
+
+ /* Check the IEEE status bits (except INX, which we disregard).
+ * We don't bother with this for complex numbers, because the
+ * complex functions are hard to get exactly right and we don't
+ * have to anyway (C99 annex G is only informative). */
+ if (!(is_complex_argtype(t.func->argtype) || is_complex_rettype(t.func->rettype))) {
+ status = fetestexcept(FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW|FE_UNDERFLOW);
+ if ((status|t.maybestatus|~statusmask) != (t.status|t.maybestatus|~statusmask)) {
+ if (quiet) failtext[0]='x';
+ else {
+ failp += sprintf(failp,
+ " wrongstatus=%s%s%s%s%s",
+ (status & FE_INVALID ? "i" : ""),
+ (status & FE_DIVBYZERO ? "z" : ""),
+ (status & FE_OVERFLOW ? "o" : ""),
+ (status & FE_UNDERFLOW ? "u" : ""),
+ (status ? "" : "OK"));
+ }
+ }
+ }
+
+ /* Check the result */
+ {
+ unsigned resultr[2], resulti[2];
+ unsigned tresultr[3], tresulti[3], wres;
+
+ switch(t.func->rettype) {
+ case rt_d:
+ case rt_d2:
+ tresultr[0] = t.resultr[0];
+ tresultr[1] = t.resultr[1];
+ resultr[0] = d_res.i[dmsd]; resultr[1] = d_res.i[dlsd];
+ wres = 2;
+ break;
+ case rt_i:
+ tresultr[0] = t.resultr[0];
+ resultr[0] = intres;
+ wres = 1;
+ break;
+ case rt_s:
+ case rt_s2:
+ tresultr[0] = t.resultr[0];
+ resultr[0] = s_res.i;
+ wres = 1;
+ break;
+ default:
+ puts("unhandled rettype in runtest");
+ wres = 0;
+ }
+ if(t.resultc != rc_none) {
+ int err = 0;
+ switch(t.resultc) {
+ case rc_zero:
+ if(resultr[0] != 0 || resulti[0] != 0 ||
+ (wres==2 && (resultr[1] != 0 || resulti[1] != 0))) {
+ err = 1;
+ }
+ break;
+ case rc_infinity:
+ if(wres==1) {
+ if(!((resultr[0]&0x7fffffff)==0x7f800000 ||
+ (resulti[0]&0x7fffffff)==0x7f800000)) {
+ err = 1;
+ }
+ } else {
+ if(!(((resultr[0]&0x7fffffff)==0x7ff00000 && resultr[1]==0) ||
+ ((resulti[0]&0x7fffffff)==0x7ff00000 && resulti[1]==0))) {
+ err = 1;
+ }
+ }
+ break;
+ case rc_nan:
+ if(wres==1) {
+ if(!((resultr[0]&0x7fffffff)>0x7f800000 ||
+ (resulti[0]&0x7fffffff)>0x7f800000)) {
+ err = 1;
+ }
+ } else {
+ canon_dNaN(resultr);
+ canon_dNaN(resulti);
+ if(!(((resultr[0]&0x7fffffff)>0x7ff00000 && resultr[1]==1) ||
+ ((resulti[0]&0x7fffffff)>0x7ff00000 && resulti[1]==1))) {
+ err = 1;
+ }
+ }
+ break;
+ case rc_finite:
+ if(wres==1) {
+ if(!((resultr[0]&0x7fffffff)<0x7f800000 ||
+ (resulti[0]&0x7fffffff)<0x7f800000)) {
+ err = 1;
+ }
+ } else {
+ if(!((resultr[0]&0x7fffffff)<0x7ff00000 ||
+ (resulti[0]&0x7fffffff)<0x7ff00000)) {
+ err = 1;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+ if(err) {
+ print_error(t.func->rettype,resultr,"wrongresultr",&failp);
+ print_error(t.func->rettype,resulti,"wrongresulti",&failp);
+ }
+ } else if (t.nresult > wres) {
+ /*
+ * The test case data has provided the result to more
+ * than double precision. Instead of testing exact
+ * equality, we test against our maximum error
+ * tolerance.
+ */
+ int rshift, ishift;
+ long long ulpsr, ulpsi, ulptolerance;
+
+ tresultr[wres] = t.resultr[wres] << (32-EXTRABITS);
+ tresulti[wres] = t.resulti[wres] << (32-EXTRABITS);
+ if(strict) {
+ ulptolerance = 4096; /* one ulp */
+ } else {
+ ulptolerance = t.func->tolerance;
+ }
+ rshift = ishift = 0;
+ if (ulptolerance & ABSLOWERBOUND) {
+ /*
+ * Hack for the lgamma functions, which have an
+ * error behaviour that can't conveniently be
+ * characterised in pure ULPs. Really, we want to
+ * say that the error in lgamma is "at most N ULPs,
+ * or at most an absolute error of X, whichever is
+ * larger", for appropriately chosen N,X. But since
+ * these two functions are the only cases where it
+ * arises, I haven't bothered to do it in a nice way
+ * in the function table above.
+ *
+ * (The difficult cases arise with negative input
+ * values such that |gamma(x)| is very near to 1; in
+ * this situation implementations tend to separately
+ * compute lgamma(|x|) and the log of the correction
+ * term from the Euler reflection formula, and
+ * subtract - which catastrophically loses
+ * significance.)
+ *
+ * As far as I can tell, nobody cares about this:
+ * GNU libm doesn't get those cases right either,
+ * and OpenCL explicitly doesn't state a ULP error
+ * limit for lgamma. So my guess is that this is
+ * simply considered acceptable error behaviour for
+ * this particular function, and hence I feel free
+ * to allow for it here.
+ */
+ ulptolerance &= ~ABSLOWERBOUND;
+ if (t.op1r[0] & 0x80000000) {
+ if (t.func->rettype == rt_d)
+ rshift = 0x400 - ((tresultr[0] >> 20) & 0x7ff);
+ else if (t.func->rettype == rt_s)
+ rshift = 0x80 - ((tresultr[0] >> 23) & 0xff);
+ if (rshift < 0)
+ rshift = 0;
+ }
+ }
+ if (ulptolerance & PLUSMINUSPIO2) {
+ ulptolerance &= ~PLUSMINUSPIO2;
+ /*
+ * Hack for range reduction, which can reduce
+ * borderline cases in the wrong direction, i.e.
+ * return a value just outside one end of the interval
+ * [-pi/4,+pi/4] when it could have returned a value
+ * just inside the other end by subtracting an
+ * adjacent multiple of pi/2.
+ *
+ * We tolerate this, up to a point, because the
+ * trigonometric functions making use of the output of
+ * rred can cope and because making the range reducer
+ * do the exactly right thing in every case would be
+ * more expensive.
+ */
+ if (wres == 1) {
+ /* Upper bound of overshoot derived in rredf.h */
+ if ((resultr[0]&0x7FFFFFFF) <= 0x3f494b02 &&
+ (resultr[0]&0x7FFFFFFF) > 0x3f490fda &&
+ (resultr[0]&0x80000000) != (tresultr[0]&0x80000000)) {
+ unsigned long long val;
+ val = tresultr[0];
+ val = (val << 32) | tresultr[1];
+ /*
+ * Compute the alternative permitted result by
+ * subtracting from the sum of the extended
+ * single-precision bit patterns of +pi/4 and
+ * -pi/4. This is a horrible hack which only
+ * works because we can be confident that
+ * numbers in this range all have the same
+ * exponent!
+ */
+ val = 0xfe921fb54442d184ULL - val;
+ tresultr[0] = val >> 32;
+ tresultr[1] = (val >> (32-EXTRABITS)) << (32-EXTRABITS);
+ /*
+ * Also, expect a correspondingly different
+ * value of res2 as a result of this change.
+ * The adjustment depends on whether we just
+ * flipped the result from + to - or vice
+ * versa.
+ */
+ if (resultr[0] & 0x80000000) {
+ res2_adjust = +1;
+ } else {
+ res2_adjust = -1;
+ }
+ }
+ }
+ }
+ ulpsr = calc_error(resultr, tresultr, rshift, t.func->rettype);
+ if(is_complex_rettype(t.func->rettype)) {
+ ulpsi = calc_error(resulti, tresulti, ishift, t.func->rettype);
+ } else {
+ ulpsi = 0;
+ }
+ unsigned *rr = (ulpsr > ulptolerance || ulpsr < -ulptolerance) ? resultr : NULL;
+ unsigned *ri = (ulpsi > ulptolerance || ulpsi < -ulptolerance) ? resulti : NULL;
+/* printf("tolerance=%i, ulpsr=%i, ulpsi=%i, rr=%p, ri=%p\n",ulptolerance,ulpsr,ulpsi,rr,ri); */
+ if (rr || ri) {
+ if (quiet) failtext[0]='x';
+ else {
+ print_error(t.func->rettype,rr,"wrongresultr",&failp);
+ print_error(t.func->rettype,ri,"wrongresulti",&failp);
+ print_ulps(t.func->rettype,rr ? ulpsr : 0, ri ? ulpsi : 0,&failp);
+ }
+ }
+ } else {
+ if(is_complex_rettype(t.func->rettype))
+ /*
+ * Complex functions are not fully supported,
+ * this is unreachable, but prevents warnings.
+ */
+ abort();
+ /*
+ * The test case data has provided the result in
+ * exactly the output precision. Therefore we must
+ * complain about _any_ violation.
+ */
+ switch(t.func->rettype) {
+ case rt_dc:
+ canon_dNaN(tresulti);
+ canon_dNaN(resulti);
+ if (fo) {
+ dnormzero(tresulti);
+ dnormzero(resulti);
+ }
+ /* deliberate fall-through */
+ case rt_d:
+ canon_dNaN(tresultr);
+ canon_dNaN(resultr);
+ if (fo) {
+ dnormzero(tresultr);
+ dnormzero(resultr);
+ }
+ break;
+ case rt_sc:
+ canon_sNaN(tresulti);
+ canon_sNaN(resulti);
+ if (fo) {
+ snormzero(tresulti);
+ snormzero(resulti);
+ }
+ /* deliberate fall-through */
+ case rt_s:
+ canon_sNaN(tresultr);
+ canon_sNaN(resultr);
+ if (fo) {
+ snormzero(tresultr);
+ snormzero(resultr);
+ }
+ break;
+ default:
+ break;
+ }
+ if(is_complex_rettype(t.func->rettype)) {
+ unsigned *rr, *ri;
+ if(resultr[0] != tresultr[0] ||
+ (wres > 1 && resultr[1] != tresultr[1])) {
+ rr = resultr;
+ } else {
+ rr = NULL;
+ }
+ if(resulti[0] != tresulti[0] ||
+ (wres > 1 && resulti[1] != tresulti[1])) {
+ ri = resulti;
+ } else {
+ ri = NULL;
+ }
+ if(rr || ri) {
+ if (quiet) failtext[0]='x';
+ print_error(t.func->rettype,rr,"wrongresultr",&failp);
+ print_error(t.func->rettype,ri,"wrongresulti",&failp);
+ }
+ } else if (resultr[0] != tresultr[0] ||
+ (wres > 1 && resultr[1] != tresultr[1])) {
+ if (quiet) failtext[0]='x';
+ print_error(t.func->rettype,resultr,"wrongresult",&failp);
+ }
+ }
+ /*
+ * Now test res2, for those functions (frexp, modf, rred)
+ * which use it.
+ */
+ if (t.func->func.ptr == &frexp || t.func->func.ptr == &frexpf ||
+ t.func->macro_name == m_rred || t.func->macro_name == m_rredf) {
+ unsigned tres2 = t.res2[0];
+ if (res2_adjust) {
+ /* Fix for range reduction, propagated from further up */
+ tres2 = (tres2 + res2_adjust) & 3;
+ }
+ if (tres2 != intres) {
+ if (quiet) failtext[0]='x';
+ else {
+ failp += sprintf(failp,
+ " wrongres2=%08x", intres);
+ }
+ }
+ } else if (t.func->func.ptr == &modf || t.func->func.ptr == &modff) {
+ tresultr[0] = t.res2[0];
+ tresultr[1] = t.res2[1];
+ if (is_double_rettype(t.func->rettype)) {
+ canon_dNaN(tresultr);
+ resultr[0] = d_res2.i[dmsd];
+ resultr[1] = d_res2.i[dlsd];
+ canon_dNaN(resultr);
+ if (fo) {
+ dnormzero(tresultr);
+ dnormzero(resultr);
+ }
+ } else {
+ canon_sNaN(tresultr);
+ resultr[0] = s_res2.i;
+ resultr[1] = s_res2.i;
+ canon_sNaN(resultr);
+ if (fo) {
+ snormzero(tresultr);
+ snormzero(resultr);
+ }
+ }
+ if (resultr[0] != tresultr[0] ||
+ (wres > 1 && resultr[1] != tresultr[1])) {
+ if (quiet) failtext[0]='x';
+ else {
+ if (is_double_rettype(t.func->rettype))
+ failp += sprintf(failp, " wrongres2=%08x.%08x",
+ resultr[0], resultr[1]);
+ else
+ failp += sprintf(failp, " wrongres2=%08x",
+ resultr[0]);
+ }
+ }
+ }
+ }
+
+ /* Check errno */
+ err = (errno == EDOM ? e_EDOM : errno == ERANGE ? e_ERANGE : e_0);
+ if (err != t.err && err != t.maybeerr) {
+ if (quiet) failtext[0]='x';
+ else {
+ failp += sprintf(failp, " wrongerrno=%s expecterrno=%s ", errnos[err], errnos[t.err]);
+ }
+ }
+
+ return *failtext ? test_fail : test_pass;
+}
+
+int passed, failed, declined;
+
+void runtests(char *name, FILE *fp) {
+ char testbuf[512], linebuf[512];
+ int lineno = 1;
+ testdetail test;
+
+ test.valid = 0;
+
+ if (verbose) printf("runtests: %s\n", name);
+ while (fgets(testbuf, sizeof(testbuf), fp)) {
+ int res, print_errno;
+ testbuf[strcspn(testbuf, "\r\n")] = '\0';
+ strcpy(linebuf, testbuf);
+ test = parsetest(testbuf, test);
+ print_errno = 0;
+ while (test.in_err < test.in_err_limit) {
+ res = runtest(test);
+ if (res == test_pass) {
+ if (verbose)
+ printf("%s:%d: pass\n", name, lineno);
+ ++passed;
+ } else if (res == test_decline) {
+ if (verbose)
+ printf("%s:%d: declined\n", name, lineno);
+ ++declined;
+ } else if (res == test_fail) {
+ if (!quiet)
+ printf("%s:%d: FAIL%s: %s%s%s%s\n", name, lineno,
+ test.random ? " (random)" : "",
+ linebuf,
+ print_errno ? " errno_in=" : "",
+ print_errno ? errnos[test.in_err] : "",
+ failtext);
+ ++failed;
+ } else if (res == test_invalid) {
+ printf("%s:%d: malformed: %s\n", name, lineno, linebuf);
+ ++failed;
+ }
+ test.in_err++;
+ print_errno = 1;
+ }
+ lineno++;
+ }
+}
+
+int main(int ac, char **av) {
+ char **files;
+ int i, nfiles = 0;
+ dbl d;
+
+#ifdef MICROLIB
+ /*
+ * Invent argc and argv ourselves.
+ */
+ char *argv[256];
+ char args[256];
+ {
+ int sargs[2];
+ char *p;
+
+ ac = 0;
+
+ sargs[0]=(int)args;
+ sargs[1]=(int)sizeof(args);
+ if (!__semihost(0x15, sargs)) {
+ args[sizeof(args)-1] = '\0'; /* just in case */
+ p = args;
+ while (1) {
+ while (*p == ' ' || *p == '\t') p++;
+ if (!*p) break;
+ argv[ac++] = p;
+ while (*p && *p != ' ' && *p != '\t') p++;
+ if (*p) *p++ = '\0';
+ }
+ }
+
+ av = argv;
+ }
+#endif
+
+ /* Sort tfuncs */
+ qsort(tfuncs, sizeof(tfuncs)/sizeof(test_func), sizeof(test_func), &compare_tfuncs);
+
+ /*
+ * Autodetect the `double' endianness.
+ */
+ dmsd = 0;
+ d.f = 1.0; /* 0x3ff00000 / 0x00000000 */
+ if (d.i[dmsd] == 0) {
+ dmsd = 1;
+ }
+ /*
+ * Now dmsd denotes what the compiler thinks we're at. Let's
+ * check that it agrees with what the runtime thinks.
+ */
+ d.i[0] = d.i[1] = 0x11111111;/* a random +ve number */
+ d.f /= d.f; /* must now be one */
+ if (d.i[dmsd] == 0) {
+ fprintf(stderr, "YIKES! Compiler and runtime disagree on endianness"
+ " of `double'. Bailing out\n");
+ return 1;
+ }
+ dlsd = !dmsd;
+
+ /* default is terse */
+ verbose = 0;
+ fo = 0;
+ strict = 0;
+
+ files = (char **)malloc((ac+1) * sizeof(char *));
+ if (!files) {
+ fprintf(stderr, "initial malloc failed!\n");
+ return 1;
+ }
+#ifdef NOCMDLINE
+ files[nfiles++] = "testfile";
+#endif
+
+ while (--ac) {
+ char *p = *++av;
+ if (*p == '-') {
+ static char *options[] = {
+ "-fo",
+#if 0
+ "-noinexact",
+ "-noround",
+#endif
+ "-nostatus",
+ "-quiet",
+ "-strict",
+ "-v",
+ "-verbose",
+ };
+ enum {
+ op_fo,
+#if 0
+ op_noinexact,
+ op_noround,
+#endif
+ op_nostatus,
+ op_quiet,
+ op_strict,
+ op_v,
+ op_verbose,
+ };
+ switch (find(p, options, sizeof(options))) {
+ case op_quiet:
+ quiet = 1;
+ break;
+#if 0
+ case op_noinexact:
+ statusmask &= 0x0F; /* remove bit 4 */
+ break;
+ case op_noround:
+ doround = 0;
+ break;
+#endif
+ case op_nostatus: /* no status word => noinx,noround */
+ statusmask = 0;
+ doround = 0;
+ break;
+ case op_v:
+ case op_verbose:
+ verbose = 1;
+ break;
+ case op_fo:
+ fo = 1;
+ break;
+ case op_strict: /* tolerance is 1 ulp */
+ strict = 1;
+ break;
+ default:
+ fprintf(stderr, "unrecognised option: %s\n", p);
+ break;
+ }
+ } else {
+ files[nfiles++] = p;
+ }
+ }
+
+ passed = failed = declined = 0;
+
+ if (nfiles) {
+ for (i = 0; i < nfiles; i++) {
+ FILE *fp = fopen(files[i], "r");
+ if (!fp) {
+ fprintf(stderr, "Couldn't open %s\n", files[i]);
+ } else
+ runtests(files[i], fp);
+ }
+ } else
+ runtests("(stdin)", stdin);
+
+ printf("Completed. Passed %d, failed %d (total %d",
+ passed, failed, passed+failed);
+ if (declined)
+ printf(" plus %d declined", declined);
+ printf(")\n");
+ if (failed || passed == 0)
+ return 1;
+ printf("** TEST PASSED OK **\n");
+ return 0;
+}
+
+void undef_func() {
+ failed++;
+ puts("ERROR: undefined function called");
+}
diff --git a/math/test/rtest/dotest.c b/math/test/rtest/dotest.c
new file mode 100644
index 000000000000..6be79e1df0d1
--- /dev/null
+++ b/math/test/rtest/dotest.c
@@ -0,0 +1,2167 @@
+/*
+ * dotest.c - actually generate mathlib test cases
+ *
+ * Copyright (c) 1999-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdint.h>
+#include <assert.h>
+#include <limits.h>
+
+#include "semi.h"
+#include "intern.h"
+#include "random.h"
+
+#define MPFR_PREC 96 /* good enough for float or double + a few extra bits */
+
+extern int lib_fo, lib_no_arith, ntests;
+
+/*
+ * Prototypes.
+ */
+static void cases_biased(uint32 *, uint32, uint32);
+static void cases_biased_positive(uint32 *, uint32, uint32);
+static void cases_biased_float(uint32 *, uint32, uint32);
+static void cases_uniform(uint32 *, uint32, uint32);
+static void cases_uniform_positive(uint32 *, uint32, uint32);
+static void cases_uniform_float(uint32 *, uint32, uint32);
+static void cases_uniform_float_positive(uint32 *, uint32, uint32);
+static void log_cases(uint32 *, uint32, uint32);
+static void log_cases_float(uint32 *, uint32, uint32);
+static void log1p_cases(uint32 *, uint32, uint32);
+static void log1p_cases_float(uint32 *, uint32, uint32);
+static void minmax_cases(uint32 *, uint32, uint32);
+static void minmax_cases_float(uint32 *, uint32, uint32);
+static void atan2_cases(uint32 *, uint32, uint32);
+static void atan2_cases_float(uint32 *, uint32, uint32);
+static void pow_cases(uint32 *, uint32, uint32);
+static void pow_cases_float(uint32 *, uint32, uint32);
+static void rred_cases(uint32 *, uint32, uint32);
+static void rred_cases_float(uint32 *, uint32, uint32);
+static void cases_semi1(uint32 *, uint32, uint32);
+static void cases_semi1_float(uint32 *, uint32, uint32);
+static void cases_semi2(uint32 *, uint32, uint32);
+static void cases_semi2_float(uint32 *, uint32, uint32);
+static void cases_ldexp(uint32 *, uint32, uint32);
+static void cases_ldexp_float(uint32 *, uint32, uint32);
+
+static void complex_cases_uniform(uint32 *, uint32, uint32);
+static void complex_cases_uniform_float(uint32 *, uint32, uint32);
+static void complex_cases_biased(uint32 *, uint32, uint32);
+static void complex_cases_biased_float(uint32 *, uint32, uint32);
+static void complex_log_cases(uint32 *, uint32, uint32);
+static void complex_log_cases_float(uint32 *, uint32, uint32);
+static void complex_pow_cases(uint32 *, uint32, uint32);
+static void complex_pow_cases_float(uint32 *, uint32, uint32);
+static void complex_arithmetic_cases(uint32 *, uint32, uint32);
+static void complex_arithmetic_cases_float(uint32 *, uint32, uint32);
+
+static uint32 doubletop(int x, int scale);
+static uint32 floatval(int x, int scale);
+
+/*
+ * Convert back and forth between IEEE bit patterns and the
+ * mpfr_t/mpc_t types.
+ */
+static void set_mpfr_d(mpfr_t x, uint32 h, uint32 l)
+{
+ uint64_t hl = ((uint64_t)h << 32) | l;
+ uint32 exp = (hl >> 52) & 0x7ff;
+ int64_t mantissa = hl & (((uint64_t)1 << 52) - 1);
+ int sign = (hl >> 63) ? -1 : +1;
+ if (exp == 0x7ff) {
+ if (mantissa == 0)
+ mpfr_set_inf(x, sign);
+ else
+ mpfr_set_nan(x);
+ } else if (exp == 0 && mantissa == 0) {
+ mpfr_set_ui(x, 0, GMP_RNDN);
+ mpfr_setsign(x, x, sign < 0, GMP_RNDN);
+ } else {
+ if (exp != 0)
+ mantissa |= ((uint64_t)1 << 52);
+ else
+ exp++;
+ mpfr_set_sj_2exp(x, mantissa * sign, (int)exp - 0x3ff - 52, GMP_RNDN);
+ }
+}
+static void set_mpfr_f(mpfr_t x, uint32 f)
+{
+ uint32 exp = (f >> 23) & 0xff;
+ int32 mantissa = f & ((1 << 23) - 1);
+ int sign = (f >> 31) ? -1 : +1;
+ if (exp == 0xff) {
+ if (mantissa == 0)
+ mpfr_set_inf(x, sign);
+ else
+ mpfr_set_nan(x);
+ } else if (exp == 0 && mantissa == 0) {
+ mpfr_set_ui(x, 0, GMP_RNDN);
+ mpfr_setsign(x, x, sign < 0, GMP_RNDN);
+ } else {
+ if (exp != 0)
+ mantissa |= (1 << 23);
+ else
+ exp++;
+ mpfr_set_sj_2exp(x, mantissa * sign, (int)exp - 0x7f - 23, GMP_RNDN);
+ }
+}
+static void set_mpc_d(mpc_t z, uint32 rh, uint32 rl, uint32 ih, uint32 il)
+{
+ mpfr_t x, y;
+ mpfr_init2(x, MPFR_PREC);
+ mpfr_init2(y, MPFR_PREC);
+ set_mpfr_d(x, rh, rl);
+ set_mpfr_d(y, ih, il);
+ mpc_set_fr_fr(z, x, y, MPC_RNDNN);
+ mpfr_clear(x);
+ mpfr_clear(y);
+}
+static void set_mpc_f(mpc_t z, uint32 r, uint32 i)
+{
+ mpfr_t x, y;
+ mpfr_init2(x, MPFR_PREC);
+ mpfr_init2(y, MPFR_PREC);
+ set_mpfr_f(x, r);
+ set_mpfr_f(y, i);
+ mpc_set_fr_fr(z, x, y, MPC_RNDNN);
+ mpfr_clear(x);
+ mpfr_clear(y);
+}
+static void get_mpfr_d(const mpfr_t x, uint32 *h, uint32 *l, uint32 *extra)
+{
+ uint32_t sign, expfield, mantfield;
+ mpfr_t significand;
+ int exp;
+
+ if (mpfr_nan_p(x)) {
+ *h = 0x7ff80000;
+ *l = 0;
+ *extra = 0;
+ return;
+ }
+
+ sign = mpfr_signbit(x) ? 0x80000000U : 0;
+
+ if (mpfr_inf_p(x)) {
+ *h = 0x7ff00000 | sign;
+ *l = 0;
+ *extra = 0;
+ return;
+ }
+
+ if (mpfr_zero_p(x)) {
+ *h = 0x00000000 | sign;
+ *l = 0;
+ *extra = 0;
+ return;
+ }
+
+ mpfr_init2(significand, MPFR_PREC);
+ mpfr_set(significand, x, GMP_RNDN);
+ exp = mpfr_get_exp(significand);
+ mpfr_set_exp(significand, 0);
+
+ /* Now significand is in [1/2,1), and significand * 2^exp == x.
+ * So the IEEE exponent corresponding to exp==0 is 0x3fe. */
+ if (exp > 0x400) {
+ /* overflow to infinity anyway */
+ *h = 0x7ff00000 | sign;
+ *l = 0;
+ *extra = 0;
+ mpfr_clear(significand);
+ return;
+ }
+
+ if (exp <= -0x3fe || mpfr_zero_p(x))
+ exp = -0x3fd; /* denormalise */
+ expfield = exp + 0x3fd; /* offset to cancel leading mantissa bit */
+
+ mpfr_div_2si(significand, x, exp - 21, GMP_RNDN);
+ mpfr_abs(significand, significand, GMP_RNDN);
+ mantfield = mpfr_get_ui(significand, GMP_RNDZ);
+ *h = sign + ((uint64_t)expfield << 20) + mantfield;
+ mpfr_sub_ui(significand, significand, mantfield, GMP_RNDN);
+ mpfr_mul_2ui(significand, significand, 32, GMP_RNDN);
+ mantfield = mpfr_get_ui(significand, GMP_RNDZ);
+ *l = mantfield;
+ mpfr_sub_ui(significand, significand, mantfield, GMP_RNDN);
+ mpfr_mul_2ui(significand, significand, 32, GMP_RNDN);
+ mantfield = mpfr_get_ui(significand, GMP_RNDZ);
+ *extra = mantfield;
+
+ mpfr_clear(significand);
+}
+static void get_mpfr_f(const mpfr_t x, uint32 *f, uint32 *extra)
+{
+ uint32_t sign, expfield, mantfield;
+ mpfr_t significand;
+ int exp;
+
+ if (mpfr_nan_p(x)) {
+ *f = 0x7fc00000;
+ *extra = 0;
+ return;
+ }
+
+ sign = mpfr_signbit(x) ? 0x80000000U : 0;
+
+ if (mpfr_inf_p(x)) {
+ *f = 0x7f800000 | sign;
+ *extra = 0;
+ return;
+ }
+
+ if (mpfr_zero_p(x)) {
+ *f = 0x00000000 | sign;
+ *extra = 0;
+ return;
+ }
+
+ mpfr_init2(significand, MPFR_PREC);
+ mpfr_set(significand, x, GMP_RNDN);
+ exp = mpfr_get_exp(significand);
+ mpfr_set_exp(significand, 0);
+
+ /* Now significand is in [1/2,1), and significand * 2^exp == x.
+ * So the IEEE exponent corresponding to exp==0 is 0x7e. */
+ if (exp > 0x80) {
+ /* overflow to infinity anyway */
+ *f = 0x7f800000 | sign;
+ *extra = 0;
+ mpfr_clear(significand);
+ return;
+ }
+
+ if (exp <= -0x7e || mpfr_zero_p(x))
+ exp = -0x7d; /* denormalise */
+ expfield = exp + 0x7d; /* offset to cancel leading mantissa bit */
+
+ mpfr_div_2si(significand, x, exp - 24, GMP_RNDN);
+ mpfr_abs(significand, significand, GMP_RNDN);
+ mantfield = mpfr_get_ui(significand, GMP_RNDZ);
+ *f = sign + ((uint64_t)expfield << 23) + mantfield;
+ mpfr_sub_ui(significand, significand, mantfield, GMP_RNDN);
+ mpfr_mul_2ui(significand, significand, 32, GMP_RNDN);
+ mantfield = mpfr_get_ui(significand, GMP_RNDZ);
+ *extra = mantfield;
+
+ mpfr_clear(significand);
+}
+static void get_mpc_d(const mpc_t z,
+ uint32 *rh, uint32 *rl, uint32 *rextra,
+ uint32 *ih, uint32 *il, uint32 *iextra)
+{
+ mpfr_t x, y;
+ mpfr_init2(x, MPFR_PREC);
+ mpfr_init2(y, MPFR_PREC);
+ mpc_real(x, z, GMP_RNDN);
+ mpc_imag(y, z, GMP_RNDN);
+ get_mpfr_d(x, rh, rl, rextra);
+ get_mpfr_d(y, ih, il, iextra);
+ mpfr_clear(x);
+ mpfr_clear(y);
+}
+static void get_mpc_f(const mpc_t z,
+ uint32 *r, uint32 *rextra,
+ uint32 *i, uint32 *iextra)
+{
+ mpfr_t x, y;
+ mpfr_init2(x, MPFR_PREC);
+ mpfr_init2(y, MPFR_PREC);
+ mpc_real(x, z, GMP_RNDN);
+ mpc_imag(y, z, GMP_RNDN);
+ get_mpfr_f(x, r, rextra);
+ get_mpfr_f(y, i, iextra);
+ mpfr_clear(x);
+ mpfr_clear(y);
+}
+
+/*
+ * Implementation of mathlib functions that aren't trivially
+ * implementable using an existing mpfr or mpc function.
+ */
+int test_rred(mpfr_t ret, const mpfr_t x, int *quadrant)
+{
+ mpfr_t halfpi;
+ long quo;
+ int status;
+
+ /*
+ * In the worst case of range reduction, we get an input of size
+ * around 2^1024, and must find its remainder mod pi, which means
+ * we need 1024 bits of pi at least. Plus, the remainder might
+ * happen to come out very very small if we're unlucky. How
+ * unlucky can we be? Well, conveniently, I once went through and
+ * actually worked that out using Paxson's modular minimisation
+ * algorithm, and it turns out that the smallest exponent you can
+ * get out of a nontrivial[1] double precision range reduction is
+ * 0x3c2, i.e. of the order of 2^-61. So we need 1024 bits of pi
+ * to get us down to the units digit, another 61 or so bits (say
+ * 64) to get down to the highest set bit of the output, and then
+ * some bits to make the actual mantissa big enough.
+ *
+ * [1] of course the output of range reduction can have an
+ * arbitrarily small exponent in the trivial case, where the
+ * input is so small that it's the identity function. That
+ * doesn't count.
+ */
+ mpfr_init2(halfpi, MPFR_PREC + 1024 + 64);
+ mpfr_const_pi(halfpi, GMP_RNDN);
+ mpfr_div_ui(halfpi, halfpi, 2, GMP_RNDN);
+
+ status = mpfr_remquo(ret, &quo, x, halfpi, GMP_RNDN);
+ *quadrant = quo & 3;
+
+ mpfr_clear(halfpi);
+
+ return status;
+}
+int test_lgamma(mpfr_t ret, const mpfr_t x, mpfr_rnd_t rnd)
+{
+ /*
+ * mpfr_lgamma takes an extra int * parameter to hold the output
+ * sign. We don't bother testing that, so this wrapper throws away
+ * the sign and hence fits into the same function prototype as all
+ * the other real->real mpfr functions.
+ *
+ * There is also mpfr_lngamma which has no sign output and hence
+ * has the right prototype already, but unfortunately it returns
+ * NaN in cases where gamma(x) < 0, so it's no use to us.
+ */
+ int sign;
+ return mpfr_lgamma(ret, &sign, x, rnd);
+}
+int test_cpow(mpc_t ret, const mpc_t x, const mpc_t y, mpc_rnd_t rnd)
+{
+ /*
+ * For complex pow, we must bump up the precision by a huge amount
+ * if we want it to get the really difficult cases right. (Not
+ * that we expect the library under test to be getting those cases
+ * right itself, but we'd at least like the test suite to report
+ * them as wrong for the _right reason_.)
+ *
+ * This works around a bug in mpc_pow(), fixed by r1455 in the MPC
+ * svn repository (2014-10-14) and expected to be in any MPC
+ * release after 1.0.2 (which was the latest release already made
+ * at the time of the fix). So as and when we update to an MPC
+ * with the fix in it, we could remove this workaround.
+ *
+ * For the reasons for choosing this amount of extra precision,
+ * see analysis in complex/cpownotes.txt for the rationale for the
+ * amount.
+ */
+ mpc_t xbig, ybig, retbig;
+ int status;
+
+ mpc_init2(xbig, 1034 + 53 + 60 + MPFR_PREC);
+ mpc_init2(ybig, 1034 + 53 + 60 + MPFR_PREC);
+ mpc_init2(retbig, 1034 + 53 + 60 + MPFR_PREC);
+
+ mpc_set(xbig, x, MPC_RNDNN);
+ mpc_set(ybig, y, MPC_RNDNN);
+ status = mpc_pow(retbig, xbig, ybig, rnd);
+ mpc_set(ret, retbig, rnd);
+
+ mpc_clear(xbig);
+ mpc_clear(ybig);
+ mpc_clear(retbig);
+
+ return status;
+}
+
+/*
+ * Identify 'hard' values (NaN, Inf, nonzero denormal) for deciding
+ * whether microlib will decline to run a test.
+ */
+#define is_shard(in) ( \
+ (((in)[0] & 0x7F800000) == 0x7F800000 || \
+ (((in)[0] & 0x7F800000) == 0 && ((in)[0]&0x7FFFFFFF) != 0)))
+
+#define is_dhard(in) ( \
+ (((in)[0] & 0x7FF00000) == 0x7FF00000 || \
+ (((in)[0] & 0x7FF00000) == 0 && (((in)[0] & 0xFFFFF) | (in)[1]) != 0)))
+
+/*
+ * Identify integers.
+ */
+int is_dinteger(uint32 *in)
+{
+ uint32 out[3];
+ if ((0x7FF00000 & ~in[0]) == 0)
+ return 0; /* not finite, hence not integer */
+ test_ceil(in, out);
+ return in[0] == out[0] && in[1] == out[1];
+}
+int is_sinteger(uint32 *in)
+{
+ uint32 out[3];
+ if ((0x7F800000 & ~in[0]) == 0)
+ return 0; /* not finite, hence not integer */
+ test_ceilf(in, out);
+ return in[0] == out[0];
+}
+
+/*
+ * Identify signalling NaNs.
+ */
+int is_dsnan(const uint32 *in)
+{
+ if ((in[0] & 0x7FF00000) != 0x7FF00000)
+ return 0; /* not the inf/nan exponent */
+ if ((in[0] << 12) == 0 && in[1] == 0)
+ return 0; /* inf */
+ if (in[0] & 0x00080000)
+ return 0; /* qnan */
+ return 1;
+}
+int is_ssnan(const uint32 *in)
+{
+ if ((in[0] & 0x7F800000) != 0x7F800000)
+ return 0; /* not the inf/nan exponent */
+ if ((in[0] << 9) == 0)
+ return 0; /* inf */
+ if (in[0] & 0x00400000)
+ return 0; /* qnan */
+ return 1;
+}
+int is_snan(const uint32 *in, int size)
+{
+ return size == 2 ? is_dsnan(in) : is_ssnan(in);
+}
+
+/*
+ * Wrapper functions called to fix up unusual results after the main
+ * test function has run.
+ */
+void universal_wrapper(wrapperctx *ctx)
+{
+ /*
+ * Any SNaN input gives rise to a QNaN output.
+ */
+ int op;
+ for (op = 0; op < wrapper_get_nops(ctx); op++) {
+ int size = wrapper_get_size(ctx, op);
+
+ if (!wrapper_is_complex(ctx, op) &&
+ is_snan(wrapper_get_ieee(ctx, op), size)) {
+ wrapper_set_nan(ctx);
+ }
+ }
+}
+
+Testable functions[] = {
+ /*
+ * Trig functions: sin, cos, tan. We test the core function
+ * between -16 and +16: we assume that range reduction exists
+ * and will be used for larger arguments, and we'll test that
+ * separately. Also we only go down to 2^-27 in magnitude,
+ * because below that sin(x)=tan(x)=x and cos(x)=1 as far as
+ * double precision can tell, which is boring.
+ */
+ {"sin", (funcptr)mpfr_sin, args1, {NULL},
+ cases_uniform, 0x3e400000, 0x40300000},
+ {"sinf", (funcptr)mpfr_sin, args1f, {NULL},
+ cases_uniform_float, 0x39800000, 0x41800000},
+ {"cos", (funcptr)mpfr_cos, args1, {NULL},
+ cases_uniform, 0x3e400000, 0x40300000},
+ {"cosf", (funcptr)mpfr_cos, args1f, {NULL},
+ cases_uniform_float, 0x39800000, 0x41800000},
+ {"tan", (funcptr)mpfr_tan, args1, {NULL},
+ cases_uniform, 0x3e400000, 0x40300000},
+ {"tanf", (funcptr)mpfr_tan, args1f, {NULL},
+ cases_uniform_float, 0x39800000, 0x41800000},
+ {"sincosf_sinf", (funcptr)mpfr_sin, args1f, {NULL},
+ cases_uniform_float, 0x39800000, 0x41800000},
+ {"sincosf_cosf", (funcptr)mpfr_cos, args1f, {NULL},
+ cases_uniform_float, 0x39800000, 0x41800000},
+ /*
+ * Inverse trig: asin, acos. Between 1 and -1, of course. acos
+ * goes down to 2^-54, asin to 2^-27.
+ */
+ {"asin", (funcptr)mpfr_asin, args1, {NULL},
+ cases_uniform, 0x3e400000, 0x3fefffff},
+ {"asinf", (funcptr)mpfr_asin, args1f, {NULL},
+ cases_uniform_float, 0x39800000, 0x3f7fffff},
+ {"acos", (funcptr)mpfr_acos, args1, {NULL},
+ cases_uniform, 0x3c900000, 0x3fefffff},
+ {"acosf", (funcptr)mpfr_acos, args1f, {NULL},
+ cases_uniform_float, 0x33800000, 0x3f7fffff},
+ /*
+ * Inverse trig: atan. atan is stable (in double prec) with
+ * argument magnitude past 2^53, so we'll test up to there.
+ * atan(x) is boringly just x below 2^-27.
+ */
+ {"atan", (funcptr)mpfr_atan, args1, {NULL},
+ cases_uniform, 0x3e400000, 0x43400000},
+ {"atanf", (funcptr)mpfr_atan, args1f, {NULL},
+ cases_uniform_float, 0x39800000, 0x4b800000},
+ /*
+ * atan2. Interesting cases arise when the exponents of the
+ * arguments differ by at most about 50.
+ */
+ {"atan2", (funcptr)mpfr_atan2, args2, {NULL},
+ atan2_cases, 0},
+ {"atan2f", (funcptr)mpfr_atan2, args2f, {NULL},
+ atan2_cases_float, 0},
+ /*
+ * The exponentials: exp, sinh, cosh. They overflow at around
+ * 710. exp and sinh are boring below 2^-54, cosh below 2^-27.
+ */
+ {"exp", (funcptr)mpfr_exp, args1, {NULL},
+ cases_uniform, 0x3c900000, 0x40878000},
+ {"expf", (funcptr)mpfr_exp, args1f, {NULL},
+ cases_uniform_float, 0x33800000, 0x42dc0000},
+ {"sinh", (funcptr)mpfr_sinh, args1, {NULL},
+ cases_uniform, 0x3c900000, 0x40878000},
+ {"sinhf", (funcptr)mpfr_sinh, args1f, {NULL},
+ cases_uniform_float, 0x33800000, 0x42dc0000},
+ {"cosh", (funcptr)mpfr_cosh, args1, {NULL},
+ cases_uniform, 0x3e400000, 0x40878000},
+ {"coshf", (funcptr)mpfr_cosh, args1f, {NULL},
+ cases_uniform_float, 0x39800000, 0x42dc0000},
+ /*
+ * tanh is stable past around 20. It's boring below 2^-27.
+ */
+ {"tanh", (funcptr)mpfr_tanh, args1, {NULL},
+ cases_uniform, 0x3e400000, 0x40340000},
+ {"tanhf", (funcptr)mpfr_tanh, args1f, {NULL},
+ cases_uniform, 0x39800000, 0x41100000},
+ /*
+ * log must be tested only on positive numbers, but can cover
+ * the whole range of positive nonzero finite numbers. It never
+ * gets boring.
+ */
+ {"log", (funcptr)mpfr_log, args1, {NULL}, log_cases, 0},
+ {"logf", (funcptr)mpfr_log, args1f, {NULL}, log_cases_float, 0},
+ {"log10", (funcptr)mpfr_log10, args1, {NULL}, log_cases, 0},
+ {"log10f", (funcptr)mpfr_log10, args1f, {NULL}, log_cases_float, 0},
+ /*
+ * pow.
+ */
+ {"pow", (funcptr)mpfr_pow, args2, {NULL}, pow_cases, 0},
+ {"powf", (funcptr)mpfr_pow, args2f, {NULL}, pow_cases_float, 0},
+ /*
+ * Trig range reduction. We are able to test this for all
+ * finite values, but will only bother for things between 2^-3
+ * and 2^+52.
+ */
+ {"rred", (funcptr)test_rred, rred, {NULL}, rred_cases, 0},
+ {"rredf", (funcptr)test_rred, rredf, {NULL}, rred_cases_float, 0},
+ /*
+ * Square and cube root.
+ */
+ {"sqrt", (funcptr)mpfr_sqrt, args1, {NULL}, log_cases, 0},
+ {"sqrtf", (funcptr)mpfr_sqrt, args1f, {NULL}, log_cases_float, 0},
+ {"cbrt", (funcptr)mpfr_cbrt, args1, {NULL}, log_cases, 0},
+ {"cbrtf", (funcptr)mpfr_cbrt, args1f, {NULL}, log_cases_float, 0},
+ {"hypot", (funcptr)mpfr_hypot, args2, {NULL}, atan2_cases, 0},
+ {"hypotf", (funcptr)mpfr_hypot, args2f, {NULL}, atan2_cases_float, 0},
+ /*
+ * Seminumerical functions.
+ */
+ {"ceil", (funcptr)test_ceil, semi1, {NULL}, cases_semi1},
+ {"ceilf", (funcptr)test_ceilf, semi1f, {NULL}, cases_semi1_float},
+ {"floor", (funcptr)test_floor, semi1, {NULL}, cases_semi1},
+ {"floorf", (funcptr)test_floorf, semi1f, {NULL}, cases_semi1_float},
+ {"fmod", (funcptr)test_fmod, semi2, {NULL}, cases_semi2},
+ {"fmodf", (funcptr)test_fmodf, semi2f, {NULL}, cases_semi2_float},
+ {"ldexp", (funcptr)test_ldexp, t_ldexp, {NULL}, cases_ldexp},
+ {"ldexpf", (funcptr)test_ldexpf, t_ldexpf, {NULL}, cases_ldexp_float},
+ {"frexp", (funcptr)test_frexp, t_frexp, {NULL}, cases_semi1},
+ {"frexpf", (funcptr)test_frexpf, t_frexpf, {NULL}, cases_semi1_float},
+ {"modf", (funcptr)test_modf, t_modf, {NULL}, cases_semi1},
+ {"modff", (funcptr)test_modff, t_modff, {NULL}, cases_semi1_float},
+
+ /*
+ * Classification and more semi-numericals
+ */
+ {"copysign", (funcptr)test_copysign, semi2, {NULL}, cases_semi2},
+ {"copysignf", (funcptr)test_copysignf, semi2f, {NULL}, cases_semi2_float},
+ {"isfinite", (funcptr)test_isfinite, classify, {NULL}, cases_uniform, 0, 0x7fffffff},
+ {"isfinitef", (funcptr)test_isfinitef, classifyf, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+ {"isinf", (funcptr)test_isinf, classify, {NULL}, cases_uniform, 0, 0x7fffffff},
+ {"isinff", (funcptr)test_isinff, classifyf, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+ {"isnan", (funcptr)test_isnan, classify, {NULL}, cases_uniform, 0, 0x7fffffff},
+ {"isnanf", (funcptr)test_isnanf, classifyf, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+ {"isnormal", (funcptr)test_isnormal, classify, {NULL}, cases_uniform, 0, 0x7fffffff},
+ {"isnormalf", (funcptr)test_isnormalf, classifyf, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+ {"signbit", (funcptr)test_signbit, classify, {NULL}, cases_uniform, 0, 0x7fffffff},
+ {"signbitf", (funcptr)test_signbitf, classifyf, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+ {"fpclassify", (funcptr)test_fpclassify, classify, {NULL}, cases_uniform, 0, 0x7fffffff},
+ {"fpclassifyf", (funcptr)test_fpclassifyf, classifyf, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+ /*
+ * Comparisons
+ */
+ {"isgreater", (funcptr)test_isgreater, compare, {NULL}, cases_uniform, 0, 0x7fffffff},
+ {"isgreaterequal", (funcptr)test_isgreaterequal, compare, {NULL}, cases_uniform, 0, 0x7fffffff},
+ {"isless", (funcptr)test_isless, compare, {NULL}, cases_uniform, 0, 0x7fffffff},
+ {"islessequal", (funcptr)test_islessequal, compare, {NULL}, cases_uniform, 0, 0x7fffffff},
+ {"islessgreater", (funcptr)test_islessgreater, compare, {NULL}, cases_uniform, 0, 0x7fffffff},
+ {"isunordered", (funcptr)test_isunordered, compare, {NULL}, cases_uniform, 0, 0x7fffffff},
+
+ {"isgreaterf", (funcptr)test_isgreaterf, comparef, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+ {"isgreaterequalf", (funcptr)test_isgreaterequalf, comparef, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+ {"islessf", (funcptr)test_islessf, comparef, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+ {"islessequalf", (funcptr)test_islessequalf, comparef, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+ {"islessgreaterf", (funcptr)test_islessgreaterf, comparef, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+ {"isunorderedf", (funcptr)test_isunorderedf, comparef, {NULL}, cases_uniform_float, 0, 0x7fffffff},
+
+ /*
+ * Inverse Hyperbolic functions
+ */
+ {"atanh", (funcptr)mpfr_atanh, args1, {NULL}, cases_uniform, 0x3e400000, 0x3fefffff},
+ {"asinh", (funcptr)mpfr_asinh, args1, {NULL}, cases_uniform, 0x3e400000, 0x3fefffff},
+ {"acosh", (funcptr)mpfr_acosh, args1, {NULL}, cases_uniform_positive, 0x3ff00000, 0x7fefffff},
+
+ {"atanhf", (funcptr)mpfr_atanh, args1f, {NULL}, cases_uniform_float, 0x32000000, 0x3f7fffff},
+ {"asinhf", (funcptr)mpfr_asinh, args1f, {NULL}, cases_uniform_float, 0x32000000, 0x3f7fffff},
+ {"acoshf", (funcptr)mpfr_acosh, args1f, {NULL}, cases_uniform_float_positive, 0x3f800000, 0x7f800000},
+
+ /*
+ * Everything else (sitting in a section down here at the bottom
+ * because historically they were not tested because we didn't
+ * have reference implementations for them)
+ */
+ {"csin", (funcptr)mpc_sin, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"csinf", (funcptr)mpc_sin, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+ {"ccos", (funcptr)mpc_cos, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"ccosf", (funcptr)mpc_cos, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+ {"ctan", (funcptr)mpc_tan, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"ctanf", (funcptr)mpc_tan, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+
+ {"casin", (funcptr)mpc_asin, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"casinf", (funcptr)mpc_asin, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+ {"cacos", (funcptr)mpc_acos, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"cacosf", (funcptr)mpc_acos, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+ {"catan", (funcptr)mpc_atan, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"catanf", (funcptr)mpc_atan, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+
+ {"csinh", (funcptr)mpc_sinh, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"csinhf", (funcptr)mpc_sinh, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+ {"ccosh", (funcptr)mpc_cosh, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"ccoshf", (funcptr)mpc_cosh, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+ {"ctanh", (funcptr)mpc_tanh, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"ctanhf", (funcptr)mpc_tanh, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+
+ {"casinh", (funcptr)mpc_asinh, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"casinhf", (funcptr)mpc_asinh, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+ {"cacosh", (funcptr)mpc_acosh, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"cacoshf", (funcptr)mpc_acosh, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+ {"catanh", (funcptr)mpc_atanh, args1c, {NULL}, complex_cases_uniform, 0x3f000000, 0x40300000},
+ {"catanhf", (funcptr)mpc_atanh, args1fc, {NULL}, complex_cases_uniform_float, 0x38000000, 0x41800000},
+
+ {"cexp", (funcptr)mpc_exp, args1c, {NULL}, complex_cases_uniform, 0x3c900000, 0x40862000},
+ {"cpow", (funcptr)test_cpow, args2c, {NULL}, complex_pow_cases, 0x3fc00000, 0x40000000},
+ {"clog", (funcptr)mpc_log, args1c, {NULL}, complex_log_cases, 0, 0},
+ {"csqrt", (funcptr)mpc_sqrt, args1c, {NULL}, complex_log_cases, 0, 0},
+
+ {"cexpf", (funcptr)mpc_exp, args1fc, {NULL}, complex_cases_uniform_float, 0x24800000, 0x42b00000},
+ {"cpowf", (funcptr)test_cpow, args2fc, {NULL}, complex_pow_cases_float, 0x3e000000, 0x41000000},
+ {"clogf", (funcptr)mpc_log, args1fc, {NULL}, complex_log_cases_float, 0, 0},
+ {"csqrtf", (funcptr)mpc_sqrt, args1fc, {NULL}, complex_log_cases_float, 0, 0},
+
+ {"cdiv", (funcptr)mpc_div, args2c, {NULL}, complex_arithmetic_cases, 0, 0},
+ {"cmul", (funcptr)mpc_mul, args2c, {NULL}, complex_arithmetic_cases, 0, 0},
+ {"cadd", (funcptr)mpc_add, args2c, {NULL}, complex_arithmetic_cases, 0, 0},
+ {"csub", (funcptr)mpc_sub, args2c, {NULL}, complex_arithmetic_cases, 0, 0},
+
+ {"cdivf", (funcptr)mpc_div, args2fc, {NULL}, complex_arithmetic_cases_float, 0, 0},
+ {"cmulf", (funcptr)mpc_mul, args2fc, {NULL}, complex_arithmetic_cases_float, 0, 0},
+ {"caddf", (funcptr)mpc_add, args2fc, {NULL}, complex_arithmetic_cases_float, 0, 0},
+ {"csubf", (funcptr)mpc_sub, args2fc, {NULL}, complex_arithmetic_cases_float, 0, 0},
+
+ {"cabsf", (funcptr)mpc_abs, args1fcr, {NULL}, complex_arithmetic_cases_float, 0, 0},
+ {"cabs", (funcptr)mpc_abs, args1cr, {NULL}, complex_arithmetic_cases, 0, 0},
+ {"cargf", (funcptr)mpc_arg, args1fcr, {NULL}, complex_arithmetic_cases_float, 0, 0},
+ {"carg", (funcptr)mpc_arg, args1cr, {NULL}, complex_arithmetic_cases, 0, 0},
+ {"cimagf", (funcptr)mpc_imag, args1fcr, {NULL}, complex_arithmetic_cases_float, 0, 0},
+ {"cimag", (funcptr)mpc_imag, args1cr, {NULL}, complex_arithmetic_cases, 0, 0},
+ {"conjf", (funcptr)mpc_conj, args1fc, {NULL}, complex_arithmetic_cases_float, 0, 0},
+ {"conj", (funcptr)mpc_conj, args1c, {NULL}, complex_arithmetic_cases, 0, 0},
+ {"cprojf", (funcptr)mpc_proj, args1fc, {NULL}, complex_arithmetic_cases_float, 0, 0},
+ {"cproj", (funcptr)mpc_proj, args1c, {NULL}, complex_arithmetic_cases, 0, 0},
+ {"crealf", (funcptr)mpc_real, args1fcr, {NULL}, complex_arithmetic_cases_float, 0, 0},
+ {"creal", (funcptr)mpc_real, args1cr, {NULL}, complex_arithmetic_cases, 0, 0},
+ {"erfcf", (funcptr)mpfr_erfc, args1f, {NULL}, cases_biased_float, 0x1e800000, 0x41000000},
+ {"erfc", (funcptr)mpfr_erfc, args1, {NULL}, cases_biased, 0x3bd00000, 0x403c0000},
+ {"erff", (funcptr)mpfr_erf, args1f, {NULL}, cases_biased_float, 0x03800000, 0x40700000},
+ {"erf", (funcptr)mpfr_erf, args1, {NULL}, cases_biased, 0x00800000, 0x40200000},
+ {"exp2f", (funcptr)mpfr_exp2, args1f, {NULL}, cases_uniform_float, 0x33800000, 0x43c00000},
+ {"exp2", (funcptr)mpfr_exp2, args1, {NULL}, cases_uniform, 0x3ca00000, 0x40a00000},
+ {"expm1f", (funcptr)mpfr_expm1, args1f, {NULL}, cases_uniform_float, 0x33000000, 0x43800000},
+ {"expm1", (funcptr)mpfr_expm1, args1, {NULL}, cases_uniform, 0x3c900000, 0x409c0000},
+ {"fmaxf", (funcptr)mpfr_max, args2f, {NULL}, minmax_cases_float, 0, 0x7f7fffff},
+ {"fmax", (funcptr)mpfr_max, args2, {NULL}, minmax_cases, 0, 0x7fefffff},
+ {"fminf", (funcptr)mpfr_min, args2f, {NULL}, minmax_cases_float, 0, 0x7f7fffff},
+ {"fmin", (funcptr)mpfr_min, args2, {NULL}, minmax_cases, 0, 0x7fefffff},
+ {"lgammaf", (funcptr)test_lgamma, args1f, {NULL}, cases_uniform_float, 0x01800000, 0x7f800000},
+ {"lgamma", (funcptr)test_lgamma, args1, {NULL}, cases_uniform, 0x00100000, 0x7ff00000},
+ {"log1pf", (funcptr)mpfr_log1p, args1f, {NULL}, log1p_cases_float, 0, 0},
+ {"log1p", (funcptr)mpfr_log1p, args1, {NULL}, log1p_cases, 0, 0},
+ {"log2f", (funcptr)mpfr_log2, args1f, {NULL}, log_cases_float, 0, 0},
+ {"log2", (funcptr)mpfr_log2, args1, {NULL}, log_cases, 0, 0},
+ {"tgammaf", (funcptr)mpfr_gamma, args1f, {NULL}, cases_uniform_float, 0x2f800000, 0x43000000},
+ {"tgamma", (funcptr)mpfr_gamma, args1, {NULL}, cases_uniform, 0x3c000000, 0x40800000},
+};
+
+const int nfunctions = ( sizeof(functions)/sizeof(*functions) );
+
+#define random_sign ( random_upto(1) ? 0x80000000 : 0 )
+
+static int iszero(uint32 *x) {
+ return !((x[0] & 0x7FFFFFFF) || x[1]);
+}
+
+
+static void complex_log_cases(uint32 *out, uint32 param1,
+ uint32 param2) {
+ cases_uniform(out,0x00100000,0x7fefffff);
+ cases_uniform(out+2,0x00100000,0x7fefffff);
+}
+
+
+static void complex_log_cases_float(uint32 *out, uint32 param1,
+ uint32 param2) {
+ cases_uniform_float(out,0x00800000,0x7f7fffff);
+ cases_uniform_float(out+2,0x00800000,0x7f7fffff);
+}
+
+static void complex_cases_biased(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ cases_biased(out,lowbound,highbound);
+ cases_biased(out+2,lowbound,highbound);
+}
+
+static void complex_cases_biased_float(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ cases_biased_float(out,lowbound,highbound);
+ cases_biased_float(out+2,lowbound,highbound);
+}
+
+static void complex_cases_uniform(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ cases_uniform(out,lowbound,highbound);
+ cases_uniform(out+2,lowbound,highbound);
+}
+
+static void complex_cases_uniform_float(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ cases_uniform_float(out,lowbound,highbound);
+ cases_uniform(out+2,lowbound,highbound);
+}
+
+static void complex_pow_cases(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ /*
+ * Generating non-overflowing cases for complex pow:
+ *
+ * Our base has both parts within the range [1/2,2], and hence
+ * its magnitude is within [1/2,2*sqrt(2)]. The magnitude of its
+ * logarithm in base 2 is therefore at most the magnitude of
+ * (log2(2*sqrt(2)) + i*pi/log(2)), or in other words
+ * hypot(3/2,pi/log(2)) = 4.77. So the magnitude of the exponent
+ * input must be at most our output magnitude limit (as a power
+ * of two) divided by that.
+ *
+ * I also set the output magnitude limit a bit low, because we
+ * don't guarantee (and neither does glibc) to prevent internal
+ * overflow in cases where the output _magnitude_ overflows but
+ * scaling it back down by cos and sin of the argument brings it
+ * back in range.
+ */
+ cases_uniform(out,0x3fe00000, 0x40000000);
+ cases_uniform(out+2,0x3fe00000, 0x40000000);
+ cases_uniform(out+4,0x3f800000, 0x40600000);
+ cases_uniform(out+6,0x3f800000, 0x40600000);
+}
+
+static void complex_pow_cases_float(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ /*
+ * Reasoning as above, though of course the detailed numbers are
+ * all different.
+ */
+ cases_uniform_float(out,0x3f000000, 0x40000000);
+ cases_uniform_float(out+2,0x3f000000, 0x40000000);
+ cases_uniform_float(out+4,0x3d600000, 0x41900000);
+ cases_uniform_float(out+6,0x3d600000, 0x41900000);
+}
+
+static void complex_arithmetic_cases(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ cases_uniform(out,0,0x7fefffff);
+ cases_uniform(out+2,0,0x7fefffff);
+ cases_uniform(out+4,0,0x7fefffff);
+ cases_uniform(out+6,0,0x7fefffff);
+}
+
+static void complex_arithmetic_cases_float(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ cases_uniform_float(out,0,0x7f7fffff);
+ cases_uniform_float(out+2,0,0x7f7fffff);
+ cases_uniform_float(out+4,0,0x7f7fffff);
+ cases_uniform_float(out+6,0,0x7f7fffff);
+}
+
+/*
+ * Included from fplib test suite, in a compact self-contained
+ * form.
+ */
+
+void float32_case(uint32 *ret) {
+ int n, bits;
+ uint32 f;
+ static int premax, preptr;
+ static uint32 *specifics = NULL;
+
+ if (!ret) {
+ if (specifics)
+ free(specifics);
+ specifics = NULL;
+ premax = preptr = 0;
+ return;
+ }
+
+ if (!specifics) {
+ int exps[] = {
+ -127, -126, -125, -24, -4, -3, -2, -1, 0, 1, 2, 3, 4,
+ 24, 29, 30, 31, 32, 61, 62, 63, 64, 126, 127, 128
+ };
+ int sign, eptr;
+ uint32 se, j;
+ /*
+ * We want a cross product of:
+ * - each of two sign bits (2)
+ * - each of the above (unbiased) exponents (25)
+ * - the following list of fraction parts:
+ * * zero (1)
+ * * all bits (1)
+ * * one-bit-set (23)
+ * * one-bit-clear (23)
+ * * one-bit-and-above (20: 3 are duplicates)
+ * * one-bit-and-below (20: 3 are duplicates)
+ * (total 88)
+ * (total 4400)
+ */
+ specifics = malloc(4400 * sizeof(*specifics));
+ preptr = 0;
+ for (sign = 0; sign <= 1; sign++) {
+ for (eptr = 0; eptr < sizeof(exps)/sizeof(*exps); eptr++) {
+ se = (sign ? 0x80000000 : 0) | ((exps[eptr]+127) << 23);
+ /*
+ * Zero.
+ */
+ specifics[preptr++] = se | 0;
+ /*
+ * All bits.
+ */
+ specifics[preptr++] = se | 0x7FFFFF;
+ /*
+ * One-bit-set.
+ */
+ for (j = 1; j && j <= 0x400000; j <<= 1)
+ specifics[preptr++] = se | j;
+ /*
+ * One-bit-clear.
+ */
+ for (j = 1; j && j <= 0x400000; j <<= 1)
+ specifics[preptr++] = se | (0x7FFFFF ^ j);
+ /*
+ * One-bit-and-everything-below.
+ */
+ for (j = 2; j && j <= 0x100000; j <<= 1)
+ specifics[preptr++] = se | (2*j-1);
+ /*
+ * One-bit-and-everything-above.
+ */
+ for (j = 4; j && j <= 0x200000; j <<= 1)
+ specifics[preptr++] = se | (0x7FFFFF ^ (j-1));
+ /*
+ * Done.
+ */
+ }
+ }
+ assert(preptr == 4400);
+ premax = preptr;
+ }
+
+ /*
+ * Decide whether to return a pre or a random case.
+ */
+ n = random32() % (premax+1);
+ if (n < preptr) {
+ /*
+ * Return pre[n].
+ */
+ uint32 t;
+ t = specifics[n];
+ specifics[n] = specifics[preptr-1];
+ specifics[preptr-1] = t; /* (not really needed) */
+ preptr--;
+ *ret = t;
+ } else {
+ /*
+ * Random case.
+ * Sign and exponent:
+ * - FIXME
+ * Significand:
+ * - with prob 1/5, a totally random bit pattern
+ * - with prob 1/5, all 1s down to some point and then random
+ * - with prob 1/5, all 1s up to some point and then random
+ * - with prob 1/5, all 0s down to some point and then random
+ * - with prob 1/5, all 0s up to some point and then random
+ */
+ n = random32() % 5;
+ f = random32(); /* some random bits */
+ bits = random32() % 22 + 1; /* 1-22 */
+ switch (n) {
+ case 0:
+ break; /* leave f alone */
+ case 1:
+ f |= (1<<bits)-1;
+ break;
+ case 2:
+ f &= ~((1<<bits)-1);
+ break;
+ case 3:
+ f |= ~((1<<bits)-1);
+ break;
+ case 4:
+ f &= (1<<bits)-1;
+ break;
+ }
+ f &= 0x7FFFFF;
+ f |= (random32() & 0xFF800000);/* FIXME - do better */
+ *ret = f;
+ }
+}
+static void float64_case(uint32 *ret) {
+ int n, bits;
+ uint32 f, g;
+ static int premax, preptr;
+ static uint32 (*specifics)[2] = NULL;
+
+ if (!ret) {
+ if (specifics)
+ free(specifics);
+ specifics = NULL;
+ premax = preptr = 0;
+ return;
+ }
+
+ if (!specifics) {
+ int exps[] = {
+ -1023, -1022, -1021, -129, -128, -127, -126, -53, -4, -3, -2,
+ -1, 0, 1, 2, 3, 4, 29, 30, 31, 32, 53, 61, 62, 63, 64, 127,
+ 128, 129, 1022, 1023, 1024
+ };
+ int sign, eptr;
+ uint32 se, j;
+ /*
+ * We want a cross product of:
+ * - each of two sign bits (2)
+ * - each of the above (unbiased) exponents (32)
+ * - the following list of fraction parts:
+ * * zero (1)
+ * * all bits (1)
+ * * one-bit-set (52)
+ * * one-bit-clear (52)
+ * * one-bit-and-above (49: 3 are duplicates)
+ * * one-bit-and-below (49: 3 are duplicates)
+ * (total 204)
+ * (total 13056)
+ */
+ specifics = malloc(13056 * sizeof(*specifics));
+ preptr = 0;
+ for (sign = 0; sign <= 1; sign++) {
+ for (eptr = 0; eptr < sizeof(exps)/sizeof(*exps); eptr++) {
+ se = (sign ? 0x80000000 : 0) | ((exps[eptr]+1023) << 20);
+ /*
+ * Zero.
+ */
+ specifics[preptr][0] = 0;
+ specifics[preptr][1] = 0;
+ specifics[preptr++][0] |= se;
+ /*
+ * All bits.
+ */
+ specifics[preptr][0] = 0xFFFFF;
+ specifics[preptr][1] = ~0;
+ specifics[preptr++][0] |= se;
+ /*
+ * One-bit-set.
+ */
+ for (j = 1; j && j <= 0x80000000; j <<= 1) {
+ specifics[preptr][0] = 0;
+ specifics[preptr][1] = j;
+ specifics[preptr++][0] |= se;
+ if (j & 0xFFFFF) {
+ specifics[preptr][0] = j;
+ specifics[preptr][1] = 0;
+ specifics[preptr++][0] |= se;
+ }
+ }
+ /*
+ * One-bit-clear.
+ */
+ for (j = 1; j && j <= 0x80000000; j <<= 1) {
+ specifics[preptr][0] = 0xFFFFF;
+ specifics[preptr][1] = ~j;
+ specifics[preptr++][0] |= se;
+ if (j & 0xFFFFF) {
+ specifics[preptr][0] = 0xFFFFF ^ j;
+ specifics[preptr][1] = ~0;
+ specifics[preptr++][0] |= se;
+ }
+ }
+ /*
+ * One-bit-and-everything-below.
+ */
+ for (j = 2; j && j <= 0x80000000; j <<= 1) {
+ specifics[preptr][0] = 0;
+ specifics[preptr][1] = 2*j-1;
+ specifics[preptr++][0] |= se;
+ }
+ for (j = 1; j && j <= 0x20000; j <<= 1) {
+ specifics[preptr][0] = 2*j-1;
+ specifics[preptr][1] = ~0;
+ specifics[preptr++][0] |= se;
+ }
+ /*
+ * One-bit-and-everything-above.
+ */
+ for (j = 4; j && j <= 0x80000000; j <<= 1) {
+ specifics[preptr][0] = 0xFFFFF;
+ specifics[preptr][1] = ~(j-1);
+ specifics[preptr++][0] |= se;
+ }
+ for (j = 1; j && j <= 0x40000; j <<= 1) {
+ specifics[preptr][0] = 0xFFFFF ^ (j-1);
+ specifics[preptr][1] = 0;
+ specifics[preptr++][0] |= se;
+ }
+ /*
+ * Done.
+ */
+ }
+ }
+ assert(preptr == 13056);
+ premax = preptr;
+ }
+
+ /*
+ * Decide whether to return a pre or a random case.
+ */
+ n = (uint32) random32() % (uint32) (premax+1);
+ if (n < preptr) {
+ /*
+ * Return pre[n].
+ */
+ uint32 t;
+ t = specifics[n][0];
+ specifics[n][0] = specifics[preptr-1][0];
+ specifics[preptr-1][0] = t; /* (not really needed) */
+ ret[0] = t;
+ t = specifics[n][1];
+ specifics[n][1] = specifics[preptr-1][1];
+ specifics[preptr-1][1] = t; /* (not really needed) */
+ ret[1] = t;
+ preptr--;
+ } else {
+ /*
+ * Random case.
+ * Sign and exponent:
+ * - FIXME
+ * Significand:
+ * - with prob 1/5, a totally random bit pattern
+ * - with prob 1/5, all 1s down to some point and then random
+ * - with prob 1/5, all 1s up to some point and then random
+ * - with prob 1/5, all 0s down to some point and then random
+ * - with prob 1/5, all 0s up to some point and then random
+ */
+ n = random32() % 5;
+ f = random32(); /* some random bits */
+ g = random32(); /* some random bits */
+ bits = random32() % 51 + 1; /* 1-51 */
+ switch (n) {
+ case 0:
+ break; /* leave f alone */
+ case 1:
+ if (bits <= 32)
+ f |= (1<<bits)-1;
+ else {
+ bits -= 32;
+ g |= (1<<bits)-1;
+ f = ~0;
+ }
+ break;
+ case 2:
+ if (bits <= 32)
+ f &= ~((1<<bits)-1);
+ else {
+ bits -= 32;
+ g &= ~((1<<bits)-1);
+ f = 0;
+ }
+ break;
+ case 3:
+ if (bits <= 32)
+ g &= (1<<bits)-1;
+ else {
+ bits -= 32;
+ f &= (1<<bits)-1;
+ g = 0;
+ }
+ break;
+ case 4:
+ if (bits <= 32)
+ g |= ~((1<<bits)-1);
+ else {
+ bits -= 32;
+ f |= ~((1<<bits)-1);
+ g = ~0;
+ }
+ break;
+ }
+ g &= 0xFFFFF;
+ g |= (random32() & 0xFFF00000);/* FIXME - do better */
+ ret[0] = g;
+ ret[1] = f;
+ }
+}
+
+static void cases_biased(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ do {
+ out[0] = highbound - random_upto_biased(highbound-lowbound, 8);
+ out[1] = random_upto(0xFFFFFFFF);
+ out[0] |= random_sign;
+ } while (iszero(out)); /* rule out zero */
+}
+
+static void cases_biased_positive(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ do {
+ out[0] = highbound - random_upto_biased(highbound-lowbound, 8);
+ out[1] = random_upto(0xFFFFFFFF);
+ } while (iszero(out)); /* rule out zero */
+}
+
+static void cases_biased_float(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ do {
+ out[0] = highbound - random_upto_biased(highbound-lowbound, 8);
+ out[1] = 0;
+ out[0] |= random_sign;
+ } while (iszero(out)); /* rule out zero */
+}
+
+static void cases_semi1(uint32 *out, uint32 param1,
+ uint32 param2) {
+ float64_case(out);
+}
+
+static void cases_semi1_float(uint32 *out, uint32 param1,
+ uint32 param2) {
+ float32_case(out);
+}
+
+static void cases_semi2(uint32 *out, uint32 param1,
+ uint32 param2) {
+ float64_case(out);
+ float64_case(out+2);
+}
+
+static void cases_semi2_float(uint32 *out, uint32 param1,
+ uint32 param2) {
+ float32_case(out);
+ float32_case(out+2);
+}
+
+static void cases_ldexp(uint32 *out, uint32 param1,
+ uint32 param2) {
+ float64_case(out);
+ out[2] = random_upto(2048)-1024;
+}
+
+static void cases_ldexp_float(uint32 *out, uint32 param1,
+ uint32 param2) {
+ float32_case(out);
+ out[2] = random_upto(256)-128;
+}
+
+static void cases_uniform(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ do {
+ out[0] = highbound - random_upto(highbound-lowbound);
+ out[1] = random_upto(0xFFFFFFFF);
+ out[0] |= random_sign;
+ } while (iszero(out)); /* rule out zero */
+}
+static void cases_uniform_float(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ do {
+ out[0] = highbound - random_upto(highbound-lowbound);
+ out[1] = 0;
+ out[0] |= random_sign;
+ } while (iszero(out)); /* rule out zero */
+}
+
+static void cases_uniform_positive(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ do {
+ out[0] = highbound - random_upto(highbound-lowbound);
+ out[1] = random_upto(0xFFFFFFFF);
+ } while (iszero(out)); /* rule out zero */
+}
+static void cases_uniform_float_positive(uint32 *out, uint32 lowbound,
+ uint32 highbound) {
+ do {
+ out[0] = highbound - random_upto(highbound-lowbound);
+ out[1] = 0;
+ } while (iszero(out)); /* rule out zero */
+}
+
+
+static void log_cases(uint32 *out, uint32 param1,
+ uint32 param2) {
+ do {
+ out[0] = random_upto(0x7FEFFFFF);
+ out[1] = random_upto(0xFFFFFFFF);
+ } while (iszero(out)); /* rule out zero */
+}
+
+static void log_cases_float(uint32 *out, uint32 param1,
+ uint32 param2) {
+ do {
+ out[0] = random_upto(0x7F7FFFFF);
+ out[1] = 0;
+ } while (iszero(out)); /* rule out zero */
+}
+
+static void log1p_cases(uint32 *out, uint32 param1, uint32 param2)
+{
+ uint32 sign = random_sign;
+ if (sign == 0) {
+ cases_uniform_positive(out, 0x3c700000, 0x43400000);
+ } else {
+ cases_uniform_positive(out, 0x3c000000, 0x3ff00000);
+ }
+ out[0] |= sign;
+}
+
+static void log1p_cases_float(uint32 *out, uint32 param1, uint32 param2)
+{
+ uint32 sign = random_sign;
+ if (sign == 0) {
+ cases_uniform_float_positive(out, 0x32000000, 0x4c000000);
+ } else {
+ cases_uniform_float_positive(out, 0x30000000, 0x3f800000);
+ }
+ out[0] |= sign;
+}
+
+static void minmax_cases(uint32 *out, uint32 param1, uint32 param2)
+{
+ do {
+ out[0] = random_upto(0x7FEFFFFF);
+ out[1] = random_upto(0xFFFFFFFF);
+ out[0] |= random_sign;
+ out[2] = random_upto(0x7FEFFFFF);
+ out[3] = random_upto(0xFFFFFFFF);
+ out[2] |= random_sign;
+ } while (iszero(out)); /* rule out zero */
+}
+
+static void minmax_cases_float(uint32 *out, uint32 param1, uint32 param2)
+{
+ do {
+ out[0] = random_upto(0x7F7FFFFF);
+ out[1] = 0;
+ out[0] |= random_sign;
+ out[2] = random_upto(0x7F7FFFFF);
+ out[3] = 0;
+ out[2] |= random_sign;
+ } while (iszero(out)); /* rule out zero */
+}
+
+static void rred_cases(uint32 *out, uint32 param1,
+ uint32 param2) {
+ do {
+ out[0] = ((0x3fc00000 + random_upto(0x036fffff)) |
+ (random_upto(1) << 31));
+ out[1] = random_upto(0xFFFFFFFF);
+ } while (iszero(out)); /* rule out zero */
+}
+
+static void rred_cases_float(uint32 *out, uint32 param1,
+ uint32 param2) {
+ do {
+ out[0] = ((0x3e000000 + random_upto(0x0cffffff)) |
+ (random_upto(1) << 31));
+ out[1] = 0; /* for iszero */
+ } while (iszero(out)); /* rule out zero */
+}
+
+static void atan2_cases(uint32 *out, uint32 param1,
+ uint32 param2) {
+ do {
+ int expdiff = random_upto(101)-51;
+ int swap;
+ if (expdiff < 0) {
+ expdiff = -expdiff;
+ swap = 2;
+ } else
+ swap = 0;
+ out[swap ^ 0] = random_upto(0x7FEFFFFF-((expdiff+1)<<20));
+ out[swap ^ 2] = random_upto(((expdiff+1)<<20)-1) + out[swap ^ 0];
+ out[1] = random_upto(0xFFFFFFFF);
+ out[3] = random_upto(0xFFFFFFFF);
+ out[0] |= random_sign;
+ out[2] |= random_sign;
+ } while (iszero(out) || iszero(out+2));/* rule out zero */
+}
+
+static void atan2_cases_float(uint32 *out, uint32 param1,
+ uint32 param2) {
+ do {
+ int expdiff = random_upto(44)-22;
+ int swap;
+ if (expdiff < 0) {
+ expdiff = -expdiff;
+ swap = 2;
+ } else
+ swap = 0;
+ out[swap ^ 0] = random_upto(0x7F7FFFFF-((expdiff+1)<<23));
+ out[swap ^ 2] = random_upto(((expdiff+1)<<23)-1) + out[swap ^ 0];
+ out[0] |= random_sign;
+ out[2] |= random_sign;
+ out[1] = out[3] = 0; /* for iszero */
+ } while (iszero(out) || iszero(out+2));/* rule out zero */
+}
+
+static void pow_cases(uint32 *out, uint32 param1,
+ uint32 param2) {
+ /*
+ * Pick an exponent e (-0x33 to +0x7FE) for x, and here's the
+ * range of numbers we can use as y:
+ *
+ * For e < 0x3FE, the range is [-0x400/(0x3FE-e),+0x432/(0x3FE-e)]
+ * For e > 0x3FF, the range is [-0x432/(e-0x3FF),+0x400/(e-0x3FF)]
+ *
+ * For e == 0x3FE or e == 0x3FF, the range gets infinite at one
+ * end or the other, so we have to be cleverer: pick a number n
+ * of useful bits in the mantissa (1 thru 52, so 1 must imply
+ * 0x3ff00000.00000001 whereas 52 is anything at least as big
+ * as 0x3ff80000.00000000; for e == 0x3fe, 1 necessarily means
+ * 0x3fefffff.ffffffff and 52 is anything at most as big as
+ * 0x3fe80000.00000000). Then, as it happens, a sensible
+ * maximum power is 2^(63-n) for e == 0x3fe, and 2^(62-n) for
+ * e == 0x3ff.
+ *
+ * We inevitably get some overflows in approximating the log
+ * curves by these nasty step functions, but that's all right -
+ * we do want _some_ overflows to be tested.
+ *
+ * Having got that, then, it's just a matter of inventing a
+ * probability distribution for all of this.
+ */
+ int e, n;
+ uint32 dmin, dmax;
+ const uint32 pmin = 0x3e100000;
+
+ /*
+ * Generate exponents in a slightly biased fashion.
+ */
+ e = (random_upto(1) ? /* is exponent small or big? */
+ 0x3FE - random_upto_biased(0x431,2) : /* small */
+ 0x3FF + random_upto_biased(0x3FF,2)); /* big */
+
+ /*
+ * Now split into cases.
+ */
+ if (e < 0x3FE || e > 0x3FF) {
+ uint32 imin, imax;
+ if (e < 0x3FE)
+ imin = 0x40000 / (0x3FE - e), imax = 0x43200 / (0x3FE - e);
+ else
+ imin = 0x43200 / (e - 0x3FF), imax = 0x40000 / (e - 0x3FF);
+ /* Power range runs from -imin to imax. Now convert to doubles */
+ dmin = doubletop(imin, -8);
+ dmax = doubletop(imax, -8);
+ /* Compute the number of mantissa bits. */
+ n = (e > 0 ? 53 : 52+e);
+ } else {
+ /* Critical exponents. Generate a top bit index. */
+ n = 52 - random_upto_biased(51, 4);
+ if (e == 0x3FE)
+ dmax = 63 - n;
+ else
+ dmax = 62 - n;
+ dmax = (dmax << 20) + 0x3FF00000;
+ dmin = dmax;
+ }
+ /* Generate a mantissa. */
+ if (n <= 32) {
+ out[0] = 0;
+ out[1] = random_upto((1 << (n-1)) - 1) + (1 << (n-1));
+ } else if (n == 33) {
+ out[0] = 1;
+ out[1] = random_upto(0xFFFFFFFF);
+ } else if (n > 33) {
+ out[0] = random_upto((1 << (n-33)) - 1) + (1 << (n-33));
+ out[1] = random_upto(0xFFFFFFFF);
+ }
+ /* Negate the mantissa if e == 0x3FE. */
+ if (e == 0x3FE) {
+ out[1] = -out[1];
+ out[0] = -out[0];
+ if (out[1]) out[0]--;
+ }
+ /* Put the exponent on. */
+ out[0] &= 0xFFFFF;
+ out[0] |= ((e > 0 ? e : 0) << 20);
+ /* Generate a power. Powers don't go below 2^-30. */
+ if (random_upto(1)) {
+ /* Positive power */
+ out[2] = dmax - random_upto_biased(dmax-pmin, 10);
+ } else {
+ /* Negative power */
+ out[2] = (dmin - random_upto_biased(dmin-pmin, 10)) | 0x80000000;
+ }
+ out[3] = random_upto(0xFFFFFFFF);
+}
+static void pow_cases_float(uint32 *out, uint32 param1,
+ uint32 param2) {
+ /*
+ * Pick an exponent e (-0x16 to +0xFE) for x, and here's the
+ * range of numbers we can use as y:
+ *
+ * For e < 0x7E, the range is [-0x80/(0x7E-e),+0x95/(0x7E-e)]
+ * For e > 0x7F, the range is [-0x95/(e-0x7F),+0x80/(e-0x7F)]
+ *
+ * For e == 0x7E or e == 0x7F, the range gets infinite at one
+ * end or the other, so we have to be cleverer: pick a number n
+ * of useful bits in the mantissa (1 thru 23, so 1 must imply
+ * 0x3f800001 whereas 23 is anything at least as big as
+ * 0x3fc00000; for e == 0x7e, 1 necessarily means 0x3f7fffff
+ * and 23 is anything at most as big as 0x3f400000). Then, as
+ * it happens, a sensible maximum power is 2^(31-n) for e ==
+ * 0x7e, and 2^(30-n) for e == 0x7f.
+ *
+ * We inevitably get some overflows in approximating the log
+ * curves by these nasty step functions, but that's all right -
+ * we do want _some_ overflows to be tested.
+ *
+ * Having got that, then, it's just a matter of inventing a
+ * probability distribution for all of this.
+ */
+ int e, n;
+ uint32 dmin, dmax;
+ const uint32 pmin = 0x38000000;
+
+ /*
+ * Generate exponents in a slightly biased fashion.
+ */
+ e = (random_upto(1) ? /* is exponent small or big? */
+ 0x7E - random_upto_biased(0x94,2) : /* small */
+ 0x7F + random_upto_biased(0x7f,2)); /* big */
+
+ /*
+ * Now split into cases.
+ */
+ if (e < 0x7E || e > 0x7F) {
+ uint32 imin, imax;
+ if (e < 0x7E)
+ imin = 0x8000 / (0x7e - e), imax = 0x9500 / (0x7e - e);
+ else
+ imin = 0x9500 / (e - 0x7f), imax = 0x8000 / (e - 0x7f);
+ /* Power range runs from -imin to imax. Now convert to doubles */
+ dmin = floatval(imin, -8);
+ dmax = floatval(imax, -8);
+ /* Compute the number of mantissa bits. */
+ n = (e > 0 ? 24 : 23+e);
+ } else {
+ /* Critical exponents. Generate a top bit index. */
+ n = 23 - random_upto_biased(22, 4);
+ if (e == 0x7E)
+ dmax = 31 - n;
+ else
+ dmax = 30 - n;
+ dmax = (dmax << 23) + 0x3F800000;
+ dmin = dmax;
+ }
+ /* Generate a mantissa. */
+ out[0] = random_upto((1 << (n-1)) - 1) + (1 << (n-1));
+ out[1] = 0;
+ /* Negate the mantissa if e == 0x7E. */
+ if (e == 0x7E) {
+ out[0] = -out[0];
+ }
+ /* Put the exponent on. */
+ out[0] &= 0x7FFFFF;
+ out[0] |= ((e > 0 ? e : 0) << 23);
+ /* Generate a power. Powers don't go below 2^-15. */
+ if (random_upto(1)) {
+ /* Positive power */
+ out[2] = dmax - random_upto_biased(dmax-pmin, 10);
+ } else {
+ /* Negative power */
+ out[2] = (dmin - random_upto_biased(dmin-pmin, 10)) | 0x80000000;
+ }
+ out[3] = 0;
+}
+
+void vet_for_decline(Testable *fn, uint32 *args, uint32 *result, int got_errno_in) {
+ int declined = 0;
+
+ switch (fn->type) {
+ case args1:
+ case rred:
+ case semi1:
+ case t_frexp:
+ case t_modf:
+ case classify:
+ case t_ldexp:
+ declined |= lib_fo && is_dhard(args+0);
+ break;
+ case args1f:
+ case rredf:
+ case semi1f:
+ case t_frexpf:
+ case t_modff:
+ case classifyf:
+ declined |= lib_fo && is_shard(args+0);
+ break;
+ case args2:
+ case semi2:
+ case args1c:
+ case args1cr:
+ case compare:
+ declined |= lib_fo && is_dhard(args+0);
+ declined |= lib_fo && is_dhard(args+2);
+ break;
+ case args2f:
+ case semi2f:
+ case t_ldexpf:
+ case comparef:
+ case args1fc:
+ case args1fcr:
+ declined |= lib_fo && is_shard(args+0);
+ declined |= lib_fo && is_shard(args+2);
+ break;
+ case args2c:
+ declined |= lib_fo && is_dhard(args+0);
+ declined |= lib_fo && is_dhard(args+2);
+ declined |= lib_fo && is_dhard(args+4);
+ declined |= lib_fo && is_dhard(args+6);
+ break;
+ case args2fc:
+ declined |= lib_fo && is_shard(args+0);
+ declined |= lib_fo && is_shard(args+2);
+ declined |= lib_fo && is_shard(args+4);
+ declined |= lib_fo && is_shard(args+6);
+ break;
+ }
+
+ switch (fn->type) {
+ case args1: /* return an extra-precise result */
+ case args2:
+ case rred:
+ case semi1: /* return a double result */
+ case semi2:
+ case t_ldexp:
+ case t_frexp: /* return double * int */
+ case args1cr:
+ declined |= lib_fo && is_dhard(result);
+ break;
+ case args1f:
+ case args2f:
+ case rredf:
+ case semi1f:
+ case semi2f:
+ case t_ldexpf:
+ case args1fcr:
+ declined |= lib_fo && is_shard(result);
+ break;
+ case t_modf: /* return double * double */
+ declined |= lib_fo && is_dhard(result+0);
+ declined |= lib_fo && is_dhard(result+2);
+ break;
+ case t_modff: /* return float * float */
+ declined |= lib_fo && is_shard(result+2);
+ /* fall through */
+ case t_frexpf: /* return float * int */
+ declined |= lib_fo && is_shard(result+0);
+ break;
+ case args1c:
+ case args2c:
+ declined |= lib_fo && is_dhard(result+0);
+ declined |= lib_fo && is_dhard(result+4);
+ break;
+ case args1fc:
+ case args2fc:
+ declined |= lib_fo && is_shard(result+0);
+ declined |= lib_fo && is_shard(result+4);
+ break;
+ }
+
+ /* Expect basic arithmetic tests to be declined if the command
+ * line said that would happen */
+ declined |= (lib_no_arith && (fn->func == (funcptr)mpc_add ||
+ fn->func == (funcptr)mpc_sub ||
+ fn->func == (funcptr)mpc_mul ||
+ fn->func == (funcptr)mpc_div));
+
+ if (!declined) {
+ if (got_errno_in)
+ ntests++;
+ else
+ ntests += 3;
+ }
+}
+
+void docase(Testable *fn, uint32 *args) {
+ uint32 result[8]; /* real part in first 4, imaginary part in last 4 */
+ char *errstr = NULL;
+ mpfr_t a, b, r;
+ mpc_t ac, bc, rc;
+ int rejected, printextra;
+ wrapperctx ctx;
+
+ mpfr_init2(a, MPFR_PREC);
+ mpfr_init2(b, MPFR_PREC);
+ mpfr_init2(r, MPFR_PREC);
+ mpc_init2(ac, MPFR_PREC);
+ mpc_init2(bc, MPFR_PREC);
+ mpc_init2(rc, MPFR_PREC);
+
+ printf("func=%s", fn->name);
+
+ rejected = 0; /* FIXME */
+
+ switch (fn->type) {
+ case args1:
+ case rred:
+ case semi1:
+ case t_frexp:
+ case t_modf:
+ case classify:
+ printf(" op1=%08x.%08x", args[0], args[1]);
+ break;
+ case args1f:
+ case rredf:
+ case semi1f:
+ case t_frexpf:
+ case t_modff:
+ case classifyf:
+ printf(" op1=%08x", args[0]);
+ break;
+ case args2:
+ case semi2:
+ case compare:
+ printf(" op1=%08x.%08x", args[0], args[1]);
+ printf(" op2=%08x.%08x", args[2], args[3]);
+ break;
+ case args2f:
+ case semi2f:
+ case t_ldexpf:
+ case comparef:
+ printf(" op1=%08x", args[0]);
+ printf(" op2=%08x", args[2]);
+ break;
+ case t_ldexp:
+ printf(" op1=%08x.%08x", args[0], args[1]);
+ printf(" op2=%08x", args[2]);
+ break;
+ case args1c:
+ case args1cr:
+ printf(" op1r=%08x.%08x", args[0], args[1]);
+ printf(" op1i=%08x.%08x", args[2], args[3]);
+ break;
+ case args2c:
+ printf(" op1r=%08x.%08x", args[0], args[1]);
+ printf(" op1i=%08x.%08x", args[2], args[3]);
+ printf(" op2r=%08x.%08x", args[4], args[5]);
+ printf(" op2i=%08x.%08x", args[6], args[7]);
+ break;
+ case args1fc:
+ case args1fcr:
+ printf(" op1r=%08x", args[0]);
+ printf(" op1i=%08x", args[2]);
+ break;
+ case args2fc:
+ printf(" op1r=%08x", args[0]);
+ printf(" op1i=%08x", args[2]);
+ printf(" op2r=%08x", args[4]);
+ printf(" op2i=%08x", args[6]);
+ break;
+ default:
+ fprintf(stderr, "internal inconsistency?!\n");
+ abort();
+ }
+
+ if (rejected == 2) {
+ printf(" - test case rejected\n");
+ goto cleanup;
+ }
+
+ wrapper_init(&ctx);
+
+ if (rejected == 0) {
+ switch (fn->type) {
+ case args1:
+ set_mpfr_d(a, args[0], args[1]);
+ wrapper_op_real(&ctx, a, 2, args);
+ ((testfunc1)(fn->func))(r, a, GMP_RNDN);
+ get_mpfr_d(r, &result[0], &result[1], &result[2]);
+ wrapper_result_real(&ctx, r, 2, result);
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpfr_d(r, &result[0], &result[1], &result[2]);
+ break;
+ case args1cr:
+ set_mpc_d(ac, args[0], args[1], args[2], args[3]);
+ wrapper_op_complex(&ctx, ac, 2, args);
+ ((testfunc1cr)(fn->func))(r, ac, GMP_RNDN);
+ get_mpfr_d(r, &result[0], &result[1], &result[2]);
+ wrapper_result_real(&ctx, r, 2, result);
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpfr_d(r, &result[0], &result[1], &result[2]);
+ break;
+ case args1f:
+ set_mpfr_f(a, args[0]);
+ wrapper_op_real(&ctx, a, 1, args);
+ ((testfunc1)(fn->func))(r, a, GMP_RNDN);
+ get_mpfr_f(r, &result[0], &result[1]);
+ wrapper_result_real(&ctx, r, 1, result);
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpfr_f(r, &result[0], &result[1]);
+ break;
+ case args1fcr:
+ set_mpc_f(ac, args[0], args[2]);
+ wrapper_op_complex(&ctx, ac, 1, args);
+ ((testfunc1cr)(fn->func))(r, ac, GMP_RNDN);
+ get_mpfr_f(r, &result[0], &result[1]);
+ wrapper_result_real(&ctx, r, 1, result);
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpfr_f(r, &result[0], &result[1]);
+ break;
+ case args2:
+ set_mpfr_d(a, args[0], args[1]);
+ wrapper_op_real(&ctx, a, 2, args);
+ set_mpfr_d(b, args[2], args[3]);
+ wrapper_op_real(&ctx, b, 2, args+2);
+ ((testfunc2)(fn->func))(r, a, b, GMP_RNDN);
+ get_mpfr_d(r, &result[0], &result[1], &result[2]);
+ wrapper_result_real(&ctx, r, 2, result);
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpfr_d(r, &result[0], &result[1], &result[2]);
+ break;
+ case args2f:
+ set_mpfr_f(a, args[0]);
+ wrapper_op_real(&ctx, a, 1, args);
+ set_mpfr_f(b, args[2]);
+ wrapper_op_real(&ctx, b, 1, args+2);
+ ((testfunc2)(fn->func))(r, a, b, GMP_RNDN);
+ get_mpfr_f(r, &result[0], &result[1]);
+ wrapper_result_real(&ctx, r, 1, result);
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpfr_f(r, &result[0], &result[1]);
+ break;
+ case rred:
+ set_mpfr_d(a, args[0], args[1]);
+ wrapper_op_real(&ctx, a, 2, args);
+ ((testrred)(fn->func))(r, a, (int *)&result[3]);
+ get_mpfr_d(r, &result[0], &result[1], &result[2]);
+ wrapper_result_real(&ctx, r, 2, result);
+ /* We never need to mess about with the integer auxiliary
+ * output. */
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpfr_d(r, &result[0], &result[1], &result[2]);
+ break;
+ case rredf:
+ set_mpfr_f(a, args[0]);
+ wrapper_op_real(&ctx, a, 1, args);
+ ((testrred)(fn->func))(r, a, (int *)&result[3]);
+ get_mpfr_f(r, &result[0], &result[1]);
+ wrapper_result_real(&ctx, r, 1, result);
+ /* We never need to mess about with the integer auxiliary
+ * output. */
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpfr_f(r, &result[0], &result[1]);
+ break;
+ case semi1:
+ case semi1f:
+ errstr = ((testsemi1)(fn->func))(args, result);
+ break;
+ case semi2:
+ case compare:
+ errstr = ((testsemi2)(fn->func))(args, args+2, result);
+ break;
+ case semi2f:
+ case comparef:
+ case t_ldexpf:
+ errstr = ((testsemi2f)(fn->func))(args, args+2, result);
+ break;
+ case t_ldexp:
+ errstr = ((testldexp)(fn->func))(args, args+2, result);
+ break;
+ case t_frexp:
+ errstr = ((testfrexp)(fn->func))(args, result, result+2);
+ break;
+ case t_frexpf:
+ errstr = ((testfrexp)(fn->func))(args, result, result+2);
+ break;
+ case t_modf:
+ errstr = ((testmodf)(fn->func))(args, result, result+2);
+ break;
+ case t_modff:
+ errstr = ((testmodf)(fn->func))(args, result, result+2);
+ break;
+ case classify:
+ errstr = ((testclassify)(fn->func))(args, &result[0]);
+ break;
+ case classifyf:
+ errstr = ((testclassifyf)(fn->func))(args, &result[0]);
+ break;
+ case args1c:
+ set_mpc_d(ac, args[0], args[1], args[2], args[3]);
+ wrapper_op_complex(&ctx, ac, 2, args);
+ ((testfunc1c)(fn->func))(rc, ac, MPC_RNDNN);
+ get_mpc_d(rc, &result[0], &result[1], &result[2], &result[4], &result[5], &result[6]);
+ wrapper_result_complex(&ctx, rc, 2, result);
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpc_d(rc, &result[0], &result[1], &result[2], &result[4], &result[5], &result[6]);
+ break;
+ case args2c:
+ set_mpc_d(ac, args[0], args[1], args[2], args[3]);
+ wrapper_op_complex(&ctx, ac, 2, args);
+ set_mpc_d(bc, args[4], args[5], args[6], args[7]);
+ wrapper_op_complex(&ctx, bc, 2, args+4);
+ ((testfunc2c)(fn->func))(rc, ac, bc, MPC_RNDNN);
+ get_mpc_d(rc, &result[0], &result[1], &result[2], &result[4], &result[5], &result[6]);
+ wrapper_result_complex(&ctx, rc, 2, result);
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpc_d(rc, &result[0], &result[1], &result[2], &result[4], &result[5], &result[6]);
+ break;
+ case args1fc:
+ set_mpc_f(ac, args[0], args[2]);
+ wrapper_op_complex(&ctx, ac, 1, args);
+ ((testfunc1c)(fn->func))(rc, ac, MPC_RNDNN);
+ get_mpc_f(rc, &result[0], &result[1], &result[4], &result[5]);
+ wrapper_result_complex(&ctx, rc, 1, result);
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpc_f(rc, &result[0], &result[1], &result[4], &result[5]);
+ break;
+ case args2fc:
+ set_mpc_f(ac, args[0], args[2]);
+ wrapper_op_complex(&ctx, ac, 1, args);
+ set_mpc_f(bc, args[4], args[6]);
+ wrapper_op_complex(&ctx, bc, 1, args+4);
+ ((testfunc2c)(fn->func))(rc, ac, bc, MPC_RNDNN);
+ get_mpc_f(rc, &result[0], &result[1], &result[4], &result[5]);
+ wrapper_result_complex(&ctx, rc, 1, result);
+ if (wrapper_run(&ctx, fn->wrappers))
+ get_mpc_f(rc, &result[0], &result[1], &result[4], &result[5]);
+ break;
+ default:
+ fprintf(stderr, "internal inconsistency?!\n");
+ abort();
+ }
+ }
+
+ switch (fn->type) {
+ case args1: /* return an extra-precise result */
+ case args2:
+ case args1cr:
+ case rred:
+ printextra = 1;
+ if (rejected == 0) {
+ errstr = NULL;
+ if (!mpfr_zero_p(a)) {
+ if ((result[0] & 0x7FFFFFFF) == 0 && result[1] == 0) {
+ /*
+ * If the output is +0 or -0 apart from the extra
+ * precision in result[2], then there's a tricky
+ * judgment call about what we require in the
+ * output. If we output the extra bits and set
+ * errstr="?underflow" then mathtest will tolerate
+ * the function under test rounding down to zero
+ * _or_ up to the minimum denormal; whereas if we
+ * suppress the extra bits and set
+ * errstr="underflow", then mathtest will enforce
+ * that the function really does underflow to zero.
+ *
+ * But where to draw the line? It seems clear to
+ * me that numbers along the lines of
+ * 00000000.00000000.7ff should be treated
+ * similarly to 00000000.00000000.801, but on the
+ * other hand, we must surely be prepared to
+ * enforce a genuine underflow-to-zero in _some_
+ * case where the true mathematical output is
+ * nonzero but absurdly tiny.
+ *
+ * I think a reasonable place to draw the
+ * distinction is at 00000000.00000000.400, i.e.
+ * one quarter of the minimum positive denormal.
+ * If a value less than that rounds up to the
+ * minimum denormal, that must mean the function
+ * under test has managed to make an error of an
+ * entire factor of two, and that's something we
+ * should fix. Above that, you can misround within
+ * the limits of your accuracy bound if you have
+ * to.
+ */
+ if (result[2] < 0x40000000) {
+ /* Total underflow (ERANGE + UFL) is required,
+ * and we suppress the extra bits to make
+ * mathtest enforce that the output is really
+ * zero. */
+ errstr = "underflow";
+ printextra = 0;
+ } else {
+ /* Total underflow is not required, but if the
+ * function rounds down to zero anyway, then
+ * we should be prepared to tolerate it. */
+ errstr = "?underflow";
+ }
+ } else if (!(result[0] & 0x7ff00000)) {
+ /*
+ * If the output is denormal, we usually expect a
+ * UFL exception, warning the user of partial
+ * underflow. The exception is if the denormal
+ * being returned is just one of the input values,
+ * unchanged even in principle. I bodgily handle
+ * this by just special-casing the functions in
+ * question below.
+ */
+ if (!strcmp(fn->name, "fmax") ||
+ !strcmp(fn->name, "fmin") ||
+ !strcmp(fn->name, "creal") ||
+ !strcmp(fn->name, "cimag")) {
+ /* no error expected */
+ } else {
+ errstr = "u";
+ }
+ } else if ((result[0] & 0x7FFFFFFF) > 0x7FEFFFFF) {
+ /*
+ * Infinite results are usually due to overflow,
+ * but one exception is lgamma of a negative
+ * integer.
+ */
+ if (!strcmp(fn->name, "lgamma") &&
+ (args[0] & 0x80000000) != 0 && /* negative */
+ is_dinteger(args)) {
+ errstr = "ERANGE status=z";
+ } else {
+ errstr = "overflow";
+ }
+ printextra = 0;
+ }
+ } else {
+ /* lgamma(0) is also a pole. */
+ if (!strcmp(fn->name, "lgamma")) {
+ errstr = "ERANGE status=z";
+ printextra = 0;
+ }
+ }
+ }
+
+ if (!printextra || (rejected && !(rejected==1 && result[2]!=0))) {
+ printf(" result=%08x.%08x",
+ result[0], result[1]);
+ } else {
+ printf(" result=%08x.%08x.%03x",
+ result[0], result[1], (result[2] >> 20) & 0xFFF);
+ }
+ if (fn->type == rred) {
+ printf(" res2=%08x", result[3]);
+ }
+ break;
+ case args1f:
+ case args2f:
+ case args1fcr:
+ case rredf:
+ printextra = 1;
+ if (rejected == 0) {
+ errstr = NULL;
+ if (!mpfr_zero_p(a)) {
+ if ((result[0] & 0x7FFFFFFF) == 0) {
+ /*
+ * Decide whether to print the extra bits based on
+ * just how close to zero the number is. See the
+ * big comment in the double-precision case for
+ * discussion.
+ */
+ if (result[1] < 0x40000000) {
+ errstr = "underflow";
+ printextra = 0;
+ } else {
+ errstr = "?underflow";
+ }
+ } else if (!(result[0] & 0x7f800000)) {
+ /*
+ * Functions which do not report partial overflow
+ * are listed here as special cases. (See the
+ * corresponding double case above for a fuller
+ * comment.)
+ */
+ if (!strcmp(fn->name, "fmaxf") ||
+ !strcmp(fn->name, "fminf") ||
+ !strcmp(fn->name, "crealf") ||
+ !strcmp(fn->name, "cimagf")) {
+ /* no error expected */
+ } else {
+ errstr = "u";
+ }
+ } else if ((result[0] & 0x7FFFFFFF) > 0x7F7FFFFF) {
+ /*
+ * Infinite results are usually due to overflow,
+ * but one exception is lgamma of a negative
+ * integer.
+ */
+ if (!strcmp(fn->name, "lgammaf") &&
+ (args[0] & 0x80000000) != 0 && /* negative */
+ is_sinteger(args)) {
+ errstr = "ERANGE status=z";
+ } else {
+ errstr = "overflow";
+ }
+ printextra = 0;
+ }
+ } else {
+ /* lgamma(0) is also a pole. */
+ if (!strcmp(fn->name, "lgammaf")) {
+ errstr = "ERANGE status=z";
+ printextra = 0;
+ }
+ }
+ }
+
+ if (!printextra || (rejected && !(rejected==1 && result[1]!=0))) {
+ printf(" result=%08x",
+ result[0]);
+ } else {
+ printf(" result=%08x.%03x",
+ result[0], (result[1] >> 20) & 0xFFF);
+ }
+ if (fn->type == rredf) {
+ printf(" res2=%08x", result[3]);
+ }
+ break;
+ case semi1: /* return a double result */
+ case semi2:
+ case t_ldexp:
+ printf(" result=%08x.%08x", result[0], result[1]);
+ break;
+ case semi1f:
+ case semi2f:
+ case t_ldexpf:
+ printf(" result=%08x", result[0]);
+ break;
+ case t_frexp: /* return double * int */
+ printf(" result=%08x.%08x res2=%08x", result[0], result[1],
+ result[2]);
+ break;
+ case t_modf: /* return double * double */
+ printf(" result=%08x.%08x res2=%08x.%08x",
+ result[0], result[1], result[2], result[3]);
+ break;
+ case t_modff: /* return float * float */
+ /* fall through */
+ case t_frexpf: /* return float * int */
+ printf(" result=%08x res2=%08x", result[0], result[2]);
+ break;
+ case classify:
+ case classifyf:
+ case compare:
+ case comparef:
+ printf(" result=%x", result[0]);
+ break;
+ case args1c:
+ case args2c:
+ if (0/* errstr */) {
+ printf(" resultr=%08x.%08x", result[0], result[1]);
+ printf(" resulti=%08x.%08x", result[4], result[5]);
+ } else {
+ printf(" resultr=%08x.%08x.%03x",
+ result[0], result[1], (result[2] >> 20) & 0xFFF);
+ printf(" resulti=%08x.%08x.%03x",
+ result[4], result[5], (result[6] >> 20) & 0xFFF);
+ }
+ /* Underflow behaviour doesn't seem to be specified for complex arithmetic */
+ errstr = "?underflow";
+ break;
+ case args1fc:
+ case args2fc:
+ if (0/* errstr */) {
+ printf(" resultr=%08x", result[0]);
+ printf(" resulti=%08x", result[4]);
+ } else {
+ printf(" resultr=%08x.%03x",
+ result[0], (result[1] >> 20) & 0xFFF);
+ printf(" resulti=%08x.%03x",
+ result[4], (result[5] >> 20) & 0xFFF);
+ }
+ /* Underflow behaviour doesn't seem to be specified for complex arithmetic */
+ errstr = "?underflow";
+ break;
+ }
+
+ if (errstr && *(errstr+1) == '\0') {
+ printf(" errno=0 status=%c",*errstr);
+ } else if (errstr && *errstr == '?') {
+ printf(" maybeerror=%s", errstr+1);
+ } else if (errstr && errstr[0] == 'E') {
+ printf(" errno=%s", errstr);
+ } else {
+ printf(" error=%s", errstr && *errstr ? errstr : "0");
+ }
+
+ printf("\n");
+
+ vet_for_decline(fn, args, result, 0);
+
+ cleanup:
+ mpfr_clear(a);
+ mpfr_clear(b);
+ mpfr_clear(r);
+ mpc_clear(ac);
+ mpc_clear(bc);
+ mpc_clear(rc);
+}
+
+void gencases(Testable *fn, int number) {
+ int i;
+ uint32 args[8];
+
+ float32_case(NULL);
+ float64_case(NULL);
+
+ printf("random=on\n"); /* signal to runtests.pl that the following tests are randomly generated */
+ for (i = 0; i < number; i++) {
+ /* generate test point */
+ fn->cases(args, fn->caseparam1, fn->caseparam2);
+ docase(fn, args);
+ }
+ printf("random=off\n");
+}
+
+static uint32 doubletop(int x, int scale) {
+ int e = 0x412 + scale;
+ while (!(x & 0x100000))
+ x <<= 1, e--;
+ return (e << 20) + x;
+}
+
+static uint32 floatval(int x, int scale) {
+ int e = 0x95 + scale;
+ while (!(x & 0x800000))
+ x <<= 1, e--;
+ return (e << 23) + x;
+}
diff --git a/math/test/rtest/intern.h b/math/test/rtest/intern.h
new file mode 100644
index 000000000000..12a9c749e18e
--- /dev/null
+++ b/math/test/rtest/intern.h
@@ -0,0 +1,91 @@
+/*
+ * intern.h
+ *
+ * Copyright (c) 1999-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef mathtest_intern_h
+#define mathtest_intern_h
+
+#include <mpfr.h>
+#include <mpc.h>
+
+#include "types.h"
+#include "wrappers.h"
+
+/* Generic function pointer. */
+typedef void (*funcptr)(void);
+
+/* Pointers to test function types. */
+typedef int (*testfunc1)(mpfr_t, mpfr_t, mpfr_rnd_t);
+typedef int (*testfunc2)(mpfr_t, mpfr_t, mpfr_t, mpfr_rnd_t);
+typedef int (*testrred)(mpfr_t, mpfr_t, int *);
+typedef char * (*testsemi1)(uint32 *, uint32 *);
+typedef char * (*testsemi2)(uint32 *, uint32 *, uint32 *);
+typedef char * (*testsemi2f)(uint32 *, uint32 *, uint32 *);
+typedef char * (*testldexp)(uint32 *, uint32 *, uint32 *);
+typedef char * (*testfrexp)(uint32 *, uint32 *, uint32 *);
+typedef char * (*testmodf)(uint32 *, uint32 *, uint32 *);
+typedef char * (*testclassify)(uint32 *, uint32 *);
+typedef char * (*testclassifyf)(uint32 *, uint32 *);
+
+typedef int (*testfunc1c)(mpc_t, mpc_t, mpc_rnd_t);
+typedef int (*testfunc2c)(mpc_t, mpc_t, mpc_t, mpc_rnd_t);
+
+typedef int (*testfunc1cr)(mpfr_t, mpc_t, mpfr_rnd_t);
+
+/* Pointer to a function that generates random test cases. */
+typedef void (*casegen)(uint32 *, uint32, uint32);
+
+/*
+ * List of testable functions, their types, and their testable range.
+ */
+enum {
+ args1, /* afloat-based, one argument */
+ args1f, /* same as args1 but in single prec */
+ args2, /* afloat-based, two arguments */
+ args2f, /* same as args2 but in single prec */
+ rred, /* afloat-based, one arg, aux return */
+ rredf, /* same as rred but in single prec */
+ semi1, /* seminumerical, one argument */
+ semi1f, /* seminumerical, 1 arg, float */
+ semi2, /* seminumerical, two arguments */
+ semi2f, /* seminumerical, 2 args, floats */
+ t_ldexp, /* dbl * int -> dbl */
+ t_ldexpf, /* sgl * int -> sgl */
+ t_frexp, /* dbl -> dbl * int */
+ t_frexpf, /* sgl -> sgl * int */
+ t_modf, /* dbl -> dbl * dbl */
+ t_modff, /* sgl -> sgl * sgl */
+ classify, /* classify double: dbl -> int */
+ classifyf, /* classify float: flt -> int */
+ compare, /* compare doubles, returns int */
+ comparef, /* compare floats, returns int */
+
+ args1c, /* acomplex-base, one argument */
+ args2c,
+ args1fc,
+ args2fc,
+ args1cr, /* dbl-complex -> complex */
+ args1fcr /* sgl-complex -> complex */
+};
+
+typedef struct __testable Testable;
+struct __testable {
+ char *name;
+ funcptr func;
+ int type;
+ wrapperfunc wrappers[MAXWRAPPERS];
+ casegen cases; /* complex functions use the same casegen for both real and complex args */
+ uint32 caseparam1, caseparam2;
+};
+
+extern Testable functions[];
+extern const int nfunctions;
+
+extern void init_pi(void);
+
+int nargs_(Testable* f);
+
+#endif
diff --git a/math/test/rtest/main.c b/math/test/rtest/main.c
new file mode 100644
index 000000000000..0d8ead891320
--- /dev/null
+++ b/math/test/rtest/main.c
@@ -0,0 +1,334 @@
+/*
+ * main.c
+ *
+ * Copyright (c) 1999-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <assert.h>
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include <stdlib.h>
+#include <time.h>
+
+#include "intern.h"
+
+void gencases(Testable *fn, int number);
+void docase(Testable *fn, uint32 *args);
+void vet_for_decline(Testable *fn, uint32 *args, uint32 *result, int got_errno_in);
+void seed_random(uint32 seed);
+
+int check_declines = 0;
+int lib_fo = 0;
+int lib_no_arith = 0;
+int ntests = 0;
+
+int nargs_(Testable* f) {
+ switch((f)->type) {
+ case args2:
+ case args2f:
+ case semi2:
+ case semi2f:
+ case t_ldexp:
+ case t_ldexpf:
+ case args1c:
+ case args1fc:
+ case args1cr:
+ case args1fcr:
+ case compare:
+ case comparef:
+ return 2;
+ case args2c:
+ case args2fc:
+ return 4;
+ default:
+ return 1;
+ }
+}
+
+static int isdouble(Testable *f)
+{
+ switch (f->type) {
+ case args1:
+ case rred:
+ case semi1:
+ case t_frexp:
+ case t_modf:
+ case classify:
+ case t_ldexp:
+ case args2:
+ case semi2:
+ case args1c:
+ case args1cr:
+ case compare:
+ case args2c:
+ return 1;
+ case args1f:
+ case rredf:
+ case semi1f:
+ case t_frexpf:
+ case t_modff:
+ case classifyf:
+ case args2f:
+ case semi2f:
+ case t_ldexpf:
+ case comparef:
+ case args1fc:
+ case args1fcr:
+ case args2fc:
+ return 0;
+ default:
+ assert(0 && "Bad function type");
+ }
+}
+
+Testable *find_function(const char *func)
+{
+ int i;
+ for (i = 0; i < nfunctions; i++) {
+ if (func && !strcmp(func, functions[i].name)) {
+ return &functions[i];
+ }
+ }
+ return NULL;
+}
+
+void get_operand(const char *str, Testable *f, uint32 *word0, uint32 *word1)
+{
+ struct special {
+ unsigned dblword0, dblword1, sglword;
+ const char *name;
+ } specials[] = {
+ {0x00000000,0x00000000,0x00000000,"0"},
+ {0x3FF00000,0x00000000,0x3f800000,"1"},
+ {0x7FF00000,0x00000000,0x7f800000,"inf"},
+ {0x7FF80000,0x00000001,0x7fc00000,"qnan"},
+ {0x7FF00000,0x00000001,0x7f800001,"snan"},
+ {0x3ff921fb,0x54442d18,0x3fc90fdb,"pi2"},
+ {0x400921fb,0x54442d18,0x40490fdb,"pi"},
+ {0x3fe921fb,0x54442d18,0x3f490fdb,"pi4"},
+ {0x4002d97c,0x7f3321d2,0x4016cbe4,"3pi4"},
+ };
+ int i;
+
+ for (i = 0; i < (int)(sizeof(specials)/sizeof(*specials)); i++) {
+ if (!strcmp(str, specials[i].name) ||
+ ((str[0] == '-' || str[0] == '+') &&
+ !strcmp(str+1, specials[i].name))) {
+ assert(f);
+ if (isdouble(f)) {
+ *word0 = specials[i].dblword0;
+ *word1 = specials[i].dblword1;
+ } else {
+ *word0 = specials[i].sglword;
+ *word1 = 0;
+ }
+ if (str[0] == '-')
+ *word0 |= 0x80000000U;
+ return;
+ }
+ }
+
+ sscanf(str, "%"I32"x.%"I32"x", word0, word1);
+}
+
+void dofile(FILE *fp, int translating) {
+ char buf[1024], sparebuf[1024], *p;
+
+ /*
+ * Command syntax is:
+ *
+ * - "seed <integer>" sets a random seed
+ *
+ * - "test <function> <ntests>" generates random test lines
+ *
+ * - "<function> op1=foo [op2=bar]" generates a specific test
+ * - "func=<function> op1=foo [op2=bar]" does the same
+ * - "func=<function> op1=foo result=bar" will just output the line as-is
+ *
+ * - a semicolon or a blank line is ignored
+ */
+ while (fgets(buf, sizeof(buf), fp)) {
+ buf[strcspn(buf, "\r\n")] = '\0';
+ strcpy(sparebuf, buf);
+ p = buf;
+ while (*p && isspace(*p)) p++;
+ if (!*p || *p == ';') {
+ /* Comment or blank line. Only print if `translating' is set. */
+ if (translating)
+ printf("%s\n", buf);
+ continue;
+ }
+ if (!strncmp(buf, "seed ", 5)) {
+ seed_random(atoi(buf+5));
+ } else if (!strncmp(buf, "random=", 7)) {
+ /*
+ * Copy 'random=on' / 'random=off' lines unconditionally
+ * to the output, so that random test failures can be
+ * accumulated into a recent-failures-list file and
+ * still identified as random-in-origin when re-run the
+ * next day.
+ */
+ printf("%s\n", buf);
+ } else if (!strncmp(buf, "test ", 5)) {
+ char *p = buf+5;
+ char *q;
+ int ntests, i;
+ q = p;
+ while (*p && !isspace(*p)) p++;
+ if (*p) *p++ = '\0';
+ while (*p && isspace(*p)) p++;
+ if (*p)
+ ntests = atoi(p);
+ else
+ ntests = 100; /* *shrug* */
+ for (i = 0; i < nfunctions; i++) {
+ if (!strcmp(q, functions[i].name)) {
+ gencases(&functions[i], ntests);
+ break;
+ }
+ }
+ if (i == nfunctions) {
+ fprintf(stderr, "unknown test `%s'\n", q);
+ }
+ } else {
+ /*
+ * Parse a specific test line.
+ */
+ uint32 ops[8], result[8];
+ int got_op = 0; /* &1 for got_op1, &4 for got_op3 etc. */
+ Testable *f = 0;
+ char *q, *r;
+ int got_result = 0, got_errno_in = 0;
+
+ for (q = strtok(p, " \t"); q; q = strtok(NULL, " \t")) {
+ r = strchr(q, '=');
+ if (!r) {
+ f = find_function(q);
+ } else {
+ *r++ = '\0';
+
+ if (!strcmp(q, "func"))
+ f = find_function(r);
+ else if (!strcmp(q, "op1") || !strcmp(q, "op1r")) {
+ get_operand(r, f, &ops[0], &ops[1]);
+ got_op |= 1;
+ } else if (!strcmp(q, "op2") || !strcmp(q, "op1i")) {
+ get_operand(r, f, &ops[2], &ops[3]);
+ got_op |= 2;
+ } else if (!strcmp(q, "op2r")) {
+ get_operand(r, f, &ops[4], &ops[5]);
+ got_op |= 4;
+ } else if (!strcmp(q, "op2i")) {
+ get_operand(r, f, &ops[6], &ops[7]);
+ got_op |= 8;
+ } else if (!strcmp(q, "result") || !strcmp(q, "resultr")) {
+ get_operand(r, f, &result[0], &result[1]);
+ got_result |= 1;
+ } else if (!strcmp(q, "resulti")) {
+ get_operand(r, f, &result[4], &result[5]);
+ got_result |= 2;
+ } else if (!strcmp(q, "res2")) {
+ get_operand(r, f, &result[2], &result[3]);
+ got_result |= 4;
+ } else if (!strcmp(q, "errno_in")) {
+ got_errno_in = 1;
+ }
+ }
+ }
+
+ /*
+ * Test cases already set up by the input are not
+ * reprocessed by default, unlike the fplib tests. (This
+ * is mostly for historical reasons, because we used to
+ * use a very slow and incomplete internal reference
+ * implementation; now our ref impl is MPFR/MPC it
+ * probably wouldn't be such a bad idea, though we'd still
+ * have to make sure all the special cases came out
+ * right.) If translating==2 (corresponding to the -T
+ * command-line option) then we regenerate everything
+ * regardless.
+ */
+ if (got_result && translating < 2) {
+ if (f)
+ vet_for_decline(f, ops, result, got_errno_in);
+ puts(sparebuf);
+ continue;
+ }
+
+ if (f && got_op==(1<<nargs_(f))-1) {
+ /*
+ * And do it!
+ */
+ docase(f, ops);
+ }
+ }
+ }
+}
+
+int main(int argc, char **argv) {
+ int errs = 0, opts = 1, files = 0, translating = 0;
+ unsigned int seed = 1; /* in case no explicit seed provided */
+
+ seed_random(seed);
+
+ setvbuf(stdout, NULL, _IOLBF, BUFSIZ); /* stops incomplete lines being printed when out of time */
+
+ while (--argc) {
+ FILE *fp;
+ char *p = *++argv;
+
+ if (opts && *p == '-') {
+ if(*(p+1) == 0) { /* single -, read from stdin */
+ break;
+ } else if (!strcmp(p, "-t")) {
+ translating = 1;
+ } else if (!strcmp(p, "-T")) {
+ translating = 2;
+ } else if (!strcmp(p, "-c")) {
+ check_declines = 1;
+ } else if (!strcmp(p, "--")) {
+ opts = 0;
+ } else if (!strcmp(p,"--seed") && argc > 1 && 1==sscanf(*(argv+1),"%u",&seed)) {
+ seed_random(seed);
+ argv++; /* next in argv is seed value, so skip */
+ --argc;
+ } else if (!strcmp(p, "-fo")) {
+ lib_fo = 1;
+ } else if (!strcmp(p, "-noarith")) {
+ lib_no_arith = 1;
+ } else {
+ fprintf(stderr,
+ "rtest: ignoring unrecognised option '%s'\n", p);
+ errs = 1;
+ }
+ } else {
+ files = 1;
+ if (!errs) {
+ fp = fopen(p, "r");
+ if (fp) {
+ dofile(fp, translating);
+ fclose(fp);
+ } else {
+ perror(p);
+ errs = 1;
+ }
+ }
+ }
+ }
+
+ /*
+ * If no filename arguments, use stdin.
+ */
+ if (!files && !errs) {
+ dofile(stdin, translating);
+ }
+
+ if (check_declines) {
+ fprintf(stderr, "Tests expected to run: %d\n", ntests);
+ fflush(stderr);
+ }
+
+ return errs;
+}
diff --git a/math/test/rtest/random.c b/math/test/rtest/random.c
new file mode 100644
index 000000000000..56123966b8c4
--- /dev/null
+++ b/math/test/rtest/random.c
@@ -0,0 +1,99 @@
+/*
+ * random.c - random number generator for producing mathlib test cases
+ *
+ * Copyright (c) 1998-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "types.h"
+#include "random.h"
+
+static uint32 seedbuf[55];
+static int seedptr;
+
+void seed_random(uint32 seed) {
+ int i;
+
+ seedptr = 0;
+ for (i = 0; i < 55; i++) {
+ seed = seed % 44488 * 48271 - seed / 44488 * 3399;
+ seedbuf[i] = seed - 1;
+ }
+}
+
+uint32 base_random(void) {
+ seedptr %= 55;
+ seedbuf[seedptr] += seedbuf[(seedptr+31)%55];
+ return seedbuf[seedptr++];
+}
+
+uint32 random32(void) {
+ uint32 a, b, b1, b2;
+ a = base_random();
+ b = base_random();
+ for (b1 = 0x80000000, b2 = 1; b1 > b2; b1 >>= 1, b2 <<= 1) {
+ uint32 b3 = b1 | b2;
+ if ((b & b3) != 0 && (b & b3) != b3)
+ b ^= b3;
+ }
+ return a ^ b;
+}
+
+/*
+ * random_upto: generate a uniformly randomised number in the range
+ * 0,...,limit-1. (Precondition: limit > 0.)
+ *
+ * random_upto_biased: generate a number in the same range, but with
+ * the probability skewed towards the high end by means of taking the
+ * maximum of 8*bias+1 samples from the uniform distribution on the
+ * same range. (I don't know why bias is given in that curious way -
+ * historical reasons, I expect.)
+ *
+ * For speed, I separate the implementation of random_upto into the
+ * two stages of (a) generate a bitmask which reduces a 32-bit random
+ * number to within a factor of two of the right range, (b) repeatedly
+ * generate numbers in that range until one is small enough. Splitting
+ * it up like that means that random_upto_biased can do (a) only once
+ * even when it does (b) lots of times.
+ */
+
+static uint32 random_upto_makemask(uint32 limit) {
+ uint32 mask = 0xFFFFFFFF;
+ int i;
+ for (i = 16; i > 0; i >>= 1)
+ if ((limit & (mask >> i)) == limit)
+ mask >>= i;
+ return mask;
+}
+
+static uint32 random_upto_internal(uint32 limit, uint32 mask) {
+ uint32 ret;
+ do {
+ ret = random32() & mask;
+ } while (ret > limit);
+ return ret;
+}
+
+uint32 random_upto(uint32 limit) {
+ uint32 mask = random_upto_makemask(limit);
+ return random_upto_internal(limit, mask);
+}
+
+uint32 random_upto_biased(uint32 limit, int bias) {
+ uint32 mask = random_upto_makemask(limit);
+
+ uint32 ret = random_upto_internal(limit, mask);
+ while (bias--) {
+ uint32 tmp;
+ tmp = random_upto_internal(limit, mask); if (tmp < ret) ret = tmp;
+ tmp = random_upto_internal(limit, mask); if (tmp < ret) ret = tmp;
+ tmp = random_upto_internal(limit, mask); if (tmp < ret) ret = tmp;
+ tmp = random_upto_internal(limit, mask); if (tmp < ret) ret = tmp;
+ tmp = random_upto_internal(limit, mask); if (tmp < ret) ret = tmp;
+ tmp = random_upto_internal(limit, mask); if (tmp < ret) ret = tmp;
+ tmp = random_upto_internal(limit, mask); if (tmp < ret) ret = tmp;
+ tmp = random_upto_internal(limit, mask); if (tmp < ret) ret = tmp;
+ }
+
+ return ret;
+}
diff --git a/math/test/rtest/random.h b/math/test/rtest/random.h
new file mode 100644
index 000000000000..b4b22df82a3d
--- /dev/null
+++ b/math/test/rtest/random.h
@@ -0,0 +1,12 @@
+/*
+ * random.h - header for random.c
+ *
+ * Copyright (c) 2009-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "types.h"
+
+uint32 random32(void);
+uint32 random_upto(uint32 limit);
+uint32 random_upto_biased(uint32 limit, int bias);
diff --git a/math/test/rtest/semi.c b/math/test/rtest/semi.c
new file mode 100644
index 000000000000..c9f0daf76508
--- /dev/null
+++ b/math/test/rtest/semi.c
@@ -0,0 +1,905 @@
+/*
+ * semi.c: test implementations of mathlib seminumerical functions
+ *
+ * Copyright (c) 1999-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdio.h>
+#include "semi.h"
+
+static void test_rint(uint32 *in, uint32 *out,
+ int isfloor, int isceil) {
+ int sign = in[0] & 0x80000000;
+ int roundup = (isfloor && sign) || (isceil && !sign);
+ uint32 xh, xl, roundword;
+ int ex = (in[0] >> 20) & 0x7FF; /* exponent */
+ int i;
+
+ if ((ex > 0x3ff + 52 - 1) || /* things this big can't be fractional */
+ ((in[0] & 0x7FFFFFFF) == 0 && in[1] == 0)) { /* zero */
+ /* NaN, Inf, a large integer, or zero: just return the input */
+ out[0] = in[0];
+ out[1] = in[1];
+ return;
+ }
+
+ /*
+ * Special case: ex < 0x3ff, ie our number is in (0,1). Return
+ * 1 or 0 according to roundup.
+ */
+ if (ex < 0x3ff) {
+ out[0] = sign | (roundup ? 0x3FF00000 : 0);
+ out[1] = 0;
+ return;
+ }
+
+ /*
+ * We're not short of time here, so we'll do this the hideously
+ * inefficient way. Shift bit by bit so that the units place is
+ * somewhere predictable, round, and shift back again.
+ */
+ xh = in[0];
+ xl = in[1];
+ roundword = 0;
+ for (i = ex; i < 0x3ff + 52; i++) {
+ if (roundword & 1)
+ roundword |= 2; /* preserve sticky bit */
+ roundword = (roundword >> 1) | ((xl & 1) << 31);
+ xl = (xl >> 1) | ((xh & 1) << 31);
+ xh = xh >> 1;
+ }
+ if (roundword && roundup) {
+ xl++;
+ xh += (xl==0);
+ }
+ for (i = ex; i < 0x3ff + 52; i++) {
+ xh = (xh << 1) | ((xl >> 31) & 1);
+ xl = (xl & 0x7FFFFFFF) << 1;
+ }
+ out[0] = xh;
+ out[1] = xl;
+}
+
+char *test_ceil(uint32 *in, uint32 *out) {
+ test_rint(in, out, 0, 1);
+ return NULL;
+}
+
+char *test_floor(uint32 *in, uint32 *out) {
+ test_rint(in, out, 1, 0);
+ return NULL;
+}
+
+static void test_rintf(uint32 *in, uint32 *out,
+ int isfloor, int isceil) {
+ int sign = *in & 0x80000000;
+ int roundup = (isfloor && sign) || (isceil && !sign);
+ uint32 x, roundword;
+ int ex = (*in >> 23) & 0xFF; /* exponent */
+ int i;
+
+ if ((ex > 0x7f + 23 - 1) || /* things this big can't be fractional */
+ (*in & 0x7FFFFFFF) == 0) { /* zero */
+ /* NaN, Inf, a large integer, or zero: just return the input */
+ *out = *in;
+ return;
+ }
+
+ /*
+ * Special case: ex < 0x7f, ie our number is in (0,1). Return
+ * 1 or 0 according to roundup.
+ */
+ if (ex < 0x7f) {
+ *out = sign | (roundup ? 0x3F800000 : 0);
+ return;
+ }
+
+ /*
+ * We're not short of time here, so we'll do this the hideously
+ * inefficient way. Shift bit by bit so that the units place is
+ * somewhere predictable, round, and shift back again.
+ */
+ x = *in;
+ roundword = 0;
+ for (i = ex; i < 0x7F + 23; i++) {
+ if (roundword & 1)
+ roundword |= 2; /* preserve sticky bit */
+ roundword = (roundword >> 1) | ((x & 1) << 31);
+ x = x >> 1;
+ }
+ if (roundword && roundup) {
+ x++;
+ }
+ for (i = ex; i < 0x7F + 23; i++) {
+ x = x << 1;
+ }
+ *out = x;
+}
+
+char *test_ceilf(uint32 *in, uint32 *out) {
+ test_rintf(in, out, 0, 1);
+ return NULL;
+}
+
+char *test_floorf(uint32 *in, uint32 *out) {
+ test_rintf(in, out, 1, 0);
+ return NULL;
+}
+
+char *test_fmod(uint32 *a, uint32 *b, uint32 *out) {
+ int sign;
+ int32 aex, bex;
+ uint32 am[2], bm[2];
+
+ if (((a[0] & 0x7FFFFFFF) << 1) + !!a[1] > 0xFFE00000 ||
+ ((b[0] & 0x7FFFFFFF) << 1) + !!b[1] > 0xFFE00000) {
+ /* a or b is NaN: return QNaN, optionally with IVO */
+ uint32 an, bn;
+ out[0] = 0x7ff80000;
+ out[1] = 1;
+ an = ((a[0] & 0x7FFFFFFF) << 1) + !!a[1];
+ bn = ((b[0] & 0x7FFFFFFF) << 1) + !!b[1];
+ if ((an > 0xFFE00000 && an < 0xFFF00000) ||
+ (bn > 0xFFE00000 && bn < 0xFFF00000))
+ return "i"; /* at least one SNaN: IVO */
+ else
+ return NULL; /* no SNaNs, but at least 1 QNaN */
+ }
+ if ((b[0] & 0x7FFFFFFF) == 0 && b[1] == 0) { /* b==0: EDOM */
+ out[0] = 0x7ff80000;
+ out[1] = 1;
+ return "EDOM status=i";
+ }
+ if ((a[0] & 0x7FF00000) == 0x7FF00000) { /* a==Inf: EDOM */
+ out[0] = 0x7ff80000;
+ out[1] = 1;
+ return "EDOM status=i";
+ }
+ if ((b[0] & 0x7FF00000) == 0x7FF00000) { /* b==Inf: return a */
+ out[0] = a[0];
+ out[1] = a[1];
+ return NULL;
+ }
+ if ((a[0] & 0x7FFFFFFF) == 0 && a[1] == 0) { /* a==0: return a */
+ out[0] = a[0];
+ out[1] = a[1];
+ return NULL;
+ }
+
+ /*
+ * OK. That's the special cases cleared out of the way. Now we
+ * have finite (though not necessarily normal) a and b.
+ */
+ sign = a[0] & 0x80000000; /* we discard sign of b */
+ test_frexp(a, am, (uint32 *)&aex);
+ test_frexp(b, bm, (uint32 *)&bex);
+ am[0] &= 0xFFFFF, am[0] |= 0x100000;
+ bm[0] &= 0xFFFFF, bm[0] |= 0x100000;
+
+ while (aex >= bex) {
+ if (am[0] > bm[0] || (am[0] == bm[0] && am[1] >= bm[1])) {
+ am[1] -= bm[1];
+ am[0] = am[0] - bm[0] - (am[1] > ~bm[1]);
+ }
+ if (aex > bex) {
+ am[0] = (am[0] << 1) | ((am[1] & 0x80000000) >> 31);
+ am[1] <<= 1;
+ aex--;
+ } else
+ break;
+ }
+
+ /*
+ * Renormalise final result; this can be cunningly done by
+ * passing a denormal to ldexp.
+ */
+ aex += 0x3fd;
+ am[0] |= sign;
+ test_ldexp(am, (uint32 *)&aex, out);
+
+ return NULL; /* FIXME */
+}
+
+char *test_fmodf(uint32 *a, uint32 *b, uint32 *out) {
+ int sign;
+ int32 aex, bex;
+ uint32 am, bm;
+
+ if ((*a & 0x7FFFFFFF) > 0x7F800000 ||
+ (*b & 0x7FFFFFFF) > 0x7F800000) {
+ /* a or b is NaN: return QNaN, optionally with IVO */
+ uint32 an, bn;
+ *out = 0x7fc00001;
+ an = *a & 0x7FFFFFFF;
+ bn = *b & 0x7FFFFFFF;
+ if ((an > 0x7f800000 && an < 0x7fc00000) ||
+ (bn > 0x7f800000 && bn < 0x7fc00000))
+ return "i"; /* at least one SNaN: IVO */
+ else
+ return NULL; /* no SNaNs, but at least 1 QNaN */
+ }
+ if ((*b & 0x7FFFFFFF) == 0) { /* b==0: EDOM */
+ *out = 0x7fc00001;
+ return "EDOM status=i";
+ }
+ if ((*a & 0x7F800000) == 0x7F800000) { /* a==Inf: EDOM */
+ *out = 0x7fc00001;
+ return "EDOM status=i";
+ }
+ if ((*b & 0x7F800000) == 0x7F800000) { /* b==Inf: return a */
+ *out = *a;
+ return NULL;
+ }
+ if ((*a & 0x7FFFFFFF) == 0) { /* a==0: return a */
+ *out = *a;
+ return NULL;
+ }
+
+ /*
+ * OK. That's the special cases cleared out of the way. Now we
+ * have finite (though not necessarily normal) a and b.
+ */
+ sign = a[0] & 0x80000000; /* we discard sign of b */
+ test_frexpf(a, &am, (uint32 *)&aex);
+ test_frexpf(b, &bm, (uint32 *)&bex);
+ am &= 0x7FFFFF, am |= 0x800000;
+ bm &= 0x7FFFFF, bm |= 0x800000;
+
+ while (aex >= bex) {
+ if (am >= bm) {
+ am -= bm;
+ }
+ if (aex > bex) {
+ am <<= 1;
+ aex--;
+ } else
+ break;
+ }
+
+ /*
+ * Renormalise final result; this can be cunningly done by
+ * passing a denormal to ldexp.
+ */
+ aex += 0x7d;
+ am |= sign;
+ test_ldexpf(&am, (uint32 *)&aex, out);
+
+ return NULL; /* FIXME */
+}
+
+char *test_ldexp(uint32 *x, uint32 *np, uint32 *out) {
+ int n = *np;
+ int32 n2;
+ uint32 y[2];
+ int ex = (x[0] >> 20) & 0x7FF; /* exponent */
+ int sign = x[0] & 0x80000000;
+
+ if (ex == 0x7FF) { /* inf/NaN; just return x */
+ out[0] = x[0];
+ out[1] = x[1];
+ return NULL;
+ }
+ if ((x[0] & 0x7FFFFFFF) == 0 && x[1] == 0) { /* zero: return x */
+ out[0] = x[0];
+ out[1] = x[1];
+ return NULL;
+ }
+
+ test_frexp(x, y, (uint32 *)&n2);
+ ex = n + n2;
+ if (ex > 0x400) { /* overflow */
+ out[0] = sign | 0x7FF00000;
+ out[1] = 0;
+ return "overflow";
+ }
+ /*
+ * Underflow. 2^-1074 is 00000000.00000001; so if ex == -1074
+ * then we have something [2^-1075,2^-1074). Under round-to-
+ * nearest-even, this whole interval rounds up to 2^-1074,
+ * except for the bottom endpoint which rounds to even and is
+ * an underflow condition.
+ *
+ * So, ex < -1074 is definite underflow, and ex == -1074 is
+ * underflow iff all mantissa bits are zero.
+ */
+ if (ex < -1074 || (ex == -1074 && (y[0] & 0xFFFFF) == 0 && y[1] == 0)) {
+ out[0] = sign; /* underflow: correctly signed zero */
+ out[1] = 0;
+ return "underflow";
+ }
+
+ /*
+ * No overflow or underflow; should be nice and simple, unless
+ * we have to denormalise and round the result.
+ */
+ if (ex < -1021) { /* denormalise and round */
+ uint32 roundword;
+ y[0] &= 0x000FFFFF;
+ y[0] |= 0x00100000; /* set leading bit */
+ roundword = 0;
+ while (ex < -1021) {
+ if (roundword & 1)
+ roundword |= 2; /* preserve sticky bit */
+ roundword = (roundword >> 1) | ((y[1] & 1) << 31);
+ y[1] = (y[1] >> 1) | ((y[0] & 1) << 31);
+ y[0] = y[0] >> 1;
+ ex++;
+ }
+ if (roundword > 0x80000000 || /* round up */
+ (roundword == 0x80000000 && (y[1] & 1))) { /* round up to even */
+ y[1]++;
+ y[0] += (y[1] == 0);
+ }
+ out[0] = sign | y[0];
+ out[1] = y[1];
+ /* Proper ERANGE underflow was handled earlier, but we still
+ * expect an IEEE Underflow exception if this partially
+ * underflowed result is not exact. */
+ if (roundword)
+ return "u";
+ return NULL; /* underflow was handled earlier */
+ } else {
+ out[0] = y[0] + (ex << 20);
+ out[1] = y[1];
+ return NULL;
+ }
+}
+
+char *test_ldexpf(uint32 *x, uint32 *np, uint32 *out) {
+ int n = *np;
+ int32 n2;
+ uint32 y;
+ int ex = (*x >> 23) & 0xFF; /* exponent */
+ int sign = *x & 0x80000000;
+
+ if (ex == 0xFF) { /* inf/NaN; just return x */
+ *out = *x;
+ return NULL;
+ }
+ if ((*x & 0x7FFFFFFF) == 0) { /* zero: return x */
+ *out = *x;
+ return NULL;
+ }
+
+ test_frexpf(x, &y, (uint32 *)&n2);
+ ex = n + n2;
+ if (ex > 0x80) { /* overflow */
+ *out = sign | 0x7F800000;
+ return "overflow";
+ }
+ /*
+ * Underflow. 2^-149 is 00000001; so if ex == -149 then we have
+ * something [2^-150,2^-149). Under round-to- nearest-even,
+ * this whole interval rounds up to 2^-149, except for the
+ * bottom endpoint which rounds to even and is an underflow
+ * condition.
+ *
+ * So, ex < -149 is definite underflow, and ex == -149 is
+ * underflow iff all mantissa bits are zero.
+ */
+ if (ex < -149 || (ex == -149 && (y & 0x7FFFFF) == 0)) {
+ *out = sign; /* underflow: correctly signed zero */
+ return "underflow";
+ }
+
+ /*
+ * No overflow or underflow; should be nice and simple, unless
+ * we have to denormalise and round the result.
+ */
+ if (ex < -125) { /* denormalise and round */
+ uint32 roundword;
+ y &= 0x007FFFFF;
+ y |= 0x00800000; /* set leading bit */
+ roundword = 0;
+ while (ex < -125) {
+ if (roundword & 1)
+ roundword |= 2; /* preserve sticky bit */
+ roundword = (roundword >> 1) | ((y & 1) << 31);
+ y = y >> 1;
+ ex++;
+ }
+ if (roundword > 0x80000000 || /* round up */
+ (roundword == 0x80000000 && (y & 1))) { /* round up to even */
+ y++;
+ }
+ *out = sign | y;
+ /* Proper ERANGE underflow was handled earlier, but we still
+ * expect an IEEE Underflow exception if this partially
+ * underflowed result is not exact. */
+ if (roundword)
+ return "u";
+ return NULL; /* underflow was handled earlier */
+ } else {
+ *out = y + (ex << 23);
+ return NULL;
+ }
+}
+
+char *test_frexp(uint32 *x, uint32 *out, uint32 *nout) {
+ int ex = (x[0] >> 20) & 0x7FF; /* exponent */
+ if (ex == 0x7FF) { /* inf/NaN; return x/0 */
+ out[0] = x[0];
+ out[1] = x[1];
+ nout[0] = 0;
+ return NULL;
+ }
+ if (ex == 0) { /* denormals/zeros */
+ int sign;
+ uint32 xh, xl;
+ if ((x[0] & 0x7FFFFFFF) == 0 && x[1] == 0) {
+ /* zero: return x/0 */
+ out[0] = x[0];
+ out[1] = x[1];
+ nout[0] = 0;
+ return NULL;
+ }
+ sign = x[0] & 0x80000000;
+ xh = x[0] & 0x7FFFFFFF;
+ xl = x[1];
+ ex = 1;
+ while (!(xh & 0x100000)) {
+ ex--;
+ xh = (xh << 1) | ((xl >> 31) & 1);
+ xl = (xl & 0x7FFFFFFF) << 1;
+ }
+ out[0] = sign | 0x3FE00000 | (xh & 0xFFFFF);
+ out[1] = xl;
+ nout[0] = ex - 0x3FE;
+ return NULL;
+ }
+ out[0] = 0x3FE00000 | (x[0] & 0x800FFFFF);
+ out[1] = x[1];
+ nout[0] = ex - 0x3FE;
+ return NULL; /* ordinary number; no error */
+}
+
+char *test_frexpf(uint32 *x, uint32 *out, uint32 *nout) {
+ int ex = (*x >> 23) & 0xFF; /* exponent */
+ if (ex == 0xFF) { /* inf/NaN; return x/0 */
+ *out = *x;
+ nout[0] = 0;
+ return NULL;
+ }
+ if (ex == 0) { /* denormals/zeros */
+ int sign;
+ uint32 xv;
+ if ((*x & 0x7FFFFFFF) == 0) {
+ /* zero: return x/0 */
+ *out = *x;
+ nout[0] = 0;
+ return NULL;
+ }
+ sign = *x & 0x80000000;
+ xv = *x & 0x7FFFFFFF;
+ ex = 1;
+ while (!(xv & 0x800000)) {
+ ex--;
+ xv = xv << 1;
+ }
+ *out = sign | 0x3F000000 | (xv & 0x7FFFFF);
+ nout[0] = ex - 0x7E;
+ return NULL;
+ }
+ *out = 0x3F000000 | (*x & 0x807FFFFF);
+ nout[0] = ex - 0x7E;
+ return NULL; /* ordinary number; no error */
+}
+
+char *test_modf(uint32 *x, uint32 *fout, uint32 *iout) {
+ int ex = (x[0] >> 20) & 0x7FF; /* exponent */
+ int sign = x[0] & 0x80000000;
+ uint32 fh, fl;
+
+ if (((x[0] & 0x7FFFFFFF) | (!!x[1])) > 0x7FF00000) {
+ /*
+ * NaN input: return the same in _both_ outputs.
+ */
+ fout[0] = iout[0] = x[0];
+ fout[1] = iout[1] = x[1];
+ return NULL;
+ }
+
+ test_rint(x, iout, 0, 0);
+ fh = x[0] - iout[0];
+ fl = x[1] - iout[1];
+ if (!fh && !fl) { /* no fraction part */
+ fout[0] = sign;
+ fout[1] = 0;
+ return NULL;
+ }
+ if (!(iout[0] & 0x7FFFFFFF) && !iout[1]) { /* no integer part */
+ fout[0] = x[0];
+ fout[1] = x[1];
+ return NULL;
+ }
+ while (!(fh & 0x100000)) {
+ ex--;
+ fh = (fh << 1) | ((fl >> 31) & 1);
+ fl = (fl & 0x7FFFFFFF) << 1;
+ }
+ fout[0] = sign | (ex << 20) | (fh & 0xFFFFF);
+ fout[1] = fl;
+ return NULL;
+}
+
+char *test_modff(uint32 *x, uint32 *fout, uint32 *iout) {
+ int ex = (*x >> 23) & 0xFF; /* exponent */
+ int sign = *x & 0x80000000;
+ uint32 f;
+
+ if ((*x & 0x7FFFFFFF) > 0x7F800000) {
+ /*
+ * NaN input: return the same in _both_ outputs.
+ */
+ *fout = *iout = *x;
+ return NULL;
+ }
+
+ test_rintf(x, iout, 0, 0);
+ f = *x - *iout;
+ if (!f) { /* no fraction part */
+ *fout = sign;
+ return NULL;
+ }
+ if (!(*iout & 0x7FFFFFFF)) { /* no integer part */
+ *fout = *x;
+ return NULL;
+ }
+ while (!(f & 0x800000)) {
+ ex--;
+ f = f << 1;
+ }
+ *fout = sign | (ex << 23) | (f & 0x7FFFFF);
+ return NULL;
+}
+
+char *test_copysign(uint32 *x, uint32 *y, uint32 *out)
+{
+ int ysign = y[0] & 0x80000000;
+ int xhigh = x[0] & 0x7fffffff;
+
+ out[0] = ysign | xhigh;
+ out[1] = x[1];
+
+ /* There can be no error */
+ return NULL;
+}
+
+char *test_copysignf(uint32 *x, uint32 *y, uint32 *out)
+{
+ int ysign = y[0] & 0x80000000;
+ int xhigh = x[0] & 0x7fffffff;
+
+ out[0] = ysign | xhigh;
+
+ /* There can be no error */
+ return NULL;
+}
+
+char *test_isfinite(uint32 *x, uint32 *out)
+{
+ int xhigh = x[0];
+ /* Being finite means that the exponent is not 0x7ff */
+ if ((xhigh & 0x7ff00000) == 0x7ff00000) out[0] = 0;
+ else out[0] = 1;
+ return NULL;
+}
+
+char *test_isfinitef(uint32 *x, uint32 *out)
+{
+ /* Being finite means that the exponent is not 0xff */
+ if ((x[0] & 0x7f800000) == 0x7f800000) out[0] = 0;
+ else out[0] = 1;
+ return NULL;
+}
+
+char *test_isinff(uint32 *x, uint32 *out)
+{
+ /* Being infinite means that our bottom 30 bits equate to 0x7f800000 */
+ if ((x[0] & 0x7fffffff) == 0x7f800000) out[0] = 1;
+ else out[0] = 0;
+ return NULL;
+}
+
+char *test_isinf(uint32 *x, uint32 *out)
+{
+ int xhigh = x[0];
+ int xlow = x[1];
+ /* Being infinite means that our fraction is zero and exponent is 0x7ff */
+ if (((xhigh & 0x7fffffff) == 0x7ff00000) && (xlow == 0)) out[0] = 1;
+ else out[0] = 0;
+ return NULL;
+}
+
+char *test_isnanf(uint32 *x, uint32 *out)
+{
+ /* Being NaN means that our exponent is 0xff and non-0 fraction */
+ int exponent = x[0] & 0x7f800000;
+ int fraction = x[0] & 0x007fffff;
+ if ((exponent == 0x7f800000) && (fraction != 0)) out[0] = 1;
+ else out[0] = 0;
+ return NULL;
+}
+
+char *test_isnan(uint32 *x, uint32 *out)
+{
+ /* Being NaN means that our exponent is 0x7ff and non-0 fraction */
+ int exponent = x[0] & 0x7ff00000;
+ int fractionhigh = x[0] & 0x000fffff;
+ if ((exponent == 0x7ff00000) && ((fractionhigh != 0) || x[1] != 0))
+ out[0] = 1;
+ else out[0] = 0;
+ return NULL;
+}
+
+char *test_isnormalf(uint32 *x, uint32 *out)
+{
+ /* Being normal means exponent is not 0 and is not 0xff */
+ int exponent = x[0] & 0x7f800000;
+ if (exponent == 0x7f800000) out[0] = 0;
+ else if (exponent == 0) out[0] = 0;
+ else out[0] = 1;
+ return NULL;
+}
+
+char *test_isnormal(uint32 *x, uint32 *out)
+{
+ /* Being normal means exponent is not 0 and is not 0x7ff */
+ int exponent = x[0] & 0x7ff00000;
+ if (exponent == 0x7ff00000) out[0] = 0;
+ else if (exponent == 0) out[0] = 0;
+ else out[0] = 1;
+ return NULL;
+}
+
+char *test_signbitf(uint32 *x, uint32 *out)
+{
+ /* Sign bit is bit 31 */
+ out[0] = (x[0] >> 31) & 1;
+ return NULL;
+}
+
+char *test_signbit(uint32 *x, uint32 *out)
+{
+ /* Sign bit is bit 31 */
+ out[0] = (x[0] >> 31) & 1;
+ return NULL;
+}
+
+char *test_fpclassify(uint32 *x, uint32 *out)
+{
+ int exponent = (x[0] & 0x7ff00000) >> 20;
+ int fraction = (x[0] & 0x000fffff) | x[1];
+
+ if ((exponent == 0x00) && (fraction == 0)) out[0] = 0;
+ else if ((exponent == 0x00) && (fraction != 0)) out[0] = 4;
+ else if ((exponent == 0x7ff) && (fraction == 0)) out[0] = 3;
+ else if ((exponent == 0x7ff) && (fraction != 0)) out[0] = 7;
+ else out[0] = 5;
+ return NULL;
+}
+
+char *test_fpclassifyf(uint32 *x, uint32 *out)
+{
+ int exponent = (x[0] & 0x7f800000) >> 23;
+ int fraction = x[0] & 0x007fffff;
+
+ if ((exponent == 0x000) && (fraction == 0)) out[0] = 0;
+ else if ((exponent == 0x000) && (fraction != 0)) out[0] = 4;
+ else if ((exponent == 0xff) && (fraction == 0)) out[0] = 3;
+ else if ((exponent == 0xff) && (fraction != 0)) out[0] = 7;
+ else out[0] = 5;
+ return NULL;
+}
+
+/*
+ * Internal function that compares doubles in x & y and returns -3, -2, -1, 0,
+ * 1 if they compare to be signaling, unordered, less than, equal or greater
+ * than.
+ */
+static int fpcmp4(uint32 *x, uint32 *y)
+{
+ int result = 0;
+
+ /*
+ * Sort out whether results are ordered or not to begin with
+ * NaNs have exponent 0x7ff, and non-zero fraction. Signaling NaNs take
+ * higher priority than quiet ones.
+ */
+ if ((x[0] & 0x7fffffff) >= 0x7ff80000) result = -2;
+ else if ((x[0] & 0x7fffffff) > 0x7ff00000) result = -3;
+ else if (((x[0] & 0x7fffffff) == 0x7ff00000) && (x[1] != 0)) result = -3;
+ if ((y[0] & 0x7fffffff) >= 0x7ff80000 && result != -3) result = -2;
+ else if ((y[0] & 0x7fffffff) > 0x7ff00000) result = -3;
+ else if (((y[0] & 0x7fffffff) == 0x7ff00000) && (y[1] != 0)) result = -3;
+ if (result != 0) return result;
+
+ /*
+ * The two forms of zero are equal
+ */
+ if (((x[0] & 0x7fffffff) == 0) && x[1] == 0 &&
+ ((y[0] & 0x7fffffff) == 0) && y[1] == 0)
+ return 0;
+
+ /*
+ * If x and y have different signs we can tell that they're not equal
+ * If x is +ve we have x > y return 1 - otherwise y is +ve return -1
+ */
+ if ((x[0] >> 31) != (y[0] >> 31))
+ return ((x[0] >> 31) == 0) - ((y[0] >> 31) == 0);
+
+ /*
+ * Now we have both signs the same, let's do an initial compare of the
+ * values.
+ *
+ * Whoever designed IEEE754's floating point formats is very clever and
+ * earns my undying admiration. Once you remove the sign-bit, the
+ * floating point numbers can be ordered using the standard <, ==, >
+ * operators will treating the fp-numbers as integers with that bit-
+ * pattern.
+ */
+ if ((x[0] & 0x7fffffff) < (y[0] & 0x7fffffff)) result = -1;
+ else if ((x[0] & 0x7fffffff) > (y[0] & 0x7fffffff)) result = 1;
+ else if (x[1] < y[1]) result = -1;
+ else if (x[1] > y[1]) result = 1;
+ else result = 0;
+
+ /*
+ * Now we return the result - is x is positive (and therefore so is y) we
+ * return the plain result - otherwise we negate it and return.
+ */
+ if ((x[0] >> 31) == 0) return result;
+ else return -result;
+}
+
+/*
+ * Internal function that compares floats in x & y and returns -3, -2, -1, 0,
+ * 1 if they compare to be signaling, unordered, less than, equal or greater
+ * than.
+ */
+static int fpcmp4f(uint32 *x, uint32 *y)
+{
+ int result = 0;
+
+ /*
+ * Sort out whether results are ordered or not to begin with
+ * NaNs have exponent 0xff, and non-zero fraction - we have to handle all
+ * signaling cases over the quiet ones
+ */
+ if ((x[0] & 0x7fffffff) >= 0x7fc00000) result = -2;
+ else if ((x[0] & 0x7fffffff) > 0x7f800000) result = -3;
+ if ((y[0] & 0x7fffffff) >= 0x7fc00000 && result != -3) result = -2;
+ else if ((y[0] & 0x7fffffff) > 0x7f800000) result = -3;
+ if (result != 0) return result;
+
+ /*
+ * The two forms of zero are equal
+ */
+ if (((x[0] & 0x7fffffff) == 0) && ((y[0] & 0x7fffffff) == 0))
+ return 0;
+
+ /*
+ * If x and y have different signs we can tell that they're not equal
+ * If x is +ve we have x > y return 1 - otherwise y is +ve return -1
+ */
+ if ((x[0] >> 31) != (y[0] >> 31))
+ return ((x[0] >> 31) == 0) - ((y[0] >> 31) == 0);
+
+ /*
+ * Now we have both signs the same, let's do an initial compare of the
+ * values.
+ *
+ * Whoever designed IEEE754's floating point formats is very clever and
+ * earns my undying admiration. Once you remove the sign-bit, the
+ * floating point numbers can be ordered using the standard <, ==, >
+ * operators will treating the fp-numbers as integers with that bit-
+ * pattern.
+ */
+ if ((x[0] & 0x7fffffff) < (y[0] & 0x7fffffff)) result = -1;
+ else if ((x[0] & 0x7fffffff) > (y[0] & 0x7fffffff)) result = 1;
+ else result = 0;
+
+ /*
+ * Now we return the result - is x is positive (and therefore so is y) we
+ * return the plain result - otherwise we negate it and return.
+ */
+ if ((x[0] >> 31) == 0) return result;
+ else return -result;
+}
+
+char *test_isgreater(uint32 *x, uint32 *y, uint32 *out)
+{
+ int result = fpcmp4(x, y);
+ *out = (result == 1);
+ return result == -3 ? "i" : NULL;
+}
+
+char *test_isgreaterequal(uint32 *x, uint32 *y, uint32 *out)
+{
+ int result = fpcmp4(x, y);
+ *out = (result >= 0);
+ return result == -3 ? "i" : NULL;
+}
+
+char *test_isless(uint32 *x, uint32 *y, uint32 *out)
+{
+ int result = fpcmp4(x, y);
+ *out = (result == -1);
+ return result == -3 ? "i" : NULL;
+}
+
+char *test_islessequal(uint32 *x, uint32 *y, uint32 *out)
+{
+ int result = fpcmp4(x, y);
+ *out = (result == -1) || (result == 0);
+ return result == -3 ? "i" : NULL;
+}
+
+char *test_islessgreater(uint32 *x, uint32 *y, uint32 *out)
+{
+ int result = fpcmp4(x, y);
+ *out = (result == -1) || (result == 1);
+ return result == -3 ? "i" : NULL;
+}
+
+char *test_isunordered(uint32 *x, uint32 *y, uint32 *out)
+{
+ int normal = 0;
+ int result = fpcmp4(x, y);
+
+ test_isnormal(x, out);
+ normal |= *out;
+ test_isnormal(y, out);
+ normal |= *out;
+ *out = (result == -2) || (result == -3);
+ return result == -3 ? "i" : NULL;
+}
+
+char *test_isgreaterf(uint32 *x, uint32 *y, uint32 *out)
+{
+ int result = fpcmp4f(x, y);
+ *out = (result == 1);
+ return result == -3 ? "i" : NULL;
+}
+
+char *test_isgreaterequalf(uint32 *x, uint32 *y, uint32 *out)
+{
+ int result = fpcmp4f(x, y);
+ *out = (result >= 0);
+ return result == -3 ? "i" : NULL;
+}
+
+char *test_islessf(uint32 *x, uint32 *y, uint32 *out)
+{
+ int result = fpcmp4f(x, y);
+ *out = (result == -1);
+ return result == -3 ? "i" : NULL;
+}
+
+char *test_islessequalf(uint32 *x, uint32 *y, uint32 *out)
+{
+ int result = fpcmp4f(x, y);
+ *out = (result == -1) || (result == 0);
+ return result == -3 ? "i" : NULL;
+}
+
+char *test_islessgreaterf(uint32 *x, uint32 *y, uint32 *out)
+{
+ int result = fpcmp4f(x, y);
+ *out = (result == -1) || (result == 1);
+ return result == -3 ? "i" : NULL;
+}
+
+char *test_isunorderedf(uint32 *x, uint32 *y, uint32 *out)
+{
+ int normal = 0;
+ int result = fpcmp4f(x, y);
+
+ test_isnormalf(x, out);
+ normal |= *out;
+ test_isnormalf(y, out);
+ normal |= *out;
+ *out = (result == -2) || (result == -3);
+ return result == -3 ? "i" : NULL;
+}
diff --git a/math/test/rtest/semi.h b/math/test/rtest/semi.h
new file mode 100644
index 000000000000..17dc4158fb51
--- /dev/null
+++ b/math/test/rtest/semi.h
@@ -0,0 +1,53 @@
+/*
+ * semi.h: header for semi.c
+ *
+ * Copyright (c) 1999-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef test_semi_h
+#define test_semi_h
+
+#include "types.h"
+
+char *test_ceil(uint32 *in, uint32 *out);
+char *test_floor(uint32 *in, uint32 *out);
+char *test_fmod(uint32 *a, uint32 *b, uint32 *out);
+char *test_ldexp(uint32 *x, uint32 *n, uint32 *out);
+char *test_frexp(uint32 *x, uint32 *out, uint32 *nout);
+char *test_modf(uint32 *x, uint32 *iout, uint32 *fout);
+char *test_ceilf(uint32 *in, uint32 *out);
+char *test_floorf(uint32 *in, uint32 *out);
+char *test_fmodf(uint32 *a, uint32 *b, uint32 *out);
+char *test_ldexpf(uint32 *x, uint32 *n, uint32 *out);
+char *test_frexpf(uint32 *x, uint32 *out, uint32 *nout);
+char *test_modff(uint32 *x, uint32 *iout, uint32 *fout);
+
+char *test_copysign(uint32 *x, uint32 *y, uint32 *out);
+char *test_copysignf(uint32 *x, uint32 *y, uint32 *out);
+char *test_isfinite(uint32 *x, uint32 *out);
+char *test_isfinitef(uint32 *x, uint32 *out);
+char *test_isinf(uint32 *x, uint32 *out);
+char *test_isinff(uint32 *x, uint32 *out);
+char *test_isnan(uint32 *x, uint32 *out);
+char *test_isnanf(uint32 *x, uint32 *out);
+char *test_isnormal(uint32 *x, uint32 *out);
+char *test_isnormalf(uint32 *x, uint32 *out);
+char *test_signbit(uint32 *x, uint32 *out);
+char *test_signbitf(uint32 *x, uint32 *out);
+char *test_fpclassify(uint32 *x, uint32 *out);
+char *test_fpclassifyf(uint32 *x, uint32 *out);
+
+char *test_isgreater(uint32 *x, uint32 *y, uint32 *out);
+char *test_isgreaterequal(uint32 *x, uint32 *y, uint32 *out);
+char *test_isless(uint32 *x, uint32 *y, uint32 *out);
+char *test_islessequal(uint32 *x, uint32 *y, uint32 *out);
+char *test_islessgreater(uint32 *x, uint32 *y, uint32 *out);
+char *test_isunordered(uint32 *x, uint32 *y, uint32 *out);
+char *test_isgreaterf(uint32 *x, uint32 *y, uint32 *out);
+char *test_isgreaterequalf(uint32 *x, uint32 *y, uint32 *out);
+char *test_islessf(uint32 *x, uint32 *y, uint32 *out);
+char *test_islessequalf(uint32 *x, uint32 *y, uint32 *out);
+char *test_islessgreaterf(uint32 *x, uint32 *y, uint32 *out);
+char *test_isunorderedf(uint32 *x, uint32 *y, uint32 *out);
+#endif
diff --git a/math/test/rtest/types.h b/math/test/rtest/types.h
new file mode 100644
index 000000000000..53cd557fa4cf
--- /dev/null
+++ b/math/test/rtest/types.h
@@ -0,0 +1,25 @@
+/*
+ * types.h
+ *
+ * Copyright (c) 2005-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef mathtest_types_h
+#define mathtest_types_h
+
+#include <limits.h>
+
+#if UINT_MAX == 4294967295
+typedef unsigned int uint32;
+typedef int int32;
+#define I32 ""
+#elif ULONG_MAX == 4294967295
+typedef unsigned long uint32;
+typedef long int32;
+#define I32 "l"
+#else
+#error Could not find an unsigned 32-bit integer type
+#endif
+
+#endif
diff --git a/math/test/rtest/wrappers.c b/math/test/rtest/wrappers.c
new file mode 100644
index 000000000000..de45ac5768d0
--- /dev/null
+++ b/math/test/rtest/wrappers.c
@@ -0,0 +1,261 @@
+/*
+ * wrappers.c - wrappers to modify output of MPFR/MPC test functions
+ *
+ * Copyright (c) 2014-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <assert.h>
+#include <stddef.h>
+#include <stdint.h>
+
+#include "intern.h"
+
+void wrapper_init(wrapperctx *ctx)
+{
+ int i;
+ ctx->nops = ctx->nresults = 0;
+ for (i = 0; i < 2; i++) {
+ ctx->mpfr_ops[i] = NULL;
+ ctx->mpc_ops[i] = NULL;
+ ctx->ieee_ops[i] = NULL;
+ }
+ ctx->mpfr_result = NULL;
+ ctx->mpc_result = NULL;
+ ctx->ieee_result = NULL;
+ ctx->need_regen = 0;
+}
+
+void wrapper_op_real(wrapperctx *ctx, const mpfr_t r,
+ int size, const uint32 *ieee)
+{
+ assert(ctx->nops < 2);
+ ctx->mpfr_ops[ctx->nops] = r;
+ ctx->ieee_ops[ctx->nops] = ieee;
+ ctx->size_ops[ctx->nops] = size;
+ ctx->nops++;
+}
+
+void wrapper_op_complex(wrapperctx *ctx, const mpc_t c,
+ int size, const uint32 *ieee)
+{
+ assert(ctx->nops < 2);
+ ctx->mpc_ops[ctx->nops] = c;
+ ctx->ieee_ops[ctx->nops] = ieee;
+ ctx->size_ops[ctx->nops] = size;
+ ctx->nops++;
+}
+
+void wrapper_result_real(wrapperctx *ctx, mpfr_t r,
+ int size, uint32 *ieee)
+{
+ assert(ctx->nresults < 1);
+ ctx->mpfr_result = r;
+ ctx->ieee_result = ieee;
+ ctx->size_result = size;
+ ctx->nresults++;
+}
+
+void wrapper_result_complex(wrapperctx *ctx, mpc_t c,
+ int size, uint32 *ieee)
+{
+ assert(ctx->nresults < 1);
+ ctx->mpc_result = c;
+ ctx->ieee_result = ieee;
+ ctx->size_result = size;
+ ctx->nresults++;
+}
+
+int wrapper_run(wrapperctx *ctx, wrapperfunc wrappers[MAXWRAPPERS])
+{
+ int i;
+ for (i = 0; i < MAXWRAPPERS && wrappers[i]; i++)
+ wrappers[i](ctx);
+ universal_wrapper(ctx);
+ return ctx->need_regen;
+}
+
+mpfr_srcptr wrapper_get_mpfr(wrapperctx *ctx, int op)
+{
+ if (op < 0) {
+ assert(ctx->mpfr_result);
+ return ctx->mpfr_result;
+ } else {
+ assert(ctx->mpfr_ops[op]);
+ return ctx->mpfr_ops[op];
+ }
+}
+
+const uint32 *wrapper_get_ieee(wrapperctx *ctx, int op)
+{
+ if (op < 0) {
+ assert(ctx->mpfr_result);
+ return ctx->ieee_result;
+ } else {
+ assert(ctx->mpfr_ops[op]);
+ return ctx->ieee_ops[op];
+ }
+}
+
+int wrapper_get_nops(wrapperctx *ctx)
+{
+ return ctx->nops;
+}
+
+int wrapper_get_size(wrapperctx *ctx, int op)
+{
+ if (op < 0) {
+ assert(ctx->mpfr_result || ctx->mpc_result);
+ return ctx->size_result;
+ } else {
+ assert(ctx->mpfr_ops[op] || ctx->mpc_ops[op]);
+ return ctx->size_ops[op];
+ }
+}
+
+int wrapper_is_complex(wrapperctx *ctx, int op)
+{
+ if (op < 0) {
+ assert(ctx->mpfr_result || ctx->mpc_result);
+ return ctx->mpc_result != NULL;
+ } else {
+ assert(ctx->mpfr_ops[op] || ctx->mpc_ops[op]);
+ return ctx->mpc_ops[op] != NULL;
+ }
+}
+
+mpc_srcptr wrapper_get_mpc(wrapperctx *ctx, int op)
+{
+ if (op < 0) {
+ assert(ctx->mpc_result);
+ return ctx->mpc_result;
+ } else {
+ assert(ctx->mpc_ops[op]);
+ return ctx->mpc_ops[op];
+ }
+}
+
+mpfr_srcptr wrapper_get_mpfr_r(wrapperctx *ctx, int op)
+{
+ if (op < 0) {
+ assert(ctx->mpc_result);
+ return mpc_realref(ctx->mpc_result);
+ } else {
+ assert(ctx->mpc_ops[op]);
+ return mpc_realref(ctx->mpc_ops[op]);
+ }
+}
+
+mpfr_srcptr wrapper_get_mpfr_i(wrapperctx *ctx, int op)
+{
+ if (op < 0) {
+ assert(ctx->mpc_result);
+ return mpc_imagref(ctx->mpc_result);
+ } else {
+ assert(ctx->mpc_ops[op]);
+ return mpc_imagref(ctx->mpc_ops[op]);
+ }
+}
+
+const uint32 *wrapper_get_ieee_r(wrapperctx *ctx, int op)
+{
+ if (op < 0) {
+ assert(ctx->mpc_result);
+ return ctx->ieee_result;
+ } else {
+ assert(ctx->mpc_ops[op]);
+ return ctx->ieee_ops[op];
+ }
+}
+
+const uint32 *wrapper_get_ieee_i(wrapperctx *ctx, int op)
+{
+ if (op < 0) {
+ assert(ctx->mpc_result);
+ return ctx->ieee_result + 4;
+ } else {
+ assert(ctx->mpc_ops[op]);
+ return ctx->ieee_ops[op] + 2;
+ }
+}
+
+void wrapper_set_sign(wrapperctx *ctx, uint32 sign)
+{
+ assert(ctx->mpfr_result);
+ ctx->ieee_result[0] |= (sign & 0x80000000U);
+}
+
+void wrapper_set_sign_r(wrapperctx *ctx, uint32 sign)
+{
+ assert(ctx->mpc_result);
+ ctx->ieee_result[0] |= (sign & 0x80000000U);
+}
+
+void wrapper_set_sign_i(wrapperctx *ctx, uint32 sign)
+{
+ assert(ctx->mpc_result);
+ ctx->ieee_result[4] |= (sign & 0x80000000U);
+}
+
+void wrapper_set_nan(wrapperctx *ctx)
+{
+ assert(ctx->mpfr_result);
+ mpfr_set_nan(ctx->mpfr_result);
+ ctx->need_regen = 1;
+}
+
+void wrapper_set_nan_r(wrapperctx *ctx)
+{
+ assert(ctx->mpc_result);
+ mpfr_set_nan(mpc_realref(ctx->mpc_result)); /* FIXME: better way? */
+ ctx->need_regen = 1;
+}
+
+void wrapper_set_nan_i(wrapperctx *ctx)
+{
+ assert(ctx->mpc_result);
+ mpfr_set_nan(mpc_imagref(ctx->mpc_result)); /* FIXME: better way? */
+ ctx->need_regen = 1;
+}
+
+void wrapper_set_int(wrapperctx *ctx, int val)
+{
+ assert(ctx->mpfr_result);
+ mpfr_set_si(ctx->mpfr_result, val, GMP_RNDN);
+ ctx->need_regen = 1;
+}
+
+void wrapper_set_int_r(wrapperctx *ctx, int val)
+{
+ assert(ctx->mpc_result);
+ mpfr_set_si(mpc_realref(ctx->mpc_result), val, GMP_RNDN);
+ ctx->need_regen = 1;
+}
+
+void wrapper_set_int_i(wrapperctx *ctx, int val)
+{
+ assert(ctx->mpc_result);
+ mpfr_set_si(mpc_realref(ctx->mpc_result), val, GMP_RNDN);
+ ctx->need_regen = 1;
+}
+
+void wrapper_set_mpfr(wrapperctx *ctx, const mpfr_t val)
+{
+ assert(ctx->mpfr_result);
+ mpfr_set(ctx->mpfr_result, val, GMP_RNDN);
+ ctx->need_regen = 1;
+}
+
+void wrapper_set_mpfr_r(wrapperctx *ctx, const mpfr_t val)
+{
+ assert(ctx->mpc_result);
+ mpfr_set(mpc_realref(ctx->mpc_result), val, GMP_RNDN);
+ ctx->need_regen = 1;
+}
+
+void wrapper_set_mpfr_i(wrapperctx *ctx, const mpfr_t val)
+{
+ assert(ctx->mpc_result);
+ mpfr_set(mpc_realref(ctx->mpc_result), val, GMP_RNDN);
+ ctx->need_regen = 1;
+}
diff --git a/math/test/rtest/wrappers.h b/math/test/rtest/wrappers.h
new file mode 100644
index 000000000000..7b09c85a59f1
--- /dev/null
+++ b/math/test/rtest/wrappers.h
@@ -0,0 +1,114 @@
+/*
+ * wrappers.h - wrappers to modify output of MPFR/MPC test functions
+ *
+ * Copyright (c) 2014-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+typedef struct {
+ /* Structure type should be considered opaque outside wrappers.c,
+ * though we have to define it here so its size is known. */
+ int nops;
+ int nresults;
+ mpfr_srcptr mpfr_ops[2];
+ mpfr_ptr mpfr_result;
+ mpc_srcptr mpc_ops[2];
+ mpc_ptr mpc_result;
+ const uint32 *ieee_ops[2];
+ uint32 *ieee_result;
+ int size_ops[2];
+ int size_result;
+ int need_regen;
+} wrapperctx;
+
+typedef void (*wrapperfunc)(wrapperctx *ctx);
+#define MAXWRAPPERS 3
+
+/*
+ * Functions for the test harness to call.
+ *
+ * When the test harness executes a test function, it should
+ * initialise a wrapperctx with wrapper_init, then provide all the
+ * operands and results in both mpfr/mpc and IEEE (+ extrabits)
+ * formats via wrapper_op_* and wrapper_result_*. Then it should run
+ * the function's wrappers using wrapper_run(), and if that returns
+ * true then the primary result has been rewritten in mpfr/mpc format
+ * and it should therefore retranslate into IEEE.
+ *
+ * 'size' in all prototypes below represents an FP type by giving the
+ * number of 32-bit words it requires, so 1=float and 2=double. Input
+ * operands will be that many words (or that many for both their real
+ * and imag parts); outputs will have one extra word for 'extrabits'.
+ *
+ * This system only applies at all to reference functions using
+ * mpfr/mpc. The seminumerical functions we implement in pure IEEE
+ * form are expected to handle all their own special cases correctly.
+ */
+
+void wrapper_init(wrapperctx *ctx);
+
+/* Real operand. */
+void wrapper_op_real(wrapperctx *ctx, const mpfr_t r,
+ int size, const uint32 *ieee);
+
+/* Complex operand. Real part starts at ieee[0], the imag part at ieee[2]. */
+void wrapper_op_complex(wrapperctx *ctx, const mpc_t c,
+ int size, const uint32 *ieee);
+
+/* Real result. ieee contains size+1 words, as discussed above. */
+void wrapper_result_real(wrapperctx *ctx, mpfr_t r,
+ int size, uint32 *ieee);
+
+/* Complex result. ieee contains size+1 words of real part starting at
+ * ieee[0], and another size+1 of imag part starting at ieee[4]. */
+void wrapper_result_complex(wrapperctx *ctx, mpc_t c,
+ int size, uint32 *ieee);
+
+int wrapper_run(wrapperctx *ctx, wrapperfunc wrappers[MAXWRAPPERS]);
+
+/*
+ * Functions for wrappers to call. 'op' indicates which operand is
+ * being requested: 0,1 means first and second, and -1 means the
+ * result.
+ */
+
+mpfr_srcptr wrapper_get_mpfr(wrapperctx *ctx, int op);
+const uint32 *wrapper_get_ieee(wrapperctx *ctx, int op);
+
+mpc_srcptr wrapper_get_mpc(wrapperctx *ctx, int op);
+mpfr_srcptr wrapper_get_mpfr_r(wrapperctx *ctx, int op);
+mpfr_srcptr wrapper_get_mpfr_i(wrapperctx *ctx, int op);
+const uint32 *wrapper_get_ieee_r(wrapperctx *ctx, int op);
+const uint32 *wrapper_get_ieee_i(wrapperctx *ctx, int op);
+
+/* Query operand count + types */
+int wrapper_get_nops(wrapperctx *ctx);
+int wrapper_get_size(wrapperctx *ctx, int op);
+int wrapper_is_complex(wrapperctx *ctx, int op);
+
+/* Change just the sign of the result. Only the top bit of 'sign' is used. */
+void wrapper_set_sign(wrapperctx *ctx, uint32 sign);
+void wrapper_set_sign_r(wrapperctx *ctx, uint32 sign);
+void wrapper_set_sign_i(wrapperctx *ctx, uint32 sign);
+
+/* Set a result to NaN. */
+void wrapper_set_nan(wrapperctx *ctx);
+void wrapper_set_nan_r(wrapperctx *ctx);
+void wrapper_set_nan_i(wrapperctx *ctx);
+
+/* Set a result to an integer value (converted to the appropriate
+ * float format). */
+void wrapper_set_int(wrapperctx *ctx, int val);
+void wrapper_set_int_r(wrapperctx *ctx, int val);
+void wrapper_set_int_i(wrapperctx *ctx, int val);
+
+/* Set a result to a new MPFR float. */
+void wrapper_set_mpfr(wrapperctx *ctx, const mpfr_t val);
+void wrapper_set_mpfr_r(wrapperctx *ctx, const mpfr_t val);
+void wrapper_set_mpfr_i(wrapperctx *ctx, const mpfr_t val);
+
+/*
+ * A universal wrapper called for _all_ functions, that doesn't have
+ * to be specified individually everywhere.
+ */
+void universal_wrapper(wrapperctx *ctx);
diff --git a/math/test/runulp.sh b/math/test/runulp.sh
new file mode 100755
index 000000000000..0190d9ab27fb
--- /dev/null
+++ b/math/test/runulp.sh
@@ -0,0 +1,315 @@
+#!/bin/bash
+
+# ULP error check script.
+#
+# Copyright (c) 2019-2020, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+#set -x
+set -eu
+
+# cd to bin directory.
+cd "${0%/*}"
+
+rmodes='n u d z'
+#rmodes=n
+flags="${ULPFLAGS:--q}"
+emu="$@"
+
+FAIL=0
+PASS=0
+
+t() {
+ [ $r = "n" ] && Lt=$L || Lt=$Ldir
+ $emu ./ulp -r $r -e $Lt $flags "$@" && PASS=$((PASS+1)) || FAIL=$((FAIL+1))
+}
+
+check() {
+ $emu ./ulp -f -q "$@" >/dev/null
+}
+
+Ldir=0.5
+for r in $rmodes
+do
+L=0.01
+t exp 0 0xffff000000000000 10000
+t exp 0x1p-6 0x1p6 40000
+t exp -0x1p-6 -0x1p6 40000
+t exp 633.3 733.3 10000
+t exp -633.3 -777.3 10000
+
+L=0.01
+t exp2 0 0xffff000000000000 10000
+t exp2 0x1p-6 0x1p6 40000
+t exp2 -0x1p-6 -0x1p6 40000
+t exp2 633.3 733.3 10000
+t exp2 -633.3 -777.3 10000
+
+L=0.02
+t log 0 0xffff000000000000 10000
+t log 0x1p-4 0x1p4 40000
+t log 0 inf 40000
+
+L=0.05
+t log2 0 0xffff000000000000 10000
+t log2 0x1p-4 0x1p4 40000
+t log2 0 inf 40000
+
+L=0.05
+t pow 0.5 2.0 x 0 inf 20000
+t pow -0.5 -2.0 x 0 inf 20000
+t pow 0.5 2.0 x -0 -inf 20000
+t pow -0.5 -2.0 x -0 -inf 20000
+t pow 0.5 2.0 x 0x1p-10 0x1p10 40000
+t pow 0.5 2.0 x -0x1p-10 -0x1p10 40000
+t pow 0 inf x 0.5 2.0 80000
+t pow 0 inf x -0.5 -2.0 80000
+t pow 0x1.fp-1 0x1.08p0 x 0x1p8 0x1p17 80000
+t pow 0x1.fp-1 0x1.08p0 x -0x1p8 -0x1p17 80000
+t pow 0 0x1p-1000 x 0 1.0 50000
+t pow 0x1p1000 inf x 0 1.0 50000
+t pow 0x1.ffffffffffff0p-1 0x1.0000000000008p0 x 0x1p60 0x1p68 50000
+t pow 0x1.ffffffffff000p-1 0x1p0 x 0x1p50 0x1p52 50000
+t pow -0x1.ffffffffff000p-1 -0x1p0 x 0x1p50 0x1p52 50000
+
+L=1.0
+Ldir=0.9
+t erf 0 0xffff000000000000 10000
+t erf 0x1p-1022 0x1p-26 40000
+t erf -0x1p-1022 -0x1p-26 40000
+t erf 0x1p-26 0x1p3 40000
+t erf -0x1p-26 -0x1p3 40000
+t erf 0 inf 40000
+Ldir=0.5
+
+L=0.01
+t expf 0 0xffff0000 10000
+t expf 0x1p-14 0x1p8 50000
+t expf -0x1p-14 -0x1p8 50000
+
+L=0.01
+t exp2f 0 0xffff0000 10000
+t exp2f 0x1p-14 0x1p8 50000
+t exp2f -0x1p-14 -0x1p8 50000
+
+L=0.32
+t logf 0 0xffff0000 10000
+t logf 0x1p-4 0x1p4 50000
+t logf 0 inf 50000
+
+L=0.26
+t log2f 0 0xffff0000 10000
+t log2f 0x1p-4 0x1p4 50000
+t log2f 0 inf 50000
+
+L=0.06
+t sinf 0 0xffff0000 10000
+t sinf 0x1p-14 0x1p54 50000
+t sinf -0x1p-14 -0x1p54 50000
+
+L=0.06
+t cosf 0 0xffff0000 10000
+t cosf 0x1p-14 0x1p54 50000
+t cosf -0x1p-14 -0x1p54 50000
+
+L=0.06
+t sincosf_sinf 0 0xffff0000 10000
+t sincosf_sinf 0x1p-14 0x1p54 50000
+t sincosf_sinf -0x1p-14 -0x1p54 50000
+
+L=0.06
+t sincosf_cosf 0 0xffff0000 10000
+t sincosf_cosf 0x1p-14 0x1p54 50000
+t sincosf_cosf -0x1p-14 -0x1p54 50000
+
+L=0.4
+t powf 0x1p-1 0x1p1 x 0x1p-7 0x1p7 50000
+t powf 0x1p-1 0x1p1 x -0x1p-7 -0x1p7 50000
+t powf 0x1p-70 0x1p70 x 0x1p-1 0x1p1 50000
+t powf 0x1p-70 0x1p70 x -0x1p-1 -0x1p1 50000
+t powf 0x1.ep-1 0x1.1p0 x 0x1p8 0x1p14 50000
+t powf 0x1.ep-1 0x1.1p0 x -0x1p8 -0x1p14 50000
+
+L=0.6
+Ldir=0.9
+t erff 0 0xffff0000 10000
+t erff 0x1p-127 0x1p-26 40000
+t erff -0x1p-127 -0x1p-26 40000
+t erff 0x1p-26 0x1p3 40000
+t erff -0x1p-26 -0x1p3 40000
+t erff 0 inf 40000
+Ldir=0.5
+
+done
+
+# vector functions
+Ldir=0.5
+r='n'
+flags="${ULPFLAGS:--q} -f"
+runs=
+check __s_exp 1 && runs=1
+runv=
+check __v_exp 1 && runv=1
+runvn=
+check __vn_exp 1 && runvn=1
+
+range_exp='
+ 0 0xffff000000000000 10000
+ 0x1p-6 0x1p6 400000
+ -0x1p-6 -0x1p6 400000
+ 633.3 733.3 10000
+ -633.3 -777.3 10000
+'
+
+range_log='
+ 0 0xffff000000000000 10000
+ 0x1p-4 0x1p4 400000
+ 0 inf 400000
+'
+
+range_pow='
+ 0x1p-1 0x1p1 x 0x1p-10 0x1p10 50000
+ 0x1p-1 0x1p1 x -0x1p-10 -0x1p10 50000
+ 0x1p-500 0x1p500 x 0x1p-1 0x1p1 50000
+ 0x1p-500 0x1p500 x -0x1p-1 -0x1p1 50000
+ 0x1.ep-1 0x1.1p0 x 0x1p8 0x1p16 50000
+ 0x1.ep-1 0x1.1p0 x -0x1p8 -0x1p16 50000
+'
+
+range_sin='
+ 0 0xffff000000000000 10000
+ 0x1p-4 0x1p4 400000
+ -0x1p-23 0x1p23 400000
+'
+range_cos="$range_sin"
+
+range_expf='
+ 0 0xffff0000 10000
+ 0x1p-14 0x1p8 500000
+ -0x1p-14 -0x1p8 500000
+'
+
+range_expf_1u="$range_expf"
+range_exp2f="$range_expf"
+range_exp2f_1u="$range_expf"
+
+range_logf='
+ 0 0xffff0000 10000
+ 0x1p-4 0x1p4 500000
+'
+
+range_sinf='
+ 0 0xffff0000 10000
+ 0x1p-4 0x1p4 300000
+-0x1p-9 -0x1p9 300000
+'
+range_cosf="$range_sinf"
+
+range_powf='
+ 0x1p-1 0x1p1 x 0x1p-7 0x1p7 50000
+ 0x1p-1 0x1p1 x -0x1p-7 -0x1p7 50000
+ 0x1p-70 0x1p70 x 0x1p-1 0x1p1 50000
+ 0x1p-70 0x1p70 x -0x1p-1 -0x1p1 50000
+ 0x1.ep-1 0x1.1p0 x 0x1p8 0x1p14 50000
+ 0x1.ep-1 0x1.1p0 x -0x1p8 -0x1p14 50000
+'
+
+# error limits
+L_exp=1.9
+L_log=1.2
+L_pow=0.05
+L_sin=3.0
+L_cos=3.0
+L_expf=1.49
+L_expf_1u=0.4
+L_exp2f=1.49
+L_exp2f_1u=0.4
+L_logf=2.9
+L_sinf=1.4
+L_cosf=1.4
+L_powf=2.1
+
+while read G F R
+do
+ [ "$R" = 1 ] || continue
+ case "$G" in \#*) continue ;; esac
+ eval range="\${range_$G}"
+ eval L="\${L_$G}"
+ while read X
+ do
+ [ -n "$X" ] || continue
+ case "$X" in \#*) continue ;; esac
+ t $F $X
+ done << EOF
+$range
+EOF
+done << EOF
+# group symbol run
+exp __s_exp $runs
+exp __v_exp $runv
+exp __vn_exp $runvn
+exp _ZGVnN2v_exp $runvn
+
+log __s_log $runs
+log __v_log $runv
+log __vn_log $runvn
+log _ZGVnN2v_log $runvn
+
+pow __s_pow $runs
+pow __v_pow $runv
+pow __vn_pow $runvn
+pow _ZGVnN2vv_pow $runvn
+
+sin __s_sin $runs
+sin __v_sin $runv
+sin __vn_sin $runvn
+sin _ZGVnN2v_sin $runvn
+
+cos __s_cos $runs
+cos __v_cos $runv
+cos __vn_cos $runvn
+cos _ZGVnN2v_cos $runvn
+
+expf __s_expf $runs
+expf __v_expf $runv
+expf __vn_expf $runvn
+expf _ZGVnN4v_expf $runvn
+
+expf_1u __s_expf_1u $runs
+expf_1u __v_expf_1u $runv
+expf_1u __vn_expf_1u $runvn
+
+exp2f __s_exp2f $runs
+exp2f __v_exp2f $runv
+exp2f __vn_exp2f $runvn
+exp2f _ZGVnN4v_exp2f $runvn
+
+exp2f_1u __s_exp2f_1u $runs
+exp2f_1u __v_exp2f_1u $runv
+exp2f_1u __vn_exp2f_1u $runvn
+
+logf __s_logf $runs
+logf __v_logf $runv
+logf __vn_logf $runvn
+logf _ZGVnN4v_logf $runvn
+
+sinf __s_sinf $runs
+sinf __v_sinf $runv
+sinf __vn_sinf $runvn
+sinf _ZGVnN4v_sinf $runvn
+
+cosf __s_cosf $runs
+cosf __v_cosf $runv
+cosf __vn_cosf $runvn
+cosf _ZGVnN4v_cosf $runvn
+
+powf __s_powf $runs
+powf __v_powf $runv
+powf __vn_powf $runvn
+powf _ZGVnN4vv_powf $runvn
+EOF
+
+[ 0 -eq $FAIL ] || {
+ echo "FAILED $FAIL PASSED $PASS"
+ exit 1
+}
diff --git a/math/test/testcases/directed/cosf.tst b/math/test/testcases/directed/cosf.tst
new file mode 100644
index 000000000000..79160443f099
--- /dev/null
+++ b/math/test/testcases/directed/cosf.tst
@@ -0,0 +1,25 @@
+; cosf.tst - Directed test cases for SP cosine
+;
+; Copyright (c) 2007-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=cosf op1=7fc00001 result=7fc00001 errno=0
+func=cosf op1=ffc00001 result=7fc00001 errno=0
+func=cosf op1=7f800001 result=7fc00001 errno=0 status=i
+func=cosf op1=ff800001 result=7fc00001 errno=0 status=i
+func=cosf op1=7f800000 result=7fc00001 errno=EDOM status=i
+func=cosf op1=ff800000 result=7fc00001 errno=EDOM status=i
+func=cosf op1=00000000 result=3f800000 errno=0
+func=cosf op1=80000000 result=3f800000 errno=0
+; SDCOMP-26094: check cosf in the cases for which the range reducer
+; returns values furthest beyond its nominal upper bound of pi/4.
+func=cosf op1=46427f1b result=3f34dc5c.565 error=0
+func=cosf op1=4647e568 result=3f34dc33.c1f error=0
+func=cosf op1=46428bac result=bf34dbf2.8e3 error=0
+func=cosf op1=4647f1f9 result=bf34dbc9.f9b error=0
+func=cosf op1=4647fe8a result=3f34db60.313 error=0
+func=cosf op1=45d8d7f1 result=bf35006a.7fd error=0
+func=cosf op1=45d371a4 result=3f350056.39b error=0
+func=cosf op1=45ce0b57 result=bf350041.f38 error=0
+func=cosf op1=45d35882 result=bf34ffec.868 error=0
+func=cosf op1=45cdf235 result=3f34ffd8.404 error=0
diff --git a/math/test/testcases/directed/erf.tst b/math/test/testcases/directed/erf.tst
new file mode 100644
index 000000000000..7fa4d1868c0e
--- /dev/null
+++ b/math/test/testcases/directed/erf.tst
@@ -0,0 +1,17 @@
+; erf.tst - Directed test cases for erf
+;
+; Copyright (c) 2007-2020, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=erf op1=7ff80000.00000001 result=7ff80000.00000001 errno=0
+func=erf op1=fff80000.00000001 result=7ff80000.00000001 errno=0
+func=erf op1=7ff00000.00000001 result=7ff80000.00000001 errno=0 status=i
+func=erf op1=fff00000.00000001 result=7ff80000.00000001 errno=0 status=i
+func=erf op1=7ff00000.00000000 result=3ff00000.00000000 errno=0
+func=erf op1=fff00000.00000000 result=bff00000.00000000 errno=0
+func=erf op1=00000000.00000000 result=00000000.00000000 errno=ERANGE
+func=erf op1=80000000.00000000 result=80000000.00000000 errno=ERANGE
+func=erf op1=00000000.00000001 result=00000000.00000001 errno=0 status=ux
+func=erf op1=80000000.00000001 result=80000000.00000001 errno=0 status=ux
+func=erf op1=3ff00000.00000000 result=3feaf767.a741088a.c6d errno=0
+func=erf op1=bff00000.00000000 result=bfeaf767.a741088a.c6d errno=0
diff --git a/math/test/testcases/directed/erff.tst b/math/test/testcases/directed/erff.tst
new file mode 100644
index 000000000000..d05b7b1119c4
--- /dev/null
+++ b/math/test/testcases/directed/erff.tst
@@ -0,0 +1,17 @@
+; erff.tst
+;
+; Copyright (c) 2007-2020, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=erff op1=7fc00001 result=7fc00001 errno=0
+func=erff op1=ffc00001 result=7fc00001 errno=0
+func=erff op1=7f800001 result=7fc00001 errno=0 status=i
+func=erff op1=ff800001 result=7fc00001 errno=0 status=i
+func=erff op1=7f800000 result=3f800000 errno=0
+func=erff op1=ff800000 result=bf800000 errno=0
+func=erff op1=00000000 result=00000000 errno=ERANGE
+func=erff op1=80000000 result=80000000 errno=ERANGE
+func=erff op1=00000001 result=00000001 errno=0 status=ux
+func=erff op1=80000001 result=80000001 errno=0 status=ux
+func=erff op1=3f800000 result=3f57bb3d.3a0 errno=0
+func=erff op1=bf800000 result=bf57bb3d.3a0 errno=0
diff --git a/math/test/testcases/directed/exp.tst b/math/test/testcases/directed/exp.tst
new file mode 100644
index 000000000000..85d556cd1e00
--- /dev/null
+++ b/math/test/testcases/directed/exp.tst
@@ -0,0 +1,31 @@
+; Directed test cases for exp
+;
+; Copyright (c) 2018-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=exp op1=7ff80000.00000001 result=7ff80000.00000001 errno=0
+func=exp op1=fff80000.00000001 result=7ff80000.00000001 errno=0
+func=exp op1=7ff00000.00000001 result=7ff80000.00000001 errno=0 status=i
+func=exp op1=fff00000.00000001 result=7ff80000.00000001 errno=0 status=i
+func=exp op1=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=exp op1=fff00000.00000000 result=00000000.00000000 errno=0
+func=exp op1=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=ox
+func=exp op1=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=ux
+func=exp op1=00000000.00000000 result=3ff00000.00000000 errno=0
+func=exp op1=80000000.00000000 result=3ff00000.00000000 errno=0
+func=exp op1=00000000.00000001 result=3ff00000.00000000 errno=0
+func=exp op1=80000000.00000001 result=3ff00000.00000000 errno=0
+func=exp op1=3c900000.00000000 result=3ff00000.00000000.400 errno=0
+func=exp op1=bc900000.00000000 result=3fefffff.ffffffff.800 errno=0
+func=exp op1=3fe00000.00000000 result=3ffa6129.8e1e069b.c97 errno=0
+func=exp op1=bfe00000.00000000 result=3fe368b2.fc6f9609.fe8 errno=0
+func=exp op1=3ff00000.00000000 result=4005bf0a.8b145769.535 errno=0
+func=exp op1=bff00000.00000000 result=3fd78b56.362cef37.c6b errno=0
+func=exp op1=40000000.00000000 result=401d8e64.b8d4ddad.cc3 errno=0
+func=exp op1=c0000000.00000000 result=3fc152aa.a3bf81cb.9fe errno=0
+func=exp op1=3ff12345.6789abcd result=40075955.c34718ed.6e3 errno=0
+func=exp op1=40862e42.fefa39ef result=7fefffff.ffffff2a.1b1 errno=0
+func=exp op1=40862e42.fefa39f0 result=7ff00000.00000000 errno=ERANGE status=ox
+func=exp op1=c0874910.d52d3051 result=00000000.00000001 status=ux
+func=exp op1=c0874910.d52d3052 result=00000000.00000000 errno=ERANGE status=ux
+func=exp op1=c085d589.f2fe5107 result=00f00000.000000f1.46b errno=0
diff --git a/math/test/testcases/directed/exp2.tst b/math/test/testcases/directed/exp2.tst
new file mode 100644
index 000000000000..fa56c9f8be4b
--- /dev/null
+++ b/math/test/testcases/directed/exp2.tst
@@ -0,0 +1,30 @@
+; Directed test cases for exp2
+;
+; Copyright (c) 2018-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=exp2 op1=7ff80000.00000001 result=7ff80000.00000001 errno=0
+func=exp2 op1=fff80000.00000001 result=7ff80000.00000001 errno=0
+func=exp2 op1=7ff00000.00000001 result=7ff80000.00000001 errno=0 status=i
+func=exp2 op1=fff00000.00000001 result=7ff80000.00000001 errno=0 status=i
+func=exp2 op1=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=exp2 op1=fff00000.00000000 result=00000000.00000000 errno=0
+func=exp2 op1=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=ox
+func=exp2 op1=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=ux
+func=exp2 op1=00000000.00000000 result=3ff00000.00000000 errno=0
+func=exp2 op1=80000000.00000000 result=3ff00000.00000000 errno=0
+func=exp2 op1=00000000.00000001 result=3ff00000.00000000 errno=0
+func=exp2 op1=80000000.00000001 result=3ff00000.00000000 errno=0
+func=exp2 op1=3ca00000.00000000 result=3ff00000.00000000.58c errno=0
+func=exp2 op1=bc900000.00000000 result=3fefffff.ffffffff.a74 errno=0
+func=exp2 op1=3fe00000.00000000 result=3ff6a09e.667f3bcc.909 errno=0
+func=exp2 op1=bfe00000.00000000 result=3fe6a09e.667f3bcc.909 errno=0
+func=exp2 op1=3ff00000.00000000 result=40000000.00000000 errno=0
+func=exp2 op1=bff00000.00000000 result=3fe00000.00000000 errno=0
+func=exp2 op1=40000000.00000000 result=40100000.00000000 errno=0
+func=exp2 op1=c0000000.00000000 result=3fd00000.00000000 errno=0
+func=exp2 op1=3ff12345.6789abcd result=4000cef3.c5d12321.663 errno=0
+func=exp2 op1=408fffff.ffffffff result=7fefffff.fffffd3a.37a errno=0
+func=exp2 op1=40900000.00000000 result=7ff00000.00000000 errno=ERANGE status=ox
+func=exp2 op1=c090ca00.00000000 result=00000000.00000000.b50 status=ux
+func=exp2 op1=c090cc00.00000000 result=00000000.00000000 errno=ERANGE status=ux
diff --git a/math/test/testcases/directed/exp2f.tst b/math/test/testcases/directed/exp2f.tst
new file mode 100644
index 000000000000..38cfc3f78ac6
--- /dev/null
+++ b/math/test/testcases/directed/exp2f.tst
@@ -0,0 +1,25 @@
+; exp2f.tst - Directed test cases for exp2f
+;
+; Copyright (c) 2017-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=exp2f op1=7fc00001 result=7fc00001 errno=0
+func=exp2f op1=ffc00001 result=7fc00001 errno=0
+func=exp2f op1=7f800001 result=7fc00001 errno=0 status=i
+func=exp2f op1=ff800001 result=7fc00001 errno=0 status=i
+func=exp2f op1=7f800000 result=7f800000 errno=0
+func=exp2f op1=7f7fffff result=7f800000 errno=ERANGE status=ox
+func=exp2f op1=ff800000 result=00000000 errno=0
+func=exp2f op1=ff7fffff result=00000000 errno=ERANGE status=ux
+func=exp2f op1=00000000 result=3f800000 errno=0
+func=exp2f op1=80000000 result=3f800000 errno=0
+func=exp2f op1=42fa0001 result=7e00002c.5c8 errno=0
+func=exp2f op1=42ffffff result=7f7fffa7.470 errno=0
+func=exp2f op1=43000000 result=7f800000 errno=ERANGE status=ox
+func=exp2f op1=43000001 result=7f800000 errno=ERANGE status=ox
+func=exp2f op1=c2fa0001 result=00ffffa7.470 errno=0
+func=exp2f op1=c2fc0000 result=00800000 errno=0
+func=exp2f op1=c2fc0001 result=007fffd3.a38 errno=0 status=ux
+func=exp2f op1=c3150000 result=00000001 errno=0
+func=exp2f op1=c3158000 result=00000000.800 errno=ERANGE status=ux
+func=exp2f op1=c3165432 result=00000000.4bd errno=ERANGE status=ux
diff --git a/math/test/testcases/directed/expf.tst b/math/test/testcases/directed/expf.tst
new file mode 100644
index 000000000000..ff0f671c2656
--- /dev/null
+++ b/math/test/testcases/directed/expf.tst
@@ -0,0 +1,23 @@
+; expf.tst - Directed test cases for expf
+;
+; Copyright (c) 2007-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=expf op1=7fc00001 result=7fc00001 errno=0
+func=expf op1=ffc00001 result=7fc00001 errno=0
+func=expf op1=7f800001 result=7fc00001 errno=0 status=i
+func=expf op1=ff800001 result=7fc00001 errno=0 status=i
+func=expf op1=7f800000 result=7f800000 errno=0
+func=expf op1=7f7fffff result=7f800000 errno=ERANGE status=ox
+func=expf op1=ff800000 result=00000000 errno=0
+func=expf op1=ff7fffff result=00000000 errno=ERANGE status=ux
+func=expf op1=00000000 result=3f800000 errno=0
+func=expf op1=80000000 result=3f800000 errno=0
+func=expf op1=42affff8 result=7ef87ed4.e0c errno=0
+func=expf op1=42b00008 result=7ef88698.f67 errno=0
+func=expf op1=42cffff8 result=7f800000 errno=ERANGE status=ox
+func=expf op1=42d00008 result=7f800000 errno=ERANGE status=ox
+func=expf op1=c2affff8 result=0041eecc.041 errno=0 status=ux
+func=expf op1=c2b00008 result=0041ecbc.95e errno=0 status=ux
+func=expf op1=c2cffff8 result=00000000 errno=ERANGE status=ux
+func=expf op1=c2d00008 result=00000000 errno=ERANGE status=ux
diff --git a/math/test/testcases/directed/log.tst b/math/test/testcases/directed/log.tst
new file mode 100644
index 000000000000..a0aa398cbf73
--- /dev/null
+++ b/math/test/testcases/directed/log.tst
@@ -0,0 +1,21 @@
+; Directed test cases for log
+;
+; Copyright (c) 2018-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=log op1=7ff80000.00000001 result=7ff80000.00000001 errno=0
+func=log op1=fff80000.00000001 result=7ff80000.00000001 errno=0
+func=log op1=7ff00000.00000001 result=7ff80000.00000001 errno=0 status=i
+func=log op1=fff00000.00000001 result=7ff80000.00000001 errno=0 status=i
+func=log op1=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=log op1=fff00000.00000000 result=7ff80000.00000001 errno=EDOM status=i
+func=log op1=7fefffff.ffffffff result=40862e42.fefa39ef.354 errno=0
+func=log op1=ffefffff.ffffffff result=7ff80000.00000001 errno=EDOM status=i
+func=log op1=3ff00000.00000000 result=00000000.00000000 errno=0
+func=log op1=bff00000.00000000 result=7ff80000.00000001 errno=EDOM status=i
+func=log op1=00000000.00000000 result=fff00000.00000000 errno=ERANGE status=z
+func=log op1=80000000.00000000 result=fff00000.00000000 errno=ERANGE status=z
+func=log op1=00000000.00000001 result=c0874385.446d71c3.639 errno=0
+func=log op1=80000000.00000001 result=7ff80000.00000001 errno=EDOM status=i
+func=log op1=40000000.00000000 result=3fe62e42.fefa39ef.358 errno=0
+func=log op1=3fe00000.00000000 result=bfe62e42.fefa39ef.358 errno=0
diff --git a/math/test/testcases/directed/log2.tst b/math/test/testcases/directed/log2.tst
new file mode 100644
index 000000000000..ff1286cbd53e
--- /dev/null
+++ b/math/test/testcases/directed/log2.tst
@@ -0,0 +1,21 @@
+; Directed test cases for log2
+;
+; Copyright (c) 2018-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=log2 op1=7ff80000.00000001 result=7ff80000.00000001 errno=0
+func=log2 op1=fff80000.00000001 result=7ff80000.00000001 errno=0
+func=log2 op1=7ff00000.00000001 result=7ff80000.00000001 errno=0 status=i
+func=log2 op1=fff00000.00000001 result=7ff80000.00000001 errno=0 status=i
+func=log2 op1=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=log2 op1=fff00000.00000000 result=7ff80000.00000001 errno=EDOM status=i
+func=log2 op1=7fefffff.ffffffff result=408fffff.ffffffff.ffa errno=0
+func=log2 op1=ffefffff.ffffffff result=7ff80000.00000001 errno=EDOM status=i
+func=log2 op1=3ff00000.00000000 result=00000000.00000000 errno=0
+func=log2 op1=bff00000.00000000 result=7ff80000.00000001 errno=EDOM status=i
+func=log2 op1=00000000.00000000 result=fff00000.00000000 errno=ERANGE status=z
+func=log2 op1=80000000.00000000 result=fff00000.00000000 errno=ERANGE status=z
+func=log2 op1=00000000.00000001 result=c090c800.00000000 errno=0
+func=log2 op1=80000000.00000001 result=7ff80000.00000001 errno=EDOM status=i
+func=log2 op1=40000000.00000000 result=3ff00000.00000000 errno=0
+func=log2 op1=3fe00000.00000000 result=bff00000.00000000 errno=0
diff --git a/math/test/testcases/directed/log2f.tst b/math/test/testcases/directed/log2f.tst
new file mode 100644
index 000000000000..5832c4f08f1e
--- /dev/null
+++ b/math/test/testcases/directed/log2f.tst
@@ -0,0 +1,27 @@
+; log2f.tst - Directed test cases for log2f
+;
+; Copyright (c) 2017-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=log2f op1=7fc00001 result=7fc00001 errno=0
+func=log2f op1=ffc00001 result=7fc00001 errno=0
+func=log2f op1=7f800001 result=7fc00001 errno=0 status=i
+func=log2f op1=ff800001 result=7fc00001 errno=0 status=i
+func=log2f op1=ff810000 result=7fc00001 errno=0 status=i
+func=log2f op1=7f800000 result=7f800000 errno=0
+func=log2f op1=ff800000 result=7fc00001 errno=EDOM status=i
+func=log2f op1=3f800000 result=00000000 errno=0
+func=log2f op1=00000000 result=ff800000 errno=ERANGE status=z
+func=log2f op1=80000000 result=ff800000 errno=ERANGE status=z
+func=log2f op1=80000001 result=7fc00001 errno=EDOM status=i
+
+func=log2f op1=3f7d70a4 result=bc6d8f8b.7d4 error=0
+func=log2f op1=3f604189 result=be4394c8.395 error=0
+func=log2f op1=3f278034 result=bf1caa73.88e error=0
+func=log2f op1=3edd3c36 result=bf9af3b9.619 error=0
+func=log2f op1=3e61259a result=c00bdb95.650 error=0
+func=log2f op1=3f8147ae result=3c6b3267.d6a error=0
+func=log2f op1=3f8fbe77 result=3e2b5fe2.a1c error=0
+func=log2f op1=3fac3eea result=3edb4d5e.1fc error=0
+func=log2f op1=3fd6e632 result=3f3f5d3a.827 error=0
+func=log2f op1=40070838 result=3f89e055.a0a error=0
diff --git a/math/test/testcases/directed/logf.tst b/math/test/testcases/directed/logf.tst
new file mode 100644
index 000000000000..6e68a36e0f6a
--- /dev/null
+++ b/math/test/testcases/directed/logf.tst
@@ -0,0 +1,69 @@
+; logf.tst - Directed test cases for logf
+;
+; Copyright (c) 2007-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=logf op1=7fc00001 result=7fc00001 errno=0
+func=logf op1=ffc00001 result=7fc00001 errno=0
+func=logf op1=7f800001 result=7fc00001 errno=0 status=i
+func=logf op1=ff800001 result=7fc00001 errno=0 status=i
+func=logf op1=ff810000 result=7fc00001 errno=0 status=i
+func=logf op1=7f800000 result=7f800000 errno=0
+func=logf op1=ff800000 result=7fc00001 errno=EDOM status=i
+func=logf op1=3f800000 result=00000000 errno=0
+func=logf op1=00000000 result=ff800000 errno=ERANGE status=z
+func=logf op1=80000000 result=ff800000 errno=ERANGE status=z
+func=logf op1=80000001 result=7fc00001 errno=EDOM status=i
+
+; Directed tests for the special-case handling of log of things
+; very near 1
+func=logf op1=3f781e49 result=bd0016d9.4ae error=0
+func=logf op1=3f78e602 result=bce675e5.f31 error=0
+func=logf op1=3f844a18 result=3d07030e.ae1 error=0
+func=logf op1=3f79b55b result=bccbd88a.6cb error=0
+func=logf op1=3f7e2f5f result=bbe92452.74a error=0
+func=logf op1=3f7f1c03 result=bb6462c1.c2c error=0
+func=logf op1=3f78b213 result=bced23e2.f56 error=0
+func=logf op1=3f87d5c0 result=3d735847.b7a error=0
+func=logf op1=3f7fa6ad result=bab2c532.12d error=0
+func=logf op1=3f87c06a result=3d70d4b6.b5e error=0
+func=logf op1=3f79cf30 result=bcc88942.6e9 error=0
+func=logf op1=3f794c77 result=bcd94c6f.b1e error=0
+func=logf op1=3f835655 result=3cd2d8a0.0bf error=0
+func=logf op1=3f81b5c0 result=3c596d08.520 error=0
+func=logf op1=3f805e2f result=3b3c18d4.d2b error=0
+func=logf op1=3f7aa609 result=bcad0f90.fdb error=0
+func=logf op1=3f7a9091 result=bcafcd59.f83 error=0
+func=logf op1=3f7a7475 result=bcb36490.a0f error=0
+func=logf op1=3f823417 result=3c8bd287.fa6 error=0
+func=logf op1=3f7fbcc3 result=ba868bac.14c error=0
+func=logf op1=3f805fc9 result=3b3f4a76.169 error=0
+func=logf op1=3f833d43 result=3cccbc4f.cb7 error=0
+func=logf op1=3f7cb1de result=bc54e91e.6b5 error=0
+func=logf op1=3f7f2793 result=bb58c8af.bfc error=0
+func=logf op1=3f7bb8c3 result=bc8a0fc9.93c error=0
+func=logf op1=3f81d349 result=3c67fe09.42e error=0
+func=logf op1=3f7c254d result=bc788cf4.610 error=0
+func=logf op1=3f7f789d result=bb0786d9.6c6 error=0
+func=logf op1=3f7ed1f2 result=bb97605f.963 error=0
+func=logf op1=3f826067 result=3c96b4af.5e1 error=0
+func=logf op1=3f821a68 result=3c8581f9.dac error=0
+func=logf op1=3f864e1a result=3d44f368.e66 error=0
+func=logf op1=3f7fea3d result=b9ae1f66.b58 error=0
+func=logf op1=3f7cf4f5 result=bc43ed76.1c5 error=0
+func=logf op1=3f84c223 result=3d15814e.36d error=0
+func=logf op1=3f7dae6d result=bc1511d5.0aa error=0
+func=logf op1=3f7c0a3c result=bc7f6c0d.758 error=0
+func=logf op1=3f858b22 result=3d2da861.f36 error=0
+func=logf op1=3f85d7c7 result=3d36d490.ee9 error=0
+func=logf op1=3f7f2109 result=bb5f5851.2ed error=0
+func=logf op1=3f83809c result=3cdd23f7.6b1 error=0
+func=logf op1=3f83d96e result=3cf2b9c8.0b1 error=0
+func=logf op1=3f86ca84 result=3d53bee8.53f error=0
+func=logf op1=3f83548e result=3cd269c3.39d error=0
+func=logf op1=3f7c199c result=bc7b84b6.0da error=0
+func=logf op1=3f83133f result=3cc27c0a.9dd error=0
+func=logf op1=3f7c97b4 result=bc5b89dd.399 error=0
+func=logf op1=3f810bc1 result=3c05553c.011 error=0
+func=logf op1=3f7dadb8 result=bc153f7e.fbb error=0
+func=logf op1=3f87be56 result=3d709602.538 error=0
diff --git a/math/test/testcases/directed/pow.tst b/math/test/testcases/directed/pow.tst
new file mode 100644
index 000000000000..19665817153d
--- /dev/null
+++ b/math/test/testcases/directed/pow.tst
@@ -0,0 +1,1418 @@
+; Directed test cases for pow
+;
+; Copyright (c) 2018-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=pow op1=00000000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=00000000.00000001 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=00100000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=1fffffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=3bdfffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=3be00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=3fe00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=3ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=40000000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=40080000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=40120000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=40180000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=407ff800.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=408ff800.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=43dfffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=43e00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=7fefffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=00000000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=80000000.00000001 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=80100000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=9fffffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=bbdfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=bbe00000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=bfe00000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=bff00000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=c0000000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=c0080000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=c0120000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=c0180000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=c07f3000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=c090ce00.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=00000000.00000000 op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=00000000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=00000000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=3bdfffff.ffffffff result=3fefffff.ffffffff.d17 errno=0
+func=pow op1=00000000.00000001 op2=3be00000.00000000 result=3fefffff.ffffffff.d17 errno=0
+func=pow op1=00000000.00000001 op2=3fe00000.00000000 result=1e600000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=3ff00000.00000000 result=00000000.00000001 errno=0 status=u
+func=pow op1=00000000.00000001 op2=40000000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00000000.00000001 op2=40080000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00000000.00000001 op2=40120000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00000000.00000001 op2=40180000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00000000.00000001 op2=407ff800.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00000000.00000001 op2=408ff800.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00000000.00000001 op2=43dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00000000.00000001 op2=43e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00000000.00000001 op2=7fefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00000000.00000001 op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=00000000.00000001 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=bbdfffff.ffffffff result=3ff00000.00000000.174 errno=0
+func=pow op1=00000000.00000001 op2=bbe00000.00000000 result=3ff00000.00000000.174 errno=0
+func=pow op1=00000000.00000001 op2=bfe00000.00000000 result=61800000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=bff00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00000000.00000001 op2=c0000000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00000000.00000001 op2=c0080000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00000000.00000001 op2=c0120000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00000000.00000001 op2=c0180000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00000000.00000001 op2=c07f3000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00000000.00000001 op2=c090ce00.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00000000.00000001 op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00000000.00000001 op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00000000.00000001 op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00000000.00000001 op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=00000000.00000001 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=00000000.00000001 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=3bdfffff.ffffffff result=3fefffff.ffffffff.d3b errno=0
+func=pow op1=00100000.00000000 op2=3be00000.00000000 result=3fefffff.ffffffff.d3b errno=0
+func=pow op1=00100000.00000000 op2=3fe00000.00000000 result=20000000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=3ff00000.00000000 result=00100000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=40000000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00100000.00000000 op2=40080000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00100000.00000000 op2=40120000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00100000.00000000 op2=40180000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00100000.00000000 op2=407ff800.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00100000.00000000 op2=408ff800.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00100000.00000000 op2=43dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00100000.00000000 op2=43e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00100000.00000000 op2=7fefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=00100000.00000000 op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=00100000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=bbdfffff.ffffffff result=3ff00000.00000000.162 errno=0
+func=pow op1=00100000.00000000 op2=bbe00000.00000000 result=3ff00000.00000000.162 errno=0
+func=pow op1=00100000.00000000 op2=bfe00000.00000000 result=5fe00000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=bff00000.00000000 result=7fd00000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=c0000000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00100000.00000000 op2=c0080000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00100000.00000000 op2=c0120000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00100000.00000000 op2=c0180000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00100000.00000000 op2=c07f3000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00100000.00000000 op2=c090ce00.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00100000.00000000 op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00100000.00000000 op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00100000.00000000 op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=00100000.00000000 op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=00100000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=00100000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=3bdfffff.ffffffff result=3fefffff.ffffffff.e9d errno=0
+func=pow op1=1fffffff.ffffffff op2=3be00000.00000000 result=3fefffff.ffffffff.e9d errno=0
+func=pow op1=1fffffff.ffffffff op2=3fe00000.00000000 result=2ff6a09e.667f3bcc.360 errno=0
+func=pow op1=1fffffff.ffffffff op2=3ff00000.00000000 result=1fffffff.ffffffff errno=0
+func=pow op1=1fffffff.ffffffff op2=40000000.00000000 result=000fffff.ffffffff errno=0 status=u
+func=pow op1=1fffffff.ffffffff op2=40080000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=1fffffff.ffffffff op2=40120000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=1fffffff.ffffffff op2=40180000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=1fffffff.ffffffff op2=407ff800.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=1fffffff.ffffffff op2=408ff800.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=1fffffff.ffffffff op2=43dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=1fffffff.ffffffff op2=43e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=1fffffff.ffffffff op2=7fefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=1fffffff.ffffffff op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=1fffffff.ffffffff op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=bbdfffff.ffffffff result=3ff00000.00000000.0b1 errno=0
+func=pow op1=1fffffff.ffffffff op2=bbe00000.00000000 result=3ff00000.00000000.0b1 errno=0
+func=pow op1=1fffffff.ffffffff op2=bfe00000.00000000 result=4fe6a09e.667f3bcc.eb0 errno=0
+func=pow op1=1fffffff.ffffffff op2=bff00000.00000000 result=5fe00000.00000000.800 errno=0
+func=pow op1=1fffffff.ffffffff op2=c0000000.00000000 result=7fd00000.00000001 errno=0
+func=pow op1=1fffffff.ffffffff op2=c0080000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=1fffffff.ffffffff op2=c0120000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=1fffffff.ffffffff op2=c0180000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=1fffffff.ffffffff op2=c07f3000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=1fffffff.ffffffff op2=c090ce00.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=1fffffff.ffffffff op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=1fffffff.ffffffff op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=1fffffff.ffffffff op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=1fffffff.ffffffff op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=1fffffff.ffffffff op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=1fffffff.ffffffff op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=3bdfffff.ffffffff result=3fefffff.ffffffff.fff errno=0
+func=pow op1=3fe00000.00000000 op2=3be00000.00000000 result=3fefffff.ffffffff.fff errno=0
+func=pow op1=3fe00000.00000000 op2=3fe00000.00000000 result=3fe6a09e.667f3bcc.908 errno=0
+func=pow op1=3fe00000.00000000 op2=3ff00000.00000000 result=3fe00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=40000000.00000000 result=3fd00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=40080000.00000000 result=3fc00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=40120000.00000000 result=3fa6a09e.667f3bcc.908 errno=0
+func=pow op1=3fe00000.00000000 op2=40180000.00000000 result=3f900000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=407ff800.00000000 result=1ff6a09e.667f3bcc.908 errno=0
+func=pow op1=3fe00000.00000000 op2=408ff800.00000000 result=00080000.00000000 errno=0 status=u
+func=pow op1=3fe00000.00000000 op2=43dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3fe00000.00000000 op2=43e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3fe00000.00000000 op2=7fefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3fe00000.00000000 op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3fe00000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=bbdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=bbe00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=bfe00000.00000000 result=3ff6a09e.667f3bcc.908 errno=0
+func=pow op1=3fe00000.00000000 op2=bff00000.00000000 result=40000000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=c0000000.00000000 result=40100000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=c0080000.00000000 result=40200000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=c0120000.00000000 result=4036a09e.667f3bcc.908 errno=0
+func=pow op1=3fe00000.00000000 op2=c0180000.00000000 result=40500000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=c07f3000.00000000 result=5f200000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=c090ce00.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3fe00000.00000000 op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3fe00000.00000000 op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3fe00000.00000000 op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3fe00000.00000000 op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=3fe00000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3fe00000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=3bdfffff.ffffffff result=3fefffff.ffffffff.fff errno=0
+func=pow op1=3fef9800.00000000 op2=3be00000.00000000 result=3fefffff.ffffffff.fff errno=0
+func=pow op1=3fef9800.00000000 op2=3fe00000.00000000 result=3fefcbd5.7acb4a6e.860 errno=0
+func=pow op1=3fef9800.00000000 op2=3ff00000.00000000 result=3fef9800.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=40000000.00000000 result=3fef3152.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=40080000.00000000 result=3feecbf1.b5800000 errno=0
+func=pow op1=3fef9800.00000000 op2=40120000.00000000 result=3fee3649.b95eb051.74b errno=0
+func=pow op1=3fef9800.00000000 op2=40180000.00000000 result=3feda378.fe2081dd.720 errno=0
+func=pow op1=3fef9800.00000000 op2=407ff800.00000000 result=3f57c7a0.fdc7f7ec.294 errno=0
+func=pow op1=3fef9800.00000000 op2=408ff800.00000000 result=3ec1abd4.ca4dcd2b.5aa errno=0
+func=pow op1=3fef9800.00000000 op2=43dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3fef9800.00000000 op2=43e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3fef9800.00000000 op2=7fefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3fef9800.00000000 op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3fef9800.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=bbdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=bbe00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=bfe00000.00000000 result=3ff01a40.0d91bee3.a6e errno=0
+func=pow op1=3fef9800.00000000 op2=bff00000.00000000 result=3ff034ab.2c50040d.2ac errno=0
+func=pow op1=3fef9800.00000000 op2=c0000000.00000000 result=3ff06a03.b86753dd.bb6 errno=0
+func=pow op1=3fef9800.00000000 op2=c0080000.00000000 result=3ff0a00b.defc06f4.558 errno=0
+func=pow op1=3fef9800.00000000 op2=c0120000.00000000 result=3ff0f266.4d09b66a.72f errno=0
+func=pow op1=3fef9800.00000000 op2=c0180000.00000000 result=3ff14658.ab6c8d31.ec8 errno=0
+func=pow op1=3fef9800.00000000 op2=c07f3000.00000000 result=40825a4f.79ba0328.8d7 errno=0
+func=pow op1=3fef9800.00000000 op2=c090ce00.00000000 result=412c5521.b1a8d47f.54d errno=0
+func=pow op1=3fef9800.00000000 op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3fef9800.00000000 op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3fef9800.00000000 op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3fef9800.00000000 op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=3fef9800.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3fef9800.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=3fefffff.ffffffe0 op2=4386128b.68cf9fbc result=003ff70a.f0af9c79.372 errno=0
+func=pow op1=3fefffff.ffffffe0 op2=c386128b.68cf9fbc result=7fa0047b.c8f04d90.332 errno=0
+func=pow op1=3fefffff.ffffffff op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=3bdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=3be00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=3fe00000.00000000 result=3fefffff.ffffffff.800 errno=0
+func=pow op1=3fefffff.ffffffff op2=3ff00000.00000000 result=3fefffff.ffffffff errno=0
+func=pow op1=3fefffff.ffffffff op2=40000000.00000000 result=3fefffff.fffffffe errno=0
+func=pow op1=3fefffff.ffffffff op2=40080000.00000000 result=3fefffff.fffffffd errno=0
+func=pow op1=3fefffff.ffffffff op2=40120000.00000000 result=3fefffff.fffffffb.800 errno=0
+func=pow op1=3fefffff.ffffffff op2=40180000.00000000 result=3fefffff.fffffffa errno=0
+func=pow op1=3fefffff.ffffffff op2=407ff800.00000000 result=3fefffff.fffffe00.800 errno=0
+func=pow op1=3fefffff.ffffffff op2=408ff800.00000000 result=3fefffff.fffffc01 errno=0
+func=pow op1=3fefffff.ffffffff op2=4386128b.68cf9fbc result=3df1d45f.3e91e17c.d0c errno=0
+func=pow op1=3fefffff.ffffffff op2=43dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3fefffff.ffffffff op2=43e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3fefffff.ffffffff op2=7fefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3fefffff.ffffffff op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3fefffff.ffffffff op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=bbdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=bbe00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=bfe00000.00000000 result=3ff00000.00000000.400 errno=0
+func=pow op1=3fefffff.ffffffff op2=bff00000.00000000 result=3ff00000.00000000.800 errno=0
+func=pow op1=3fefffff.ffffffff op2=c0000000.00000000 result=3ff00000.00000001 errno=0
+func=pow op1=3fefffff.ffffffff op2=c0080000.00000000 result=3ff00000.00000001.800 errno=0
+func=pow op1=3fefffff.ffffffff op2=c0120000.00000000 result=3ff00000.00000002.400 errno=0
+func=pow op1=3fefffff.ffffffff op2=c0180000.00000000 result=3ff00000.00000003 errno=0
+func=pow op1=3fefffff.ffffffff op2=c07f3000.00000000 result=3ff00000.000000f9.800 errno=0
+func=pow op1=3fefffff.ffffffff op2=c090ce00.00000000 result=3ff00000.00000219.c00 errno=0
+func=pow op1=3fefffff.ffffffff op2=c386128b.68cf9fbc result=41ecb761.33b97fcc.60b errno=0
+func=pow op1=3fefffff.ffffffff op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3fefffff.ffffffff op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3fefffff.ffffffff op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3fefffff.ffffffff op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=3fefffff.ffffffff op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3fefffff.ffffffff op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=3bdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=3be00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=3fe00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=3ff00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=40000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=40080000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=40120000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=40180000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=407ff800.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=408ff800.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=43dfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=43e00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=7fefffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=7ff00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3ff00000.00000000 op2=7ff80000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=bbdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=bbe00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=bfe00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=bff00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=c0000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=c0080000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=c0120000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=c0180000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=c07f3000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=c090ce00.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=c3dfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=c3e00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=ffefffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=fff00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3ff00000.00000000 op2=fff80000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=3bdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=3be00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=3fe00000.00000000 result=3ff00000.00000000.800 errno=0
+func=pow op1=3ff00000.00000001 op2=3ff00000.00000000 result=3ff00000.00000001 errno=0
+func=pow op1=3ff00000.00000001 op2=40000000.00000000 result=3ff00000.00000002 errno=0
+func=pow op1=3ff00000.00000001 op2=40080000.00000000 result=3ff00000.00000003 errno=0
+func=pow op1=3ff00000.00000001 op2=40120000.00000000 result=3ff00000.00000004.800 errno=0
+func=pow op1=3ff00000.00000001 op2=40180000.00000000 result=3ff00000.00000006 errno=0
+func=pow op1=3ff00000.00000001 op2=407ff800.00000000 result=3ff00000.000001ff.800 errno=0
+func=pow op1=3ff00000.00000001 op2=408ff800.00000000 result=3ff00000.000003ff errno=0
+func=pow op1=3ff00000.00000001 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3ff00000.00000001 op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3ff00000.00000001 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3ff00000.00000001 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3ff00000.00000001 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=bbdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=bbe00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=bfe00000.00000000 result=3fefffff.ffffffff errno=0
+func=pow op1=3ff00000.00000001 op2=bff00000.00000000 result=3fefffff.fffffffe errno=0
+func=pow op1=3ff00000.00000001 op2=c0000000.00000000 result=3fefffff.fffffffc errno=0
+func=pow op1=3ff00000.00000001 op2=c0080000.00000000 result=3fefffff.fffffffa errno=0
+func=pow op1=3ff00000.00000001 op2=c0120000.00000000 result=3fefffff.fffffff7 errno=0
+func=pow op1=3ff00000.00000001 op2=c0180000.00000000 result=3fefffff.fffffff4 errno=0
+func=pow op1=3ff00000.00000001 op2=c07f3000.00000000 result=3fefffff.fffffc1a errno=0
+func=pow op1=3ff00000.00000001 op2=c090ce00.00000000 result=3fefffff.fffff799 errno=0
+func=pow op1=3ff00000.00000001 op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3ff00000.00000001 op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3ff00000.00000001 op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3ff00000.00000001 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=3ff00000.00000001 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3ff00000.00000001 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=3bdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=3be00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=3fe00000.00000000 result=3ff019eb.020ee283.520 errno=0
+func=pow op1=3ff03400.00000000 op2=3ff00000.00000000 result=3ff03400.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=40000000.00000000 result=3ff068a9.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=40080000.00000000 result=3ff09dfd.25400000 errno=0
+func=pow op1=3ff03400.00000000 op2=40120000.00000000 result=3ff0ef41.05a27f91.ece errno=0
+func=pow op1=3ff03400.00000000 op2=40180000.00000000 result=3ff14212.5220325e.b90 errno=0
+func=pow op1=3ff03400.00000000 op2=407ff800.00000000 result=4083d3b3.8a3213c3.297 errno=0
+func=pow op1=3ff03400.00000000 op2=408ff800.00000000 result=411891bb.7f728082.d88 errno=0
+func=pow op1=3ff03400.00000000 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3ff03400.00000000 op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3ff03400.00000000 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=3ff03400.00000000 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3ff03400.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=bbdfffff.ffffffff result=3fefffff.ffffffff.fff errno=0
+func=pow op1=3ff03400.00000000 op2=bbe00000.00000000 result=3fefffff.ffffffff.fff errno=0
+func=pow op1=3ff03400.00000000 op2=bfe00000.00000000 result=3fefcc7d.6c7d2e30.865 errno=0
+func=pow op1=3ff03400.00000000 op2=bff00000.00000000 result=3fef994d.c3455e8c.b6a errno=0
+func=pow op1=3ff03400.00000000 op2=c0000000.00000000 result=3fef33e5.1aaea6ee.309 errno=0
+func=pow op1=3ff03400.00000000 op2=c0080000.00000000 result=3feecfc1.e487ed2b.638 errno=0
+func=pow op1=3ff03400.00000000 op2=c0120000.00000000 result=3fee3be6.60bd4449.151 errno=0
+func=pow op1=3ff03400.00000000 op2=c0180000.00000000 result=3fedaad0.65924e45.6c1 errno=0
+func=pow op1=3ff03400.00000000 op2=c07f3000.00000000 result=3f5e3bf6.471a7841.69b errno=0
+func=pow op1=3ff03400.00000000 op2=c090ce00.00000000 result=3eb57de0.09c1a44f.f1a errno=0
+func=pow op1=3ff03400.00000000 op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3ff03400.00000000 op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3ff03400.00000000 op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=3ff03400.00000000 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=3ff03400.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=3ff03400.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=3bdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=3be00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=3fe00000.00000000 result=3ff6a09e.667f3bcc.908 errno=0
+func=pow op1=40000000.00000000 op2=3ff00000.00000000 result=40000000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=40000000.00000000 result=40100000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=40080000.00000000 result=40200000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=40120000.00000000 result=4036a09e.667f3bcc.908 errno=0
+func=pow op1=40000000.00000000 op2=40180000.00000000 result=40500000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=407ff800.00000000 result=5fe6a09e.667f3bcc.908 errno=0
+func=pow op1=40000000.00000000 op2=408ff800.00000000 result=7fe00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40000000.00000000 op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40000000.00000000 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40000000.00000000 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=40000000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=bbdfffff.ffffffff result=3fefffff.ffffffff.fff errno=0
+func=pow op1=40000000.00000000 op2=bbe00000.00000000 result=3fefffff.ffffffff.fff errno=0
+func=pow op1=40000000.00000000 op2=bfe00000.00000000 result=3fe6a09e.667f3bcc.908 errno=0
+func=pow op1=40000000.00000000 op2=bff00000.00000000 result=3fe00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=c0000000.00000000 result=3fd00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=c0080000.00000000 result=3fc00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=c0120000.00000000 result=3fa6a09e.667f3bcc.908 errno=0
+func=pow op1=40000000.00000000 op2=c0180000.00000000 result=3f900000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=c07f3000.00000000 result=20c00000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=c08f3a00.00000000 result=017ae89f.995ad3ad.5e8 errno=0
+func=pow op1=40000000.00000000 op2=c090ce00.00000000 result=00000000.00000000.5a8 errno=ERANGE status=u
+func=pow op1=40000000.00000000 op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40000000.00000000 op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40000000.00000000 op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40000000.00000000 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=40000000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=40000000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=3bdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=3be00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=3fe00000.00000000 result=3ffbb67a.e8584caa.73b errno=0
+func=pow op1=40080000.00000000 op2=3ff00000.00000000 result=40080000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=40000000.00000000 result=40220000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=40080000.00000000 result=403b0000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=40120000.00000000 result=40618979.c707e083.dd3 errno=0
+func=pow op1=40080000.00000000 op2=40180000.00000000 result=4086c800.00000000 errno=0
+func=pow op1=40080000.00000000 op2=407ff800.00000000 result=729a2473.a65e6847.3ca errno=0
+func=pow op1=40080000.00000000 op2=408ff800.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40080000.00000000 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40080000.00000000 op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40080000.00000000 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40080000.00000000 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=40080000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=bbdfffff.ffffffff result=3fefffff.ffffffff.ffe errno=0
+func=pow op1=40080000.00000000 op2=bbe00000.00000000 result=3fefffff.ffffffff.ffe errno=0
+func=pow op1=40080000.00000000 op2=bfe00000.00000000 result=3fe279a7.4590331c.4d2 errno=0
+func=pow op1=40080000.00000000 op2=bff00000.00000000 result=3fd55555.55555555.555 errno=0
+func=pow op1=40080000.00000000 op2=c0000000.00000000 result=3fbc71c7.1c71c71c.71c errno=0
+func=pow op1=40080000.00000000 op2=c0080000.00000000 result=3fa2f684.bda12f68.4bd errno=0
+func=pow op1=40080000.00000000 op2=c0120000.00000000 result=3f7d3205.2b8e89a7.fb7 errno=0
+func=pow op1=40080000.00000000 op2=c0180000.00000000 result=3f567980.e0bf08c7.765 errno=0
+func=pow op1=40080000.00000000 op2=c07f3000.00000000 result=0e81314b.59b2f0d0.9a8 errno=0
+func=pow op1=40080000.00000000 op2=c090ce00.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40080000.00000000 op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40080000.00000000 op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40080000.00000000 op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40080000.00000000 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=40080000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=40080000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=3bdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=3be00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=3fe00000.00000000 result=4000f876.ccdf6cd9.6c6 errno=0
+func=pow op1=40120000.00000000 op2=3ff00000.00000000 result=40120000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=40000000.00000000 result=40344000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=40080000.00000000 result=4056c800.00000000 errno=0
+func=pow op1=40120000.00000000 op2=40120000.00000000 result=408b2efd.cb8aa24b.053 errno=0
+func=pow op1=40120000.00000000 op2=40180000.00000000 result=40c037e2.00000000 errno=0
+func=pow op1=40120000.00000000 op2=407ff800.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40120000.00000000 op2=408ff800.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40120000.00000000 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40120000.00000000 op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40120000.00000000 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40120000.00000000 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=40120000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=bbdfffff.ffffffff result=3fefffff.ffffffff.ffe errno=0
+func=pow op1=40120000.00000000 op2=bbe00000.00000000 result=3fefffff.ffffffff.ffe errno=0
+func=pow op1=40120000.00000000 op2=bfe00000.00000000 result=3fde2b7d.ddfefa66.160 errno=0
+func=pow op1=40120000.00000000 op2=bff00000.00000000 result=3fcc71c7.1c71c71c.71c errno=0
+func=pow op1=40120000.00000000 op2=c0000000.00000000 result=3fa948b0.fcd6e9e0.652 errno=0
+func=pow op1=40120000.00000000 op2=c0080000.00000000 result=3f867980.e0bf08c7.765 errno=0
+func=pow op1=40120000.00000000 op2=c0120000.00000000 result=3f52d5bc.e225fd84.857 errno=0
+func=pow op1=40120000.00000000 op2=c0180000.00000000 result=3f1f91bd.1b62b9ce.c8a errno=0
+func=pow op1=40120000.00000000 op2=c07f3000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40120000.00000000 op2=c090ce00.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40120000.00000000 op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40120000.00000000 op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40120000.00000000 op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40120000.00000000 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=40120000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=40120000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=3bdfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=3be00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=3fe00000.00000000 result=4003988e.1409212e.7d0 errno=0
+func=pow op1=40180000.00000000 op2=3ff00000.00000000 result=40180000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=40000000.00000000 result=40420000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=40080000.00000000 result=406b0000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=40120000.00000000 result=40a8cd13.d15b8dfe.d63 errno=0
+func=pow op1=40180000.00000000 op2=40180000.00000000 result=40e6c800.00000000 errno=0
+func=pow op1=40180000.00000000 op2=407ff800.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40180000.00000000 op2=408ff800.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40180000.00000000 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40180000.00000000 op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40180000.00000000 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=40180000.00000000 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=40180000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=bbdfffff.ffffffff result=3fefffff.ffffffff.ffe errno=0
+func=pow op1=40180000.00000000 op2=bbe00000.00000000 result=3fefffff.ffffffff.ffe errno=0
+func=pow op1=40180000.00000000 op2=bfe00000.00000000 result=3fda20bd.700c2c3d.fc0 errno=0
+func=pow op1=40180000.00000000 op2=bff00000.00000000 result=3fc55555.55555555.555 errno=0
+func=pow op1=40180000.00000000 op2=c0000000.00000000 result=3f9c71c7.1c71c71c.71c errno=0
+func=pow op1=40180000.00000000 op2=c0080000.00000000 result=3f72f684.bda12f68.4bd errno=0
+func=pow op1=40180000.00000000 op2=c0120000.00000000 result=3f34a4ee.2c48d3f1.c3f errno=0
+func=pow op1=40180000.00000000 op2=c0180000.00000000 result=3ef67980.e0bf08c7.765 errno=0
+func=pow op1=40180000.00000000 op2=c07f3000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40180000.00000000 op2=c090ce00.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40180000.00000000 op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40180000.00000000 op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40180000.00000000 op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=40180000.00000000 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=40180000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=40180000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=3bdfffff.ffffffff result=3ff00000.00000000.053 errno=0
+func=pow op1=4f0fffff.ffffffff op2=3be00000.00000000 result=3ff00000.00000000.053 errno=0
+func=pow op1=4f0fffff.ffffffff op2=3fe00000.00000000 result=477fffff.ffffffff.800 errno=0
+func=pow op1=4f0fffff.ffffffff op2=3ff00000.00000000 result=4f0fffff.ffffffff errno=0
+func=pow op1=4f0fffff.ffffffff op2=40000000.00000000 result=5e2fffff.fffffffe errno=0
+func=pow op1=4f0fffff.ffffffff op2=40080000.00000000 result=6d4fffff.fffffffd errno=0
+func=pow op1=4f0fffff.ffffffff op2=40120000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=4f0fffff.ffffffff op2=40180000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=4f0fffff.ffffffff op2=407ff800.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=4f0fffff.ffffffff op2=408ff800.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=4f0fffff.ffffffff op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=4f0fffff.ffffffff op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=4f0fffff.ffffffff op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=4f0fffff.ffffffff op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=4f0fffff.ffffffff op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=bbdfffff.ffffffff result=3fefffff.ffffffff.f58 errno=0
+func=pow op1=4f0fffff.ffffffff op2=bbe00000.00000000 result=3fefffff.ffffffff.f58 errno=0
+func=pow op1=4f0fffff.ffffffff op2=bfe00000.00000000 result=38600000.00000000.400 errno=0
+func=pow op1=4f0fffff.ffffffff op2=bff00000.00000000 result=30d00000.00000000.800 errno=0
+func=pow op1=4f0fffff.ffffffff op2=c0000000.00000000 result=21b00000.00000001 errno=0
+func=pow op1=4f0fffff.ffffffff op2=c0080000.00000000 result=12900000.00000001.800 errno=0
+func=pow op1=4f0fffff.ffffffff op2=c0120000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=4f0fffff.ffffffff op2=c0180000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=4f0fffff.ffffffff op2=c07f3000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=4f0fffff.ffffffff op2=c090ce00.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=4f0fffff.ffffffff op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=4f0fffff.ffffffff op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=4f0fffff.ffffffff op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=4f0fffff.ffffffff op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=4f0fffff.ffffffff op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=4f0fffff.ffffffff op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=00000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=00100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=1fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=3bdfffff.ffffffff result=3ff00000.00000000.162 errno=0
+func=pow op1=7fefffff.ffffffff op2=3be00000.00000000 result=3ff00000.00000000.162 errno=0
+func=pow op1=7fefffff.ffffffff op2=3fe00000.00000000 result=5fefffff.ffffffff.800 errno=0
+func=pow op1=7fefffff.ffffffff op2=3ff00000.00000000 result=7fefffff.ffffffff errno=0
+func=pow op1=7fefffff.ffffffff op2=40000000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=7fefffff.ffffffff op2=40080000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=7fefffff.ffffffff op2=40120000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=7fefffff.ffffffff op2=40180000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=7fefffff.ffffffff op2=407ff800.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=7fefffff.ffffffff op2=408ff800.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=7fefffff.ffffffff op2=4386128b.68cf9fbc result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=7fefffff.ffffffff op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=7fefffff.ffffffff op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=7fefffff.ffffffff op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=7fefffff.ffffffff op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7fefffff.ffffffff op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=80000000.00000001 result=3ff00000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=80100000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=9fffffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=bbdfffff.ffffffff result=3fefffff.ffffffff.d3a errno=0
+func=pow op1=7fefffff.ffffffff op2=bbe00000.00000000 result=3fefffff.ffffffff.d3a errno=0
+func=pow op1=7fefffff.ffffffff op2=bfe00000.00000000 result=1ff00000.00000000.400 errno=0
+func=pow op1=7fefffff.ffffffff op2=bff00000.00000000 result=00040000.00000000.200 errno=0 status=u
+func=pow op1=7fefffff.ffffffff op2=c0000000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=7fefffff.ffffffff op2=c0080000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=7fefffff.ffffffff op2=c0120000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=7fefffff.ffffffff op2=c0180000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=7fefffff.ffffffff op2=c07f3000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=7fefffff.ffffffff op2=c090ce00.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=7fefffff.ffffffff op2=c386128b.68cf9fbc result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=7fefffff.ffffffff op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=7fefffff.ffffffff op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=7fefffff.ffffffff op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=7fefffff.ffffffff op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7fefffff.ffffffff op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7fefffff.ffffffff op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=00000000.00000001 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=00100000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=1fffffff.ffffffff result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=3bdfffff.ffffffff result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=3be00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=3fe00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=3ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=40000000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=40080000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=40120000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=40180000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=407ff800.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=408ff800.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=43e00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=80000000.00000001 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=80100000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=9fffffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=bbdfffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=bbe00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=bfe00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=bff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=c0000000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=c0080000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=c0120000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=c0180000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=c07f3000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=c090ce00.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=c3dfffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=c3e00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=ffefffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=7ff00000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=7ff00000.00000001 op2=00000000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=00000000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=00100000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=3be00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=3fe00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=3ff00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=40000000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=40080000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=40120000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=40180000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=407ff800.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=408ff800.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=43dfffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=43e00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=7fefffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=7ff00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=80000000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=80000000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=80100000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=bbe00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=bfe00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=bff00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=c0000000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=c0080000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=c0120000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=c0180000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=c07f3000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=c090ce00.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=c3dfffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=c3e00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=ffefffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=fff00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff00000.00000001 op2=fff80000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff80000.00000001 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=00000000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=00100000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=3be00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=3fe00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=3ff00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=40000000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=40080000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=40120000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=40180000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=407ff800.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=408ff800.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=43dfffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=43e00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=7fefffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=7ff00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff80000.00000001 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=80000000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=80100000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=bbe00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=bfe00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=bff00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=c0000000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=c0080000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=c0120000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=c0180000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=c07f3000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=c090ce00.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=c3dfffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=c3e00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=ffefffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=fff00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=7ff80000.00000001 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=7ff80000.00000001 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=00000000.00000001 result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=00100000.00000000 result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=1fffffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=3bdfffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=3be00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=3fe00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=3ff00000.00000000 result=80000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=40000000.00000000 result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=40080000.00000000 result=80000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=40120000.00000000 result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=40180000.00000000 result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=407ff800.00000000 result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=408ff800.00000000 result=80000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=43dfffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=43e00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=7fefffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=80000000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=80000000.00000001 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=80100000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=9fffffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=bbdfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=bbe00000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=bfe00000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=bff00000.00000000 result=fff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=c0000000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=c0080000.00000000 result=fff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=c0120000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=c0180000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=c07f3000.00000000 result=fff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=c090ce00.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=z
+func=pow op1=80000000.00000000 op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=80000000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=80000000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=80000000.00000001 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=80000000.00000001 op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=3ff00000.00000000 result=80000000.00000001 errno=0 status=u
+func=pow op1=80000000.00000001 op2=40000000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=80000000.00000001 op2=40080000.00000000 result=80000000.00000000 errno=ERANGE status=u
+func=pow op1=80000000.00000001 op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=40180000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=80000000.00000001 op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=408ff800.00000000 result=80000000.00000000 errno=ERANGE status=u
+func=pow op1=80000000.00000001 op2=43dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=80000000.00000001 op2=43e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=80000000.00000001 op2=7fefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=80000000.00000001 op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=80000000.00000001 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=80000000.00000001 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=80000000.00000001 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=80000000.00000001 op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=bff00000.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=80000000.00000001 op2=c0000000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=80000000.00000001 op2=c0080000.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=80000000.00000001 op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=c0180000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=80000000.00000001 op2=c07f3000.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=80000000.00000001 op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80000000.00000001 op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=80000000.00000001 op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=80000000.00000001 op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=80000000.00000001 op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=80000000.00000001 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=80000000.00000001 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=80100000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=80100000.00000000 op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=3ff00000.00000000 result=80100000.00000000 errno=0
+func=pow op1=80100000.00000000 op2=40000000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=80100000.00000000 op2=40080000.00000000 result=80000000.00000000 errno=ERANGE status=u
+func=pow op1=80100000.00000000 op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=40180000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=80100000.00000000 op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=408ff800.00000000 result=80000000.00000000 errno=ERANGE status=u
+func=pow op1=80100000.00000000 op2=43dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=80100000.00000000 op2=43e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=80100000.00000000 op2=7fefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=80100000.00000000 op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=80100000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=80100000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=80100000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=80100000.00000000 op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=bff00000.00000000 result=ffd00000.00000000 errno=0
+func=pow op1=80100000.00000000 op2=c0000000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=80100000.00000000 op2=c0080000.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=80100000.00000000 op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=c0180000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=80100000.00000000 op2=c07f3000.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=80100000.00000000 op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=80100000.00000000 op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=80100000.00000000 op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=80100000.00000000 op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=80100000.00000000 op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=80100000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=80100000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=9fffffff.ffffffff op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=9fffffff.ffffffff op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=3ff00000.00000000 result=9fffffff.ffffffff errno=0
+func=pow op1=9fffffff.ffffffff op2=40000000.00000000 result=000fffff.ffffffff errno=0 status=u
+func=pow op1=9fffffff.ffffffff op2=40080000.00000000 result=80000000.00000000 errno=ERANGE status=u
+func=pow op1=9fffffff.ffffffff op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=40180000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=9fffffff.ffffffff op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=408ff800.00000000 result=80000000.00000000 errno=ERANGE status=u
+func=pow op1=9fffffff.ffffffff op2=43dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=9fffffff.ffffffff op2=43e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=9fffffff.ffffffff op2=7fefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=9fffffff.ffffffff op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=9fffffff.ffffffff op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=9fffffff.ffffffff op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=9fffffff.ffffffff op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=9fffffff.ffffffff op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=bff00000.00000000 result=dfe00000.00000000.800 errno=0
+func=pow op1=9fffffff.ffffffff op2=c0000000.00000000 result=7fd00000.00000001 errno=0
+func=pow op1=9fffffff.ffffffff op2=c0080000.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=9fffffff.ffffffff op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=c0180000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=9fffffff.ffffffff op2=c07f3000.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=9fffffff.ffffffff op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=9fffffff.ffffffff op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=9fffffff.ffffffff op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=9fffffff.ffffffff op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=9fffffff.ffffffff op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=9fffffff.ffffffff op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=9fffffff.ffffffff op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=3ff00000.00000000 result=bfe00000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=40000000.00000000 result=3fd00000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=40080000.00000000 result=bfc00000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=40180000.00000000 result=3f900000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=408ff800.00000000 result=80080000.00000000 errno=0 status=u
+func=pow op1=bfe00000.00000000 op2=4386128b.68cf9fbc result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=bfe00000.00000000 op2=43dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=bfe00000.00000000 op2=43e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=bfe00000.00000000 op2=7fefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=bfe00000.00000000 op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=bfe00000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=bff00000.00000000 result=c0000000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=c0000000.00000000 result=40100000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=c0080000.00000000 result=c0200000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=c0180000.00000000 result=40500000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=c07f3000.00000000 result=df200000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfe00000.00000000 op2=c386128b.68cf9fbc result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=bfe00000.00000000 op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=bfe00000.00000000 op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=bfe00000.00000000 op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=bfe00000.00000000 op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=bfe00000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=bfe00000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=bfefffff.ffffffe0 op2=4386128b.68cf9fbc result=003ff70a.f0af9c79.372 errno=0
+func=pow op1=bfefffff.ffffffe0 op2=c386128b.68cf9fbc result=7fa0047b.c8f04d90.332 errno=0
+func=pow op1=bfefffff.ffffffff op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bfefffff.ffffffff op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=3ff00000.00000000 result=bfefffff.ffffffff errno=0
+func=pow op1=bfefffff.ffffffff op2=40000000.00000000 result=3fefffff.fffffffe errno=0
+func=pow op1=bfefffff.ffffffff op2=40080000.00000000 result=bfefffff.fffffffd errno=0
+func=pow op1=bfefffff.ffffffff op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=40180000.00000000 result=3fefffff.fffffffa errno=0
+func=pow op1=bfefffff.ffffffff op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=408ff800.00000000 result=bfefffff.fffffc01 errno=0
+func=pow op1=bfefffff.ffffffff op2=4386128b.68cf9fbc result=3df1d45f.3e91e17c.d0c errno=0
+func=pow op1=bfefffff.ffffffff op2=43dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=bfefffff.ffffffff op2=43e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=bfefffff.ffffffff op2=7fefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=bfefffff.ffffffff op2=7ff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=bfefffff.ffffffff op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=bfefffff.ffffffff op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=bfefffff.ffffffff op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bfefffff.ffffffff op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=bff00000.00000000 result=bff00000.00000000.800 errno=0
+func=pow op1=bfefffff.ffffffff op2=c0000000.00000000 result=3ff00000.00000001 errno=0
+func=pow op1=bfefffff.ffffffff op2=c0080000.00000000 result=bff00000.00000001.800 errno=0
+func=pow op1=bfefffff.ffffffff op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=c0180000.00000000 result=3ff00000.00000003 errno=0
+func=pow op1=bfefffff.ffffffff op2=c07f3000.00000000 result=bff00000.000000f9.800 errno=0
+func=pow op1=bfefffff.ffffffff op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bfefffff.ffffffff op2=c386128b.68cf9fbc result=41ecb761.33b97fcc.60b errno=0
+func=pow op1=bfefffff.ffffffff op2=c3dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=bfefffff.ffffffff op2=c3e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=bfefffff.ffffffff op2=ffefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=bfefffff.ffffffff op2=fff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=bfefffff.ffffffff op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=bfefffff.ffffffff op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=3ff00000.00000000 result=bff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=40000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=40080000.00000000 result=bff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=40180000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=408ff800.00000000 result=bff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=43dfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=43e00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=7fefffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=7ff00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=bff00000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=bff00000.00000000 result=bff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=c0000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=c0080000.00000000 result=bff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=c0180000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=c07f3000.00000000 result=bff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000000 op2=c3dfffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=c3e00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=ffefffff.ffffffff result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=fff00000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=bff00000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=bff00000.00000001 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000001 op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=3ff00000.00000000 result=bff00000.00000001 errno=0
+func=pow op1=bff00000.00000001 op2=40000000.00000000 result=3ff00000.00000002 errno=0
+func=pow op1=bff00000.00000001 op2=40080000.00000000 result=bff00000.00000003 errno=0
+func=pow op1=bff00000.00000001 op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=40180000.00000000 result=3ff00000.00000006 errno=0
+func=pow op1=bff00000.00000001 op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=408ff800.00000000 result=bff00000.000003ff errno=0
+func=pow op1=bff00000.00000001 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=bff00000.00000001 op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=bff00000.00000001 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=bff00000.00000001 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=bff00000.00000001 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=bff00000.00000001 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=bff00000.00000001 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=bff00000.00000001 op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=bff00000.00000000 result=bfefffff.fffffffe errno=0
+func=pow op1=bff00000.00000001 op2=c0000000.00000000 result=3fefffff.fffffffc errno=0
+func=pow op1=bff00000.00000001 op2=c0080000.00000000 result=bfefffff.fffffffa errno=0
+func=pow op1=bff00000.00000001 op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=c0180000.00000000 result=3fefffff.fffffff4 errno=0
+func=pow op1=bff00000.00000001 op2=c07f3000.00000000 result=bfefffff.fffffc1a errno=0
+func=pow op1=bff00000.00000001 op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=bff00000.00000001 op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=bff00000.00000001 op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=bff00000.00000001 op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=bff00000.00000001 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=bff00000.00000001 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=bff00000.00000001 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=3ff00000.00000000 result=c0000000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=40000000.00000000 result=40100000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=40080000.00000000 result=c0200000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=40180000.00000000 result=40500000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=408ff800.00000000 result=ffe00000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0000000.00000000 op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0000000.00000000 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0000000.00000000 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=c0000000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=bff00000.00000000 result=bfe00000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=c0000000.00000000 result=3fd00000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=c0080000.00000000 result=bfc00000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=c0180000.00000000 result=3f900000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=c07f3000.00000000 result=a0c00000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0000000.00000000 op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0000000.00000000 op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0000000.00000000 op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0000000.00000000 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=c0000000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=c0000000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=c0080000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=c0080000.00000000 op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=3ff00000.00000000 result=c0080000.00000000 errno=0
+func=pow op1=c0080000.00000000 op2=40000000.00000000 result=40220000.00000000 errno=0
+func=pow op1=c0080000.00000000 op2=40080000.00000000 result=c03b0000.00000000 errno=0
+func=pow op1=c0080000.00000000 op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=40180000.00000000 result=4086c800.00000000 errno=0
+func=pow op1=c0080000.00000000 op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=408ff800.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0080000.00000000 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0080000.00000000 op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0080000.00000000 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0080000.00000000 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=c0080000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=c0080000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=c0080000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=c0080000.00000000 op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=bff00000.00000000 result=bfd55555.55555555.555 errno=0
+func=pow op1=c0080000.00000000 op2=c0000000.00000000 result=3fbc71c7.1c71c71c.71c errno=0
+func=pow op1=c0080000.00000000 op2=c0080000.00000000 result=bfa2f684.bda12f68.4bd errno=0
+func=pow op1=c0080000.00000000 op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=c0180000.00000000 result=3f567980.e0bf08c7.765 errno=0
+func=pow op1=c0080000.00000000 op2=c07f3000.00000000 result=8e81314b.59b2f0d0.9a8 errno=0
+func=pow op1=c0080000.00000000 op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0080000.00000000 op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0080000.00000000 op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0080000.00000000 op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0080000.00000000 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=c0080000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=c0080000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=c0120000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=c0120000.00000000 op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=3ff00000.00000000 result=c0120000.00000000 errno=0
+func=pow op1=c0120000.00000000 op2=40000000.00000000 result=40344000.00000000 errno=0
+func=pow op1=c0120000.00000000 op2=40080000.00000000 result=c056c800.00000000 errno=0
+func=pow op1=c0120000.00000000 op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=40180000.00000000 result=40c037e2.00000000 errno=0
+func=pow op1=c0120000.00000000 op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=408ff800.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0120000.00000000 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0120000.00000000 op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0120000.00000000 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0120000.00000000 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=c0120000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=c0120000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=c0120000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=c0120000.00000000 op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=bff00000.00000000 result=bfcc71c7.1c71c71c.71c errno=0
+func=pow op1=c0120000.00000000 op2=c0000000.00000000 result=3fa948b0.fcd6e9e0.652 errno=0
+func=pow op1=c0120000.00000000 op2=c0080000.00000000 result=bf867980.e0bf08c7.765 errno=0
+func=pow op1=c0120000.00000000 op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=c0180000.00000000 result=3f1f91bd.1b62b9ce.c8a errno=0
+func=pow op1=c0120000.00000000 op2=c07f3000.00000000 result=80000000.00000000 errno=ERANGE status=u
+func=pow op1=c0120000.00000000 op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0120000.00000000 op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0120000.00000000 op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0120000.00000000 op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0120000.00000000 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=c0120000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=c0120000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=c0180000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=c0180000.00000000 op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=3ff00000.00000000 result=c0180000.00000000 errno=0
+func=pow op1=c0180000.00000000 op2=40000000.00000000 result=40420000.00000000 errno=0
+func=pow op1=c0180000.00000000 op2=40080000.00000000 result=c06b0000.00000000 errno=0
+func=pow op1=c0180000.00000000 op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=40180000.00000000 result=40e6c800.00000000 errno=0
+func=pow op1=c0180000.00000000 op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=408ff800.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0180000.00000000 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0180000.00000000 op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0180000.00000000 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=c0180000.00000000 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=c0180000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=c0180000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=c0180000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=c0180000.00000000 op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=bff00000.00000000 result=bfc55555.55555555.555 errno=0
+func=pow op1=c0180000.00000000 op2=c0000000.00000000 result=3f9c71c7.1c71c71c.71c errno=0
+func=pow op1=c0180000.00000000 op2=c0080000.00000000 result=bf72f684.bda12f68.4bd errno=0
+func=pow op1=c0180000.00000000 op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=c0180000.00000000 result=3ef67980.e0bf08c7.765 errno=0
+func=pow op1=c0180000.00000000 op2=c07f3000.00000000 result=80000000.00000000 errno=ERANGE status=u
+func=pow op1=c0180000.00000000 op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=c0180000.00000000 op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0180000.00000000 op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0180000.00000000 op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=c0180000.00000000 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=c0180000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=c0180000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=ffefffff.ffffffff op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=ffefffff.ffffffff op2=00000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=00100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=1fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=3be00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=3fe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=3ff00000.00000000 result=ffefffff.ffffffff errno=0
+func=pow op1=ffefffff.ffffffff op2=40000000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=ffefffff.ffffffff op2=40080000.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=ffefffff.ffffffff op2=40120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=40180000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=ffefffff.ffffffff op2=407ff800.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=408ff800.00000000 result=fff00000.00000000 errno=ERANGE status=o
+func=pow op1=ffefffff.ffffffff op2=43dfffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=ffefffff.ffffffff op2=43e00000.00000000 result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=ffefffff.ffffffff op2=7fefffff.ffffffff result=7ff00000.00000000 errno=ERANGE status=o
+func=pow op1=ffefffff.ffffffff op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=ffefffff.ffffffff op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=ffefffff.ffffffff op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=ffefffff.ffffffff op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=ffefffff.ffffffff op2=80000000.00000001 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=80100000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=9fffffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=bbe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=bfe00000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=bff00000.00000000 result=80040000.00000000.200 errno=0 status=u
+func=pow op1=ffefffff.ffffffff op2=c0000000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=ffefffff.ffffffff op2=c0080000.00000000 result=80000000.00000000 errno=ERANGE status=u
+func=pow op1=ffefffff.ffffffff op2=c0120000.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=c0180000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=ffefffff.ffffffff op2=c07f3000.00000000 result=80000000.00000000 errno=ERANGE status=u
+func=pow op1=ffefffff.ffffffff op2=c090ce00.00000000 result=7ff80000.00000000 errno=EDOM status=i
+func=pow op1=ffefffff.ffffffff op2=c3dfffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=ffefffff.ffffffff op2=c3e00000.00000000 result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=ffefffff.ffffffff op2=ffefffff.ffffffff result=00000000.00000000 errno=ERANGE status=u
+func=pow op1=ffefffff.ffffffff op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=ffefffff.ffffffff op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=ffefffff.ffffffff op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=00000000.00000001 result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=00100000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=1fffffff.ffffffff result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=3bdfffff.ffffffff result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=3be00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=3fe00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=3ff00000.00000000 result=fff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=40000000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=40080000.00000000 result=fff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=40120000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=40180000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=407ff800.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=408ff800.00000000 result=fff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=43dfffff.ffffffff result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=43e00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=7fefffff.ffffffff result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=7ff00000.00000000 result=7ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000000 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=80000000.00000001 result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=80100000.00000000 result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=9fffffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=bbdfffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=bbe00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=bfe00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=bff00000.00000000 result=80000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=c0000000.00000000 result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=c0080000.00000000 result=80000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=c0120000.00000000 result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=c0180000.00000000 result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=c07f3000.00000000 result=80000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=c090ce00.00000000 result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=c3dfffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=c3e00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=ffefffff.ffffffff result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=fff00000.00000000 result=00000000.00000000 errno=0
+func=pow op1=fff00000.00000000 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000000 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=fff00000.00000001 op2=00000000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=00000000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=00100000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=3be00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=3fe00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=3ff00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=40000000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=40080000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=40120000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=40180000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=407ff800.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=408ff800.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=43dfffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=43e00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=7fefffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=7ff00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=80000000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=80000000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=80100000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=bbe00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=bfe00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=bff00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=c0000000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=c0080000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=c0120000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=c0180000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=c07f3000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=c090ce00.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=c3dfffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=c3e00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=ffefffff.ffffffff result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=fff00000.00000000 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff00000.00000001 op2=fff80000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff80000.00000001 op2=00000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=00000000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=00100000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=1fffffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=3bdfffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=3be00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=3fe00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=3ff00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=40000000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=40080000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=40120000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=40180000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=407ff800.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=408ff800.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=43dfffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=43e00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=7fefffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=7ff00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=7ff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff80000.00000001 op2=7ff80000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=80000000.00000000 result=3ff00000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=80000000.00000001 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=80100000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=9fffffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=bbdfffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=bbe00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=bfe00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=bff00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=c0000000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=c0080000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=c0120000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=c0180000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=c07f3000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=c090ce00.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=c3dfffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=c3e00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=ffefffff.ffffffff result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=fff00000.00000000 result=7ff80000.00000000 errno=0
+func=pow op1=fff80000.00000001 op2=fff00000.00000001 result=7ff80000.00000000 errno=0 status=i
+func=pow op1=fff80000.00000001 op2=fff80000.00000001 result=7ff80000.00000000 errno=0
diff --git a/math/test/testcases/directed/powf.tst b/math/test/testcases/directed/powf.tst
new file mode 100644
index 000000000000..3fa8b110f8bc
--- /dev/null
+++ b/math/test/testcases/directed/powf.tst
@@ -0,0 +1,246 @@
+; powf.tst - Directed test cases for powf
+;
+; Copyright (c) 2007-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+func=powf op1=7f800001 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=7fc00001 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=ffc00001 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=7f800000 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=40800000 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=40400000 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=3f000000 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=00000000 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=80000000 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=bf000000 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=c0400000 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=c0800000 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=ff800000 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=7f800001 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=7fc00001 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=ffc00001 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=7f800000 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=40800000 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=40400000 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=3f000000 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=00000000 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=80000000 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=bf000000 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=c0400000 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=c0800000 result=7fc00001 errno=0 status=i
+func=powf op1=ff800001 op2=ff800000 result=7fc00001 errno=0 status=i
+func=powf op1=7fc00001 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=7fc00001 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=7fc00001 op2=7fc00001 result=7fc00001 errno=0
+func=powf op1=7fc00001 op2=ffc00001 result=7fc00001 errno=0
+func=powf op1=7fc00001 op2=7f800000 result=7fc00001 errno=0
+func=powf op1=7fc00001 op2=40800000 result=7fc00001 errno=0
+func=powf op1=7fc00001 op2=40400000 result=7fc00001 errno=0
+func=powf op1=7fc00001 op2=3f000000 result=7fc00001 errno=0
+func=powf op1=7fc00001 op2=00000000 result=3f800000 errno=0
+func=powf op1=7fc00001 op2=80000000 result=3f800000 errno=0
+func=powf op1=7fc00001 op2=bf000000 result=7fc00001 errno=0
+func=powf op1=7fc00001 op2=c0400000 result=7fc00001 errno=0
+func=powf op1=7fc00001 op2=c0800000 result=7fc00001 errno=0
+func=powf op1=7fc00001 op2=ff800000 result=7fc00001 errno=0
+func=powf op1=ffc00001 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=ffc00001 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=ffc00001 op2=7fc00001 result=7fc00001 errno=0
+func=powf op1=ffc00001 op2=ffc00001 result=7fc00001 errno=0
+func=powf op1=ffc00001 op2=7f800000 result=7fc00001 errno=0
+func=powf op1=ffc00001 op2=40800000 result=7fc00001 errno=0
+func=powf op1=ffc00001 op2=40400000 result=7fc00001 errno=0
+func=powf op1=ffc00001 op2=3f000000 result=7fc00001 errno=0
+func=powf op1=ffc00001 op2=00000000 result=3f800000 errno=0
+func=powf op1=ffc00001 op2=80000000 result=3f800000 errno=0
+func=powf op1=ffc00001 op2=bf000000 result=7fc00001 errno=0
+func=powf op1=ffc00001 op2=c0400000 result=7fc00001 errno=0
+func=powf op1=ffc00001 op2=c0800000 result=7fc00001 errno=0
+func=powf op1=ffc00001 op2=ff800000 result=7fc00001 errno=0
+func=powf op1=7f800000 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=7f800000 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=7f800000 op2=7fc00001 result=7fc00001 errno=0
+func=powf op1=7f800000 op2=ffc00001 result=7fc00001 errno=0
+func=powf op1=7f800000 op2=7f800000 result=7f800000 errno=0
+func=powf op1=7f800000 op2=40800000 result=7f800000 errno=0
+func=powf op1=7f800000 op2=40400000 result=7f800000 errno=0
+func=powf op1=7f800000 op2=3f000000 result=7f800000 errno=0
+func=powf op1=7f800000 op2=00000001 result=7f800000 errno=0
+func=powf op1=7f800000 op2=00000000 result=3f800000 errno=0
+func=powf op1=7f800000 op2=80000000 result=3f800000 errno=0
+func=powf op1=7f800000 op2=bf000000 result=00000000 errno=0
+func=powf op1=7f800000 op2=c0400000 result=00000000 errno=0
+func=powf op1=7f800000 op2=c0800000 result=00000000 errno=0
+func=powf op1=7f800000 op2=ff800000 result=00000000 errno=0
+func=powf op1=40800000 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=40800000 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=40800000 op2=7fc00001 result=7fc00001 errno=0
+func=powf op1=40800000 op2=ffc00001 result=7fc00001 errno=0
+func=powf op1=40800000 op2=7f800000 result=7f800000 errno=0
+func=powf op1=40800000 op2=40800000 result=43800000 errno=0
+func=powf op1=40800000 op2=40400000 result=42800000 errno=0
+func=powf op1=40800000 op2=3f000000 result=40000000 errno=0
+func=powf op1=40800000 op2=00000000 result=3f800000 errno=0
+func=powf op1=40800000 op2=80000000 result=3f800000 errno=0
+func=powf op1=40800000 op2=bf000000 result=3f000000 errno=0
+func=powf op1=40800000 op2=c0400000 result=3c800000 errno=0
+func=powf op1=40800000 op2=c0800000 result=3b800000 errno=0
+func=powf op1=40800000 op2=ff800000 result=00000000 errno=0
+func=powf op1=3f800000 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=3f800000 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=3f800000 op2=7fc00001 result=3f800000 errno=0
+func=powf op1=3f800000 op2=ffc00001 result=3f800000 errno=0
+func=powf op1=3f800000 op2=7f800000 result=3f800000 errno=0
+func=powf op1=3f800000 op2=40800000 result=3f800000 errno=0
+func=powf op1=3f800000 op2=40400000 result=3f800000 errno=0
+func=powf op1=3f800000 op2=3f000000 result=3f800000 errno=0
+func=powf op1=3f800000 op2=00000000 result=3f800000 errno=0
+func=powf op1=3f800000 op2=80000000 result=3f800000 errno=0
+func=powf op1=3f800000 op2=bf000000 result=3f800000 errno=0
+func=powf op1=3f800000 op2=c0400000 result=3f800000 errno=0
+func=powf op1=3f800000 op2=c0800000 result=3f800000 errno=0
+func=powf op1=3f800000 op2=ff800000 result=3f800000 errno=0
+func=powf op1=3e800000 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=3e800000 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=3e800000 op2=7fc00001 result=7fc00001 errno=0
+func=powf op1=3e800000 op2=ffc00001 result=7fc00001 errno=0
+func=powf op1=3e800000 op2=7f800000 result=00000000 errno=0
+func=powf op1=3e800000 op2=40800000 result=3b800000 errno=0
+func=powf op1=3e800000 op2=40400000 result=3c800000 errno=0
+func=powf op1=3e800000 op2=3f000000 result=3f000000 errno=0
+func=powf op1=3e800000 op2=00000000 result=3f800000 errno=0
+func=powf op1=3e800000 op2=80000000 result=3f800000 errno=0
+func=powf op1=3e800000 op2=bf000000 result=40000000 errno=0
+func=powf op1=3e800000 op2=c0400000 result=42800000 errno=0
+func=powf op1=3e800000 op2=c0800000 result=43800000 errno=0
+func=powf op1=3e800000 op2=ff800000 result=7f800000 errno=0
+func=powf op1=00000001 op2=bf800000 result=7f800000 errno=ERANGE status=ox
+func=powf op1=00000000 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=00000000 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=00000000 op2=7fc00001 result=7fc00001 errno=0
+func=powf op1=00000000 op2=ffc00001 result=7fc00001 errno=0
+func=powf op1=00000000 op2=7f800000 result=00000000 errno=0
+func=powf op1=00000000 op2=40800000 result=00000000 errno=0
+func=powf op1=00000000 op2=40400000 result=00000000 errno=0
+func=powf op1=00000000 op2=3f000000 result=00000000 errno=0
+func=powf op1=00000000 op2=00000000 result=3f800000 errno=0
+func=powf op1=00000000 op2=80000000 result=3f800000 errno=0
+func=powf op1=00000000 op2=bf000000 result=7f800000 errno=ERANGE status=z
+func=powf op1=00000000 op2=c0400000 result=7f800000 errno=ERANGE status=z
+func=powf op1=00000000 op2=c0800000 result=7f800000 errno=ERANGE status=z
+func=powf op1=00000000 op2=ff800000 result=7f800000 errno=ERANGE
+func=powf op1=80000000 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=80000000 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=80000000 op2=7fc00001 result=7fc00001 errno=0
+func=powf op1=80000000 op2=ffc00001 result=7fc00001 errno=0
+func=powf op1=80000000 op2=7f800000 result=00000000 errno=0
+func=powf op1=80000000 op2=40800000 result=00000000 errno=0
+func=powf op1=80000000 op2=40400000 result=80000000 errno=0
+func=powf op1=80000000 op2=3f000000 result=00000000 errno=0
+func=powf op1=80000000 op2=00000000 result=3f800000 errno=0
+func=powf op1=80000000 op2=80000000 result=3f800000 errno=0
+func=powf op1=80000000 op2=bf000000 result=7f800000 errno=ERANGE status=z
+func=powf op1=80000000 op2=c0400000 result=ff800000 errno=ERANGE status=z
+func=powf op1=80000000 op2=c0800000 result=7f800000 errno=ERANGE status=z
+func=powf op1=80000000 op2=ff800000 result=7f800000 errno=ERANGE
+func=powf op1=be800000 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=be800000 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=be800000 op2=7fc00001 result=7fc00001 errno=0
+func=powf op1=be800000 op2=ffc00001 result=7fc00001 errno=0
+func=powf op1=be800000 op2=7f800000 result=00000000 errno=0
+func=powf op1=be800000 op2=40800000 result=3b800000 errno=0
+func=powf op1=be800000 op2=40400000 result=bc800000 errno=0
+func=powf op1=be800000 op2=3f000000 result=7fc00001 errno=EDOM status=i
+func=powf op1=be800000 op2=00000000 result=3f800000 errno=0
+func=powf op1=be800000 op2=80000000 result=3f800000 errno=0
+func=powf op1=be800000 op2=bf000000 result=7fc00001 errno=EDOM status=i
+func=powf op1=be800000 op2=c0400000 result=c2800000 errno=0
+func=powf op1=be800000 op2=c0800000 result=43800000 errno=0
+func=powf op1=be800000 op2=ff800000 result=7f800000 errno=0
+func=powf op1=bf800000 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=bf800000 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=bf800000 op2=7fc00001 result=7fc00001 errno=0
+func=powf op1=bf800000 op2=ffc00001 result=7fc00001 errno=0
+func=powf op1=bf800000 op2=7f800000 result=3f800000 errno=0
+func=powf op1=bf800000 op2=40800000 result=3f800000 errno=0
+func=powf op1=bf800000 op2=40400000 result=bf800000 errno=0
+func=powf op1=bf800000 op2=3f000000 result=7fc00001 errno=EDOM status=i
+func=powf op1=bf800000 op2=00000000 result=3f800000 errno=0
+func=powf op1=bf800000 op2=80000000 result=3f800000 errno=0
+func=powf op1=bf800000 op2=bf000000 result=7fc00001 errno=EDOM status=i
+func=powf op1=bf800000 op2=c0400000 result=bf800000 errno=0
+func=powf op1=bf800000 op2=c0800000 result=3f800000 errno=0
+func=powf op1=bf800000 op2=ff800000 result=3f800000 errno=0
+func=powf op1=c0800000 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=c0800000 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=c0800000 op2=7fc00001 result=7fc00001 errno=0
+func=powf op1=c0800000 op2=ffc00001 result=7fc00001 errno=0
+func=powf op1=c0800000 op2=7f800000 result=7f800000 errno=0
+func=powf op1=c0800000 op2=40800000 result=43800000 errno=0
+func=powf op1=c0800000 op2=40400000 result=c2800000 errno=0
+func=powf op1=c0800000 op2=3f000000 result=7fc00001 errno=EDOM status=i
+func=powf op1=c0800000 op2=00000000 result=3f800000 errno=0
+func=powf op1=c0800000 op2=80000000 result=3f800000 errno=0
+func=powf op1=c0800000 op2=bf000000 result=7fc00001 errno=EDOM status=i
+func=powf op1=c0800000 op2=c0400000 result=bc800000 errno=0
+func=powf op1=c0800000 op2=c0800000 result=3b800000 errno=0
+func=powf op1=c0800000 op2=ff800000 result=00000000 errno=0
+func=powf op1=ff800000 op2=7f800001 result=7fc00001 errno=0 status=i
+func=powf op1=ff800000 op2=ff800001 result=7fc00001 errno=0 status=i
+func=powf op1=ff800000 op2=7fc00001 result=7fc00001 errno=0
+func=powf op1=ff800000 op2=ffc00001 result=7fc00001 errno=0
+func=powf op1=ff800000 op2=7f800000 result=7f800000 errno=0
+func=powf op1=ff800000 op2=40800000 result=7f800000 errno=0
+func=powf op1=ff800000 op2=40400000 result=ff800000 errno=0
+func=powf op1=ff800000 op2=3f000000 result=7f800000 errno=0
+func=powf op1=ff800000 op2=00000000 result=3f800000 errno=0
+func=powf op1=ff800000 op2=80000000 result=3f800000 errno=0
+func=powf op1=ff800000 op2=bf000000 result=00000000 errno=0
+func=powf op1=ff800000 op2=c0400000 result=80000000 errno=0
+func=powf op1=ff800000 op2=c0800000 result=00000000 errno=0
+func=powf op1=ff800000 op2=ff800000 result=00000000 errno=0
+
+
+func=powf op1=36c27f9d op2=4109fa51 result=00000000 errno=ERANGE status=ux
+func=powf op1=351738cd op2=c0c55691 result=7f800000 errno=ERANGE status=ox
+func=powf op1=42836035 op2=41a99f40 result=7f800000 errno=ERANGE status=ox
+func=powf op1=32bd53f3 op2=40bcba58 result=00000000 errno=ERANGE status=ux
+func=powf op1=32dc5bff op2=40be62ea result=00000000 errno=ERANGE status=ux
+func=powf op1=3a8a3f66 op2=4172bd43 result=00000000 errno=ERANGE status=ux
+func=powf op1=28f0e770 op2=c035b4ca result=7f800000 errno=ERANGE status=ox
+func=powf op1=40886699 op2=c28f703a result=00000000 errno=ERANGE status=ux
+func=powf op1=414bd593 op2=c22370cf result=00000000 errno=ERANGE status=ux
+func=powf op1=3a2f1163 op2=c1422d45 result=7f800000 errno=ERANGE status=ox
+func=powf op1=434f5cf3 op2=41851272 result=7f800000 errno=ERANGE status=ox
+func=powf op1=2e0e27a4 op2=c06b13f5 result=7f800000 errno=ERANGE status=ox
+func=powf op1=39aef7a6 op2=414fd60a result=00000000 errno=ERANGE status=ux
+func=powf op1=21c80729 op2=c00a04ab result=7f800000 errno=ERANGE status=ox
+func=powf op1=42455a4b op2=c1d55905 result=00000000 errno=ERANGE status=ux
+func=powf op1=2d173e0b op2=c05ee797 result=7f800000 errno=ERANGE status=ox
+func=powf op1=452edf9a op2=4132dd7f result=7f800000 errno=ERANGE status=ox
+func=powf op1=406bf67b op2=c29f5f12 result=00000000 errno=ERANGE status=ux
+func=powf op1=2d82a6fc op2=4085779e result=00000000 errno=ERANGE status=ux
+func=powf op1=4551f827 op2=41304516 result=7f800000 errno=ERANGE status=ox
+func=powf op1=3a917c51 op2=41726c0a result=00000001.37f errno=0 status=ux
+; iso c allows both errno=ERANGE and errno=0
+;func=powf op1=3b19bbaa op2=4188e6fb result=00000000.b5f errno=0 status=ux
+;func=powf op1=4088bd18 op2=c28ef056 result=00000000.986 errno=0 status=ux
+func=powf op1=3f7ffd76 op2=4a09221e result=00aa9d24.3ad error=0
+
+func=powf op1=007fffff op2=bf000001 result=5f00002c.2b2 error=0
+func=powf op1=000007ff op2=bf000001 result=62000830.96f error=0
+func=powf op1=007fffff op2=80800001 result=3f800000.000 error=0
+func=powf op1=00000000 op2=800007ff result=7f800000 errno=ERANGE status=z
+func=powf op1=00000000 op2=000007ff result=00000000 error=0
+func=powf op1=bf800000 op2=ff7fffff result=3f800000 error=0
+func=powf op1=2e4e4f30 op2=406b0dc2 result=007e9c59.eb4 errno=0 status=u
+
+; SDCOMP-25549: ensure the biggest overflow case possible is not
+; mishandled. Also check the analogous underflow, and also ensure that
+; our massive-overflow checks do not affect numbers _just within_ the
+; range.
+func=powf op1=7f7fffff op2=7f7fffff result=7f800000 error=overflow
+func=powf op1=7f7fffff op2=ff7fffff result=00000000 error=underflow
+func=powf op1=54cb3000 op2=403fffff result=7f7fffb2.a95 error=0
diff --git a/math/test/testcases/directed/sincosf.tst b/math/test/testcases/directed/sincosf.tst
new file mode 100644
index 000000000000..4b33d2291c66
--- /dev/null
+++ b/math/test/testcases/directed/sincosf.tst
@@ -0,0 +1,51 @@
+; Directed test cases for SP sincos
+;
+; Copyright (c) 2007-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+
+func=sincosf_sinf op1=7fc00001 result=7fc00001 errno=0
+func=sincosf_sinf op1=ffc00001 result=7fc00001 errno=0
+func=sincosf_sinf op1=7f800001 result=7fc00001 errno=0 status=i
+func=sincosf_sinf op1=ff800001 result=7fc00001 errno=0 status=i
+func=sincosf_sinf op1=7f800000 result=7fc00001 errno=EDOM status=i
+func=sincosf_sinf op1=ff800000 result=7fc00001 errno=EDOM status=i
+func=sincosf_sinf op1=00000000 result=00000000 errno=0
+func=sincosf_sinf op1=80000000 result=80000000 errno=0
+func=sincosf_sinf op1=c70d39a1 result=be37fad5.7ed errno=0
+func=sincosf_sinf op1=46427f1b result=3f352d80.f9b error=0
+func=sincosf_sinf op1=4647e568 result=3f352da9.7be error=0
+func=sincosf_sinf op1=46428bac result=bf352dea.924 error=0
+func=sincosf_sinf op1=4647f1f9 result=bf352e13.146 error=0
+func=sincosf_sinf op1=4647fe8a result=3f352e7c.ac9 error=0
+func=sincosf_sinf op1=45d8d7f1 result=3f35097b.cb0 error=0
+func=sincosf_sinf op1=45d371a4 result=bf350990.102 error=0
+func=sincosf_sinf op1=45ce0b57 result=3f3509a4.554 error=0
+func=sincosf_sinf op1=45d35882 result=3f3509f9.bdb error=0
+func=sincosf_sinf op1=45cdf235 result=bf350a0e.02c error=0
+
+func=sincosf_cosf op1=7fc00001 result=7fc00001 errno=0
+func=sincosf_cosf op1=ffc00001 result=7fc00001 errno=0
+func=sincosf_cosf op1=7f800001 result=7fc00001 errno=0 status=i
+func=sincosf_cosf op1=ff800001 result=7fc00001 errno=0 status=i
+func=sincosf_cosf op1=7f800000 result=7fc00001 errno=EDOM status=i
+func=sincosf_cosf op1=ff800000 result=7fc00001 errno=EDOM status=i
+func=sincosf_cosf op1=00000000 result=3f800000 errno=0
+func=sincosf_cosf op1=80000000 result=3f800000 errno=0
+func=sincosf_cosf op1=46427f1b result=3f34dc5c.565 error=0
+func=sincosf_cosf op1=4647e568 result=3f34dc33.c1f error=0
+func=sincosf_cosf op1=46428bac result=bf34dbf2.8e3 error=0
+func=sincosf_cosf op1=4647f1f9 result=bf34dbc9.f9b error=0
+func=sincosf_cosf op1=4647fe8a result=3f34db60.313 error=0
+func=sincosf_cosf op1=45d8d7f1 result=bf35006a.7fd error=0
+func=sincosf_cosf op1=45d371a4 result=3f350056.39b error=0
+func=sincosf_cosf op1=45ce0b57 result=bf350041.f38 error=0
+func=sincosf_cosf op1=45d35882 result=bf34ffec.868 error=0
+func=sincosf_cosf op1=45cdf235 result=3f34ffd8.404 error=0
+
+; no underflow
+func=sincosf_sinf op1=17800000 result=17800000.000
+func=sincosf_cosf op1=17800000 result=3f800000.000
+; underflow
+func=sincosf_sinf op1=00400000 result=00400000.000 status=ux
+func=sincosf_cosf op1=00400000 result=3f800000.000 status=ux
diff --git a/math/test/testcases/directed/sinf.tst b/math/test/testcases/directed/sinf.tst
new file mode 100644
index 000000000000..ded80b1598c6
--- /dev/null
+++ b/math/test/testcases/directed/sinf.tst
@@ -0,0 +1,28 @@
+; sinf.tst - Directed test cases for SP sine
+;
+; Copyright (c) 2007-2019, Arm Limited.
+; SPDX-License-Identifier: MIT
+
+
+func=sinf op1=7fc00001 result=7fc00001 errno=0
+func=sinf op1=ffc00001 result=7fc00001 errno=0
+func=sinf op1=7f800001 result=7fc00001 errno=0 status=i
+func=sinf op1=ff800001 result=7fc00001 errno=0 status=i
+func=sinf op1=7f800000 result=7fc00001 errno=EDOM status=i
+func=sinf op1=ff800000 result=7fc00001 errno=EDOM status=i
+func=sinf op1=00000000 result=00000000 errno=0
+func=sinf op1=80000000 result=80000000 errno=0
+; Directed test for a failure I found while developing mathbench
+func=sinf op1=c70d39a1 result=be37fad5.7ed errno=0
+; SDCOMP-26094: check sinf in the cases for which the range reducer
+; returns values furthest beyond its nominal upper bound of pi/4.
+func=sinf op1=46427f1b result=3f352d80.f9b error=0
+func=sinf op1=4647e568 result=3f352da9.7be error=0
+func=sinf op1=46428bac result=bf352dea.924 error=0
+func=sinf op1=4647f1f9 result=bf352e13.146 error=0
+func=sinf op1=4647fe8a result=3f352e7c.ac9 error=0
+func=sinf op1=45d8d7f1 result=3f35097b.cb0 error=0
+func=sinf op1=45d371a4 result=bf350990.102 error=0
+func=sinf op1=45ce0b57 result=3f3509a4.554 error=0
+func=sinf op1=45d35882 result=3f3509f9.bdb error=0
+func=sinf op1=45cdf235 result=bf350a0e.02c error=0
diff --git a/math/test/testcases/random/double.tst b/math/test/testcases/random/double.tst
new file mode 100644
index 000000000000..c24ff80d5d95
--- /dev/null
+++ b/math/test/testcases/random/double.tst
@@ -0,0 +1,10 @@
+!! double.tst - Random test case specification for DP functions
+!!
+!! Copyright (c) 1999-2019, Arm Limited.
+!! SPDX-License-Identifier: MIT
+
+test exp 10000
+test exp2 10000
+test log 10000
+test log2 10000
+test pow 40000
diff --git a/math/test/testcases/random/float.tst b/math/test/testcases/random/float.tst
new file mode 100644
index 000000000000..d02a22750abe
--- /dev/null
+++ b/math/test/testcases/random/float.tst
@@ -0,0 +1,15 @@
+!! single.tst - Random test case specification for SP functions
+!!
+!! Copyright (c) 1999-2019, Arm Limited.
+!! SPDX-License-Identifier: MIT
+
+test sinf 10000
+test cosf 10000
+test sincosf_sinf 5000
+test sincosf_cosf 5000
+test tanf 10000
+test expf 10000
+test exp2f 10000
+test logf 10000
+test log2f 10000
+test powf 10000
diff --git a/math/test/traces/exp.txt b/math/test/traces/exp.txt
new file mode 100644
index 000000000000..cb067d5174b9
--- /dev/null
+++ b/math/test/traces/exp.txt
@@ -0,0 +1,16000 @@
+0x1.0bc8e7ca4ae1bp+0
+0x1.f9a012f44a109p-1
+-0x1.87a0e64ca4704p-15
+0x1.d2d48a18a7775p-1
+0x1.bb1c1c3d91533p-1
+-0x1.f99f18cd2896bp-16
+0x1.58bb57317e405p-1
+0x1.4a09091f7ebeep-1
+-0x1.44718c44e91cfp-16
+0x1.45fa2a0b71c2bp-1
+0x1.38762d53b5588p-1
+-0x1.2a455304fad52p-16
+0x1.b7bf404f6d792p-1
+0x1.89b7f02cc3616p-1
+-0x1.4725ae5fe330ep-15
+0x1.7f67cd7b4808bp-1
+0x1.55ed18823552ep-1
+-0x1.a739b0e2abe9dp-16
+0x1.1b3e775bae9c8p-1
+0x1.f6023db8868e1p-2
+-0x1.104f2fa39a12bp-16
+0x1.0bd9b65f01703p-1
+0x1.da4b53554e44dp-2
+-0x1.f526b52905e9p-17
+0x1.1fc5ef99d9612p+0
+0x1.47b931f513835p+0
+-0x1.02b1bcc2094d9p-15
+0x1.f8c730332548cp-1
+0x1.19482cc4dc1fbp+0
+-0x1.4e16557b341d3p-16
+0x1.786dce71f0b35p-1
+0x1.950d7d5198b4fp-1
+-0x1.accc5b8b72601p-17
+0x1.6472662268d79p-1
+0x1.7d9d06ca67edep-1
+-0x1.8a3bc4d1f5a5ep-17
+0x1.330645d7c99bp+0
+0x1.25004ff9555e8p+0
+-0x1.85274bbfa239fp-16
+0x1.0e7034f78e1c8p+0
+0x1.0206cf3f5e944p+0
+-0x1.f6fe344c539b3p-17
+0x1.96178955052a6p-1
+0x1.8350a15e7b7f3p-1
+-0x1.43010b67688cep-17
+0x1.80e714f138abdp-1
+0x1.6f163e464ed4fp-1
+-0x1.290da68f570f6p-17
+0x1.866c2178a9c97p-1
+0x1.bfcc4605ca00fp-1
+-0x1.64605f46a2fcep-16
+0x1.5b7d18d8e3aa9p-1
+0x1.8edce4d6b667cp-1
+-0x1.d3991eb7496cep-17
+0x1.091ab83c3e1dep-1
+0x1.30a7ebf8b2b71p-1
+-0x1.31d7428d2d8c1p-17
+0x1.f7a9b86f13311p-2
+0x1.21731afa77bcp-1
+-0x1.1b12f6ef29b44p-17
+-0x1.55d0cf4bd6aedp-15
+-0x1.25823bbb48bbep-12
+-0x1.fe511e97488b2p-11
+-0x1.fad0a09045dfbp-12
+-0x1.6fd87d61b4565p-12
+-0x1.a696db0624feep-17
+-0x1.391ed5a843f93p-10
+-0x1.c0d23587c5b89p-13
+-0x1.ab2db00aab2bp-8
+-0x1.51454310d0d1ap-15
+-0x1.219b1f96fb68fp-12
+-0x1.f787fe3ab5957p-11
+-0x1.f4136be018f61p-12
+-0x1.6af456684d5d7p-12
+-0x1.a0f85a4951aeep-17
+-0x1.34f4f7483a40bp-10
+-0x1.bada6a468f999p-13
+-0x1.904f3271e320ep-8
+-0x1.6ef45c7e39f2dp-14
+-0x1.3b18489716499p-11
+-0x1.676135bbac0d2p-9
+-0x1.64e9dfd8b7b9dp-10
+-0x1.030c2446c9cbbp-10
+-0x1.c5ab2d2a80e96p-16
+-0x1.502620236748fp-9
+-0x1.3c129a3c7817bp-11
+-0x1.717e3cfc30badp-8
+-0x1.7a09e60ef3104p-14
+-0x1.449ccea9996edp-11
+-0x1.6f9478a715612p-9
+-0x1.6d0ebaeabbb5cp-10
+-0x1.08f553d1f44d1p-10
+-0x1.d35f3ec8d2735p-16
+-0x1.5a4d7410d726cp-9
+-0x1.4348e47189b65p-11
+-0x1.772522f4ede6ep-8
+0x1.eb4c6556b12d7p+0
+0x1.c78d83bb1f656p+0
+0x1.82554515ca9b4p+0
+0x1.7a5752267c5ep+0
+-0x1.baeff44302d03p-11
+-0x1.ff192f3a7845cp-9
+-0x1.c6ae5efe8bdf3p-11
+-0x1.004fd940223a6p-8
+-0x1.eb04054469baap-11
+-0x1.0a2bef6fa2f01p-8
+-0x1.f4bda156f6f34p-11
+-0x1.0e54a74941224p-8
+-0x1.316794c2bd16dp+1
+-0x1.2744e628de6b1p+1
+-0x1.1561ea85396a7p+1
+-0x1.13783f72337e1p+1
+0x1.1be6fb2f548d9p+0
+0x1.2f396c4a3e018p+0
+-0x1.43c7400a6a41ep-16
+0x1.faf80233f4ac5p-1
+0x1.0e5997ca43621p+0
+-0x1.be176460d5163p-17
+0x1.726af18c6831ap-1
+0x1.8a1507006fe7p-1
+-0x1.1248da21acf8cp-17
+0x1.6137dfe69cb01p-1
+0x1.77af5095c20fcp-1
+-0x1.f06f1162f80c9p-18
+0x1.0b4138270aadep+0
+0x1.f8ab0e7abaaddp-1
+-0x1.b07fb061ab57fp-16
+0x1.d329c20a8834dp-1
+0x1.bb6a281e171b9p-1
+-0x1.24d8119880a4ep-16
+0x1.4887fe52441bep-1
+0x1.3adb99f0adca9p-1
+-0x1.5f00a4462f7e6p-17
+0x1.37fc1a54b3b3ap-1
+0x1.2b51441c7ed21p-1
+-0x1.3aad4df57e683p-17
+0x1.b6e0e5cdb8814p-1
+0x1.88ea86c20d327p-1
+-0x1.69e0bfed21c86p-16
+0x1.7fadac863af12p-1
+0x1.562d044f71695p-1
+-0x1.eb40d77a4cbf4p-17
+0x1.0df266740689ep-1
+0x1.de10b589c297bp-2
+-0x1.27c44134c8ad1p-17
+0x1.005d3ec1e3844p-1
+0x1.c5a6d77299e1fp-2
+-0x1.0990b0824e5c8p-17
+0x1.1f3b683769bcp+0
+0x1.46fe91f73c74bp+0
+-0x1.1dc9f3fb7e704p-16
+0x1.f91fa179e8983p-1
+0x1.1980bfef1ca66p+0
+-0x1.8324232505363p-17
+0x1.672c047064c53p-1
+0x1.80cb5c8b7345ap-1
+-0x1.d0218dd0a4ae5p-18
+0x1.557ef25d43723p-1
+0x1.6c3f1d2131329p-1
+-0x1.a02687bbcbf92p-18
+0x1.3277f30380566p+0
+0x1.247835c271822p+0
+-0x1.ae4f1af9c0612p-17
+0x1.0e9e354cb664p+0
+0x1.0232c519cf5e9p+0
+-0x1.23bfc166c09e8p-17
+0x1.83cb9a1fa9b76p-1
+0x1.71d921fbbf9f7p-1
+-0x1.5e2e37a2a0e17p-18
+0x1.7104192eacf23p-1
+0x1.5fec2cd4640cdp-1
+-0x1.3a23dfd29efdep-18
+0x1.85c8033af3a7bp-1
+0x1.bf117beffe23ep-1
+-0x1.8f2e45077bf6dp-17
+0x1.5bb3f676bfdc6p-1
+0x1.8f1b82cdd4ad3p-1
+-0x1.1383d2cfaa7cdp-17
+0x1.fb4bc7e4bdfd9p-2
+0x1.2387fa2ca3c38p-1
+-0x1.5502d584bdce5p-18
+0x1.e3a8e8ecc911ep-2
+0x1.15fc9cd7550a2p-1
+-0x1.35176ab5d2703p-18
+-0x1.bc50e8cbec091p-16
+-0x1.7d85f68d9e75fp-13
+-0x1.4bac53421d4c4p-11
+-0x1.4965a9b38b1acp-12
+-0x1.de26ec6632542p-13
+-0x1.12a7d81daf54bp-17
+-0x1.9704180babc5p-11
+-0x1.23b4722da4131p-13
+-0x1.4058511042dffp-8
+-0x1.b73843d7d3701p-16
+-0x1.7925b26eca533p-13
+-0x1.47de6f8c74e56p-11
+-0x1.459e74dbe6a5cp-12
+-0x1.d8aaedd2be649p-13
+-0x1.0f815f961159p-17
+-0x1.9258f94292e7dp-11
+-0x1.205bea433c1cbp-13
+-0x1.307ea72f3973dp-8
+-0x1.096a93e42122ep-14
+-0x1.c7d01e5c4271cp-12
+-0x1.190dde864af2ap-9
+-0x1.1720218f8b44p-10
+-0x1.952d8afe6e587p-11
+-0x1.4822ddad3a041p-16
+-0x1.e645021eecea8p-10
+-0x1.ee5f191472ed8p-12
+-0x1.1e2ba1fd33442p-8
+-0x1.104cc21249014p-14
+-0x1.d3a266969020fp-12
+-0x1.1e93ac6387dc3p-9
+-0x1.1c9c3bbe570abp-10
+-0x1.9d23bbfd33cebp-11
+-0x1.50a5767b5229p-16
+-0x1.f2e1804ab699fp-10
+-0x1.f815f71d71353p-12
+-0x1.1f66c69c85a9bp-8
+0x1.ec0a2f1a13a13p+0
+0x1.c983c13939d9ep+0
+0x1.7b5bc7ae0f58p+0
+0x1.76ab9008c5bccp+0
+-0x1.5a21caee0887bp-11
+-0x1.8fccc5aaf830ep-9
+-0x1.761f8aafc3841p-11
+-0x1.a679d60e7d736p-9
+-0x1.a09c9ae19194ap-11
+-0x1.c2375f769b782p-9
+-0x1.a839256aacd37p-11
+-0x1.c9594c19acb9bp-9
+-0x1.318d698f68218p+1
+-0x1.27bd5fa4ad9c3p+1
+-0x1.13d7262c75cbp+1
+-0x1.129d11aed61fep+1
+0x1.1c4ed45ed6302p+0
+0x1.2fa9f7126a579p+0
+-0x1.9593aab77dc94p-17
+0x1.fe083fe721866p-1
+0x1.100065f65d077p+0
+-0x1.3d4376d995e0ep-17
+0x1.649862520ec0ep-1
+0x1.7b4bc4886f2d6p-1
+-0x1.73bf097d7bd02p-18
+0x1.59566a0fd2a4bp-1
+0x1.6f42749dc6504p-1
+-0x1.5c0e06460e0bap-18
+0x1.0bb8309b9dd43p+0
+0x1.f981e48d78bf5p-1
+-0x1.0b0d55ffac244p-16
+0x1.d67450f27e4a9p-1
+0x1.be6d879dae2adp-1
+-0x1.9b61a692b839dp-17
+0x1.3b385912d643ap-1
+0x1.2e5bee37a1ee2p-1
+-0x1.d10305bb95fb1p-18
+0x1.3075a30b26c85p-1
+0x1.243cacb4cfd5p-1
+-0x1.afb355362aa1cp-18
+0x1.b7a3dbe5d41c2p-1
+0x1.899ea199ea7cfp-1
+-0x1.bfa337caf498bp-17
+0x1.82607b561eb3bp-1
+0x1.58a526d26b49ep-1
+-0x1.5994917024f5ap-17
+0x1.03052ab7edd65p-1
+0x1.ca6c0e4884c9p-2
+-0x1.892f83c0d6536p-18
+0x1.f45f6d34ab89ap-2
+0x1.ba8fe072370bbp-2
+-0x1.6d884f538d259p-18
+0x1.1fb4df4a49797p+0
+0x1.47a232d0abff9p+0
+-0x1.610d6ec920811p-17
+0x1.fc89b50d47161p-1
+0x1.1bb09c754c33ep+0
+-0x1.10017a206a2c1p-17
+0x1.58f4c02e6aea3p-1
+0x1.7040c8f681b9p-1
+-0x1.33910faafa2f2p-18
+0x1.4d70b6d3c2336p-1
+0x1.62f2c4f2db129p-1
+-0x1.1d9178071945ep-18
+0x1.32f4be494ef09p+0
+0x1.24ef8c8d6e286p+0
+-0x1.0a0bf761e395dp-17
+0x1.1064b329ae851p+0
+0x1.03e51abe3dfd8p+0
+-0x1.9a4e11bf809bep-18
+0x1.74b1f50ecb381p-1
+0x1.636f2da89f7e2p-1
+-0x1.d0bb7af97df98p-19
+0x1.6871f0ce88b24p-1
+0x1.57bded528c71p-1
+-0x1.afb2d9d0d7919p-19
+0x1.8657ec0b8681ap-1
+0x1.bfb54610b2146p-1
+-0x1.f41100cb2e427p-18
+0x1.5dd1986eabf65p-1
+0x1.91859feea5b23p-1
+-0x1.87fea6b4d610fp-18
+0x1.e84cbca3d5ed6p-2
+0x1.18a561fdcf3a2p-1
+-0x1.cf6477271338ap-19
+0x1.d8d5570a61634p-2
+0x1.0fc7f945f119bp-1
+-0x1.b2736504f19dbp-19
+-0x1.204ac7b1e02d4p-16
+-0x1.ef1945eefd725p-14
+-0x1.ae68b74f5f7b4p-12
+-0x1.ab7499cb3f36p-13
+-0x1.363f24975c4efp-13
+-0x1.646aeeda75fb8p-18
+-0x1.081714f77c349p-11
+-0x1.7a8ae7a8a22e7p-14
+-0x1.f63bb3ac18381p-9
+-0x1.1d9c27018f50fp-16
+-0x1.ea7e17ac560a9p-14
+-0x1.aa679bed0974cp-12
+-0x1.a77a8740af16dp-13
+-0x1.335c3a2b99b59p-13
+-0x1.611a0ccf0b5dap-18
+-0x1.05a2189f90ae9p-11
+-0x1.77055417539fep-14
+-0x1.f7b9b06355a41p-9
+-0x1.7fe46f9f05981p-15
+-0x1.49a390858437fp-12
+-0x1.b742ace6ee1efp-10
+-0x1.b43f02b140894p-11
+-0x1.3ca07cd02ee92p-11
+-0x1.da9be5f53eef5p-17
+-0x1.5faa307f675e9p-10
+-0x1.8253ce06bcd45p-12
+-0x1.df9e90da91848p-9
+-0x1.87ecbadd29994p-15
+-0x1.508940f0e0ec9p-12
+-0x1.be3fd226aeffp-10
+-0x1.bb2fe0e25820dp-11
+-0x1.41aa22d770e55p-11
+-0x1.e48a1c24b64aep-17
+-0x1.6705dbd6d4e21p-10
+-0x1.8879596aae10fp-12
+-0x1.e40700ae605a3p-9
+0x1.ee196d63d1a1ep+0
+0x1.cb89a9e7ee7fdp+0
+0x1.7545c5d0f353ap+0
+0x1.745b89c598a63p+0
+-0x1.1e9edd489a7dbp-11
+-0x1.4ba19e53b9d57p-9
+-0x1.3bffcfe9c6d0fp-11
+-0x1.6563bada8b6e7p-9
+-0x1.66fabe8683aa9p-11
+-0x1.82d885cb5956bp-9
+-0x1.6961c67004b7p-11
+-0x1.8541381331089p-9
+-0x1.321a4b91de65ap+1
+-0x1.284eae5c30307p+1
+-0x1.125d910035516p+1
+-0x1.120af0b188e9dp+1
+0x1.1dcf3fb19956dp+0
+0x1.314aa53149f19p+0
+-0x1.23fa975eb2f89p-17
+0x1.00d8ea806725bp+0
+0x1.11f9ffaabd9ebp+0
+-0x1.dcb913bc60efp-18
+0x1.57086a8059f81p-1
+0x1.6ccbd1601abap-1
+-0x1.065cb884efc11p-18
+0x1.540506d83dcb2p-1
+0x1.699361703175p-1
+-0x1.f804ad6f23526p-19
+0x1.0d719e3e1994ep+0
+0x1.fc9ea10314862p-1
+-0x1.7c1ef29b75b31p-17
+0x1.da66de7b98302p-1
+0x1.c20a0b7472cf5p-1
+-0x1.316cf0cc5d374p-17
+0x1.2e43e900c748fp-1
+0x1.222bc5df0d497p-1
+-0x1.402489cbd441bp-18
+0x1.2b669a3c8725ep-1
+0x1.1f790f9322cc6p-1
+-0x1.316f8ce238d91p-18
+0x1.ba773a22c61f6p-1
+0x1.8c3b198be06e8p-1
+-0x1.3f01f1ac4cf4fp-17
+0x1.859cfff82ba79p-1
+0x1.5b9baca0d764p-1
+-0x1.00f239033b917p-17
+0x1.f0c5189d3664cp-2
+0x1.b7547b1a9b83p-2
+-0x1.0fbeeea7b4fc2p-18
+0x1.ec11041bf87e7p-2
+0x1.b31ca01da2f98p-2
+-0x1.038a7f00ec2bfp-18
+0x1.21774d0b3a6cap+0
+0x1.4a020bdfc56dep+0
+-0x1.f6ade46db1a2cp-18
+0x1.00509a0cb1574p+0
+0x1.1e515069b6065p+0
+-0x1.940366f7aa48fp-18
+0x1.4b16e7fffd998p-1
+0x1.603e17d30510cp-1
+-0x1.a7ad8b54adf6cp-19
+0x1.4804f0e3883bp-1
+0x1.5cb6c74824593p-1
+-0x1.944344ed01f38p-19
+0x1.34c35087587fap+0
+0x1.26a9e93ca1b73p+0
+-0x1.7b187443791fap-18
+0x1.128507abfd85bp+0
+0x1.05ed4f80ed356p+0
+-0x1.30f551ffa3bb7p-18
+0x1.65f142f07ec0ap-1
+0x1.555a709bcc7f2p-1
+-0x1.408f02cfdae56p-19
+0x1.62ac476006f31p-1
+0x1.523b9b41c420cp-1
+-0x1.31ff268757d15p-19
+0x1.886cb38facc1p-1
+0x1.c213977fe5b4dp-1
+-0x1.67fa5ee88e5d1p-18
+0x1.60593c1859becp-1
+0x1.94689df428332p-1
+-0x1.268d8f9fdfd9bp-18
+0x1.d5aae8dcb6724p-2
+0x1.0df76481d708ap-1
+-0x1.4804c77f3756ap-19
+0x1.d18763580e06ap-2
+0x1.0b97fc6542c51p-1
+-0x1.3b53989683e3bp-19
+-0x1.7555d618ed4f4p-17
+-0x1.4092e891f8617p-14
+-0x1.16b016a72710cp-12
+-0x1.14c681e2e1447p-13
+-0x1.91c43a38e352p-14
+-0x1.cd8ea765f9e05p-19
+-0x1.55fe78a91c098p-12
+-0x1.ea35892453127p-15
+-0x1.a22ae181393ecp-9
+-0x1.72d2a1bc72846p-17
+-0x1.3e6a9ac1f8b04p-14
+-0x1.14cff2f9dd63p-12
+-0x1.12e9a9b00d63p-13
+-0x1.8f100a85678b6p-14
+-0x1.ca73748d9c857p-19
+-0x1.53b1436f8d6e8p-12
+-0x1.e6e8f9b31e1afp-15
+-0x1.aba1c901618ecp-9
+-0x1.158d633180544p-15
+-0x1.dca799ec2270dp-13
+-0x1.56e9c85ef3b85p-10
+-0x1.548f5fe11b717p-11
+-0x1.ee5b2baa0ea8p-12
+-0x1.5723d697e8724p-17
+-0x1.fc80ff8f45efp-11
+-0x1.2d9727c96c6c8p-12
+-0x1.98cf95f250fb3p-9
+-0x1.19ba1e97a7225p-15
+-0x1.e3d2fd3c73d01p-13
+-0x1.5ada3eb885923p-10
+-0x1.5878eaa06b1bfp-11
+-0x1.f40901a500a1cp-12
+-0x1.5c4d1ea580e35p-17
+-0x1.0213830345a7dp-10
+-0x1.310e17cbd2581p-12
+-0x1.9ad4440247404p-9
+0x1.efe8e81ac6cf8p+0
+0x1.ccd25e998f07cp+0
+0x1.6ff0ff054442ap+0
+0x1.7374855f1c589p+0
+-0x1.e3c231cecca1cp-12
+-0x1.184768fb9dfe5p-9
+-0x1.0c1dc6713a304p-11
+-0x1.2f8c8bb136fp-9
+-0x1.3545831cbe2a9p-11
+-0x1.4c782b886a04ep-9
+-0x1.33ee362fa2b9cp-11
+-0x1.4b9b570488095p-9
+-0x1.32a51fa655a63p+1
+-0x1.28ad4ddff03a9p+1
+-0x1.11125fdecf6f6p+1
+-0x1.11cea12009ca9p+1
+0x1.1f4685c7f840ep+0
+0x1.32e188baffe8ap+0
+-0x1.b36dca98b4ccdp-18
+0x1.0207c3d0e7953p+0
+0x1.1340b3456a5dbp+0
+-0x1.6637ce5c1e0d7p-18
+0x1.4adae2842118fp-1
+0x1.5fc87beea9b0ep-1
+-0x1.773b122a8a4a5p-19
+0x1.51cf4e67a5cp-1
+0x1.6736d1313dff8p-1
+-0x1.75b691cdaa81dp-19
+0x1.0f222195f3179p+0
+0x1.ffaaabff52e77p-1
+-0x1.181b18745e845p-17
+0x1.dcf59de7a774fp-1
+0x1.c460a95cbc10fp-1
+-0x1.c4b5ef87c11b3p-18
+0x1.22b7f4ea4f4edp-1
+0x1.1749c34796833p-1
+-0x1.bd101749988cep-19
+0x1.294d9c0327eap-1
+0x1.1d7f13ac860a7p-1
+-0x1.ba2256f9470bap-19
+0x1.bd3bf5f783466p-1
+0x1.8eca62e506b4ap-1
+-0x1.d6cb4c22b09eep-18
+0x1.87b5ca10eb865p-1
+0x1.5d8755547309ap-1
+-0x1.7d827679f47d6p-18
+0x1.ddcf51a433905p-2
+0x1.a6557582369bdp-2
+-0x1.7b82df2323c24p-19
+0x1.e89f442e251fdp-2
+0x1.b0060d9bb9284p-2
+-0x1.791c68e90669fp-19
+0x1.23303d8945727p+0
+0x1.4c56b9c3229bfp+0
+-0x1.72879c5c8b449p-18
+0x1.01a3b12d38723p+0
+0x1.2005e0220a8bp+0
+-0x1.2b85bf3daaeccp-18
+0x1.3eb4661733bf3p-1
+0x1.520b5083e9f77p-1
+-0x1.26a504df65721p-19
+0x1.45c5260bf3121p-1
+0x1.5a21f71392c5bp-1
+-0x1.24bbc675ff588p-19
+0x1.3687d49120994p+0
+0x1.285aac656f5b3p+0
+-0x1.17a9823fe9303p-18
+0x1.13e53ff354efcp+0
+0x1.073dee448aa65p+0
+-0x1.c49807e65f454p-19
+0x1.58bf3a87a44d2p-1
+0x1.48c276e64d1fp-1
+-0x1.be9f6c4509c9p-20
+0x1.6046ee83ccfe8p-1
+0x1.4ff239811eb7fp-1
+-0x1.bbd391f8b32b1p-20
+0x1.8a74e7c74f3e4p-1
+0x1.c463812e2b757p-1
+-0x1.0c63b2e007b8cp-18
+0x1.61fbaee3ed867p-1
+0x1.9646087037fe5p-1
+-0x1.bac28fcdd3c91p-19
+0x1.c4f1635170b13p-2
+0x1.0460a2a4b2db5p-1
+-0x1.d6bde43e394bep-20
+0x1.ce7e685ebc77fp-2
+0x1.09da881927ccp-1
+-0x1.d4b2746fbd823p-20
+-0x1.e2338fdf37604p-18
+-0x1.9e0df54b07754p-15
+-0x1.67f46417143dcp-13
+-0x1.657c0ba52da59p-14
+-0x1.03763b8522b84p-14
+-0x1.2a131a5573ca5p-19
+-0x1.b9b88cf57f3fdp-13
+-0x1.3c940c2985343p-15
+-0x1.628f995e69784p-9
+-0x1.e06f33b13ec74p-18
+-0x1.9c898715cdeeep-15
+-0x1.66a2b682f0e7cp-13
+-0x1.642caf47257eep-14
+-0x1.0282d3fa6949cp-14
+-0x1.28fb798b40ad4p-19
+-0x1.b81a2a782453p-13
+-0x1.3b6b0fb5a1801p-15
+-0x1.6c10c33bdf077p-9
+-0x1.91286788cfbcap-16
+-0x1.5876e20a99868p-13
+-0x1.0b579c737c51dp-10
+-0x1.0981f615fd70ap-11
+-0x1.81690707c31ecp-12
+-0x1.eff456a945d03p-18
+-0x1.6f7b1aade20d6p-11
+-0x1.d64096d59aa99p-13
+-0x1.5ce33194bf102p-9
+-0x1.946b63bce69cdp-16
+-0x1.5b43dd3fc67b7p-13
+-0x1.0d02dbf98c50fp-10
+-0x1.0b2a470c12fdp-11
+-0x1.83d0f6c14de58p-12
+-0x1.f3fca310e764cp-18
+-0x1.7277fe2e3015bp-11
+-0x1.d9301d48701bbp-13
+-0x1.5daf058e62181p-9
+0x1.f1a6e81d9e686p+0
+0x1.cda236e012134p+0
+0x1.6c938969c29aep+0
+0x1.73ea9a06fc117p+0
+-0x1.986e7e13be5efp-12
+-0x1.d9f02bf9269dcp-10
+-0x1.c51a4b55ec724p-12
+-0x1.00ac86833ed91p-9
+-0x1.088eef781ceb3p-11
+-0x1.1bfc8930c3e7p-9
+-0x1.0619c2b77378dp-11
+-0x1.1a5f5e7ceb306p-9
+-0x1.332cb4d17d348p+1
+-0x1.28e7ddb057733p+1
+-0x1.1046881693028p+1
+-0x1.11e8ef14bb834p+1
+0x1.20b1a900d8162p+0
+0x1.346b61750cfb8p+0
+-0x1.457ac78655115p-18
+0x1.02c23ea3cff1bp+0
+0x1.1409e57563dcbp+0
+-0x1.0a0ccd6ce36e5p-18
+0x1.4339e43a29f14p-1
+0x1.57a25600e5afcp-1
+-0x1.11cd62ae91397p-19
+0x1.52c65274b2c75p-1
+0x1.683ec979b8d98p-1
+-0x1.1ad1b4650391p-19
+0x1.10c62cda24ef9p+0
+0x1.014fd386a82e2p+0
+-0x1.9d2ebe412c7ebp-18
+0x1.de89889a11743p-1
+0x1.c5d1cc7f74b8cp-1
+-0x1.4aac835f25dc1p-18
+0x1.1b8665ccaa3f8p-1
+0x1.107fbb2ebf41ep-1
+-0x1.3b1e798683afcp-19
+0x1.2a37ffb955a9p-1
+0x1.1e5bf34acd83cp-1
+-0x1.4664c61b615aep-19
+0x1.bfec3d029fc7fp-1
+0x1.914715c87a844p-1
+-0x1.5bc7fc52567d6p-18
+0x1.8900ee471b82cp-1
+0x1.5eb6b86c79dd5p-1
+-0x1.1741ac0c1c9ddp-18
+0x1.d1ff385e2d421p-2
+0x1.9bc1417be11cap-2
+-0x1.0e093fe33fd7ep-19
+0x1.ea2023798fbc2p-2
+0x1.b15f1b2a1e9b3p-2
+-0x1.1778f6b6ed81bp-19
+0x1.24dc18009ee0ap+0
+0x1.4e9b4254770d1p+0
+-0x1.1160dd524e056p-18
+0x1.0274c781552c1p+0
+0x1.211378d54420dp+0
+-0x1.b5be3cccc1052p-19
+0x1.36fa1d2d892d6p-1
+0x1.493b7b8cff761p-1
+-0x1.a17758e084a35p-20
+0x1.46c07f8a564f2p-1
+0x1.5b425494fcf85p-1
+-0x1.b06d853a895ep-20
+0x1.383e9ecdb04c3p+0
+0x1.29fe532a5364cp+0
+-0x1.9d0e2f2e8cfbbp-19
+0x1.14be5b081664ap+0
+0x1.080d6ccfec3acp+0
+-0x1.4b19de0d09ed8p-19
+0x1.50812740325dep-1
+0x1.40e4bcfcaa518p-1
+-0x1.3cfd2080195acp-20
+0x1.6152b1929ed85p-1
+0x1.50f1c6f2baa1ap-1
+-0x1.4856d0eae5a24p-20
+0x1.8c6c61a9fdb72p-1
+0x1.c6a04b29854b4p-1
+-0x1.912f25eb25b8p-19
+0x1.62fd5e053e86dp-1
+0x1.976c01dfade6ep-1
+-0x1.48efe190004b1p-19
+0x1.ba77d919d72fp-2
+0x1.fcbdcdca1579p-2
+-0x1.58a9cf2d5f47bp-20
+0x1.cfd1a9a741207p-2
+0x1.0a9d08b4bcb9fp-1
+-0x1.637226cb78634p-20
+-0x1.365e2123590c6p-18
+-0x1.0a814fc8f8b12p-15
+-0x1.cf5e3d5658589p-14
+-0x1.cc303950b7f6bp-15
+-0x1.4e01102287c65p-15
+-0x1.7fb5bd250d645p-20
+-0x1.1c50010443481p-13
+-0x1.9787aa1f2f633p-16
+-0x1.2cb1a204fa864p-9
+-0x1.365e2123590c7p-18
+-0x1.0a814fc8f8b13p-15
+-0x1.cf5e3d565858ap-14
+-0x1.cc303950b7f6cp-15
+-0x1.4e01102287c66p-15
+-0x1.7fb5bd250d646p-20
+-0x1.1c50010443482p-13
+-0x1.9787aa1f2f635p-16
+-0x1.34565d5a7bc2ap-9
+-0x1.21b2d8f31b98fp-16
+-0x1.f183a2a0cabdp-14
+-0x1.a01ef244513a3p-11
+-0x1.9d43ee7d086b9p-12
+-0x1.2bf28e6026af6p-12
+-0x1.66281649b79c8p-18
+-0x1.0960ebff5c2cfp-11
+-0x1.6df9ea318ef6ep-13
+-0x1.28b91e7250e6dp-9
+-0x1.21b2d8f31b98fp-16
+-0x1.f183a2a0cabdp-14
+-0x1.a01ef244513a3p-11
+-0x1.9d43ee7d086b9p-12
+-0x1.2bf28e6026af6p-12
+-0x1.66281649b79c8p-18
+-0x1.0960ebff5c2cfp-11
+-0x1.6df9ea318ef6ep-13
+-0x1.2a0e0e6a94a02p-9
+0x1.f56b0767b6181p+0
+0x1.cf54d635e6667p+0
+0x1.6bbfffe59ea0ap+0
+0x1.7698728a6cb01p+0
+-0x1.3dca1e5be7882p-12
+-0x1.71d1cf35b6ecbp-10
+-0x1.603b8c6001937p-12
+-0x1.8f978d99dc18fp-10
+-0x1.9e49cc5557543p-12
+-0x1.bca3a48fda3cp-10
+-0x1.9e3bd161642a8p-12
+-0x1.bef950956a564p-10
+-0x1.345243cc18e8dp+1
+-0x1.2960552d4b2fap+1
+-0x1.1014e7643e526p+1
+-0x1.1296eb39c13fap+1
+0x1.23b8a8bb53924p+0
+0x1.37b44f5c3d1bbp+0
+-0x1.b1e2dc0615167p-19
+0x1.043f9323f7bc5p+0
+0x1.15a5638df2b72p+0
+-0x1.5a59e45b473f9p-19
+0x1.415a6acc51448p-1
+0x1.55a242e65089dp-1
+-0x1.660b8ab35e4e4p-20
+0x1.591d619aa5ca2p-1
+0x1.6f057dd554272p-1
+-0x1.85510dd0fe31cp-20
+0x1.144bbc81053dap+0
+0x1.047b3c3afc8e5p+0
+-0x1.0dbb6af07255cp-18
+0x1.e1c54ee27e9dap-1
+0x1.c8c5eed7ede78p-1
+-0x1.a2ad484c57aa7p-19
+0x1.19c375461b793p-1
+0x1.0ed5dec8422a5p-1
+-0x1.8a01db23361a9p-20
+0x1.303f4de1d65f1p-1
+0x1.2409863efd811p-1
+-0x1.b11b03d9af4eep-20
+0x1.c5b17127fdc16p-1
+0x1.969eaeb0829fcp-1
+-0x1.c7304eab8cd72p-19
+0x1.8ba78bf0662cep-1
+0x1.6124aa4a8e81fp-1
+-0x1.62d7d9b8c544cp-19
+0x1.cf1ab1018abc8p-2
+0x1.992a63e7922a4p-2
+-0x1.54253f90bcca3p-20
+0x1.f4063722f4e4ep-2
+0x1.ba3fd6eaeb618p-2
+-0x1.74f95c62baa21p-20
+0x1.2871293eed8e7p+0
+0x1.537cd4bd88d96p+0
+-0x1.65215641a5141p-19
+0x1.042109f256b24p+0
+0x1.233ca50d4cd21p+0
+-0x1.15518a178683p-19
+0x1.351557180a3d9p-1
+0x1.471419ee48f29p-1
+-0x1.05398bf34b78fp-20
+0x1.4d3683ae8cd5dp-1
+0x1.62afbe466199ap-1
+-0x1.1f242c623e4cbp-20
+0x1.3bea2269b7829p+0
+0x1.2d80e9d28dc1p+0
+-0x1.0e322f5e86b45p-19
+0x1.167ada9dcd0d6p+0
+0x1.09b64139b0ccp+0
+-0x1.a4535c2ead5bep-20
+0x1.4e7bd17d07f8ap-1
+0x1.3ef70a01a5a5cp-1
+-0x1.8ddc932c9f3efp-21
+0x1.6833fd2f81445p-1
+0x1.5782cc3c58371p-1
+-0x1.b5215ff82e8b8p-21
+0x1.909f3558ab99fp-1
+0x1.cb66c980872bp-1
+-0x1.0b4f3ad828fedp-19
+0x1.650c5be532898p-1
+0x1.99c529a18c4c9p-1
+-0x1.ac64b7383d743p-20
+0x1.b7e59581bf2aap-2
+0x1.f9cac4aa67d69p-2
+-0x1.c49dbf88ad8cp-21
+0x1.d886ff1cd2713p-2
+0x1.0f9b106a32061p-1
+-0x1.ea80b053605acp-21
+-0x1.4896ed8de9dffp-19
+-0x1.1a26dc1493767p-16
+-0x1.ea92c2b665786p-15
+-0x1.e734f3dcae492p-16
+-0x1.619d3755b742p-16
+-0x1.963cdd47e7479p-21
+-0x1.2d01320c16de2p-14
+-0x1.af74ed01eb022p-17
+-0x1.d83a0e280e2abp-10
+-0x1.4896ed8de9e01p-19
+-0x1.1a26dc1493769p-16
+-0x1.ea92c2b665789p-15
+-0x1.e734f3dcae494p-16
+-0x1.619d3755b7423p-16
+-0x1.963cdd47e747cp-21
+-0x1.2d01320c16de4p-14
+-0x1.af74ed01eb025p-17
+-0x1.e177d43fe8e3ap-10
+-0x1.6161927fcc8efp-17
+-0x1.2f709144ddea2p-14
+-0x1.1b79dfd36d518p-11
+-0x1.1987e1ad2b6dp-12
+-0x1.98ab5d61f854p-13
+-0x1.b4e344c07dfbbp-19
+-0x1.43b70afc47fabp-12
+-0x1.f2a1ae418ff1p-14
+-0x1.d03da962ab44dp-10
+-0x1.6161927fcc8efp-17
+-0x1.2f709144ddea2p-14
+-0x1.1b79dfd36d518p-11
+-0x1.1987e1ad2b6dp-12
+-0x1.98ab5d61f854p-13
+-0x1.b4e344c07dfbbp-19
+-0x1.43b70afc47fabp-12
+-0x1.f2a1ae418ff1p-14
+-0x1.d9bf467daf125p-10
+0x1.f854462b26423p+0
+0x1.cf8d2ba76688cp+0
+0x1.6d20076fe302bp+0
+0x1.78bd86b494c0dp+0
+-0x1.c6de976d1070ap-13
+-0x1.0947d2681d7c5p-10
+-0x1.f68f92074f2f4p-13
+-0x1.1d2d541f32b3ap-10
+-0x1.2abbde6b0ffa4p-12
+-0x1.40e9a3c132a97p-10
+-0x1.2c216884a6c42p-12
+-0x1.4447cbcaad634p-10
+-0x1.35367083aec2ap+1
+-0x1.296ff7d918f3ap+1
+-0x1.106c18661578ap+1
+-0x1.131f98de306d7p+1
+0x1.26088d8f3e61fp+0
+0x1.3a36ed42332edp+0
+-0x1.efdb43f3ba425p-20
+0x1.0470d81c7a207p+0
+0x1.15da8ff0f485p+0
+-0x1.8064e8a4af9ffp-20
+0x1.44a3c4053fc65p-1
+0x1.5924d6873ee4ap-1
+-0x1.aa9892237561ep-21
+0x1.5e0b64ee1c17fp-1
+0x1.744a9d0d219dfp-1
+-0x1.d2c01f289d4fap-21
+0x1.17011ca2ac4f4p+0
+0x1.06ea5f81046f7p+0
+-0x1.29290cf1dfa97p-19
+0x1.e230705534b55p-1
+0x1.c927c18bd7f0ap-1
+-0x1.ba5330c870fb4p-20
+0x1.1cdb0a83a0367p-1
+0x1.11c15bf8d997p-1
+-0x1.b88c97efd1c1cp-21
+0x1.34f3341d2c2f2p-1
+0x1.2876885ee4c9ap-1
+-0x1.e891bc650d0e3p-21
+0x1.ca217596c9691p-1
+0x1.9abb6f205c584p-1
+-0x1.f7b871b737f81p-20
+0x1.8bff5f25bb236p-1
+0x1.61752d24a342fp-1
+-0x1.795fa3569aa7fp-20
+0x1.d42e9da276b22p-2
+0x1.9db6108f0412ep-2
+-0x1.8071553fcb99ap-21
+0x1.fbbeeb7e19ff3p-2
+0x1.c12db20d63653p-2
+-0x1.a8f4667086ec8p-21
+0x1.2b314905d262ap+0
+0x1.57412db6d968p+0
+-0x1.89d7338ab32a1p-20
+0x1.045870dbf4564p+0
+0x1.23844d6b99e4p+0
+-0x1.255d1b5ecff9dp-20
+0x1.3868394e4eb99p-1
+0x1.4adc42c53d2d4p-1
+-0x1.247e8d2ddfe46p-21
+0x1.523f9ccbd4023p-1
+0x1.687e4832a91cep-1
+-0x1.445f35a15d451p-21
+0x1.3eba8f237d3f2p+0
+0x1.3032017a39db6p+0
+-0x1.2ac09ffedb2cep-20
+0x1.16b456a632cefp+0
+0x1.09ed3255232a9p+0
+-0x1.be317711aa67ep-21
+0x1.5207c8e9bbe04p-1
+0x1.425986b43edb4p-1
+-0x1.bf6ce18d1165bp-22
+0x1.6d8fd21b241c3p-1
+0x1.5ca02679d9484p-1
+-0x1.efe55af1f2ea6p-22
+0x1.93d464e0cd2e5p-1
+0x1.cf0c81b3a968fp-1
+-0x1.3159ad8f4db2p-20
+0x1.6550743e4d6fbp-1
+0x1.9a12d5dfaffeap-1
+-0x1.dbe36126244cp-21
+0x1.bc68adf7dde53p-2
+0x1.fef7a80cb128dp-2
+-0x1.0efd74624d41cp-21
+0x1.df4caa16d362bp-2
+0x1.137cd299fc69p-1
+-0x1.2741a9645e53bp-21
+-0x1.185258820c1b2p-20
+-0x1.e16921a2b5e03p-18
+-0x1.a282f33328767p-16
+-0x1.9fa3bc4acefa3p-17
+-0x1.2dabb311a5a91p-17
+-0x1.5a905425499e6p-22
+-0x1.00c9f0d788787p-15
+-0x1.70142b4084e2ep-18
+-0x1.546ebe597d3fcp-10
+-0x1.185258820c1b5p-20
+-0x1.e16921a2b5e07p-18
+-0x1.a282f3332876bp-16
+-0x1.9fa3bc4acefa8p-17
+-0x1.2dabb311a5a94p-17
+-0x1.5a905425499e8p-22
+-0x1.00c9f0d788789p-15
+-0x1.70142b4084e32p-18
+-0x1.57e2e1a5043bp-10
+-0x1.6a3ec43d594bfp-18
+-0x1.370d11a5619efp-15
+-0x1.4ed96ce5873e6p-12
+-0x1.4c8d2eefdb2ffp-13
+-0x1.e2bb1e3d4031ap-14
+-0x1.bfd8b0c92e15ep-20
+-0x1.4bd5bd5f9725p-13
+-0x1.267f90423fdc4p-14
+-0x1.4fd5c61ce2b1ap-10
+-0x1.6a3ec43d594bfp-18
+-0x1.370d11a5619efp-15
+-0x1.4ed96ce5873e6p-12
+-0x1.4c8d2eefdb2ffp-13
+-0x1.e2bb1e3d4031ap-14
+-0x1.bfd8b0c92e15ep-20
+-0x1.4bd5bd5f9725p-13
+-0x1.267f90423fdc4p-14
+-0x1.58e0a5044fc3cp-10
+0x1.f89e7b4069b53p+0
+0x1.cedbe9ecb00b2p+0
+0x1.69e1be7c9b377p+0
+0x1.7a41017dd6083p+0
+-0x1.2784ae2274257p-13
+-0x1.58d6a233cb5afp-11
+-0x1.45448afd5d291p-13
+-0x1.71108724ce425p-11
+-0x1.893d31b2ab855p-13
+-0x1.a5daf25d9ae63p-11
+-0x1.857dbb0d735f7p-13
+-0x1.a53fa3a5490efp-11
+-0x1.354d00047ebd7p+1
+-0x1.293ef858e5dp+1
+-0x1.0fa7eff94e3c1p+1
+-0x1.137cfd7fa28f4p+1
+0x1.2642953ebfb94p+0
+0x1.3a75f2879ffcfp+0
+-0x1.d6addf0501766p-21
+0x1.03d645ea55d3fp+0
+0x1.1533bfaa730d3p+0
+-0x1.6fc0aacacabbdp-21
+0x1.3d381c11650cfp-1
+0x1.51381f2e6b93fp-1
+-0x1.b25d72269a2a4p-22
+0x1.6163345bad0f4p-1
+0x1.77dda566cb368p-1
+-0x1.df85f6043449fp-22
+0x1.1745523d2d0d6p+0
+0x1.0727a1535624ap+0
+-0x1.0784403ac42bcp-20
+0x1.e0e07abf86d36p-1
+0x1.c7f4f52257b03p-1
+-0x1.85a96f237896ep-21
+0x1.15e1c0d5ef0a6p-1
+0x1.0b2b0dd74c2ep-1
+-0x1.93434bedb87afp-22
+0x1.3825936cb2ebdp-1
+0x1.2b7843ee07747p-1
+-0x1.c689259e49f79p-22
+0x1.ca913589da196p-1
+0x1.9b230aa87167dp-1
+-0x1.c29fcb47fb9ffp-21
+0x1.8aebf4054edf6p-1
+0x1.6078b5b6d5d8p-1
+-0x1.5060118848ff3p-21
+0x1.c8baceaaeecp-2
+0x1.9376135f07d5cp-2
+-0x1.66fb43d2b4e0bp-22
+0x1.007f4a9f130ap-1
+0x1.c5e3fb81a8668p-2
+-0x1.924c7d2510563p-22
+0x1.2b767f0ae996dp+0
+0x1.57a033a014b78p+0
+-0x1.5dee55d6b325ep-21
+0x1.03aaaef6f8c48p+0
+0x1.22a3a2e32f8b5p+0
+-0x1.0308d6cd7958ep-21
+0x1.30e8968cc0d44p-1
+0x1.425670d07daafp-1
+-0x1.0c60461cb9218p-22
+0x1.55ab504627589p-1
+0x1.6c727091d18b9p-1
+-0x1.2e856678f89dcp-22
+0x1.3f0153fd2f9edp+0
+0x1.3075b30104ff8p+0
+-0x1.0ac49e5e066dfp-21
+0x1.16000923280abp+0
+0x1.0940deaacf281p+0
+-0x1.8c5d3cf448204p-22
+0x1.4a06e9bd2fe21p-1
+0x1.3ab64727a36f5p-1
+-0x1.9d9b2141ba5fp-23
+0x1.713348162dd4ap-1
+0x1.60193603c9772p-1
+-0x1.d1d1a41389415p-23
+0x1.9424eb27a5993p-1
+0x1.cf680d6ef860ep-1
+-0x1.21b94b28d3feap-21
+0x1.647ad380df1fp-1
+0x1.991f28013505bp-1
+-0x1.c8054919fd597p-22
+0x1.b238bfc76ad8fp-2
+0x1.f348412dbf348p-2
+-0x1.16854617b3cebp-22
+0x1.e3e47136f2fadp-2
+0x1.161ebbb10f5a2p-1
+-0x1.314c7c3ae6885p-22
+-0x1.79f483a938959p-22
+-0x1.448a71ee88ea8p-19
+-0x1.1a235bbca9d92p-17
+-0x1.1833b74c3f9c8p-18
+-0x1.96bd94d14c8b8p-19
+-0x1.d344cebee8cfap-24
+-0x1.5a39dd3d9f3e2p-17
+-0x1.f04732d2d7bd4p-20
+-0x1.baeaa9c1eac31p-11
+-0x1.79f483a93895dp-22
+-0x1.448a71ee88eacp-19
+-0x1.1a235bbca9d96p-17
+-0x1.1833b74c3f9ccp-18
+-0x1.96bd94d14c8bep-19
+-0x1.d344cebee8cffp-24
+-0x1.5a39dd3d9f3e6p-17
+-0x1.f04732d2d7bdcp-20
+-0x1.bcc4c5a45b025p-11
+-0x1.2f8d932394ebp-19
+-0x1.04a74e2ba4455p-16
+-0x1.4b2e796b03602p-13
+-0x1.48e8acf2b2f7dp-14
+-0x1.dd717dfdc9762p-15
+-0x1.7748eec8869b6p-21
+-0x1.1611e7514710dp-14
+-0x1.2345c2bfdbd05p-15
+-0x1.b7a83ccd59c74p-11
+-0x1.2f8d932394ebp-19
+-0x1.04a74e2ba4455p-16
+-0x1.4b2e796b03602p-13
+-0x1.48e8acf2b2f7dp-14
+-0x1.dd717dfdc9762p-15
+-0x1.7748eec8869b6p-21
+-0x1.1611e7514710dp-14
+-0x1.2345c2bfdbd05p-15
+-0x1.c1209f6160901p-11
+0x1.f84157a43cb05p+0
+0x1.cabba71b3acc7p+0
+0x1.6072ddfb418ffp+0
+0x1.7b4d84f165a2p+0
+-0x1.3dc05fcef8d0bp-14
+-0x1.72c141091433ep-12
+-0x1.6066e54aa98b3p-14
+-0x1.8ee40bbaa4b06p-12
+-0x1.afc1788d4af8ap-14
+-0x1.cd2909794edc8p-12
+-0x1.a18bad8fefb35p-14
+-0x1.c3eb31d4ec2fdp-12
+-0x1.3530fa0f9934fp+1
+-0x1.281a9b138e061p+1
+-0x1.0d791564d802dp+1
+-0x1.13bd260341827p+1
+0x1.25fa7d12d7c1ep+0
+0x1.3a27a7410f932p+0
+-0x1.55b80ca8f5c2bp-22
+0x1.00316e3ac0e5dp+0
+0x1.114558c113f12p+0
+-0x1.10285cc4ee887p-22
+0x1.278adf26a66f2p-1
+0x1.3a14f4cdda43ap-1
+-0x1.59d24a59bc236p-23
+0x1.63ac118313903p-1
+0x1.7a4f0dc3a8d19p-1
+-0x1.886979edb7129p-23
+0x1.16f0962a86874p+0
+0x1.06db87ee5324dp+0
+-0x1.4eeb7dbdb9d4cp-22
+0x1.d8fd6b04a0da5p-1
+0x1.c0bf734870126p-1
+-0x1.ec53308a79bc1p-23
+0x1.01aaca8171cc3p-1
+0x1.f0136222b2cb9p-2
+-0x1.0ac3719704ef6p-23
+0x1.3a55c7e9ec8a4p-1
+0x1.2d86f6b4a31dp-1
+-0x1.3aa92219c0b28p-23
+0x1.ca0662a3d803cp-1
+0x1.9aa2558352675p-1
+-0x1.23c4fac26ce39p-22
+0x1.8474a96fca858p-1
+0x1.5a8c532194cbap-1
+-0x1.b3db0a17943bbp-23
+0x1.a787aecf89d84p-2
+0x1.75c9da6a039c9p-2
+-0x1.ee5d7d991295ep-24
+0x1.024b2ce42685ep-1
+0x1.c91df3c5fef7fp-2
+-0x1.1fc0f8f03b35fp-23
+0x1.2b20840b74871p+0
+0x1.572a294cf0baap+0
+-0x1.bea14cbb71699p-23
+0x1.ff2aa58d9462fp-1
+0x1.1d608d36286c6p+0
+-0x1.48e546f3461c5p-23
+0x1.1b200da1a285p-1
+0x1.29c45761a65cep-1
+-0x1.649724ac261aap-24
+0x1.58027cb3142abp-1
+0x1.6f28130d4f64fp-1
+-0x1.a4d0c36940ec6p-24
+0x1.3ea96938197p+0
+0x1.30219a5a13a0bp+0
+-0x1.57f1bce386eb1p-23
+0x1.11c26f1d9919ep+0
+0x1.053356307d04ap+0
+-0x1.fd6173afbd85ap-24
+0x1.32bdd51d0ca3ap-1
+0x1.247e0e23c323bp-1
+-0x1.1670b7b5b1762p-24
+0x1.73b0664e9b5eep-1
+0x1.62795688298e3p-1
+-0x1.481a840068466p-24
+0x1.93c0e0d0f9c6ep-1
+0x1.cef651bd4b653p-1
+-0x1.a46adc068112dp-23
+0x1.5f71d6d7a9ac1p-1
+0x1.936098187514cp-1
+-0x1.52bbabe397976p-23
+0x1.9479096e60784p-2
+0x1.d126511efd42bp-2
+-0x1.c32261de87f7dp-24
+0x1.e708080324f34p-2
+0x1.17eb4aacb6b3p-1
+-0x1.f879c7ddb0417p-24
+-0x1.563eab5bbdad5p-24
+-0x1.25e0912c79f02p-21
+-0x1.fef674c54c06p-20
+-0x1.fb74d44a571bdp-21
+-0x1.704faadc32118p-21
+-0x1.a71ead038e25p-26
+-0x1.398378b8bc80dp-19
+-0x1.c1639f316d0f8p-22
+-0x1.dc1c32971f302p-12
+-0x1.563eab5bbdad9p-24
+-0x1.25e0912c79f05p-21
+-0x1.fef674c54c065p-20
+-0x1.fb74d44a571c2p-21
+-0x1.704faadc3211cp-21
+-0x1.a71ead038e255p-26
+-0x1.398378b8bc81p-19
+-0x1.c1639f316d0fdp-22
+-0x1.ddec8fc48acaap-12
+-0x1.5dfe48cc49229p-21
+-0x1.2c87d93f17c39p-18
+-0x1.cac23ac44653p-15
+-0x1.c79c4fb622d57p-16
+-0x1.4aae7d8930418p-16
+-0x1.b0b308b469f3dp-23
+-0x1.409c9034af5ccp-16
+-0x1.9379da0445b64p-17
+-0x1.da920d4690a4ep-12
+-0x1.5dfe48cc49229p-21
+-0x1.2c87d93f17c39p-18
+-0x1.cac23ac44653p-15
+-0x1.c79c4fb622d57p-16
+-0x1.4aae7d8930418p-16
+-0x1.b0b308b469f3dp-23
+-0x1.409c9034af5ccp-16
+-0x1.9379da0445b64p-17
+-0x1.e2b2628680863p-12
+0x1.d486c4d771485p+0
+0x1.b2190abcdd46p+0
+0x1.58f8c918e9ebcp+0
+0x1.6e2c6c57c5f5ap+0
+-0x1.87584e5ccc472p-15
+-0x1.bdc57d4e075ebp-13
+-0x1.a709fbd46d743p-15
+-0x1.d7ceb99fe0132p-13
+-0x1.f35d4a6045b94p-15
+-0x1.09c58fded7a71p-12
+-0x1.e54327f381765p-15
+-0x1.04e8e5c2c8a92p-12
+-0x1.2ad338de829c2p+1
+-0x1.21791e6a61dfep+1
+-0x1.0bc75cfb9810fp+1
+-0x1.10a3b005517dfp+1
+0x1.08c298e9e3f4dp+0
+0x1.1a845a5520f55p+0
+-0x1.fd5c676c5c7b2p-24
+0x1.d3296679759cfp-1
+0x1.f1d7377638b4p-1
+-0x1.c1d9ca2953326p-24
+0x1.162874d6211ddp-1
+0x1.2789d412b796p-1
+-0x1.4917417c44c7cp-24
+0x1.46b9ac6a2c3b8p-1
+0x1.5b5f1e5c5bc6ap-1
+-0x1.6576b2c4144f3p-24
+0x1.eb9fbf96584aap-1
+0x1.d1c30572938d5p-1
+-0x1.90dd510dc4f39p-24
+0x1.a93748a53b1dbp-1
+0x1.94d85d2657595p-1
+-0x1.4d7c45aa0c9d2p-24
+0x1.e33bda35fecadp-2
+0x1.d19f2249309b2p-2
+-0x1.b0a74f98ce802p-25
+0x1.1ed21b72e651ap-1
+0x1.139c3b52aedafp-1
+-0x1.e21c86717032p-25
+0x1.93bb55e5fd66cp-1
+0x1.688d802fa18f7p-1
+-0x1.6b6f18bc643f5p-24
+0x1.5d477f7bc94d6p-1
+0x1.36caee67ebf05p-1
+-0x1.335932944bc1bp-24
+0x1.8d2aa9d2dc8a1p-2
+0x1.5e44c40260d8ap-2
+-0x1.a179fe8f0ab92p-25
+0x1.d768ba7482aadp-2
+0x1.a099c87cc267fp-2
+-0x1.cbcde6b2965ep-25
+0x1.0938121dae581p+0
+0x1.29d7e7aa2f56dp+0
+-0x1.0d3b66a0e2d71p-24
+0x1.cd63f8758ae59p-1
+0x1.fbdf2e6a63961p-1
+-0x1.c06c9a0f0600ap-25
+0x1.09c7bdf595135p-1
+0x1.1665a5d1ad57cp-1
+-0x1.2260f50a17c9ap-25
+0x1.3a84c0f36903ep-1
+0x1.4d442ca1b4e3dp-1
+-0x1.43e75699cd5d9p-25
+0x1.1bc1bf2037c85p+0
+0x1.0ec173f214c6fp+0
+-0x1.a6a6cb1ea19b4p-25
+0x1.ef9679f146cbfp-1
+0x1.d8c824bac73fp-1
+-0x1.61766c42807f8p-25
+0x1.2029e300ec3a5p-1
+0x1.12c4491b351c5p-1
+-0x1.cc26bbeed635p-26
+0x1.544868d5237adp-1
+0x1.447fd12643d53p-1
+-0x1.00825ec307cd8p-25
+0x1.6b490e8083d68p-1
+0x1.a0e21cc98996fp-1
+-0x1.3c9ff51c69be7p-24
+0x1.403c73c4c7a61p-1
+0x1.6fbcde721356ep-1
+-0x1.1b801f9df82d8p-24
+0x1.7c9fef4951653p-2
+0x1.b5c71b929a93ap-2
+-0x1.b366c710e3ba5p-25
+0x1.bf45bbaea9068p-2
+0x1.012035d59c1a6p-1
+-0x1.d2ba821ca5c18p-25
+-0x1.2db7f01920f6cp-26
+-0x1.03140a28fd3p-23
+-0x1.c27596ba20279p-22
+-0x1.bf5e401b1c6c8p-23
+-0x1.44b302c00e84fp-23
+-0x1.7504512fda49cp-28
+-0x1.1463b14357afcp-21
+-0x1.8c2d3d9ff89dbp-24
+-0x1.0f0c28a8b5fcep-12
+-0x1.2db7f01920f7p-26
+-0x1.03140a28fd304p-23
+-0x1.c27596ba20281p-22
+-0x1.bf5e401b1c6cfp-23
+-0x1.44b302c00e854p-23
+-0x1.7504512fda4a1p-28
+-0x1.1463b14357affp-21
+-0x1.8c2d3d9ff89e1p-24
+-0x1.1094c1242549bp-12
+-0x1.c4ef49c879ce3p-23
+-0x1.84ec86c807507p-20
+-0x1.97aecdda4adc6p-16
+-0x1.94e29ce002f9cp-17
+-0x1.25dd7c864e868p-17
+-0x1.17fbb9c11bd56p-24
+-0x1.9ee93fa628ce2p-18
+-0x1.668e149f3b807p-18
+-0x1.0ec2860f887cbp-12
+-0x1.c4ef49c879ce3p-23
+-0x1.84ec86c807507p-20
+-0x1.97aecdda4adc6p-16
+-0x1.94e29ce002f9cp-17
+-0x1.25dd7c864e868p-17
+-0x1.17fbb9c11bd56p-24
+-0x1.9ee93fa628ce2p-18
+-0x1.668e149f3b807p-18
+-0x1.11ac029325c74p-12
+0x1.be94080c14245p+0
+0x1.a64f1f5d84ac7p+0
+0x1.51f6bf8e50e5p+0
+0x1.670a92a5c5535p+0
+-0x1.cc867f16a8d1p-15
+-0x1.02b7dcc25f968p-12
+-0x1.e6957e1eafe32p-15
+-0x1.0d7f76a5c4c9dp-12
+-0x1.1c37a9740aeddp-14
+-0x1.2d8b62e5ee46dp-12
+-0x1.13f7410400a44p-14
+-0x1.27b80b22bc40ap-12
+-0x1.24d313d00633bp+1
+-0x1.1e699c1a46417p+1
+-0x1.0a38d229c3ef6p+1
+-0x1.0efbb54e057bep+1
+0x1.eaa7ba6d98798p-1
+0x1.058f97445a7bap+0
+-0x1.1adc0a0dc1cfap-23
+0x1.bc8288b3f37f6p-1
+0x1.d97fdc27bc252p-1
+-0x1.fd0eabc91d4d7p-24
+0x1.05bcbacdc5c9fp-1
+0x1.16084c88c5ee6p-1
+-0x1.7576aa2b948bep-24
+0x1.369fbf9f5113ep-1
+0x1.4a2d838176e8ap-1
+-0x1.95b817d912b1ep-24
+0x1.c1cb2cc319078p-1
+0x1.ab7b16673acc1p-1
+-0x1.c5dfc340a918fp-24
+0x1.91f6f9b0a8cf6p-1
+0x1.7f569b2cb1bbbp-1
+-0x1.8320fff178ba1p-24
+0x1.c529e54db7fd6p-2
+0x1.b508d4c6f40c6p-2
+-0x1.f9417d62654c5p-25
+0x1.0fb503d332c4fp-1
+0x1.0554926279b56p-1
+-0x1.197cca5c412b7p-24
+0x1.716f9c383b11bp-1
+0x1.492941ff7249bp-1
+-0x1.9b2a245c3e274p-24
+0x1.4a34e4f986cb6p-1
+0x1.2576fa5e887ecp-1
+-0x1.63a077e866aedp-24
+0x1.7477e3a4d0608p-2
+0x1.4844896faad5fp-2
+-0x1.e4f01fd5ecccap-25
+0x1.be96cbae960aap-2
+0x1.8a643244ccbbbp-2
+-0x1.0b1ad2932b9b7p-24
+0x1.e710127cb9065p-1
+0x1.0e051c4ba3a44p+0
+-0x1.3063b744b7248p-24
+0x1.b4fb95582fa4p-1
+0x1.ddc81842668c8p-1
+-0x1.03e498022222ep-24
+0x1.f2fccc6c9474ap-2
+0x1.045c7de82d9f1p-1
+-0x1.52a5b0b6fae7cp-25
+0x1.2a4316d7e4568p-1
+0x1.3acfb3378a317p-1
+-0x1.79b4e5c780c0cp-25
+0x1.0535f7a2bf8ep+0
+0x1.f26b1b68b98c3p-1
+-0x1.dd22d19ef6628p-25
+0x1.d5fb6d96a0acbp-1
+0x1.c052cf6da7p-1
+-0x1.990da2837f6c2p-25
+0x1.0eb0ca05a8b2ep-1
+0x1.0218c398d8b0ep-1
+-0x1.0c000b867afbap-25
+0x1.42ed82257657bp-1
+0x1.33effd3497d58p-1
+-0x1.2ab59f0386b28p-25
+0x1.5070e5676e8c7p-1
+0x1.824024bb732bfp-1
+-0x1.623983b1fdec1p-24
+0x1.30a0358c8f002p-1
+0x1.5de4119a5f32ep-1
+-0x1.4220bee69fe18p-24
+0x1.661b4223b5f3cp-2
+0x1.9becb34ea11c9p-2
+-0x1.ef3b91ae66694p-25
+0x1.a92b44cbf2f4cp-2
+0x1.e8e5a71b5d253p-2
+-0x1.097bb3d90d576p-24
+-0x1.602c0d8f408fbp-26
+-0x1.2e66ca73f205fp-23
+-0x1.06e491f787037p-21
+-0x1.0516bc98b712bp-22
+-0x1.7afef1d69c947p-23
+-0x1.b3649b86c6f6dp-28
+-0x1.429b81f0385d4p-21
+-0x1.ce6d07101512bp-24
+-0x1.30796e60d262ap-12
+-0x1.602c0d8f40901p-26
+-0x1.2e66ca73f2063p-23
+-0x1.06e491f78703bp-21
+-0x1.0516bc98b713p-22
+-0x1.7afef1d69c94dp-23
+-0x1.b3649b86c6f74p-28
+-0x1.429b81f0385d9p-21
+-0x1.ce6d071015132p-24
+-0x1.321680daee09bp-12
+-0x1.1d6f2be3afa5cp-22
+-0x1.ea30d82d42355p-20
+-0x1.185fd38229b09p-15
+-0x1.1673484ad6b3ap-16
+-0x1.9432a2dd8f722p-17
+-0x1.60e270954f611p-24
+-0x1.0578e4318f8f9p-17
+-0x1.ed2cf540ecbf6p-18
+-0x1.3047c0f2eadedp-12
+-0x1.1d6f2be3afa5cp-22
+-0x1.ea30d82d42355p-20
+-0x1.185fd38229b09p-15
+-0x1.1673484ad6b3ap-16
+-0x1.9432a2dd8f722p-17
+-0x1.60e270954f611p-24
+-0x1.0578e4318f8f9p-17
+-0x1.ed2cf540ecbf6p-18
+-0x1.332196a52059ap-12
+0x1.7a728f4cc5063p-1
+0x1.6a3c1b38769b6p-1
+0x1.47875e0b8ac1ap-1
+0x1.4ff8d04ceb327p-1
+-0x1.65f2eb5d2b215p-2
+-0x1.026618861c944p+0
+-0x1.5de5bc67afe56p-2
+-0x1.faaad856fc03fp-1
+-0x1.24a94effc5f47p-1
+-0x1.8113d0189d112p+0
+-0x1.10450bd16b53ep-1
+-0x1.6b3a86b28f805p+0
+-0x1.0ac6fd7e994c8p+1
+-0x1.07cd4e7cad6cep+1
+-0x1.00a31b476d2b2p+1
+-0x1.ffc6394f682c7p+0
+0x1.0ba50d44d105dp-1
+0x1.1c544b4912887p-1
+-0x1.559a876b0d6f8p-4
+0x1.d6ab41eff14b4p-2
+0x1.f3ce8e104f144p-2
+-0x1.401c3a766e6d9p-4
+0x1.2cf2b4686cf37p-2
+0x1.3f44ad3769cbp-2
+-0x1.5bf5bfa24edfap-3
+0x1.19f3f5cbbc932p-2
+0x1.2b162503a7e5ep-2
+-0x1.37fe52e5ac845p-3
+0x1.cff448c93e93ap-2
+0x1.bf4ca6772839fp-2
+-0x1.64b07bf52becdp-4
+0x1.954c83bb59b3ep-2
+0x1.876a40635562ep-2
+-0x1.4b59140fc6c6bp-4
+0x1.fe318c628dd6ep-3
+0x1.eec49b2102485p-3
+-0x1.49a2cf23539fep-3
+0x1.dd331e07004e6p-3
+0x1.cef9a83749148p-3
+-0x1.2cc51188eba3dp-3
+0x1.7d54ddfeef2e7p-2
+0x1.5028c344ff59ap-2
+-0x1.28d34b755c6c9p-4
+0x1.4d264113b3d47p-2
+0x1.254eefe0d83c9p-2
+-0x1.13bea12911bd4p-4
+0x1.a374e61b7281fp-3
+0x1.70223891fa4e9p-3
+-0x1.1259bd1119c31p-3
+0x1.8856d1729199p-3
+0x1.5838135f71cecp-3
+-0x1.f4a2eeedee189p-4
+0x1.feaf48d12ceddp-2
+0x1.0ad246a44fcbap-1
+-0x1.d70a7f692944bp-5
+0x1.befd0eb78c4cp-2
+0x1.cfbaad5565c35p-2
+-0x1.b59522c06f668p-5
+0x1.1aac4ad233c23p-2
+0x1.201976f32495dp-2
+-0x1.b3669142713ccp-4
+0x1.08867dc5c53c7p-2
+0x1.0d1808725a53bp-2
+-0x1.8d41d360a1ccep-4
+0x1.14f7ec375d615p-1
+0x1.0815fecded965p-1
+-0x1.61701321a2836p-5
+0x1.e57b5a5bb7f06p-2
+0x1.cede6eb0ae24dp-2
+-0x1.485585296387cp-5
+0x1.33fe8cbd7d27ap-2
+0x1.259970ade795p-2
+-0x1.46b30e3f0dee4p-4
+0x1.2051516e04deap-2
+0x1.12d66694e6895p-2
+-0x1.2a13a1781f8d8p-4
+0x1.6e34ec7e38158p-2
+0x1.a539adf5afe97p-2
+-0x1.385cd0147a635p-5
+0x1.41ea39ec38f2bp-2
+0x1.725bd389d6397p-2
+-0x1.223107106958p-5
+0x1.9b69de266d95ap-3
+0x1.d991bc7ed5bafp-3
+-0x1.208cd897a863fp-4
+0x1.816bd9b87c6f1p-3
+0x1.bbac8951dd52p-3
+-0x1.074a22e65eb97p-4
+-0x1.c809585429fa8p-11
+-0x1.87965d14d4637p-8
+-0x1.546bc10e4b2d4p-6
+-0x1.5215b9699063p-7
+-0x1.eac35d8bb635bp-8
+-0x1.19e6932730a8dp-12
+-0x1.a1c0a515dbe0dp-6
+-0x1.2b6603325db44p-8
+-0x1.3f98febeb8da6p-1
+-0x1.c38c2a9d1edcdp-11
+-0x1.83bb9797325b1p-8
+-0x1.5111eb24db8c7p-6
+-0x1.4ec1c67ddb354p-7
+-0x1.e5eeadb148b66p-8
+-0x1.172034ac2ac68p-12
+-0x1.9da3f06aaa0c1p-6
+-0x1.28738ce62de1fp-8
+-0x1.37b010d29bc88p-1
+-0x1.d26259a3ba1c1p-11
+-0x1.9078ffd28959ap-8
+-0x1.67248ea61ac62p-6
+-0x1.64ada3502576ep-7
+-0x1.02e06c12896c2p-7
+-0x1.204c113b46dffp-12
+-0x1.ab3b44834f8cep-6
+-0x1.3bdd423e573ep-8
+-0x1.9ce85bf5159d6p-1
+-0x1.df1f249297785p-11
+-0x1.9b68f645f743bp-8
+-0x1.70a44d7b18fb5p-6
+-0x1.6e1cb23582b25p-7
+-0x1.09b944b5da7e9p-7
+-0x1.282bbd154cfa5p-12
+-0x1.b6e6519bfde34p-6
+-0x1.4437f777fe9e5p-8
+-0x1.90df26cab377p-1
+0x1.84c3da8abf67bp-1
+0x1.76821732bbf2p-1
+0x1.4f5ff9165960fp-1
+0x1.587ac3224e1bdp-1
+-0x1.4a5b62f8e425dp-2
+-0x1.e400067087bdp-1
+-0x1.394b7be1d046p-2
+-0x1.cf6e408b0155p-1
+-0x1.14038eba8015dp-1
+-0x1.6ea05b88b4f5p+0
+-0x1.fcb79214cdbe9p-2
+-0x1.5745302fe2dd8p+0
+-0x1.0b7e5c37b2a4ep+1
+-0x1.08780734ad925p+1
+-0x1.013cf7eab7922p+1
+-0x1.00749309c72efp+1
+0x1.132eb888a3f88p-1
+0x1.245d9455f9cf8p-1
+-0x1.321007b0aa44dp-4
+0x1.e570267db728dp-2
+0x1.01c4c07819c2p-1
+-0x1.0fb36c1e3a13p-4
+0x1.3bfee163ea4bp-2
+0x1.4f4255cd58c23p-2
+-0x1.4277f00b85e9dp-3
+0x1.285de17e4890dp-2
+0x1.3a667a450177dp-2
+-0x1.1cb1dac88a0f7p-3
+0x1.ddc466628c3a2p-2
+0x1.cc6dc85b9d214p-2
+-0x1.43908d58edecfp-4
+0x1.a2a0b78b738fdp-2
+0x1.9421faa65e9b1p-2
+-0x1.1fafe938c9757p-4
+0x1.0c3521268315dp-2
+0x1.0401c37c4528p-2
+-0x1.3329b8845cec3p-3
+0x1.f639a045392c8p-3
+0x1.e717a36af6c18p-3
+-0x1.14aea509e075ep-3
+0x1.88ad41f92adc8p-2
+0x1.5a4447d2391c2p-2
+-0x1.0d419b278cef2p-4
+0x1.58196241dea85p-2
+0x1.2f093c38f6f97p-2
+-0x1.decedbba0eec8p-5
+0x1.b901d142623ebp-3
+0x1.8326992229ffp-3
+-0x1.ff4a2c6204086p-4
+0x1.9ce85353165a6p-3
+0x1.6a5b46d6ef6f3p-3
+-0x1.cc898d28ab323p-4
+0x1.06d27adbb4fcap-1
+0x1.131c47cb7f1bbp-1
+-0x1.ab496127ddfa7p-5
+0x1.cd7ca8f6cc476p-2
+0x1.df8c6f899ea54p-2
+-0x1.7be81cc2ea262p-5
+0x1.2914f5f6cca76p-2
+0x1.2f3e2f9d41d62p-2
+-0x1.95b65e92e29d7p-4
+0x1.164ab9286bf5ap-2
+0x1.1b811fb5ddf09p-2
+-0x1.6d6f992b98ebdp-4
+0x1.1cfdfae3fa226p-1
+0x1.0fbdaa83f8c88p-1
+-0x1.409b778e69d42p-5
+0x1.f514d4b65caadp-2
+0x1.ddbfcb5ca5fp-2
+-0x1.1d0e993b00f02p-5
+0x1.439b6a0a578d7p-2
+0x1.347c9c92c908fp-2
+-0x1.306c452985563p-4
+0x1.2f3ed0a1a93fep-2
+0x1.211235ffcef5bp-2
+-0x1.1233212ad52efp-4
+0x1.788b3471d3364p-2
+0x1.b117caf8b6941p-2
+-0x1.1b5ff13c89435p-5
+0x1.4c0915d9999f4p-2
+0x1.7dfbdf2777092p-2
+-0x1.f7f7011a478dp-6
+0x1.b001bc0c49759p-3
+0x1.f14096eda05d6p-3
+-0x1.0ce31f8bdea22p-4
+0x1.9524ed8dad876p-3
+0x1.d25be0cab8539p-3
+-0x1.e46d689f2bcabp-5
+-0x1.c0100dde63a12p-11
+-0x1.80bd8ea5d8e55p-8
+-0x1.4e77fa20990b2p-6
+-0x1.4c2c675bd3a14p-7
+-0x1.e22ea2123ce5bp-8
+-0x1.14f8be4131689p-12
+-0x1.9a72b8185eed6p-6
+-0x1.2629dbb34d02cp-8
+-0x1.30345739287d7p-1
+-0x1.bba3f9bfa5cbcp-11
+-0x1.7cf17817280b8p-8
+-0x1.4b2ae7fd80251p-6
+-0x1.48e521c9d6a37p-7
+-0x1.dd6c5929243b1p-8
+-0x1.123cf1cd07a1ap-12
+-0x1.9665ad86658d3p-6
+-0x1.23429f64f0885p-8
+-0x1.2499d2fde6108p-1
+-0x1.cac5dd76f5178p-11
+-0x1.89efe20ba522fp-8
+-0x1.61760ebd0138cp-6
+-0x1.5f091e9340467p-7
+-0x1.fd8ffc1dab2fcp-8
+-0x1.1b979a9b4a6bep-12
+-0x1.a4425b507f306p-6
+-0x1.36de089b41e7ap-8
+-0x1.8de1d529f3537p-1
+-0x1.d7523621dce91p-11
+-0x1.94b63ef9ad58ep-8
+-0x1.6ad1a38fe1535p-6
+-0x1.685442fe6107ep-7
+-0x1.0586c55b03e78p-7
+-0x1.235953f37e172p-12
+-0x1.afc1074ed72b7p-6
+-0x1.3f18ef75b97ebp-8
+-0x1.809dcf7020aa6p-1
+0x1.9b17ac274212p-1
+0x1.9197e26127e49p-1
+0x1.5e6fe6ff67a88p-1
+0x1.69bd3a496e508p-1
+-0x1.143dac457a285p-2
+-0x1.a27ef947237dbp-1
+-0x1.eba52e36f0501p-3
+-0x1.7d9785fa1328cp-1
+-0x1.e9c83077059ccp-2
+-0x1.4bbc228c50328p+0
+-0x1.b681bdb630f56p-2
+-0x1.2fb35fd8f0cbap+0
+-0x1.0ceab1fa31b98p+1
+-0x1.09cae108b5cc8p+1
+-0x1.026a026419492p+1
+-0x1.0191721b9377bp+1
+0x1.21e3e3ca98ecap-1
+0x1.340d337de8356p-1
+-0x1.dceb796f53f19p-5
+0x1.012169827d922p-1
+0x1.111f76201784fp-1
+-0x1.76a1a7585d38fp-5
+0x1.58fe75e858d1ep-2
+0x1.6e1564d7a9ad5p-2
+-0x1.13dfb9c29e725p-3
+0x1.4431235f48d84p-2
+0x1.57f870a53edc7p-2
+-0x1.d120878d3fbd4p-4
+0x1.f8ddd7672e2p-2
+0x1.e626f17fd07f7p-2
+-0x1.0435822795bdcp-4
+0x1.bcc52227c73afp-2
+0x1.ad0b773498296p-2
+-0x1.a52b8c7917f27p-5
+0x1.2594c87a14aaap-2
+0x1.1c68cecfb6e51p-2
+-0x1.09befc7d7acdcp-3
+0x1.135d65d2039b1p-2
+0x1.0ae4d47368364p-2
+-0x1.ccf37f91617a3p-4
+0x1.9eeef480fee71p-2
+0x1.6e1d7011ac3b1p-2
+-0x1.b10dc114b7f56p-5
+0x1.6d92e146499bfp-2
+0x1.4221c0d30c323p-2
+-0x1.5e75cadc3b09dp-5
+0x1.e2b64c76b2dedp-3
+0x1.a7fbcf3eee3eap-3
+-0x1.ba57d4b1b486fp-4
+0x1.c4c57955be105p-3
+0x1.8d895fd56c2fdp-3
+-0x1.7f9ddef81aaa7p-4
+0x1.15794fdc2d767p-1
+0x1.236fedb67a90bp-1
+-0x1.5799eee409ef6p-5
+0x1.e9e1d4086da96p-2
+0x1.feb0dac549042p-2
+-0x1.160ed2b3ca1b4p-5
+0x1.44eec34b33dc9p-2
+0x1.4ca64ac7044b5p-2
+-0x1.5effc03fb1ed7p-4
+0x1.30f14fe92a74cp-2
+0x1.3786484368617p-2
+-0x1.30650e4667c2bp-4
+0x1.2cb127ee60493p-1
+0x1.1eb86096a6a0ap-1
+-0x1.01d0a82b6a03dp-5
+0x1.09cd245073e52p-1
+0x1.fadd6867a6e95p-2
+-0x1.a145226e599cep-6
+0x1.61c2532a31071p-2
+0x1.513d3c73966ep-2
+-0x1.075e7a3fe791fp-4
+0x1.4c1eecbebb3abp-2
+0x1.3c9ae97669485p-2
+-0x1.c8cb997af1b6dp-5
+0x1.8cb7d0052e74bp-2
+0x1.c83ffc83fd264p-2
+-0x1.c7db9208756aep-6
+0x1.5fca5ed3c33d5p-2
+0x1.94ac081657591p-2
+-0x1.71017b2b0dc02p-6
+0x1.d7b2f3ac36391p-3
+0x1.0f725d7a2fda9p-2
+-0x1.d14c0f4aeeb08p-5
+0x1.bb398bc613258p-3
+0x1.fe270a391a4aep-3
+-0x1.93911d4f1382fp-5
+-0x1.b06be751c525cp-11
+-0x1.734f4a95d115ep-8
+-0x1.42caf850f01eap-6
+-0x1.4093e87209418p-7
+-0x1.d159926edef82p-8
+-0x1.0b4d8ffa76502p-12
+-0x1.8c1eb6eb31329p-6
+-0x1.1be50a9e69a24p-8
+-0x1.1121017dd3e94p-1
+-0x1.ac242972ea38cp-11
+-0x1.6fa267a42d042p-8
+-0x1.3f9906189ec73p-6
+-0x1.3d67932431ceap-7
+-0x1.ccbe6420203cfp-8
+-0x1.08a839bec61adp-12
+-0x1.8832f5ae0ee32p-6
+-0x1.1915a973f4e5ap-8
+-0x1.fe50322f27be1p-2
+-0x1.bbe6ec836c2p-11
+-0x1.7d2af4ba2e1a9p-8
+-0x1.565c4346418d1p-6
+-0x1.5402d36563791p-7
+-0x1.ed8f267bde9a2p-8
+-0x1.12665431610d7p-12
+-0x1.96a301803d474p-6
+-0x1.2d1ab07a6e5cdp-8
+-0x1.70f232ec856eep-1
+-0x1.c80c52c336a58p-11
+-0x1.8798ebc3b9c72p-8
+-0x1.5f6aff203fb03p-6
+-0x1.5d01a5d7dce19p-7
+-0x1.fa9debceeab0fp-8
+-0x1.19e86a7453cefp-12
+-0x1.a1c35f836937p-6
+-0x1.3512010d21adp-8
+-0x1.60332ae1f28b9p-1
+0x1.bbf324aeaa46ep-1
+0x1.adcb2d5449b7ep-1
+0x1.7a0ec81eeec4ap-1
+0x1.8bdc0ec332112p-1
+-0x1.b12f5c65136c5p-3
+-0x1.55ed694649587p-1
+-0x1.95242f3b57d43p-3
+-0x1.4455187c30c31p-1
+-0x1.8074c93e1d99p-2
+-0x1.0f3c78a5ccd3dp+0
+-0x1.3b65cce2999a7p-2
+-0x1.d09af8374728ep-1
+-0x1.0f90b75dfd82ap+1
+-0x1.0c4d6082b637bp+1
+-0x1.0490b9cd521p+1
+-0x1.039555a9f3b1bp+1
+0x1.3c5597e568e88p-1
+0x1.504640be6fa2p-1
+-0x1.5b96dbe44446dp-5
+0x1.1b953ed815ccep-1
+0x1.2d52ea5e278a2p-1
+-0x1.25f64c692aad5p-5
+0x1.8c8f5b8dbac67p-2
+0x1.a4ecb5e330944p-2
+-0x1.9016aaa9ca35dp-4
+0x1.75417461b1958p-2
+0x1.8c22be56db31cp-2
+-0x1.2236ed6788d4ap-4
+0x1.150d5a1f67b04p-1
+0x1.0a62517e83a6cp-1
+-0x1.8637020a8da21p-5
+0x1.ed389a2428794p-2
+0x1.db1a8ef72d84p-2
+-0x1.503a90d69d8d5p-5
+0x1.5310a276ce1cdp-2
+0x1.480fd7d40987p-2
+-0x1.8ad7f89b91388p-4
+0x1.3e7355541cf69p-2
+0x1.344abf1a5b308p-2
+-0x1.302bf6b16e786p-4
+0x1.c75dfde244aefp-2
+0x1.923e023e690ap-2
+-0x1.44b3c374b862cp-5
+0x1.955e88cdb423fp-2
+0x1.6595204f253f1p-2
+-0x1.17c75cea8ac9ap-5
+0x1.16bb4db722aa6p-2
+0x1.ea1ac0e48430bp-3
+-0x1.489b5154c557bp-4
+0x1.05caeb10377d5p-2
+0x1.cc1f12fd4ec25p-3
+-0x1.fa3ee2f4cbc07p-5
+0x1.30040f089827p-1
+0x1.415345320915fp-1
+-0x1.019f8f0fc9f59p-5
+0x1.0f2e6aa8d1977p-1
+0x1.1c6919ac5feb9p-1
+-0x1.bbf258528a621p-6
+0x1.76bd2c6a869e8p-2
+0x1.81b21c632357fp-2
+-0x1.04be31a8deb66p-4
+0x1.602f34349fb91p-2
+0x1.6999ace00b20ap-2
+-0x1.91ae7c4233533p-5
+0x1.4912e3d66a52p-1
+0x1.39cd693dec597p-1
+-0x1.829bcfa642cb8p-6
+0x1.25f3ba2e49b03p-1
+0x1.184a1a5294224p-1
+-0x1.4d1bf9f7e269dp-6
+0x1.97980ceab7f82p-2
+0x1.849460937c51fp-2
+-0x1.874ad1e6ddf54p-5
+0x1.7f3aa1db1caabp-2
+0x1.6d57cb0f0bf2fp-2
+-0x1.2d648ce321135p-5
+0x1.b101cec6093e9p-2
+0x1.f1e390466e045p-2
+-0x1.55e614f5cf38ap-6
+0x1.8410d7947ae9cp-2
+0x1.be51b81e151eap-2
+-0x1.26a77f79a8ce9p-6
+0x1.0f26ee403fcdep-2
+0x1.38078607d09bbp-2
+-0x1.59baa055d65f7p-5
+0x1.fe644a9a43ee3p-3
+0x1.25b03e3033a81p-2
+-0x1.0a61106cbfb95p-5
+-0x1.941c760646534p-11
+-0x1.5b001719484p-8
+-0x1.2da8eb5fd2763p-6
+-0x1.2b96fb897c2cbp-7
+-0x1.b2e23f2c007fbp-8
+-0x1.f39b0e9720c4cp-13
+-0x1.722fb0b96b4ep-6
+-0x1.094eeddd95132p-8
+-0x1.d04c58bc6155p-2
+-0x1.90167d110cf43p-11
+-0x1.578bad9940efdp-8
+-0x1.2aa81186894d7p-6
+-0x1.289b685b5bc92p-7
+-0x1.ae8dd7e26894cp-8
+-0x1.eea1b1b9d81p-13
+-0x1.6e802ef319e66p-6
+-0x1.06aaba84e6291p-8
+-0x1.bd725bb4ec2p-2
+-0x1.a0fc6d4998149p-11
+-0x1.660e4158c9fddp-8
+-0x1.4244a9fa0bf5p-6
+-0x1.400e860bdb4dep-7
+-0x1.d097f39acb0aap-8
+-0x1.01c2f13510012p-12
+-0x1.7dfaf63e1cdb8p-6
+-0x1.1b6eeb861760dp-8
+-0x1.3cea46148e199p-1
+-0x1.ac677e7d71248p-11
+-0x1.6fdc38aa6723bp-8
+-0x1.4ac84e15c40acp-6
+-0x1.488335197b104p-7
+-0x1.dcde338394994p-8
+-0x1.08d1d8e319c51p-12
+-0x1.8870a3ae97602p-6
+-0x1.22ebe743eb6ecp-8
+-0x1.2394babf8fd5ap-1
+0x1.ec3f2e8a4e611p-1
+0x1.e174a930e7a0bp-1
+0x1.a6c0bbedbf491p-1
+0x1.b989d0438a564p-1
+-0x1.28b872208b3f7p-3
+-0x1.f137ca18b577dp-2
+-0x1.159f29946e85bp-3
+-0x1.d7a2823477f89p-2
+-0x1.e4b100d2778cfp-3
+-0x1.737902aa4d945p-1
+-0x1.a0e2228def0c4p-3
+-0x1.4af793f1530e3p-1
+-0x1.13574c23dda83p+1
+-0x1.0feaee0c78c1cp+1
+-0x1.079336d50806fp+1
+-0x1.06724d00a15cdp+1
+0x1.600a70d73479cp-1
+0x1.766d0282792a7p-1
+-0x1.a7b5268761e35p-6
+0x1.3fc3a8a5b64efp-1
+0x1.53efdfd18ab63p-1
+-0x1.65fc8a73208ep-6
+0x1.d19ae86d3dccp-2
+0x1.ee6a0a3fff05dp-2
+-0x1.9ed99fedb288ap-5
+0x1.b820e371a0a9ep-2
+0x1.d34a18db2096bp-2
+-0x1.4239b6642aa63p-5
+0x1.36dbb37993173p-1
+0x1.2a420a5ed50fcp-1
+-0x1.f0798bda6b993p-6
+0x1.18454446c9c61p-1
+0x1.0d6cd9c9dc80cp-1
+-0x1.adc8faa3c411cp-6
+0x1.90bd2e7a64d2dp-2
+0x1.830fd20ef1d26p-2
+-0x1.b5d0b045f5508p-5
+0x1.79e00c52a1f67p-2
+0x1.6d372738020afp-2
+-0x1.6977d68656825p-5
+0x1.fee0f967494eep-2
+0x1.c3fdb2aee7b24p-2
+-0x1.9d1dddfa0e97dp-6
+0x1.cca70da651351p-2
+0x1.96f8ab9993363p-2
+-0x1.659f2b571b9ecp-6
+0x1.4967431a56dbap-2
+0x1.21fb5339a1023p-2
+-0x1.6c5858f3fc342p-5
+0x1.369e92b9492a9p-2
+0x1.114fc91121307p-2
+-0x1.2cc8db40b8a7ap-5
+0x1.544a633ab8013p-1
+0x1.6ada4a76ad4ccp-1
+-0x1.47c12aa88c69dp-6
+0x1.337a5d3bc3b79p-1
+0x1.45411670c6e8p-1
+-0x1.1bb74e0648f87p-6
+0x1.ba067a8870c14p-2
+0x1.ca538bc4ab60fp-2
+-0x1.2114e8bc5f6cbp-5
+0x1.a11d6ad660583p-2
+0x1.af4e0039afd92p-2
+-0x1.dd4912d33c335p-6
+0x1.6fbbed2f04f5bp-1
+0x1.5eb2f09c0f10ap-1
+-0x1.ebdc8d1a8158ap-7
+0x1.4cc5280579769p-1
+0x1.3d546c38fd1f9p-1
+-0x1.a9c5ac8c8a5b7p-7
+0x1.e023ac3441777p-2
+0x1.c9c5d6b0d39f1p-2
+-0x1.b1d1acdd4850ep-6
+0x1.c54ea0afdd608p-2
+0x1.b02ddfc84b532p-2
+-0x1.661ecae1b98fp-6
+0x1.e20ac469ddbdbp-2
+0x1.150f3f27d5651p-1
+-0x1.b3395e47e79d6p-7
+0x1.b5b72c5dcab41p-2
+0x1.f74a3e6c59a26p-2
+-0x1.78d8f1ff353fep-7
+0x1.3e71fbce5c67bp-2
+0x1.6e5f730b5e32fp-2
+-0x1.7f893e3df3ecbp-6
+0x1.2cfdcc659893p-2
+0x1.5a51fc89d3b9fp-2
+-0x1.3cb46df192a6dp-6
+-0x1.6d47ebbe055eep-11
+-0x1.39a8646b9adf4p-8
+-0x1.10ac886ef9d4bp-6
+-0x1.0ecd8442a1b86p-7
+-0x1.8918bf8f2d2c3p-8
+-0x1.c3997e0708491p-13
+-0x1.4e9da704f1368p-6
+-0x1.dfa17913b3fb1p-9
+-0x1.66c4467fcd5aap-2
+-0x1.699c282c14e4ap-11
+-0x1.368170a5524fcp-8
+-0x1.0def0545a05d9p-6
+-0x1.0c14d1789c1d5p-7
+-0x1.85256c3064aap-8
+-0x1.bf0fa7b143e4cp-13
+-0x1.4b40c7f4ea5d6p-6
+-0x1.dacf850fdff73p-9
+-0x1.5844e1fcdea37p-2
+-0x1.7c11788152e65p-11
+-0x1.465af3784cac6p-8
+-0x1.26b5bda27f9ep-6
+-0x1.24b003587e261p-7
+-0x1.a8dd5176c0585p-8
+-0x1.d5e1989a175dbp-13
+-0x1.5c29685df7fadp-6
+-0x1.03322683d3dfep-8
+-0x1.dfd2c99e11d41p-2
+-0x1.867cf74be08c2p-11
+-0x1.4f4d76bc06d3dp-8
+-0x1.2e7a9a6b5ce0ap-6
+-0x1.2c673a39160f5p-7
+-0x1.b41088d4e2325p-8
+-0x1.e2c370cbdea5p-13
+-0x1.65b4f7e6fa92ap-6
+-0x1.0a075850fd919p-8
+-0x1.c29baf311d3a4p-2
+0x1.1ab313abc94b5p+0
+0x1.12ea37f88bbc1p+0
+0x1.e23579219b429p-1
+0x1.ec7a771499666p-1
+-0x1.3f1280ec49281p-4
+-0x1.23b1e9cc016c7p-2
+-0x1.524b36ad7ad0cp-4
+-0x1.32f2e8e5a2f86p-2
+-0x1.09c0b85deb586p-3
+-0x1.c2287059688e1p-2
+-0x1.063bf3be3e249p-3
+-0x1.c05cdc1efa12p-2
+-0x1.180c1c0a4baa9p+1
+-0x1.147d4e0a45756p+1
+-0x1.0b5a628e57017p+1
+-0x1.0a00317271182p+1
+0x1.8978966c4a4b5p-1
+0x1.a2c323c867aa7p-1
+-0x1.6e3423993bd38p-7
+0x1.6a750037e84a6p-1
+0x1.8190bcdf318c5p-1
+-0x1.7f38d9e0c5649p-7
+0x1.11b5fca34867ap-1
+0x1.22cbe4462466p-1
+-0x1.5a882d2707887p-6
+0x1.035e5f4545f32p-1
+0x1.13820fb978663p-1
+-0x1.50ca8625f4019p-6
+0x1.5efcc7c240d3dp-1
+0x1.4fe2b6180fffcp-1
+-0x1.d15bb3f851dfbp-7
+0x1.40d9f95b8776dp-1
+0x1.33a65b8b0b032p-1
+-0x1.e4692b3401e9p-7
+0x1.db11051a6be87p-2
+0x1.c9dcdb59a66c1p-2
+-0x1.91243e59ac65ap-6
+0x1.c0d88184d879bp-2
+0x1.b0ecc5737ce7dp-2
+-0x1.93385a25109cfp-6
+0x1.2060c9f653579p-1
+0x1.ff43db3042ad7p-2
+-0x1.8339d8778dcf6p-7
+0x1.07a496427d61ep-1
+0x1.d2baa0c631f7dp-2
+-0x1.9314f102f0d6bp-7
+0x1.86756704579b9p-2
+0x1.584a3e0514608p-2
+-0x1.4dcf683c98481p-6
+0x1.70ebeb70acdfdp-2
+0x1.451c6746c7d2ep-2
+-0x1.4f851f67b5137p-6
+0x1.7f143f1100148p-1
+0x1.9ce9b7227f7fap-1
+-0x1.332d2569133abp-7
+0x1.5ef963c7a9a2ep-1
+0x1.773d5bae1eb18p-1
+-0x1.3fc0f40afcb06p-7
+0x1.055c3fba0d0c8p-1
+0x1.117cf15053222p-1
+-0x1.08d2d09b39374p-6
+0x1.ee4ddb63ada41p-2
+0x1.01c7ac418ebddp-1
+-0x1.0a2dcc9a63cep-6
+0x1.9d21f0e6e6e6cp-1
+0x1.8a096be623df4p-1
+-0x1.cd003608b9bc7p-8
+0x1.7b173471e1c9fp-1
+0x1.6989f98551f03p-1
+-0x1.dfdf30461b29p-8
+0x1.1b6ca85a52919p-1
+0x1.0e3ec76bb0117p-1
+-0x1.8d6c17dbac184p-7
+0x1.0c2d1175ea8acp-1
+0x1.ff65503aae138p-2
+-0x1.8f73142d18e8ap-7
+0x1.0d7f431071d73p-1
+0x1.35afe212176b6p-1
+-0x1.986a96b224a06p-8
+0x1.f05ad132f414ep-2
+0x1.1d4316a8dc749p-1
+-0x1.a91b2c5d35d96p-8
+0x1.768688796113p-2
+0x1.aec6a601a51fbp-2
+-0x1.5fbcfb6e19684p-7
+0x1.62dbe6c5e8a4ap-2
+0x1.98321297019d4p-2
+-0x1.618a1b0844b6dp-7
+-0x1.3ebc8c7b5c9a8p-11
+-0x1.11b0f45e2e68dp-8
+-0x1.dbdbf57b108dep-7
+-0x1.d897ffe88d5a1p-8
+-0x1.57020981d1045p-8
+-0x1.8a0e6d9048e26p-13
+-0x1.23fa9188df8d7p-6
+-0x1.a2840ae99ce87p-9
+-0x1.d3a7eec592f2bp-3
+-0x1.3b7cea21ebcf9p-11
+-0x1.0ee6d9c7482c8p-8
+-0x1.d7025df51518p-7
+-0x1.d3c6ed88ed1e5p-8
+-0x1.5383133e7980bp-8
+-0x1.860a45baf4021p-13
+-0x1.2100bfdf09aeap-6
+-0x1.9e40119c4d2c9p-9
+-0x1.e5c6c5f7285d5p-3
+-0x1.4fd0f20afdab6p-11
+-0x1.205b6ca2b080ap-8
+-0x1.05ad414c71108p-6
+-0x1.03e18ed3ad9ep-7
+-0x1.793e243a8a554p-8
+-0x1.9f2c0e140a055p-13
+-0x1.339fe7baaf18bp-6
+-0x1.cc496d6c4bf05p-9
+-0x1.451541130aa6dp-2
+-0x1.590a188704e8ep-11
+-0x1.2846e2df34b64p-8
+-0x1.0c8d70208aed9p-6
+-0x1.0ab5a97a4d259p-7
+-0x1.8327af633cd9p-8
+-0x1.aa9329b62195ep-13
+-0x1.3c12d6a153883p-6
+-0x1.d8619250031c3p-9
+-0x1.499a35c96764ep-2
+0x1.488563c9c8e86p+0
+0x1.3dbe8665070c9p+0
+0x1.0e5ed84387ad5p+0
+0x1.0d8777ef9c8c6p+0
+-0x1.3d8495f347551p-5
+-0x1.3830868b7444p-3
+-0x1.69fb0035339e1p-5
+-0x1.5ee5688081aecp-3
+-0x1.1a312f8f66873p-4
+-0x1.02db0a73e8c1ep-2
+-0x1.57db9cf490c7dp-4
+-0x1.359901172f26fp-2
+-0x1.1d8b4122c94a9p+1
+-0x1.19b40816afc2fp+1
+-0x1.0f9a064eef647p+1
+-0x1.0e311a0d831eep+1
+0x1.b5dd6269b6af5p-1
+0x1.d25d59fd25f75p-1
+-0x1.331f3c2d7f07fp-8
+0x1.974839cbbd6b4p-1
+0x1.b18f76d66227fp-1
+-0x1.65a5f286a00f7p-8
+0x1.3cb06f980e821p-1
+0x1.50a74067d90acp-1
+-0x1.170d35f3cdfe5p-7
+0x1.2ec4d1726766p-1
+0x1.41cb0f3c3a4d6p-1
+-0x1.83892219f972p-7
+0x1.8b3897116bd46p-1
+0x1.791589b3f3e39p-1
+-0x1.9c3d50723ef35p-8
+0x1.6c9a5cd45128fp-1
+0x1.5c994a0a528c9p-1
+-0x1.d8fa7315a2ea5p-8
+0x1.15628590f038bp-1
+0x1.0ab2d02bdd917p-1
+-0x1.5995f162883ffp-7
+0x1.086173c52ddecp-1
+0x1.fccb5ca4b325ep-2
+-0x1.dd9d947c1d14cp-7
+0x1.44ac966b3206p-1
+0x1.20729ca9b6bbap-1
+-0x1.570ef1c00ca12p-8
+0x1.2b8d3ccaef2d2p-1
+0x1.09b76d4658778p-1
+-0x1.8999ad05766f7p-8
+0x1.c7e9dc9d0e5bp-2
+0x1.92bb23d2228e4p-2
+-0x1.1f99c1e427ea2p-7
+0x1.b28e760f1af23p-2
+0x1.7fa307ea95d29p-2
+-0x1.8d71c59885f2bp-7
+0x1.ade1da6ada1e6p-1
+0x1.d51d5e05a8a76p-1
+-0x1.1019441f1790dp-8
+0x1.8d86efc1c6957p-1
+0x1.ae185d4648503p-1
+-0x1.38316dbf112f1p-8
+0x1.305fb3016ad29p-1
+0x1.41bb2ef089632p-1
+-0x1.c84045244965cp-8
+0x1.225e10769f752p-1
+0x1.31e7c0a699f5fp-1
+-0x1.3b476085a11c3p-7
+0x1.ce8447732540fp-1
+0x1.b93183758eb4bp-1
+-0x1.986492011655ep-9
+0x1.ac68b547233d1p-1
+0x1.989f5ed8d4039p-1
+-0x1.d48f0d9c58974p-9
+0x1.4974bf0a2b552p-1
+0x1.3a2acb1f13242p-1
+-0x1.565f22efa1dc8p-8
+0x1.3a7d2d834b4d2p-1
+0x1.2be28a6ce4445p-1
+-0x1.d926ee5ab3697p-8
+0x1.2c0c7f04c14dcp-1
+0x1.58a7e3cf0a88cp-1
+-0x1.6a5f38bea1b8ep-9
+0x1.16ff4fb0042ebp-1
+0x1.4090aa76206f8p-1
+-0x1.9f9fb774c07f2p-9
+0x1.b17e81eeb88b6p-2
+0x1.f2729c8e394e7p-2
+-0x1.2f7dfa037ff64p-8
+0x1.9e63794e860ep-2
+0x1.dc87331a040cp-2
+-0x1.a31e39ab18e95p-8
+-0x1.0b9b608e09495p-11
+-0x1.cb933544fecfbp-9
+-0x1.8f866c406fbeep-7
+-0x1.8cc890027b0dcp-8
+-0x1.1ffc24b06f1afp-8
+-0x1.4ad82fc0849a2p-13
+-0x1.ea48731dfc29bp-7
+-0x1.5f615c16a24cdp-9
+-0x1.18396a4f9feeap-3
+-0x1.08d2865832c2ep-11
+-0x1.c6cafd895f89p-9
+-0x1.8b5e2ab1577dep-7
+-0x1.88a79c117acc6p-8
+-0x1.1cfd021a4e12dp-8
+-0x1.4766e1bae9c64p-13
+-0x1.e52e6e9443866p-7
+-0x1.5bb95a117dbcap-9
+-0x1.335af1fb3263bp-3
+-0x1.1f346e923d514p-11
+-0x1.ed3b407226e45p-9
+-0x1.c2c76b4b926e4p-7
+-0x1.bfaf84eb71431p-8
+-0x1.44edfedbba65dp-8
+-0x1.6312cf2276dbap-13
+-0x1.071819d5c3925p-6
+-0x1.8c7535c914442p-9
+-0x1.9bd1bcbe50094p-3
+-0x1.271d0f0dafd47p-11
+-0x1.fad03f21c6291p-9
+-0x1.ce915eedd645ap-7
+-0x1.cb64c2cebb5dcp-8
+-0x1.4d6d63cfe236cp-8
+-0x1.6cd9dedef56c1p-13
+-0x1.0e56c2f93cff5p-6
+-0x1.96d37bc4d843ep-9
+-0x1.e37bf014ece17p-3
+0x1.78a783679c293p+0
+0x1.74af3d6671c44p+0
+0x1.41730d3a4802ap+0
+0x1.2ffd229e3fe0dp+0
+-0x1.3288ebcf36776p-6
+-0x1.3ea7d24eebadep-4
+-0x1.3a4fe07797eaep-6
+-0x1.45befcdb1071bp-4
+-0x1.b722c10bb3dd1p-6
+-0x1.b72cde12084fbp-4
+-0x1.6529663d36a52p-5
+-0x1.57f463091c394p-3
+-0x1.2337293ebee0cp+1
+-0x1.1ee12b0c034dbp+1
+-0x1.1449f44c0b166p+1
+-0x1.12deb3deee2d4p+1
+0x1.df8ace70461bdp-1
+0x1.ff2893be8410cp-1
+-0x1.fe70e462dae1bp-10
+0x1.c00af16ec6a8p-1
+0x1.dd4b30443f0d9p-1
+-0x1.01ba6ae6a6744p-9
+0x1.68a6fdc4e0efp-1
+0x1.7fa28f011e467p-1
+-0x1.2a12c5e26ae58p-9
+0x1.5bb59d4a11c71p-1
+0x1.71cb8a292ef25p-1
+-0x1.3f198ff928c3cp-8
+0x1.b61b2e677872cp-1
+0x1.a0bacca4fb9d5p-1
+-0x1.5f5bd866b9d79p-9
+0x1.95905c84f54b4p-1
+0x1.82ac584d05fdcp-1
+-0x1.61ff81d3ae77cp-9
+0x1.3f1d965752d4dp-1
+0x1.3204f8fa91abap-1
+-0x1.918a39483cd03p-9
+0x1.32b88576a6d94p-1
+0x1.265d8d8866efp-1
+-0x1.9df3708119bf1p-8
+0x1.67d9f33ea2818p-1
+0x1.406b69f6134bep-1
+-0x1.2473b394aa157p-9
+0x1.4d28c1dbe3988p-1
+0x1.2824dbf5ae662p-1
+-0x1.26a69ffebccd1p-9
+0x1.0637cc5aced0ep-1
+0x1.d02af97c3bb7bp-2
+-0x1.4e41fab8ed53dp-9
+0x1.f815ea1569a86p-2
+0x1.bde4bbea1582bp-2
+-0x1.5882bd60beac8p-8
+0x1.dadf1cb9b7de8p-1
+0x1.06590dd2f3e32p+0
+-0x1.cfd540c62f6a8p-10
+0x1.b8c4b986e4d3p-1
+0x1.e26b0f83f0271p-1
+-0x1.d3507ed73f104p-10
+0x1.5d1ea42929f62p-1
+0x1.751592d74bc39p-1
+-0x1.090a65826649bp-9
+0x1.4fdcabe06d717p-1
+0x1.65bd4294329f9p-1
+-0x1.113d142d74c96p-8
+0x1.fdb1135a7cb11p-1
+0x1.e64179dfa81d4p-1
+-0x1.5c2163ee9ac3cp-10
+0x1.d9f59cdf960adp-1
+0x1.c41f4bbe9ad6bp-1
+-0x1.5ebca93df3ffcp-10
+0x1.791ece89aace9p-1
+0x1.67a881d4f67e8p-1
+-0x1.8dd750e6c8d6dp-10
+0x1.6b05c41d970cp-1
+0x1.5a33b271d55a6p-1
+-0x1.9a18e0c319462p-9
+0x1.48c6164a90632p-1
+0x1.797e41cf7a8b7p-1
+-0x1.35842f656dde6p-10
+0x1.330f41dde36e2p-1
+0x1.60ac9741fd184p-1
+-0x1.37d2057dee591p-10
+0x1.eddfe91650804p-2
+0x1.1bd7430ef8d14p-1
+-0x1.61d5701642325p-10
+0x1.dc1772b334a38p-2
+0x1.11a61ad1956eap-1
+-0x1.6be6654f5f6cep-9
+-0x1.ae97e3cb49e7cp-12
+-0x1.71bd6b5e2a953p-9
+-0x1.416da01b961a7p-7
+-0x1.3f38f5f18325fp-8
+-0x1.cf61f1b72916p-9
+-0x1.0a2c42085c4a5p-13
+-0x1.8a71fd7f5de77p-7
+-0x1.1ab1cb70b338cp-9
+-0x1.3e4000aceec12p-4
+-0x1.a9f93c0a82d57p-12
+-0x1.6dc5e6fee5462p-9
+-0x1.3dfaccdb9d80bp-7
+-0x1.3bcc3195b4faap-8
+-0x1.ca693b3a403b2p-9
+-0x1.075131f368602p-13
+-0x1.86369e3d7e9f4p-7
+-0x1.17a95ab7476b7p-9
+-0x1.432e3203dd66ep-4
+-0x1.daf116b46b2f9p-12
+-0x1.97d221fb46d96p-9
+-0x1.78874ab3ee0c3p-7
+-0x1.75f1d49959f72p-8
+-0x1.0f6897a8b6ddap-8
+-0x1.259647d4b3be2p-13
+-0x1.b312185262155p-7
+-0x1.4b27a851f368dp-9
+-0x1.913f9ee4ca917p-4
+-0x1.e811c0db42574p-12
+-0x1.a317da6037acap-9
+-0x1.824f3a3955acp-7
+-0x1.7fa8955d6cf95p-8
+-0x1.1675798359bd4p-8
+-0x1.2db3b027b1345p-13
+-0x1.bf18a248d76cap-7
+-0x1.53c1db37fb0cp-9
+-0x1.2822530b2eae5p-3
+0x1.a0b2e8ae07ddcp+0
+0x1.a10760198c5e9p+0
+0x1.6efe97d493a28p+0
+0x1.6099d613824d5p+0
+-0x1.44e186bf906e4p-7
+-0x1.5ebec90b078cbp-5
+-0x1.312cdffff3265p-7
+-0x1.4a002a5a40372p-5
+-0x1.942c09b51ef17p-7
+-0x1.a7a8e8e408e33p-5
+-0x1.412bbb3b8647dp-6
+-0x1.493c3f3975f26p-4
+-0x1.27d751258c4b9p+1
+-0x1.22a1530e31bebp+1
+-0x1.17f004f4a5b7cp+1
+-0x1.170c227945452p+1
+0x1.feb04fa18bc22p-1
+0x1.105b045acf7cfp+0
+-0x1.d61a3f27077bbp-11
+0x1.db6c8bc52b4c5p-1
+0x1.faba34de22947p-1
+-0x1.a4a3007f3734bp-11
+0x1.888acac422cbbp-1
+0x1.a1c46fe926f78p-1
+-0x1.ad9abd20c0c8cp-11
+0x1.80f141eb2bb4ap-1
+0x1.99a0fb38fab52p-1
+-0x1.c46210c20a485p-10
+0x1.d7293215504ap-1
+0x1.bf130feae4d34p-1
+-0x1.461747e9c0981p-10
+0x1.b1cdb297cad9cp-1
+0x1.9cc40dc1e8b93p-1
+-0x1.240a1a08534ffp-10
+0x1.5e137f0ffe519p-1
+0x1.4f08a28ceb321p-1
+-0x1.280a2dbd89efdp-10
+0x1.56a427a76260dp-1
+0x1.481432a85a557p-1
+-0x1.33172c5f6d155p-9
+0x1.82f4c7ea2502cp-1
+0x1.592ce45cd5cc3p-1
+-0x1.0f7d930ad3b8cp-10
+0x1.6452967dcace8p-1
+0x1.3d345d0fb76ccp-1
+-0x1.e64f2ee04e9d1p-11
+0x1.1fa15561d4ab4p-1
+0x1.fdea92d28b612p-2
+-0x1.ed13740de4b07p-11
+0x1.198737f568837p-1
+0x1.f2eaafc978a92p-2
+-0x1.ff487038750e3p-10
+0x1.fd4544a8dbba4p-1
+0x1.1c28ebd632abbp+0
+-0x1.ae7f167976a6fp-11
+0x1.d6602f6fb06ecp-1
+0x1.0388c5db6e0dap+0
+-0x1.818a4c9e0b604p-11
+0x1.7e1c5ea1397e3p-1
+0x1.9bc440a4e25b8p-1
+-0x1.86d29648f2c05p-11
+0x1.7634705089d6dp-1
+0x1.926e3bbe1815fp-1
+-0x1.9565a8e71a2f7p-10
+0x1.10c6314aa0cc3p+0
+0x1.0442466613ecp+0
+-0x1.4329a9287ba67p-11
+0x1.f8fdc64173876p-1
+0x1.e1c3e0d5a9e62p-1
+-0x1.216a344aa32fep-11
+0x1.9c1b99bfe98dep-1
+0x1.890ef4884e13ep-1
+-0x1.2563664f0820cp-11
+0x1.93bc692c5892cp-1
+0x1.8110d4c91984ap-1
+-0x1.304585220027ep-10
+0x1.5e45ad29a5726p-1
+0x1.920a165c6dbe1p-1
+-0x1.1ff967ffc9034p-11
+0x1.45eef1f53d428p-1
+0x1.763f82e4c462ap-1
+-0x1.01ff63226f99cp-11
+0x1.0cdbb9e6ae199p-1
+0x1.34f4983659c78p-1
+-0x1.05e34753197d8p-11
+0x1.07a1eaae14d0dp-1
+0x1.2ef85142de936p-1
+-0x1.0eb76d86fba54p-10
+-0x1.55aa05708dcf4p-12
+-0x1.2560ed3514bd4p-9
+-0x1.fe16d8ffb2c6fp-8
+-0x1.fa96c156f78d9p-9
+-0x1.6fae7c82b228cp-9
+-0x1.a666e6aae1379p-14
+-0x1.38fb4d67f4ed1p-7
+-0x1.c09ef5953b109p-10
+-0x1.7bd1beb667dccp-5
+-0x1.51d9f6427a1d5p-12
+-0x1.221acef4905c3p-9
+-0x1.f865a2b9cee54p-8
+-0x1.f4ef8b0117e1cp-9
+-0x1.6b9419fcac51p-9
+-0x1.a1b0310b8dd24p-14
+-0x1.357d2ec22e7ffp-7
+-0x1.bb9d5941f1314p-10
+-0x1.66594f04221a6p-5
+-0x1.866477a7792fbp-12
+-0x1.4f386d6ddf23p-9
+-0x1.396a13632dabdp-7
+-0x1.37437d415ec68p-8
+-0x1.c3d45b0fa8cc1p-9
+-0x1.e2a5271e2c1b2p-14
+-0x1.659e86c2b53fap-7
+-0x1.13a5778f53f12p-9
+-0x1.aa470ace895p-5
+-0x1.913bd1f75119dp-12
+-0x1.58878e0775151p-9
+-0x1.417d16e2cee16p-7
+-0x1.3f48518e342a8p-8
+-0x1.cf783cd5757d8p-9
+-0x1.f00c57a4b16a3p-14
+-0x1.6f8ce3d8a0916p-7
+-0x1.1abf652a72585p-9
+-0x1.3ddd23dc6846cp-4
+0x1.be012a047ca81p+0
+0x1.b2bc2117ad0d5p+0
+0x1.8fc1aab5524fap+0
+0x1.8a1d734aca48ap+0
+-0x1.7f4e503448645p-8
+-0x1.a87c963a3c384p-6
+-0x1.8bae7f6bd65a3p-8
+-0x1.b3304beea4e2ap-6
+-0x1.ae9abc6bb4584p-8
+-0x1.d03e9fa456cd2p-6
+-0x1.296d93c6db51p-7
+-0x1.3dded4e843f64p-5
+-0x1.2b695091a45f7p+1
+-0x1.24c67b623f894p+1
+-0x1.1a54d21c873dep+1
+-0x1.19c8cff23f3dcp+1
+0x1.0a8df83cd9102p+0
+0x1.1c748a8e4161p+0
+-0x1.ddaefac632b79p-12
+0x1.ea51e21eeab74p-1
+0x1.05615e22d1966p+0
+-0x1.c4308ad92ed8cp-12
+0x1.9c6b93a6f462p-1
+0x1.b71175c74f6c3p-1
+-0x1.707c486bc4a05p-12
+0x1.97f302dc00417p-1
+0x1.b24684b67288ep-1
+-0x1.4329cc8e243c6p-11
+0x1.ef9178b6d3db8p-1
+0x1.d55ad700209a4p-1
+-0x1.4b91295f80501p-11
+0x1.c17076a75e46ep-1
+0x1.ab27bb7b39fa7p-1
+-0x1.39b55ee8e71a4p-11
+0x1.71b36d1e220b5p-1
+0x1.615a04b174abap-1
+-0x1.fda61a662bffdp-12
+0x1.6d438d7513461p-1
+0x1.5d37159d62a65p-1
+-0x1.be349bb60e0f6p-11
+0x1.96f7026baf99ap-1
+0x1.6b857bc5f8c9ap-1
+-0x1.1422dd3bec1b4p-11
+0x1.71253949d8191p-1
+0x1.48e55d22414ddp-1
+-0x1.0549a47bced17p-11
+0x1.2fbc29cbf977cp-1
+0x1.0d7ef5d2b3a56p-1
+-0x1.a8a653ef35729p-12
+0x1.2c18136e47667p-1
+0x1.0a34d42d91aefp-1
+-0x1.739e0accc0137p-11
+0x1.0b40d2d757dc5p+0
+0x1.2c7f4c43d32fap+0
+-0x1.b5c144493f874p-12
+0x1.e6b19109ce0ddp-1
+0x1.0dc9669ee6cb2p+0
+-0x1.9e2cb731547e6p-12
+0x1.92ed640cbc33fp-1
+0x1.b48e12f451ab7p-1
+-0x1.5070301bfd13ap-12
+0x1.8e3a3bddb7162p-1
+0x1.aeee8b16c628dp-1
+-0x1.26899d7a69b43p-11
+0x1.1ddcf7465917dp+0
+0x1.10c4e123d05f6p+0
+-0x1.48acd02d35c2dp-12
+0x1.0504abe1ad041p+0
+0x1.f20ce77aeb677p-1
+-0x1.36f8850677ba6p-12
+0x1.b21c9a90a7f61p-1
+0x1.9e115a911f127p-1
+-0x1.f941d31c56554p-13
+0x1.ad261b170eaddp-1
+0x1.995436d71aa83p-1
+-0x1.ba3c0d119ff0bp-12
+0x1.6dc44b85c9046p-1
+0x1.a3b65ffbce01fp-1
+-0x1.25a9b4974c061p-12
+0x1.5035a7c0c6b02p-1
+0x1.81fc7e0ede245p-1
+-0x1.1601ffef6d241p-12
+0x1.1a885c10c429ep-1
+0x1.449cbaaf252cep-1
+-0x1.c4eaa447a827cp-13
+0x1.1774d0944e48fp-1
+0x1.41172fdb6f69bp-1
+-0x1.8afaa40619f53p-12
+-0x1.0a12ae8bbe64ap-12
+-0x1.c8f0cff700d29p-10
+-0x1.8d3c2e425a97ap-8
+-0x1.8a8257e3e3ee2p-9
+-0x1.1e5591bfa5854p-9
+-0x1.48f2b1be9af1cp-14
+-0x1.e778fdf6e9c33p-8
+-0x1.5d5dc33f3cae7p-10
+-0x1.e6540683abd45p-6
+-0x1.06f23b786c92p-12
+-0x1.c39228de6d0e6p-10
+-0x1.8891256639e51p-8
+-0x1.85df82642ada5p-9
+-0x1.1af82aacac992p-9
+-0x1.451517b16259ep-14
+-0x1.e1be7ccdb776fp-8
+-0x1.5942bc598a10bp-10
+-0x1.ea6753697ca48p-6
+-0x1.3e86349ae62abp-12
+-0x1.11824a94a183bp-9
+-0x1.03c43160d44bap-7
+-0x1.01fbda0f57031p-8
+-0x1.767d177ab2f1cp-9
+-0x1.89cb3e349bccdp-14
+-0x1.23c8c98d27a49p-7
+-0x1.c8ed2c04fe329p-10
+-0x1.f1945ade6ab7p-6
+-0x1.476c08bcbb14ep-12
+-0x1.192634f77ca65p-9
+-0x1.0a63d0edca62dp-7
+-0x1.088fd6d8e56c4p-8
+-0x1.80099050895fdp-9
+-0x1.94cb56f6a0544p-14
+-0x1.2bef64c51f45p-7
+-0x1.d493c197d2deap-10
+-0x1.4ee9b0c6bb41dp-5
+0x1.d551fbc174fa4p+0
+0x1.bfee165df5907p+0
+0x1.a3b9c6add0d49p+0
+0x1.a479e13aac6dep+0
+-0x1.e18450b5237d1p-9
+-0x1.0fd71974a2d0dp-6
+-0x1.04635f64fb977p-8
+-0x1.21fd2e0972543p-6
+-0x1.0da9eb368b306p-8
+-0x1.277191f529a5bp-6
+-0x1.38a02c16e1a8ap-8
+-0x1.561996614a211p-6
+-0x1.2e3542ea62605p+1
+-0x1.263d767e56e37p+1
+-0x1.1baeec18ef73fp+1
+-0x1.1b0c26775f146p+1
+0x1.12df072cb2f9ap+0
+0x1.25722dd052438p+0
+-0x1.03130b8b9c22ep-12
+0x1.f42f226bb08f2p-1
+0x1.0ab187423b25cp+0
+-0x1.dcb489449f0e2p-13
+0x1.a74bf1353afcap-1
+0x1.c2bb5b40fc08dp-1
+-0x1.80f037848c23ep-13
+0x1.a23660b1075b2p-1
+0x1.bd4761e791de2p-1
+-0x1.02a3040315512p-12
+0x1.010608a7cf271p+0
+0x1.e62626f3fca15p-1
+-0x1.67042f81bca66p-12
+0x1.cbe85c25be737p-1
+0x1.b4c3ef02dcb01p-1
+-0x1.49ca66ac018e8p-12
+0x1.7c8d77c243fa9p-1
+0x1.6b74a1a62fb5cp-1
+-0x1.0999094dd2899p-12
+0x1.77783644bcbf6p-1
+0x1.66b99ed31c19bp-1
+-0x1.657e441b1e887p-12
+0x1.a61c470e22606p-1
+0x1.79735dad13a99p-1
+-0x1.2b1abae733d23p-12
+0x1.79babb98c612dp-1
+0x1.50bc6b09652bbp-1
+-0x1.12d16793f9bb3p-12
+0x1.38a3a9afb5f6dp-1
+0x1.158c4f13190ebp-1
+-0x1.bad743da07fc4p-13
+0x1.3477f3b37837cp-1
+0x1.11c6739bced7dp-1
+-0x1.29ec6b6b0c229p-12
+0x1.14c201ea72696p+0
+0x1.3900d187a54b4p+0
+-0x1.da08782be589bp-13
+0x1.f19678517d309p-1
+0x1.14b1c532e064p+0
+-0x1.b372d559b6b89p-13
+0x1.9e67bf9e5cdfep-1
+0x1.c25ac0682b036p-1
+-0x1.5eb18831c5fc2p-13
+0x1.990827229d5bap-1
+0x1.bbe1e42c1c4e5p-1
+-0x1.d800f3e5dece7p-13
+0x1.27af4b92b926p+0
+0x1.1a288917c15dfp+0
+-0x1.63fde9f535cfap-13
+0x1.0ab2380cefcep+0
+0x1.fce6b5c279d97p-1
+-0x1.47082b6d8b873p-13
+0x1.be3830b04d4ccp-1
+0x1.a9a12bfb93528p-1
+-0x1.07670469986bdp-13
+0x1.b88db0afdc23fp-1
+0x1.a4380c85436b9p-1
+-0x1.6274625bbd00dp-13
+0x1.79460969e813fp-1
+0x1.b0d36e2401eeep-1
+-0x1.3f076c4f6920dp-13
+0x1.5704ab46854f9p-1
+0x1.89c29d4592f02p-1
+-0x1.25896a59635d7p-13
+0x1.2204ac07557fp-1
+0x1.4d2dfc574df5fp-1
+-0x1.da406d1603d57p-14
+0x1.1e84ccc008721p-1
+0x1.492cb8c75ca4dp-1
+-0x1.3e30893ce614dp-13
+-0x1.93a3726c3d0e9p-13
+-0x1.5a982dacc0c18p-10
+-0x1.2d4ea2e52ee2fp-8
+-0x1.2b3d51a961e6fp-9
+-0x1.b260176219003p-10
+-0x1.f30572467da52p-15
+-0x1.71c0d5d756bb8p-8
+-0x1.08ff868e628c5p-10
+-0x1.452a0e967bc1dp-6
+-0x1.8e8d1724adbb1p-13
+-0x1.5639e07550947p-10
+-0x1.298274f399b1p-8
+-0x1.2777cf94c692p-9
+-0x1.ace68fe80c9f5p-10
+-0x1.ecbb5549fb0e3p-15
+-0x1.6d17cf90088a5p-8
+-0x1.05a87fa749dd5p-10
+-0x1.4fe001558172p-6
+-0x1.016f60fdf1571p-12
+-0x1.ba1b3aac06d85p-10
+-0x1.ac5454c1d3d5bp-8
+-0x1.a963de804b7d7p-9
+-0x1.34bf63e329548p-9
+-0x1.3e44d804d444fp-14
+-0x1.d7a5a94541e2cp-8
+-0x1.78b6accd20931p-10
+-0x1.489ec88ae33cep-6
+-0x1.08ae4dc161fbep-12
+-0x1.c68cc93f3d97p-10
+-0x1.b71c339681f4p-8
+-0x1.b418ccf77ac48p-9
+-0x1.3c84c13fb38c6p-9
+-0x1.473a19f55586bp-14
+-0x1.e4ec1241dba13p-8
+-0x1.8231f79a9bf9ep-10
+-0x1.7bdd21b89148dp-6
+0x1.e3497721ce903p+0
+0x1.c5c2823abccf1p+0
+0x1.aaf641805c5cep+0
+0x1.a994060f0c2fbp+0
+-0x1.4c41c97087835p-9
+-0x1.7ba0f3cc0b3d3p-7
+-0x1.6fb2410f51ab8p-9
+-0x1.9c18c3ee83c38p-7
+-0x1.6839f2509261p-9
+-0x1.8d8465907f4f5p-7
+-0x1.70f9049b867b2p-9
+-0x1.96c920349330ep-7
+-0x1.30154bf0ebb4ap+1
+-0x1.26f1c71efb073p+1
+-0x1.1bc9c8aa5b1b6p+1
+-0x1.1abff71af8ffdp+1
+0x1.183a9370c7df3p+0
+0x1.2b3eb21c0ebcfp+0
+-0x1.30d85c6b9dcbep-13
+0x1.f8d740f4ff99bp-1
+0x1.0d33f4c118f59p+0
+-0x1.076c2f7a4b337p-13
+0x1.a821645c07d13p-1
+0x1.c3a052cc8d90ap-1
+-0x1.93172b3511bc2p-14
+0x1.9fd05c12a1329p-1
+0x1.bab4f356bf4d5p-1
+-0x1.a535598a9d5d8p-14
+0x1.0711273d4b69dp+0
+0x1.f1191e45a3ffdp-1
+-0x1.a5104a4d685a3p-13
+0x1.d0e1ee964771fp-1
+0x1.b9535d642270dp-1
+-0x1.6aad22fe78bc9p-13
+0x1.7d6351277948p-1
+0x1.6c3b8d3a0da7dp-1
+-0x1.14acd8b306d47p-13
+0x1.7513f5afb0557p-1
+0x1.647f79d82ac78p-1
+-0x1.21572c0da3e47p-13
+0x1.b003fb0c07317p-1
+0x1.8294a12ffb9cep-1
+-0x1.5ef20c9cf1a9ep-13
+0x1.7dcefc9be302bp-1
+0x1.547726de3120cp-1
+-0x1.2e6bbe286d4dfp-13
+0x1.3953208523aedp-1
+0x1.162b17227b0a2p-1
+-0x1.cdad4e5d14b75p-14
+0x1.328191e681428p-1
+0x1.100031afae42p-1
+-0x1.e2c54fb764834p-14
+0x1.1af38da37265cp+0
+0x1.413fc7391606ap+0
+-0x1.16014d140d2c4p-13
+0x1.f6c195ce0187cp-1
+0x1.17fd58b7fb486p+0
+-0x1.deee26c140444p-14
+0x1.9f49afdbbc38p-1
+0x1.c36b66e3505c5p-1
+-0x1.6d5d98dfe616bp-14
+0x1.968076807fe6fp-1
+0x1.b8d79f86864ffp-1
+-0x1.7e150cf70f4c7p-14
+0x1.2e110717f8f7cp+0
+0x1.20429a72670aep+0
+-0x1.a1a953a20a4f6p-14
+0x1.0d62efa7d5946p+0
+0x1.01057cfc0796bp+0
+-0x1.67d08705a60bep-14
+0x1.bf26557a2577ep-1
+0x1.aa84963ffe6f9p-1
+-0x1.12862f07e498ap-14
+0x1.b5e2616f1be68p-1
+0x1.a1ab8e41d2fdep-1
+-0x1.1f1158521065ap-14
+0x1.80b129db48feap-1
+0x1.b94657823edcbp-1
+-0x1.779a2a0f8d8e3p-14
+0x1.5a3bc677c3d6ap-1
+0x1.8d6e294616331p-1
+-0x1.44aaf42d6ddddp-14
+0x1.22979abfe5a6bp-1
+0x1.4dd6205a7a075p-1
+-0x1.f156fe0cd29ep-15
+0x1.1cde383326c5p-1
+0x1.47490f366a758p-1
+-0x1.03d966b7e16a5p-14
+-0x1.2667b1d73dd4dp-13
+-0x1.f998c7e156a86p-11
+-0x1.b788aa8b8f4f4p-9
+-0x1.b48485614db4bp-10
+-0x1.3cd2f02cee97ep-10
+-0x1.6bf9a615e3407p-15
+-0x1.0db09f77011a8p-8
+-0x1.82915c80e601ep-11
+-0x1.d218c720e1c7cp-7
+-0x1.224f1a9d072c2p-13
+-0x1.f28ffb85cc71bp-11
+-0x1.b16b2b0620fe8p-9
+-0x1.ae71c406d18bfp-10
+-0x1.386a7fac571f7p-10
+-0x1.66e944a56f3a6p-15
+-0x1.09f00f8bcccdap-8
+-0x1.7d30837abdc59p-11
+-0x1.e3de0a657a76p-7
+-0x1.9b04414d91f3fp-13
+-0x1.60ee0d36ae953p-10
+-0x1.5ece1d0097c89p-8
+-0x1.5c65d7527a113p-9
+-0x1.f9bbc0a213188p-10
+-0x1.fc2498173a559p-15
+-0x1.78831443b69dcp-8
+-0x1.348806aa40f88p-10
+-0x1.c13f4cee3acf7p-7
+-0x1.a6b327abc03efp-13
+-0x1.6af64392e957dp-10
+-0x1.677d4dd756556p-8
+-0x1.6505c699be6dp-9
+-0x1.0320647a810f7p-9
+-0x1.054b22114d6ecp-14
+-0x1.8336e51301e3dp-8
+-0x1.3c2b4fa8bf194p-10
+-0x1.caafb4bdb3f42p-7
+0x1.ea4bcee1f3bb1p+0
+0x1.c841d275e7c84p+0
+0x1.a7a235c2794fbp+0
+0x1.a26278e97f22cp+0
+-0x1.eb7299256bb19p-10
+-0x1.1a8efd261c3a3p-7
+-0x1.141b2e8df5d51p-9
+-0x1.3673f56280992p-7
+-0x1.1251896aa3e78p-9
+-0x1.2e9d38e1a5b39p-7
+-0x1.13ebbeeacf7abp-9
+-0x1.2f7bf7744a601p-7
+-0x1.312254ef380fep+1
+-0x1.2743874db01ap+1
+-0x1.1ac4d8218fdbap+1
+-0x1.19476928752b8p+1
+0x1.1b283479cb24cp+0
+0x1.2e6ab302f84e2p+0
+-0x1.792877ca0eabbp-14
+0x1.faef0d0490efep-1
+0x1.0e54c39c83d8ep+0
+-0x1.3a70760f3e05cp-14
+0x1.9ff7c66657971p-1
+0x1.badf36ec9ad4bp-1
+-0x1.dd1d95152183ap-15
+0x1.93c7b47ef5fdcp-1
+0x1.adcea2db83ed5p-1
+-0x1.cb6e64873f581p-15
+0x1.0a66f7e2a6e69p+0
+0x1.f720d2f050d7ep-1
+-0x1.034f805a42dedp-13
+0x1.d32025f492e7ap-1
+0x1.bb615b2455c1dp-1
+-0x1.ae340ea05efbfp-14
+0x1.753b3b14c6b31p-1
+0x1.64a40d8b4465dp-1
+-0x1.45281dc9cbebp-14
+0x1.692379b6d7af4p-1
+0x1.595ddb249b0d6p-1
+-0x1.38e326ee48bfbp-14
+0x1.b57b3ca947ec1p-1
+0x1.87a02fa5a6ed8p-1
+-0x1.b07bbe71dfc6p-14
+0x1.7fa5cb7c60b1p-1
+0x1.5625cf00f49a9p-1
+-0x1.6701cd718a221p-14
+0x1.32a1cb4282cf1p-1
+0x1.101d53d6520a4p-1
+-0x1.0f8d4c75d5b8bp-14
+0x1.28b570b680078p-1
+0x1.07263896bc0a1p-1
+-0x1.055774d4f817fp-14
+0x1.1e5c8104e0205p+0
+0x1.45d29bbe43aa8p+0
+-0x1.5674ad3b3ea7ap-14
+0x1.f915a86803ca6p-1
+0x1.197a5e9cf2da5p+0
+-0x1.1c17dcac383e5p-14
+0x1.96aa040cd4332p-1
+0x1.b909849862d46p-1
+-0x1.ad72e71e051c3p-15
+0x1.89dab4d3cead8p-1
+0x1.a9b6aa34f24ddp-1
+-0x1.9d3ebec1cbd7p-15
+0x1.3192e099a550bp+0
+0x1.239d278980736p+0
+-0x1.0152e72a81716p-14
+0x1.0e990569ac6f2p+0
+0x1.022dd0205eba1p+0
+-0x1.ab0c11695139cp-15
+0x1.b60e39b66068bp-1
+0x1.a1d56c3f18f87p-1
+-0x1.42d00986603b7p-15
+0x1.a8873ca76b01p-1
+0x1.94eac860e9c9bp-1
+-0x1.36a41f9dc7p-15
+0x1.84bfa92d0864ep-1
+0x1.bde498859a631p-1
+-0x1.d0cde9f3f5304p-15
+0x1.5badc6cc959fbp-1
+0x1.8f14736917957p-1
+-0x1.83b664bd1e382p-15
+0x1.1cf95854395bfp-1
+0x1.47681b523288fp-1
+-0x1.26966f1bd1256p-15
+0x1.149687338caep-1
+0x1.3dce84c956be5p-1
+-0x1.1bbff3518fa71p-15
+-0x1.931c1244bbe2dp-14
+-0x1.5a23ef490c6dp-11
+-0x1.2ce9a650db6afp-9
+-0x1.2ad9067d3a22cp-10
+-0x1.b1ce815dcc81cp-11
+-0x1.f25e149c5518bp-16
+-0x1.7144d30cbda0ep-9
+-0x1.08a6b557a2aa2p-11
+-0x1.5fc14f7385135p-7
+-0x1.8c9a4ce3d594ap-14
+-0x1.548d93f86fa08p-11
+-0x1.280e3089f4e8dp-9
+-0x1.26061924d93c2p-10
+-0x1.aacde35f60678p-11
+-0x1.ea52acdde7128p-16
+-0x1.6b4ee4d3ed827p-9
+-0x1.0461176b2fce1p-11
+-0x1.6f08c489fc6f7p-7
+-0x1.42bd480c82316p-13
+-0x1.1520de0c6c4c2p-10
+-0x1.1ce87eb4ee707p-8
+-0x1.1af3fc80603d5p-9
+-0x1.9abbe5fc47eeap-10
+-0x1.8f01500e6944fp-15
+-0x1.27a546870113bp-8
+-0x1.f526900cbaf88p-11
+-0x1.5553be8781db9p-7
+-0x1.4c090fd52a7bap-13
+-0x1.1d1c5390b421ap-10
+-0x1.23cf7fbd3a6b2p-8
+-0x1.21cedd5f931f4p-9
+-0x1.a4af46890ce81p-10
+-0x1.9a7f74029a06fp-15
+-0x1.302946590edd2p-8
+-0x1.00a55a3f47342p-10
+-0x1.53be6a9ba9618p-7
+0x1.eb8bf89454788p+0
+0x1.c7a7f2f515f94p+0
+0x1.9cfc3110eb24ap+0
+0x1.93dbf95a48e72p+0
+-0x1.84ecf5a476302p-10
+-0x1.c0121cab87d6ap-8
+-0x1.a04d799b00c98p-10
+-0x1.d486a9c5ddd6bp-8
+-0x1.a6e9e3976a851p-10
+-0x1.d05064228956dp-8
+-0x1.ab651c002d635p-10
+-0x1.d2e7ba96fe6b4p-8
+-0x1.3159ec5eb84c6p+1
+-0x1.272a2f9d82937p+1
+-0x1.18f173f65bbcap+1
+-0x1.170134085e52fp+1
+0x1.1bc16cdc2ba29p+0
+0x1.2f10b9a9d3e79p+0
+-0x1.e9060a8d4868dp-15
+0x1.fa4944107649ep-1
+0x1.0dfb65b04820cp+0
+-0x1.69599b9af074ap-15
+0x1.90fdaa525128ep-1
+0x1.aad17e4efb7fbp-1
+-0x1.06481ca384c5fp-15
+0x1.809331b48bb3p-1
+0x1.993c449167a79p-1
+-0x1.dc04280f71e3fp-16
+0x1.0b1639385db3bp+0
+0x1.f85d6769c4af2p-1
+-0x1.4e440ec7fb203p-14
+0x1.d26e5ac9c1c83p-1
+0x1.babe84d4a1be3p-1
+-0x1.e9b9dd945d63ap-15
+0x1.66629bbcacdccp-1
+0x1.56cbe91410a49p-1
+-0x1.6126112fb1dfap-15
+0x1.56485e1f26794p-1
+0x1.47be48f70dfddp-1
+-0x1.3f516b162f48ap-15
+0x1.b69a703a7c855p-1
+0x1.88a971482e879p-1
+-0x1.16ef0f5452916p-14
+0x1.7f140536c9fc9p-1
+0x1.55a073b975b36p-1
+-0x1.9927889240cd4p-15
+0x1.2672ffa5746ebp-1
+0x1.051c124e83906p-1
+-0x1.276d064499a05p-15
+0x1.193be27280b3cp-1
+0x1.f262f2c0c367ep-2
+-0x1.0b46bd6abc73cp-15
+0x1.1f0f80a6f331ep+0
+0x1.46c3748fa0ce9p+0
+-0x1.b981bef7c0e36p-15
+0x1.f85d210277f4ap-1
+0x1.190459495239bp+0
+-0x1.43786e8f9f9f1p-15
+0x1.86ef037636df6p-1
+0x1.a63c6484d5de7p-1
+-0x1.d286b582b298p-16
+0x1.75d2c4828bc0fp-1
+0x1.91fb2b828695cp-1
+-0x1.a5daacf5fedep-16
+0x1.324ad5f6adb05p+0
+0x1.244d119e64483p+0
+-0x1.4be0f509027b5p-15
+0x1.0e390a09f666p+0
+0x1.01d216f499ae6p+0
+-0x1.e688afcce2b5ep-16
+0x1.a570e0b64820fp-1
+0x1.91f825cb24a81p-1
+-0x1.5eef1fe55e78fp-16
+0x1.9354eeb72f5d2p-1
+0x1.80ae0ac63c41ap-1
+-0x1.3d63dbc708773p-16
+0x1.8593f88090b59p-1
+0x1.bed64052e1328p-1
+-0x1.2d5b2926938ep-15
+0x1.5b3b49b3fa383p-1
+0x1.8e91c94c4b1a1p-1
+-0x1.bdc5ac1917344p-16
+0x1.12ab559245a2fp-1
+0x1.3b9c1cbdf46d8p-1
+-0x1.4450ced32bcd5p-16
+0x1.07613e480e1a5p-1
+0x1.2eae3c5f0a47fp-1
+-0x1.26802cd8645eep-16
+-0x1.06acd0ab0dd59p-14
+-0x1.c31af22a420a9p-12
+-0x1.8829b2171aedbp-10
+-0x1.8578c4d13e34ep-11
+-0x1.1aad9906542bp-11
+-0x1.44bf4584277c1p-16
+-0x1.e13f4ee52151bp-10
+-0x1.58e7c0698dc66p-12
+-0x1.17ff2e54aa527p-7
+-0x1.02c72dd893225p-14
+-0x1.bc69a7a102f11p-12
+-0x1.825844faadf22p-10
+-0x1.7fb1903c5afa3p-11
+-0x1.167bfe07dac89p-11
+-0x1.3fede2f9309aap-16
+-0x1.da1b89ba70be4p-10
+-0x1.53c9cf08c83b6p-12
+-0x1.1563d61edc481p-7
+-0x1.ef6788b9ae7d9p-14
+-0x1.a96441dd3167ap-11
+-0x1.c9ca0fadb0d15p-9
+-0x1.c6a5d896ef8cbp-10
+-0x1.49fb9b2cafefep-10
+-0x1.323c7201f3edp-15
+-0x1.c5d0c6afc40c5p-9
+-0x1.929f96be4d64cp-11
+-0x1.0271221c5a446p-7
+-0x1.fdf02bc4bd3bp-14
+-0x1.b5df13af76821p-11
+-0x1.d490894ae1924p-9
+-0x1.d159644a2a9bdp-10
+-0x1.51bff70c378fp-10
+-0x1.3b385efd2305p-15
+-0x1.d321115cad7b5p-9
+-0x1.9c19a7602d0e5p-11
+-0x1.0088658b785e2p-7
+0x1.ebd559b91ab84p+0
+0x1.c6c63e48af92p+0
+0x1.8d15ef8fa86f5p+0
+0x1.845b4eb5b8e78p+0
+-0x1.27e36c7faec94p-10
+-0x1.5547a3ae5469ep-8
+-0x1.2c3e83541027ap-10
+-0x1.521b01dc6aacp-8
+-0x1.3750c3f4a91bap-10
+-0x1.5338268072e29p-8
+-0x1.41813b95124e8p-10
+-0x1.5cb35aef4d97p-8
+-0x1.3160b0d10ca96p+1
+-0x1.270e00da1731ap+1
+-0x1.16f2581c185afp+1
+-0x1.14f46803c9542p+1
+0x1.1bd409d145008p+0
+0x1.2f24e5340e3d7p+0
+-0x1.2176d1d77615ap-15
+0x1.f99092d1c9cb6p-1
+0x1.0d97d7d8f061ap+0
+-0x1.7b4fd3ed943cp-16
+0x1.801339916429p-1
+0x1.98b341025fac4p-1
+-0x1.edec4573b9258p-17
+0x1.6e9e904c08e88p-1
+0x1.8604a31e07636p-1
+-0x1.c8e4284a34efap-17
+0x1.0b2b87e090585p+0
+0x1.f883e2fb3e866p-1
+-0x1.881fe6b349ac7p-15
+0x1.d1a869783a3b9p-1
+0x1.ba0933a19085dp-1
+-0x1.fa62f45de556bp-16
+0x1.55cb87909d3a5p-1
+0x1.47496dc5bbc33p-1
+-0x1.44d3829a68ap-16
+0x1.44dcbdc8d350cp-1
+0x1.376a5152c73b5p-1
+-0x1.2abe72e78fd73p-16
+0x1.b6bd5b09b977dp-1
+0x1.88c9b20998764p-1
+-0x1.478f9b4245a09p-15
+0x1.7e71b97405216p-1
+0x1.550bff05d40cp-1
+-0x1.a7dd352039848p-16
+0x1.18d56c7fd0f77p-1
+0x1.f1aa575529d9bp-2
+-0x1.10a1161d2d372p-16
+0x1.0aef6c5f5c43fp-1
+0x1.d8a5f9cb645ap-2
+-0x1.f5f170a1bfc7fp-17
+0x1.1f2542b71fcfp+0
+0x1.46e0bfcfe65fp+0
+-0x1.030579778af56p-15
+0x1.f78fa76320b7fp-1
+0x1.1881002d93d77p+0
+-0x1.4e97722f588cap-16
+0x1.754deab83de37p-1
+0x1.915eb3eb7af2bp-1
+-0x1.ad4cb012c10ap-17
+0x1.6341c343572e8p-1
+0x1.7c39cfd658dcdp-1
+-0x1.8adb61de37c54p-17
+0x1.3261317f33373p+0
+0x1.246272ebeb93ap+0
+-0x1.85a51a850df45p-16
+0x1.0dce262763ccep+0
+0x1.016bf159af872p+0
+-0x1.f7c054c2592aap-17
+0x1.92c82cd86acb8p-1
+0x1.8027a9ec1e7efp-1
+-0x1.4360c032b83d1p-17
+0x1.7fa3a32a497f9p-1
+0x1.6de17de9c402cp-1
+-0x1.2985dab4ddb87p-17
+0x1.85adc359ec3f3p-1
+0x1.bef39b8f330a7p-1
+-0x1.64d0723296308p-16
+0x1.5abbbf00483aep-1
+0x1.8e00387a11155p-1
+-0x1.d446c39dd352bp-17
+0x1.07094243262c3p-1
+0x1.2e49737963ec9p-1
+-0x1.322990133692bp-17
+0x1.f613428e02158p-2
+0x1.208a3776ac5bfp-1
+-0x1.1b7f51c1407c6p-17
+-0x1.55f68649d9d2fp-15
+-0x1.25a29e3c8ddb9p-12
+-0x1.fe896d4a1fcf2p-11
+-0x1.fb088c5849434p-12
+-0x1.700113c20c582p-12
+-0x1.a6c57b904afa3p-17
+-0x1.3941621e6c642p-10
+-0x1.c103bb2f79b7ap-13
+-0x1.ab83a502cb20dp-8
+-0x1.516afa0ed3f5cp-15
+-0x1.21bb821840889p-12
+-0x1.f7c04ced8cd97p-11
+-0x1.f44b57a81c59ap-12
+-0x1.6b1cecc8a55f4p-12
+-0x1.a126fad377aa2p-17
+-0x1.351783be62abbp-10
+-0x1.bb0befee4398ap-13
+-0x1.90abf576bf95cp-8
+-0x1.6fd6d4231e2fcp-14
+-0x1.3bdabeda7a4d4p-11
+-0x1.6a90935760a2ep-9
+-0x1.6813a51277bfcp-10
+-0x1.0557df3fd668bp-10
+-0x1.c6c328e442053p-16
+-0x1.50f594c33a5d5p-9
+-0x1.3edfb665b68ebp-11
+-0x1.71e16415076b8p-8
+-0x1.7aec5db3d74d2p-14
+-0x1.455f44ecfd728p-11
+-0x1.72c3d642c9f6dp-9
+-0x1.703880247bbbbp-10
+-0x1.0b410ecb00ea1p-10
+-0x1.d4773a82938f2p-16
+-0x1.5b1ce8b0aa3b3p-9
+-0x1.4616009ac82d4p-11
+-0x1.7788e869cfadp-8
+0x1.ea92db9614de7p+0
+0x1.c6d48a338f729p+0
+0x1.80d375ba68eb6p+0
+0x1.79e4c50fe1f03p+0
+-0x1.bc4614b03cfc4p-11
+-0x1.00313483d20eep-8
+-0x1.c81727f2bb5e8p-11
+-0x1.00fd845f5d005p-8
+-0x1.ed4e50b34dae7p-11
+-0x1.0b341c97f20a7p-8
+-0x1.f60f4c2a27f28p-11
+-0x1.0efae802423b6p-8
+-0x1.312dc0c316a23p+1
+-0x1.2711d1eac3672p+1
+-0x1.150a3b36e2409p+1
+-0x1.135f59b345108p+1
+0x1.1b47bb017d19bp+0
+0x1.2e8cdba5b3308p+0
+-0x1.447dbcd144f6dp-16
+0x1.f9a99b19990b6p-1
+0x1.0da55600b2579p+0
+-0x1.bf31d2c990b38p-17
+0x1.6f60eaf7c46d5p-1
+0x1.86d4924f1fa4p-1
+-0x1.12cf94e3acecdp-17
+0x1.60542bb8b3516p-1
+0x1.76bbd7eaf340dp-1
+-0x1.f1d891ef44f5ep-18
+0x1.0a8b01be21a9fp+0
+0x1.f761ee7f6a254p-1
+-0x1.b17f58a95f41ap-16
+0x1.d1c33b7a69a11p-1
+0x1.ba21c55d64b4cp-1
+-0x1.259d4279cdbc4p-16
+0x1.45984cb1c77b8p-1
+0x1.381a56f21c2afp-1
+-0x1.5fc9efbd83aa7p-17
+0x1.3722399c4194ap-1
+0x1.2a845e5662636p-1
+-0x1.3ba3c4f4eca74p-17
+0x1.b5b64bb8d85eap-1
+0x1.87d6ba4fe0878p-1
+-0x1.6ab63113035c7p-16
+0x1.7e87b701a899ap-1
+0x1.55201c45f0e3bp-1
+-0x1.ec8a86331539bp-17
+0x1.0b89616959141p-1
+0x1.d9bad9721ff17p-2
+-0x1.286d0bfd00409p-17
+0x1.ff54c3e67c905p-2
+0x1.c465a7cec03d9p-2
+-0x1.0a5f736df5b73p-17
+0x1.1e8151413fa91p+0
+0x1.46041ec85adbbp+0
+-0x1.1e72947c66905p-16
+0x1.f7ab7f34fc869p-1
+0x1.1892cb79b8574p+0
+-0x1.84283918acc92p-17
+0x1.6409f404bd237p-1
+0x1.7d23368f199e6p-1
+-0x1.d129e8678a699p-18
+0x1.5495d8a0995cdp-1
+0x1.6b3187da47fcap-1
+-0x1.a16bc78f63347p-18
+0x1.31b8b703ff30dp+0
+0x1.23c1565549553p+0
+-0x1.af4cc254c4216p-17
+0x1.0ddca252fe7e8p+0
+0x1.0179c8f56d782p+0
+-0x1.248382ed5ba18p-17
+0x1.8078314edf749p-1
+0x1.6eac6421d3953p-1
+-0x1.5ef467766dd6bp-18
+0x1.700c2f7f670e3p-1
+0x1.5eff8bb5f298p-1
+-0x1.3b199165d0089p-18
+0x1.84eb57c8c2bc9p-1
+0x1.be16511cec9f2p-1
+-0x1.90124338ea1f4p-17
+0x1.5acd08432b5d6p-1
+0x1.8e13f32a60c56p-1
+-0x1.1434dd025c4f5p-17
+0x1.f71e62c306956p-2
+0x1.21234594c0897p-1
+-0x1.55b3abacc09fep-18
+0x1.e270107bfad97p-2
+0x1.15494e453555ap-1
+-0x1.35fa68580123p-18
+-0x1.bc9c56c7f2515p-16
+-0x1.7dc6bb9028b54p-13
+-0x1.4be4a1f4f4905p-11
+-0x1.499d957b8e7e4p-12
+-0x1.de781926e257cp-13
+-0x1.12d678a7d55p-17
+-0x1.974930f7fc9afp-11
+-0x1.23e5f7d558122p-13
+-0x1.40cae79eb868cp-8
+-0x1.b783b1d3d9b85p-16
+-0x1.7966777154927p-13
+-0x1.4816be3f4c296p-11
+-0x1.45d660a3ea094p-12
+-0x1.d8fc1a936e683p-13
+-0x1.0fb0002037544p-17
+-0x1.929e122ee3bdbp-11
+-0x1.208d6feaf01bcp-13
+-0x1.30f890586f31bp-8
+-0x1.0a4d0b89055fdp-14
+-0x1.c9550ae30a791p-12
+-0x1.1c3d3c21ff886p-9
+-0x1.1a49e6c94b4ap-10
+-0x1.99c500f087929p-11
+-0x1.493ad966fb1ffp-16
+-0x1.e7e3eb5e93136p-10
+-0x1.f3f95166efdb8p-12
+-0x1.1eab9c4ddc973p-8
+-0x1.112f39b72d3e3p-14
+-0x1.d527531d58285p-12
+-0x1.21c309ff3c71fp-9
+-0x1.1fc600f81710ap-10
+-0x1.a1bb31ef4d08dp-11
+-0x1.51bd72351344ep-16
+-0x1.f480698a5cc2dp-10
+-0x1.fdb02f6fee233p-12
+-0x1.1fe8f5b392848p-8
+0x1.eb11ae4e71a11p+0
+0x1.c88e1ca40c6ep+0
+0x1.79db5bf80c521p+0
+0x1.764c680d76ecp+0
+-0x1.5babd96fdd21bp-11
+-0x1.914f12b261c6cp-9
+-0x1.77be52f1c5b6fp-11
+-0x1.a80cd976eda4p-9
+-0x1.a2d9accdca60bp-11
+-0x1.c449abe0e68edp-9
+-0x1.a9962ba8c07ffp-11
+-0x1.cabb1039b1f81p-9
+-0x1.3147291a1f6p+1
+-0x1.277bbdca5ef71p+1
+-0x1.13809d9bd3e61p+1
+-0x1.12888cfdc1f59p+1
+0x1.1b8dc689626aap+0
+0x1.2ed8c1b24d088p+0
+-0x1.97066ac2e4549p-17
+0x1.fc5dc9c21042ep-1
+0x1.0f1a7843aca05p+0
+-0x1.3e60e07232424p-17
+0x1.618451e59073dp-1
+0x1.78010e38e79bcp-1
+-0x1.74db91e5126f2p-18
+0x1.58980d00d82bap-1
+0x1.6e76f9340d741p-1
+-0x1.5d8261cdd9c19p-18
+0x1.0adb1e16b1e95p+0
+0x1.f7f2a56626e47p-1
+-0x1.0c0e4fdd237cfp-16
+0x1.d4a9d67a2b867p-1
+0x1.bcc9d93d5e073p-1
+-0x1.9ced4ffb3cca8p-17
+0x1.3845465fda6c3p-1
+0x1.2b9612afcf67cp-1
+-0x1.d29c51d0cff2fp-18
+0x1.2fc05057e9f8p-1
+0x1.2391f74b6d82p-1
+-0x1.b1a500cc2f614p-18
+0x1.b63994089538ap-1
+0x1.884ffa30abc6cp-1
+-0x1.c150bf9e3e8eap-17
+0x1.80e894bb228c5p-1
+0x1.574d247df9fcep-1
+-0x1.5adfaa293b167p-17
+0x1.0099506661cd8p-1
+0x1.c612b6ff21251p-2
+-0x1.8a877b900f4e6p-18
+0x1.f335b4265923ap-2
+0x1.b984c6ef804a9p-2
+-0x1.6f2a8652f22c1p-18
+0x1.1ed324225bbf8p+0
+0x1.4672354aaf673p+0
+-0x1.626084c3cab82p-17
+0x1.faae28a00c0e8p-1
+0x1.1a7fd943517acp+0
+-0x1.11066fe27467cp-17
+0x1.55cd393d3c04ep-1
+0x1.6c99ac04be8c9p-1
+-0x1.349e30fd1eb07p-18
+0x1.4cae7a33a0fe6p-1
+0x1.62131b97eac1p-1
+-0x1.1eda11697f79p-18
+0x1.320cceb2ba588p+0
+0x1.2411c0a3f62d9p+0
+-0x1.0b0b34f0ab8dp-17
+0x1.0f6d761372b77p+0
+0x1.02f8d45762506p+0
+-0x1.9bd70fe86574cp-18
+0x1.715757f49fae2p-1
+0x1.603ba1be459b3p-1
+-0x1.d2502a70b463bp-19
+0x1.67a32d1c3dc81p-1
+0x1.56f8952cab1d5p-1
+-0x1.b1a403e0591f5p-19
+0x1.854c66837361ap-1
+0x1.be84ca4a244b9p-1
+-0x1.f5dfd48e06a51p-18
+0x1.5cab0d547aba5p-1
+0x1.90357fe0a428p-1
+-0x1.8964cd74f0af5p-18
+0x1.e411f0d3af7f5p-2
+0x1.1638cf68077ep-1
+-0x1.d0d63325a8293p-19
+0x1.d7cfd948012b7p-2
+0x1.0f32136060d4p-1
+-0x1.b445c1223f9d6p-19
+-0x1.209635ade6758p-16
+-0x1.ef9acff411f0ep-14
+-0x1.aed954b50e034p-12
+-0x1.abe4715b45fd2p-13
+-0x1.369051580c529p-13
+-0x1.64c82feec1f21p-18
+-0x1.085c2de3cd0a7p-11
+-0x1.7aedf2f80a2c9p-14
+-0x1.f75fee163823dp-9
+-0x1.1de794fd95993p-16
+-0x1.eaffa1b16a892p-14
+-0x1.aad83952b7fccp-12
+-0x1.a7ea5ed0b5ddfp-13
+-0x1.33ad66ec49b93p-13
+-0x1.61774de357543p-18
+-0x1.05e7318be1848p-11
+-0x1.77685f66bb9ep-14
+-0x1.f8e05b2b4fca5p-9
+-0x1.81a95ee8ce11fp-15
+-0x1.4b287d0c4c3f5p-12
+-0x1.bda1681e574a6p-10
+-0x1.ba928d24c0953p-11
+-0x1.4137f2c248234p-11
+-0x1.dccbdd68c1271p-17
+-0x1.614919bf0d877p-10
+-0x1.87ee065939c25p-12
+-0x1.e0cfe40480c1cp-9
+-0x1.89b1aa26f2132p-15
+-0x1.520e2d77a8f3fp-12
+-0x1.c49e8d5e182a7p-10
+-0x1.c1836b55d82ccp-11
+-0x1.464198c98a1f7p-11
+-0x1.e6ba13983882ap-17
+-0x1.68a4c5167b0afp-10
+-0x1.8e1391bd2afefp-12
+-0x1.e53c16adaa65dp-9
+0x1.ecd32d8a4a5ecp+0
+0x1.ca4df2e8c0bb4p+0
+0x1.73d15d863b567p+0
+0x1.7409d88ceb74ep+0
+-0x1.20619103b86f5p-11
+-0x1.4d5fa331bb3f4p-9
+-0x1.3dd59f3e5b381p-11
+-0x1.672f9649d7aep-9
+-0x1.6934b675e41a9p-11
+-0x1.84f59b5c8de9fp-9
+-0x1.6adb592fc2446p-11
+-0x1.86c7667039584p-9
+-0x1.31bfb9467cep+1
+-0x1.27f974baf44eap+1
+-0x1.120a5a2a2cf54p+1
+-0x1.11f9aa79265dp+1
+0x1.1cd8876026d4ap+0
+0x1.303f34b596c0fp+0
+-0x1.257107172b0b9p-17
+0x1.ff8d05e401afep-1
+0x1.10d20811eeda1p+0
+-0x1.def8d63785d19p-18
+0x1.53ff85a835b5ep-1
+0x1.698d7f6e36702p-1
+-0x1.07877cc8177a6p-18
+0x1.53633905583a1p-1
+0x1.68e67632451b1p-1
+-0x1.fb0148a5489f6p-19
+0x1.0c561f5dae6cap+0
+0x1.fa9f046f2f1dap-1
+-0x1.7e2275271edb8p-17
+0x1.d816ea181870cp-1
+0x1.bfec938611029p-1
+-0x1.32f99f9288e16p-17
+0x1.2b615fc6b5812p-1
+0x1.1f742298872e7p-1
+-0x1.41c4202b4c7dep-18
+0x1.2accf23624d06p-1
+0x1.1ee84b14e0fcap-1
+-0x1.336592ad58eecp-18
+0x1.b8a6aa811e366p-1
+0x1.8a8dc18782901p-1
+-0x1.40b12dba392cfp-17
+0x1.83b7ae10f5f19p-1
+0x1.59df4e4f55b5ep-1
+-0x1.023e85801520ap-17
+0x1.ec086e5b10e1ep-2
+0x1.b314ed67ac80cp-2
+-0x1.111cf8243d279p-18
+0x1.eb14b62bfff02p-2
+0x1.b23a64875f1a3p-2
+-0x1.053122134b5acp-18
+0x1.2056124340689p+0
+0x1.487b8a9b7d47bp+0
+-0x1.f956356977e6ap-18
+0x1.fe3bb8f0c55aep-1
+0x1.1cc71a1770ac2p+0
+-0x1.960eb29245972p-18
+0x1.47ff55f83eab1p-1
+0x1.5cb0577f0a575p-1
+-0x1.a9d0bdbe98653p-19
+0x1.476033fdc6288p-1
+0x1.5bf9a2416b77cp-1
+-0x1.96da8ff79acb7p-19
+0x1.339a5319e2cd6p+0
+0x1.258de4f362327p+0
+-0x1.7d18c2053e0f9p-18
+0x1.11464799cba1ep+0
+0x1.04bcaf3f8358dp+0
+-0x1.327f75626305dp-18
+0x1.62a64f0dccd45p-1
+0x1.5235e89bf3bcp-1
+-0x1.422b724eb2184p-19
+0x1.61fccfcfbd745p-1
+0x1.5194239381974p-1
+-0x1.33f586579d21ep-19
+0x1.8716c0928457p-1
+0x1.c08e747a95649p-1
+-0x1.69ce1d102ed72p-18
+0x1.5ede20fb6b4d7p-1
+0x1.92b80c9023d92p-1
+-0x1.27f76183e2d21p-18
+0x1.d17fd3dd2d65cp-2
+0x1.0b93a6c800c9ap-1
+-0x1.49860ca621cap-19
+0x1.d0a9280cdefc7p-2
+0x1.0b18944e6a337p-1
+-0x1.3d31d9cb4da33p-19
+-0x1.75ecb210f9dfbp-17
+-0x1.411472970cep-14
+-0x1.1720b40cd598cp-12
+-0x1.15365972e80b8p-13
+-0x1.926693ba43594p-14
+-0x1.ce49298e91cd7p-19
+-0x1.5688aa81bdb55p-12
+-0x1.eafb9fc3230ecp-15
+-0x1.a389ae4a5afe2p-9
+-0x1.73697db47f14dp-17
+-0x1.3eec24c70d2eep-14
+-0x1.1540905f8bebp-12
+-0x1.13598140142a1p-13
+-0x1.8fb26406c7929p-14
+-0x1.cb2df6b634729p-19
+-0x1.543b75482f1a6p-12
+-0x1.e7af1051ee174p-15
+-0x1.acfcbb86cf42ap-9
+-0x1.1752527b48ce1p-15
+-0x1.dfb172f9b27f7p-13
+-0x1.5d4883965ce3cp-10
+-0x1.5ae2ea549b7d5p-11
+-0x1.f78a178e411c2p-12
+-0x1.5953ce0b6aa9ep-17
+-0x1.ffbed20e9240ap-11
+-0x1.3331601be95a8p-12
+-0x1.9a35a0abeafd6p-9
+-0x1.1b7f0de16f9c2p-15
+-0x1.e6dcd64a03debp-13
+-0x1.6138f9efeebd9p-10
+-0x1.5ecc7513eb27dp-11
+-0x1.fd37ed893315ep-12
+-0x1.5e7d1619031afp-17
+-0x1.03b26c42ebd0ap-10
+-0x1.36a8501e4f461p-12
+-0x1.9c403f105e4dbp-9
+0x1.ee4b3b91e0ed9p+0
+0x1.cb4a9951b742cp+0
+0x1.6e8d56ca2addfp+0
+0x1.73226a2f32938p+0
+-0x1.e7ba097e0efdep-12
+-0x1.1a429aaf2f4b7p-9
+-0x1.0e2b18014341dp-11
+-0x1.31939ce089486p-9
+-0x1.378aa07a3caaep-11
+-0x1.4ead75e729e82p-9
+-0x1.3597e62878978p-11
+-0x1.4d578e6b5937ep-9
+-0x1.3230e685aa51bp+1
+-0x1.28423469f272ep+1
+-0x1.10c3890791b5p+1
+-0x1.11bd8ea8b90c6p+1
+0x1.1e0c97c83cc53p+0
+0x1.318d2628a7161p+0
+-0x1.b6621ce998ebep-18
+0x1.00b0d798084e3p+0
+0x1.11cec5dd586adp+0
+-0x1.687e6b8fd7611p-18
+0x1.47eaa7d3e8c9dp-1
+0x1.5ca4e5cbc07e9p-1
+-0x1.79ad3d046b105p-19
+0x1.512ec22221b9ep-1
+0x1.668b415568d16p-1
+-0x1.78c57ea2fd0bdp-19
+0x1.0db8360073a5ap+0
+0x1.fd1dfc1c1abb2p-1
+-0x1.1a202822f9369p-17
+0x1.da10580405c7dp-1
+0x1.c1baea19c6009p-1
+-0x1.c7d23c9cb8d1ap-18
+0x1.1ff1bb1c17e04p-1
+0x1.14abad0cd96bcp-1
+-0x1.c05bd873e8f75p-19
+0x1.28b5562b311bcp-1
+0x1.1cef91ab869eap-1
+-0x1.be1674f9de003p-19
+0x1.baeae7b3218c1p-1
+0x1.8ca607f507f1ap-1
+-0x1.da2d379bfd948p-18
+0x1.85560fda3589ap-1
+0x1.5b5ab69f8691dp-1
+-0x1.801e53a5f43f6p-18
+0x1.d9410bc684a35p-2
+0x1.a240c62dcd9f3p-2
+-0x1.7e4b4ce536189p-19
+0x1.e7a53ae09f9c8p-2
+0x1.af25e7588f156p-2
+-0x1.7c7228e75e63dp-19
+0x1.21bf4bb0502a1p+0
+0x1.4a635bccf18c6p+0
+-0x1.75320f19b2ee2p-18
+0x1.0023c6a5507b7p+0
+0x1.1e17aa05eb0fep+0
+-0x1.2d930b5f39093p-18
+0x1.3bb9b80603bdep-1
+0x1.4ea489ba82dcdp-1
+-0x1.28d11dc5e55dbp-19
+0x1.4521d64682ef9p-1
+0x1.5966af3f36e75p-1
+-0x1.2758a5bde9501p-19
+0x1.350d386ffde67p+0
+0x1.26f096f56f2c4p+0
+-0x1.19ab9de03834ap-18
+0x1.125674fc197d3p+0
+0x1.05c0cd05bdaa6p+0
+-0x1.c7afae4eb8333p-19
+0x1.5591f2988844dp-1
+0x1.45ba4ef5fd684p-1
+-0x1.c1e7af1062d25p-20
+0x1.5f98f0ddb5835p-1
+0x1.4f4c2b1252331p-1
+-0x1.bfc9c0bb8d101p-20
+0x1.88c1bacfdd924p-1
+0x1.c27458f38093cp-1
+-0x1.0e3c83140846bp-18
+0x1.6021de32a8038p-1
+0x1.942971d16f74cp-1
+-0x1.bd9faa8e94deep-19
+0x1.c0e87d1f4d276p-2
+0x1.021058575aadbp-1
+-0x1.d9e0ab82e8595p-20
+0x1.cda1e9c7f46edp-2
+0x1.095c1d7fc1c61p-1
+-0x1.d8863b04e1804p-20
+-0x1.e36147cf50815p-18
+-0x1.9f11095530728p-15
+-0x1.68d59ee2714ddp-13
+-0x1.665bbac53b33cp-14
+-0x1.0418950682bf8p-14
+-0x1.2acd9c7e0bb78p-19
+-0x1.baccf0a6c2979p-13
+-0x1.3d5a22c855308p-15
+-0x1.642d112ba7126p-9
+-0x1.e19ceba157e85p-18
+-0x1.9d8c9b1ff6ec2p-15
+-0x1.6783f14e4df7dp-13
+-0x1.650c5e67330d1p-14
+-0x1.03252d7bc951p-14
+-0x1.29b5fbb3d89a7p-19
+-0x1.b92e8e2967aacp-13
+-0x1.3c312654717c6p-15
+-0x1.6da80b2264ebap-9
+-0x1.94b2461c60b03p-16
+-0x1.5b80bb1829951p-13
+-0x1.11b657aae57d3p-10
+-0x1.0fd580897d7c8p-11
+-0x1.8a97f2ebf592fp-12
+-0x1.f45445904a3f7p-18
+-0x1.72b8ed2d2e5efp-11
+-0x1.e175077a94858p-13
+-0x1.5e86770114393p-9
+-0x1.97f5425077906p-16
+-0x1.5e4db64d568a1p-13
+-0x1.13619730f57c5p-10
+-0x1.117dd17f9308ep-11
+-0x1.8cffe2a58059bp-12
+-0x1.f85c91f7ebd41p-18
+-0x1.75b5d0ad7c674p-11
+-0x1.e4648ded69f7bp-13
+-0x1.5f5a5e2633098p-9
+0x1.ef9d54fef756dp+0
+0x1.cbc1f6822227ap+0
+0x1.6b2cc1f59f175p+0
+0x1.73819598eaf2dp+0
+-0x1.9ce710d28d01p-12
+-0x1.de71b6fca610ep-10
+-0x1.c9b09b4c3081ep-12
+-0x1.02f704658adacp-9
+-0x1.0afa9f61e14e7p-11
+-0x1.1e62cac1b2a32p-9
+-0x1.08080361ff109p-11
+-0x1.1c646342b0739p-9
+-0x1.3298232a9d291p+1
+-0x1.2863e24a57699p+1
+-0x1.0ff75376f3027p+1
+-0x1.11d2cdea931abp+1
+0x1.1f2391231a3b4p+0
+0x1.32bba0e4559aep+0
+-0x1.48783c7e31bdp-18
+0x1.011cf16fb4339p+0
+0x1.124360ee4d92ap+0
+-0x1.0c5ce949d2c0ap-18
+0x1.403be76c8e138p-1
+0x1.547048cf64475p-1
+-0x1.1459eeecded79p-19
+0x1.51f68a5cae425p-1
+0x1.6760be5a49f7fp-1
+-0x1.1df1cba3264f9p-19
+0x1.0ef9c6e5cfc48p+0
+0x1.ff61eaf2a9de7p-1
+-0x1.a13cb6c254d6ep-18
+0x1.daf9cf44a8b03p-1
+0x1.c2906a2b71f59p-1
+-0x1.4dccf70bad3c5p-18
+0x1.18b63716c43c2p-1
+0x1.0dd78cdec423p-1
+-0x1.3e75d3da8e667p-19
+0x1.2972d460a1c47p-1
+0x1.1da227179e60bp-1
+-0x1.4a60878577e23p-19
+0x1.bcf9d5f2182dcp-1
+0x1.8e8d3bc6a0c7cp-1
+-0x1.5f2e218e4944dp-18
+0x1.8615780eb688cp-1
+0x1.5c09ffff36191p-1
+-0x1.19e1ffc4af9abp-18
+0x1.cd6089fb3a269p-2
+0x1.979eaa8c67efp-2
+-0x1.10dd7593f9a25p-19
+0x1.e8dc61fcff926p-2
+0x1.b03cd81d5643p-2
+-0x1.1ad7083b45032p-19
+0x1.23071dcdece03p+0
+0x1.4c1f02006774fp+0
+-0x1.140df608faedp-18
+0x1.009cb7ffc542ep+0
+0x1.1eb33d69091e7p+0
+-0x1.b9de887c61ef5p-19
+0x1.33f3d4685fa2p-1
+0x1.45cb1304e4875p-1
+-0x1.a5dfc5fa1670cp-20
+0x1.45ed1086b0e2dp-1
+0x1.5a4fbfce0abbbp-1
+-0x1.b5b1a96e4524cp-20
+0x1.365da3c8ef346p+0
+0x1.283252eae80acp+0
+-0x1.a116e4cda8b4p-19
+0x1.12d41b8e6310ep+0
+0x1.0638e29d4836bp+0
+-0x1.4e365a77b059bp-19
+0x1.4d46cff4a4421p-1
+0x1.3dd027469992ep-1
+-0x1.40534cb2f400ep-20
+0x1.607174b9291afp-1
+0x1.501acf4c21d8bp-1
+-0x1.4c55adbbc0d6fp-20
+0x1.8a44721af0a2ap-1
+0x1.c42c5e6e9adcap-1
+-0x1.94ed04ab2ef69p-19
+0x1.60b739604d16cp-1
+0x1.94d3daf074e1fp-1
+-0x1.4bd97bb9199fdp-19
+0x1.b65c3f60bad16p-2
+0x1.f8079819fdd24p-2
+-0x1.5bec274358aaep-20
+0x1.ceb44abeab4d9p-2
+0x1.09f96cc867a35p-1
+-0x1.675d390b685dcp-20
+-0x1.378bd913722d5p-18
+-0x1.0b8463d321ae5p-15
+-0x1.d120b2ed1278bp-14
+-0x1.cdef9790d3131p-15
+-0x1.4f45c32547d4cp-15
+-0x1.812ac1763d3e9p-20
+-0x1.1d6464b5869fbp-13
+-0x1.9913d75ccf5bdp-16
+-0x1.2e98bd634f1e8p-9
+-0x1.378bd913722d6p-18
+-0x1.0b8463d321ae6p-15
+-0x1.d120b2ed1278cp-14
+-0x1.cdef9790d3133p-15
+-0x1.4f45c32547d4dp-15
+-0x1.812ac1763d3ebp-20
+-0x1.1d6464b5869fdp-13
+-0x1.9913d75ccf5bep-16
+-0x1.3636d845662b5p-9
+-0x1.253cb786ac8c9p-16
+-0x1.f79754bbeada4p-14
+-0x1.acdc68b32391p-11
+-0x1.a9eb036408835p-12
+-0x1.35217a4459239p-12
+-0x1.6a880530bc0bep-18
+-0x1.0c9ebe7ea87e9p-11
+-0x1.792e5ad688d2ep-13
+-0x1.2aa5a8aa7ad26p-9
+-0x1.253cb786ac8c9p-16
+-0x1.f79754bbeada4p-14
+-0x1.acdc68b32391p-11
+-0x1.a9eb036408835p-12
+-0x1.35217a4459239p-12
+-0x1.6a880530bc0bep-18
+-0x1.0c9ebe7ea87e9p-11
+-0x1.792e5ad688d2ep-13
+-0x1.2c02fab1f735dp-9
+0x1.f27527a4acfb7p+0
+0x1.ccbee837aa24cp+0
+0x1.6a04a56819cf1p+0
+0x1.75d554abbe7a1p+0
+-0x1.43329d042d1cp-12
+-0x1.77541fae8c458p-10
+-0x1.65b71d6cfa719p-12
+-0x1.95257ed0ec8d2p-10
+-0x1.a409db04a5f06p-12
+-0x1.c26cc1e1a7e02p-10
+-0x1.a325b0d15d49ap-12
+-0x1.c4192ed4cb279p-10
+-0x1.33764bedb868ep+1
+-0x1.28a9fd21ef0e6p+1
+-0x1.0fb29d81144b9p+1
+-0x1.126abac55abc6p+1
+0x1.2175611a9472ap+0
+0x1.353fb2faad573p+0
+-0x1.b7fd897ef9b17p-19
+0x1.01fd2f9506564p+0
+0x1.1335497bd1609p+0
+-0x1.5f1cd87e9397cp-19
+0x1.3da0271b9b98cp-1
+0x1.51a7382136e3p-1
+-0x1.6b6a2cba964ccp-20
+0x1.5782eadcfc35ap-1
+0x1.6d4ec0a75f125p-1
+-0x1.8bc1db34253abp-20
+0x1.11a9318223eb1p+0
+0x1.021c4492cfe52p+0
+-0x1.11cffa388a3dcp-18
+0x1.dcdeb846e39fep-1
+0x1.c44bbb900074dp-1
+-0x1.a8fd5ac39c36ep-19
+0x1.164358d1f9bcap-1
+0x1.0b8747a3ec623p-1
+-0x1.90cf7288a9313p-20
+0x1.2eb87af8b4311p-1
+0x1.22998b951daf7p-1
+-0x1.b928674cfb4ecp-20
+0x1.c1603786c9c8ep-1
+0x1.929f5287fca6bp-1
+-0x1.ce0b3e2fa40fp-19
+0x1.87a30483af972p-1
+0x1.5d76230eac2ep-1
+-0x1.6828d17a01e7cp-19
+0x1.c95b14686423p-2
+0x1.940578cced91dp-2
+-0x1.59eebdbf57099p-20
+0x1.f184801af41aap-2
+0x1.b8002b1057bd2p-2
+-0x1.7bce54f897e2fp-20
+0x1.25c32da975c8cp+0
+0x1.4fd5738dff9cap+0
+-0x1.6a8498f8d704fp-19
+0x1.0197d6541ed5cp+0
+0x1.1ff6996583848p+0
+-0x1.197c40ccdcba2p-19
+0x1.315195008c567p-1
+0x1.42cd8d80428c2p-1
+0x1.412ffd5bf8288p+3
+0x1.497062ae923eep+3
+0x1.422aec47428bdp+3
+0x1.4378ff5881715p+3
+0x1.412ffd5bf8288p+3
+0x1.497062ae923eep+3
+0x1.422aec47428bdp+3
+0x1.4378ff5881715p+3
+-0x1.c4bd44b64b961p-4
+-0x1.c4bd44b64b961p-4
+-0x1.7979d430e86cap-3
+-0x1.c4bd44b64b961p-4
+0x1.f90a8003589e3p-3
+0x1.f90a8003589e3p-3
+0x1.67f4c06c9e0fbp-3
+0x1.f90a8003589e3p-3
+0x1.4f2558353976cp-3
+0x1.4f2558353976cp-3
+0x1.7958b256356e3p-4
+0x1.4f2558353976cp-3
+-0x1.1f127ce667d2ap-2
+-0x1.1f127ce667d2ap-2
+-0x1.6c141279d1283p-2
+-0x1.1f127ce667d2ap-2
+-0x1.5e3ecb3298dfp-3
+-0x1.c4bd44b64b961p-4
+-0x1.7979d430e86cap-3
+-0x1.e8ce662b6c807p-3
+-0x1.410d2cca47988p-2
+-0x1.e873ae43fc5cp-3
+-0x1.40df6f916dcccp-2
+-0x1.e873833a2f033p-3
+0x1.77636a8d7a1e5p-3
+0x1.f90a8003589e3p-3
+0x1.67f4c06c9e0fbp-3
+0x1.ef726a644fb28p-4
+0x1.9223013bd52c4p-5
+0x1.f0296b806839fp-4
+0x1.9394047a6510dp-5
+0x1.f029c096e6763p-4
+0x1.a31e535616cb5p-4
+0x1.4f2558353976cp-3
+0x1.7958b256356e3p-4
+0x1.33adfb7405653p-5
+-0x1.1eb2cae060e94p-5
+0x1.34944e05653cbp-5
+-0x1.1dca920f779dcp-5
+0x1.34e91a3e67f73p-5
+-0x1.940d90a083a6p-2
+-0x1.1f127ce667d2ap-2
+-0x1.6c141279d1283p-2
+-0x1.0f49e06574dfap-1
+-0x1.36df30884a86bp-1
+-0x1.0ec41047475dcp-1
+-0x1.36583cc5a2edap-1
+-0x1.0ebde4fac48d2p-1
+-0x1.3d4a06c0e244ep-2
+-0x1.e873833a2f033p-3
+-0x1.40df59de61ad6p-2
+-0x1.e97009e282b8fp-2
+-0x1.1c13816d70449p-1
+-0x1.d97b152a70749p-2
+-0x1.1407b218d61a4p-1
+-0x1.d9a62efb9f3e5p-2
+-0x1.141d6dccf12cfp-1
+-0x1.d9a5cd8c2073dp-2
+-0x1.d9a5cd8c2073dp-2
+-0x1.141d3cab6847ep-1
+-0x1.a4095fb21516bp-2
+-0x1.f229cd2d97617p-2
+-0x1.a4d44675cccdbp-2
+-0x1.f2f66b41f7136p-2
+-0x1.a4d2753f5d998p-2
+0x1.c5f1490c3bd0bp-10
+0x1.f029c096e6763p-4
+0x1.9394b00ceff45p-5
+-0x1.f8c9f85174816p-4
+-0x1.93b79b4ed3285p-3
+-0x1.f4862070b6791p-4
+-0x1.9191244b68f78p-3
+-0x1.f47216265eb4p-4
+-0x1.67fb4fc2464abp-5
+0x1.34e91a3e67f73p-5
+-0x1.1d7512d113a1p-5
+-0x1.98bb6769f87f3p-3
+-0x1.18adea04cc457p-2
+-0x1.153d5fb91ee2ep-3
+-0x1.acc4f29793373p-3
+-0x1.17c8530e44253p-3
+-0x1.af5551cd47091p-3
+-0x1.17c1710c9179fp-3
+-0x1.17c1710c9179fp-3
+-0x1.af4e611eb6bf7p-3
+0x1.022cc38fc3ae2p-6
+-0x1.d2c3aa604d14cp-5
+0x1.65464e254d5fap-7
+-0x1.fadc8bbc0db3p-5
+0x1.66f3b087b875cp-7
+-0x1.6384123ccc10cp-1
+-0x1.0ebde4fac48d2p-1
+-0x1.365204072dcedp-1
+-0x1.dee54ecbf8798p-1
+-0x1.042217515615bp+0
+-0x1.c7ee328532d06p-1
+-0x1.f119f526f49cap-1
+-0x1.c82cff6f2c891p-1
+-0x1.f1594dac82a69p-1
+-0x1.c82c8eb3ec496p-1
+-0x1.c82c8eb3ec496p-1
+-0x1.f158dbf6a661fp-1
+-0x1.601c4dec29b2fp-1
+-0x1.88628a7f882f5p-1
+-0x1.62a98b2a8a4ccp-1
+-0x1.8af56420a4acbp-1
+-0x1.62a4c33216506p-1
+-0x1.199aa1b9dba25p-1
+-0x1.d9a5cd8c2073dp-2
+-0x1.141d3cab6847ep-1
+-0x1.b7ae5f62e3b9ap-1
+-0x1.e0b60aa67261ep-1
+-0x1.98c3ee5864e52p-1
+-0x1.c1871ad282e7fp-1
+-0x1.99297727a7d6ap-1
+-0x1.c1ed843894a89p-1
+-0x1.9928b419970ddp-1
+-0x1.234ad14a68983p-2
+-0x1.f47216265eb4p-4
+-0x1.918709cd6a56cp-3
+-0x1.090f27323804p-1
+-0x1.3096e4bcd8036p-1
+-0x1.bd0464c0f7d69p-2
+-0x1.05ad78ce3bcadp-1
+-0x1.beac9b95ed0b5p-2
+-0x1.0683601a4d801p-1
+-0x1.bea8881ec21c4p-2
+-0x1.bea8881ec21c4p-2
+-0x1.068151f3787bep-1
+-0x1.009fa122f4782p-2
+-0x1.4d5fd1da71dd4p-2
+-0x1.06cfbca4e63a1p-2
+-0x1.539d35414ddf1p-2
+-0x1.06c06e4bb4c4dp-2
+-0x1.2b7a0ea11ca7p-2
+-0x1.17c1710c9179fp-3
+-0x1.af4e611eb6bf7p-3
+-0x1.f95b59fbc5eeap-2
+-0x1.241a77cbc1452p-1
+-0x1.b3efd71f3474fp-2
+-0x1.01195aba2ebe1p-1
+-0x1.b5278d75db0f7p-2
+-0x1.01b687a5739bp-1
+-0x1.b52494d1844ffp-2
+-0x1.260999c0b5b65p+0
+-0x1.c82c8eb3ec496p-1
+-0x1.f158dbf6a661fp-1
+-0x1.8264e7647718p+0
+-0x1.9860e22774fd2p+0
+-0x1.62aecc8bc3953p+0
+-0x1.7862278e6fd2dp+0
+-0x1.630fa948ef284p+0
+-0x1.78c3e16914a23p+0
+-0x1.630f2844a8341p+0
+-0x1.e726c7a8e2d38p-1
+-0x1.9928b419970ddp-1
+-0x1.c1ecbf7b0de13p-1
+-0x1.661aa1ca0db0fp+0
+-0x1.7bd5ccc2b036ap+0
+-0x1.4590054cea6dcp+0
+-0x1.5b011a7e3a2adp+0
+-0x1.4600b40aa9ff5p+0
+-0x1.5b72c8eb7112bp+0
+-0x1.46000e449ad48p+0
+-0x1.53a3a63007d6dp-1
+-0x1.bea8881ec21c4p-2
+-0x1.068151f3787bep-1
+-0x1.e0610095d8bedp-1
+-0x1.04e1974dc117cp+0
+-0x1.b7f4a7f8ed396p-1
+-0x1.e0fcef35e61fep-1
+-0x1.b894fea3d06e9p-1
+-0x1.e19ea9b883f4ep-1
+-0x1.b893b3240b9bbp-1
+-0x1.52d8530891ce5p-1
+-0x1.b52494d1844ffp-2
+-0x1.01b5081b13899p-1
+-0x1.abc669afdac3dp-1
+-0x1.d4b3ad3e60496p-1
+-0x1.b52b66878afefp-1
+-0x1.de2d7f1c6a322p-1
+-0x1.b51c4c6982797p-1
+-0x1.de1e437d130c4p-1
+-0x1.b51c6ba2b1b09p-1
+-0x1.bc3e04278687ap+0
+-0x1.630f2844a8341p+0
+-0x1.78c35f3e467fp+0
+-0x1.05b3fe20acd4cp+1
+-0x1.11519853b8f8fp+1
+-0x1.08b86881411d1p+1
+-0x1.145d24648d6c6p+1
+-0x1.08b68e7cc0268p+1
+-0x1.85969303bae6ap+0
+-0x1.46000e449ad48p+0
+-0x1.5b7221ad3652dp+0
+-0x1.e72cb18a079dcp+0
+-0x1.fe129f25e11a5p+0
+-0x1.ed7044b25d307p+0
+-0x1.0232729e3dcdfp+1
+-0x1.ed6bd566569bap+0
+-0x1.288904051982fp+0
+-0x1.b893b3240b9bbp-1
+-0x1.e19d5b5904fc8p-1
+-0x1.6d84a9e39b195p+0
+-0x1.8350c7d9eba03p+0
+-0x1.752ff5a0dcf77p+0
+-0x1.8b0da2c0e9d2fp+0
+-0x1.752836fe134ffp+0
+-0x1.8b05d25f1d48ep+0
+-0x1.752842d99f051p+0
+-0x1.1a1263418cc55p+0
+-0x1.b51c6ba2b1b09p-1
+-0x1.de1e62fb87c2fp-1
+-0x1.69b8eee786c75p+0
+-0x1.7f7c5e9dc61b8p+0
+-0x1.710c00a66ccacp+0
+-0x1.86e03204358ddp+0
+-0x1.7104846567932p+0
+-0x1.86d8a4a005afbp+0
+-0x1.71048fbc4e6abp+0
+-0x1.3d9978bb98af1p+1
+-0x1.08b68e7cc0268p+1
+-0x1.145b45fefbe08p+1
+-0x1.78ffa590dec13p+1
+-0x1.85b3dd60774bep+1
+-0x1.7bdf62b4198d5p+1
+-0x1.889ab571c3285p+1
+-0x1.7bdec28e0eea6p+1
+-0x1.273c0a67bd5bfp+1
+-0x1.ed6bd566569bap+0
+-0x1.023035c35b02ap+1
+-0x1.639e5856d43fdp+1
+-0x1.701df361d7112p+1
+-0x1.66eab54b86f2cp+1
+-0x1.737266f533b8p+1
+-0x1.66e9bf03737dbp+1
+-0x1.c58f43ad87c8fp+0
+-0x1.752842d99f051p+0
+-0x1.8b05de55d49e9p+0
+-0x1.1b8bf9085875bp+1
+-0x1.275d661ad1ad9p+1
+-0x1.20336f7feda56p+1
+-0x1.2c0ff62d159d6p+1
+-0x1.2030e992a5f7ap+1
+-0x1.80902453e86edp+0
+-0x1.71048fbc4e6abp+0
+-0x1.86d8b010e28e2p+0
+-0x1.1394fce1e5821p+1
+-0x1.1f53772965793p+1
+-0x1.17a8163c01b86p+1
+-0x1.23704028796d4p+1
+-0x1.17a59cf550cf3p+1
+-0x1.b192cf1fe3cbp+1
+-0x1.7bdec28e0eea6p+1
+-0x1.889a13bf939d3p+1
+-0x1.019289d67a87p+2
+-0x1.089bd21e6c2a5p+2
+-0x1.02138b00af19p+2
+-0x1.091e22ea99561p+2
+-0x1.02139b52faa5ep+2
+-0x1.a63dd1fa1775cp+1
+-0x1.66e9bf03737dbp+1
+-0x1.73716e50ca689p+1
+-0x1.ed3a5477e86bep+1
+-0x1.fb141c2ebf13ep+1
+-0x1.eec9c479de056p+1
+-0x1.fca79340d677ep+1
+-0x1.eec9dd18dad15p+1
+-0x1.424d898867e7fp+1
+-0x1.2030e992a5f7ap+1
+-0x1.2c0d6a39dfa0fp+1
+-0x1.963c7bbe32d78p+1
+-0x1.a33958ff8cd98p+1
+-0x1.999c33f5a73cfp+1
+-0x1.a6a180918b4fbp+1
+-0x1.999b77b24065cp+1
+-0x1.0d5c7628c5cd1p+1
+-0x1.17a59cf550cf3p+1
+-0x1.236dc0ff2702cp+1
+-0x1.84cf47aef4ccap+1
+-0x1.91a0bf69ed311p+1
+-0x1.87e661a2f5fcbp+1
+-0x1.94bf860f8081bp+1
+-0x1.87e584e98f2ap+1
+-0x1.13cc02822d798p+2
+-0x1.02139b52faa5ep+2
+-0x1.091e33675d988p+2
+-0x1.4ad753d412748p+2
+-0x1.52a4447116cddp+2
+-0x1.4a578b9166f23p+2
+-0x1.52231e2b36ddep+2
+-0x1.4a575753d5425p+2
+-0x1.18322fb3b7b28p+2
+-0x1.eec9dd18dad15p+1
+-0x1.fca7ac1f65ba7p+1
+-0x1.418aef1e601d3p+2
+-0x1.493e7b4e13421p+2
+-0x1.412c0d954ef48p+2
+-0x1.48de97887bbacp+2
+-0x1.412bea5598b56p+2
+-0x1.b9bb45e29fbc7p+1
+-0x1.999b77b24065cp+1
+-0x1.a6a0c2772c492p+1
+-0x1.0f1cf187c43dbp+2
+-0x1.16499f0e2be8fp+2
+-0x1.0f9d0a219c477p+2
+-0x1.16cb08331797bp+2
+-0x1.0f9d19404820fp+2
+-0x1.7d2480abccf98p+1
+-0x1.87e584e98f2ap+1
+-0x1.94bea7319cbb7p+1
+-0x1.01d80ea920a16p+2
+-0x1.08e20bcb60a2dp+2
+-0x1.0274dd02959cdp+2
+-0x1.098072345d1f2p+2
+-0x1.0274e509a79c6p+2
+-0x1.4698be761ef08p+2
+-0x1.4a575753d5425p+2
+-0x1.5222e95e9385bp+2
+-0x1.963b6650b94c8p+2
+-0x1.9edc4054a81c6p+2
+-0x1.952dc19c7a3cbp+2
+-0x1.9dcb92c1e4abp+2
+-0x1.952d23da600ap+2
+-0x1.4c5dc7718bcd3p+2
+-0x1.412bea5598b56p+2
+-0x1.48de73e8d8ec3p+2
+-0x1.8e7b34db33df3p+2
+-0x1.9705c6c73090cp+2
+-0x1.8d701874fb7dcp+2
+-0x1.95f7acb7b900bp+2
+-0x1.8d6f800e2822ap+2
+-0x1.1a9289769e8b8p+2
+-0x1.0f9d19404820fp+2
+-0x1.16cb17797e93bp+2
+-0x1.57ece71697d45p+2
+-0x1.5fddd99cace7fp+2
+-0x1.577671be1df23p+2
+-0x1.5f661cdc59529p+2
+-0x1.577641e9d316dp+2
+-0x1.f1cef1afd7d1dp+1
+-0x1.0274e509a79c6p+2
+-0x1.09807a5054462p+2
+-0x1.46e0e920d1735p+2
+-0x1.4ea302704815cp+2
+-0x1.469e852c82bcp+2
+-0x1.4e5fe91d312d7p+2
+-0x1.469e6e7b958cp+2
+-0x1.73374b108726fp+2
+-0x1.952d23da600ap+2
+-0x1.9dcaf3396e6d1p+2
+-0x1.e3626d1fe5ac7p+2
+-0x1.ece744848f856p+2
+-0x1.e215944c75caap+2
+-0x1.eb967c3a7df07p+2
+-0x1.e214b167cf195p+2
+-0x1.6e02187c4088bp+2
+-0x1.8d6f800e2822ap+2
+-0x1.95f7129c32063p+2
+-0x1.db6d1caa08e9ep+2
+-0x1.e4d9ea55ea466p+2
+-0x1.da25a2917b903p+2
+-0x1.e38e95f49c02fp+2
+-0x1.da24c63e04955p+2
+-0x1.45f16c63122abp+2
+-0x1.577641e9d316dp+2
+-0x1.5f65ec83e1fa3p+2
+-0x1.a263ffc648431p+2
+-0x1.ab2808604e8c2p+2
+-0x1.a163def33382fp+2
+-0x1.aa24ffb833262p+2
+-0x1.a1634a23a92e5p+2
+-0x1.3cd341469f1b1p+2
+-0x1.469e6e7b958cp+2
+-0x1.4e5fd22e482afp+2
+-0x1.91970fb0c3f15p+2
+-0x1.9a2a8e04669a7p+2
+-0x1.90ac9c44c9dd6p+2
+-0x1.993d792583eabp+2
+-0x1.90ac1bdd6a7a3p+2
+-0x1.9caff23cb71bep+2
+-0x1.e214b167cf195p+2
+-0x1.eb9596a75be45p+2
+-0x1.194e94944d13cp+3
+-0x1.1e8bed32e3bbfp+3
+-0x1.189afc7b40027p+3
+-0x1.1dd61a9538fdap+3
+-0x1.189a782c33d29p+3
+-0x1.873f80535d74cp+2
+-0x1.da24c63e04955p+2
+-0x1.e38db709d7633p+2
+-0x1.143d67866410fp+3
+-0x1.196ab21efe8e9p+3
+-0x1.139417edaa061p+3
+-0x1.18bf4be8f463fp+3
+-0x1.13939cfeea52ap+3
+-0x1.638b0cac3914fp+2
+-0x1.a1634a23a92e5p+2
+-0x1.aa246938a22aep+2
+-0x1.ed463a493be36p+2
+-0x1.f6e91bc29255dp+2
+-0x1.ec134c04f61bp+2
+-0x1.f5b286b308149p+2
+-0x1.ec127ce084a91p+2
+-0x1.7c84d1ef97a83p+2
+-0x1.90ac1bdd6a7a3p+2
+-0x1.993cf74d6b9bfp+2
+-0x1.e0b666ee63b17p+2
+-0x1.ea3328cda97a8p+2
+-0x1.df6509f3642b6p+2
+-0x1.e8ddd066b57a2p+2
+-0x1.df642792839e9p+2
+-0x1.c077f0a3958f1p+2
+-0x1.189a782c33d29p+3
+-0x1.1dd594a20b86fp+3
+-0x1.41f33a03f9ffap+3
+-0x1.47b4de2b06f98p+3
+-0x1.413bc6c4b9a8ap+3
+-0x1.46fb07e6f794ep+3
+-0x1.413b391fad3efp+3
+-0x1.97acd4781145dp+2
+-0x1.13939cfeea52ap+3
+-0x1.18becf76307e3p+3
+-0x1.3ac954cc8e24dp+3
+-0x1.4073333236d56p+3
+-0x1.3a24b87a8e4afp+3
+-0x1.3fcc770dc0595p+3
+-0x1.3a243bc06389cp+3
+-0x1.7cbed64a20abbp+2
+-0x1.ec127ce084a91p+2
+-0x1.f5b1b517f2884p+2
+-0x1.1c70e831964f4p+3
+-0x1.21b83b662b65ep+3
+-0x1.1bd0994a2b1dcp+3
+-0x1.2115ed5110002p+3
+-0x1.1bd024c4a7237p+3
+-0x1.99ec73e5f74ep+2
+-0x1.df642792839e9p+2
+-0x1.e8dceb5a0f39fp+2
+-0x1.184ba539a972fp+3
+-0x1.1d85c76fa0108p+3
+-0x1.1796e44cad4dap+3
+-0x1.1ccec900c7677p+3
+-0x1.17965fed5fbcp+3
+-0x1.d56ab845a270bp+2
+-0x1.413b391fad3efp+3
+-0x1.46fa786a55a78p+3
+-0x1.6b1f5002990a7p+3
+-0x1.716d5b56933e9p+3
+-0x1.6a6cc0036c708p+3
+-0x1.70b85cb5821bdp+3
+-0x1.6a6c31b536b6ep+3
+-0x1.9f87d86718c65p+2
+-0x1.3a243bc06389cp+3
+-0x1.3fcbf8b7ad522p+3
+-0x1.614793f45cf74p+3
+-0x1.677378e679715p+3
+-0x1.60abc4820b495p+3
+-0x1.66d58ff2f72b6p+3
+-0x1.60ab4ae985f47p+3
+-0x1.850cf4c619cb1p+2
+-0x1.1bd024c4a7237p+3
+-0x1.211577582172ep+3
+-0x1.4202f84e701cbp+3
+-0x1.47c4d0eb26a64p+3
+-0x1.4169669e99b43p+3
+-0x1.47293fab14e19p+3
+-0x1.4168f26cc46a8p+3
+-0x1.909e6029545e2p+2
+-0x1.17965fed5fbcp+3
+-0x1.1cce42fda75c3p+3
+-0x1.3efda813970cep+3
+-0x1.44b57434b8dfdp+3
+-0x1.3e58b65df4f62p+3
+-0x1.440e5ef1984c2p+3
+-0x1.3e583912453p+3
+-0x1.dd1daef192b1cp+2
+-0x1.6a6c31b536b6ep+3
+-0x1.70b7cc7747aacp+3
+-0x1.9479ed2869267p+3
+-0x1.9b5b781561c74p+3
+-0x1.93d0c97645f56p+3
+-0x1.9aafec0b92883p+3
+-0x1.93d03f37aec86p+3
+-0x1.9cfd51fc7d6fbp+2
+-0x1.60ab4ae985f47p+3
+-0x1.66d514b71cafbp+3
+-0x1.877c837cb547bp+3
+-0x1.8e2f067fa6f54p+3
+-0x1.86ec318a6f76p+3
+-0x1.8d9cadbe8df97p+3
+-0x1.86ebbe3a06f71p+3
+-0x1.7bb367dcafbafp+2
+-0x1.4168f26cc46a8p+3
+-0x1.4728c9f6515a5p+3
+-0x1.66bc0a704fecep+3
+-0x1.6cfad0e0a174fp+3
+-0x1.66312632beeap+3
+-0x1.6c6e0a9b02219p+3
+-0x1.6630ba742ebap+3
+-0x1.74b8d6e1887dbp+2
+-0x1.3e583912453p+3
+-0x1.440de0062095bp+3
+-0x1.63dff421f5c97p+3
+-0x1.6a14d109a57fap+3
+-0x1.6352c368d1b1dp+3
+-0x1.6985b7d6e75d5p+3
+-0x1.63525600a9c59p+3
+-0x1.db644f02df6bp+2
+-0x1.93d03f37aec86p+3
+-0x1.9aaf5fd564efbp+3
+-0x1.bdd8fc52ee037p+3
+-0x1.c55496a9a13bcp+3
+-0x1.bd3aa58912d3ap+3
+-0x1.c4b3e5fb8caeap+3
+-0x1.bd3a211a0f76p+3
+-0x1.942a33a8413c2p+2
+-0x1.86ebbe3a06f71p+3
+-0x1.8d9c38cfbbfbap+3
+-0x1.ad5d586bab842p+3
+-0x1.b49ac9f1ec761p+3
+-0x1.acd8705ca1addp+3
+-0x1.b413f0f915aecp+3
+-0x1.acd803d68827ap+3
+-0x1.688086e205e9cp+2
+-0x1.6630ba742ebap+3
+-0x1.6c6d9d669f7d4p+3
+-0x1.8a5d9c84b70bap+3
+-0x1.911a7e19249bp+3
+-0x1.89e3139984dcfp+3
+-0x1.909e3b539b1a8p+3
+-0x1.89e2b2a9033a5p+3
+-0x1.514cc08b209dfp+2
+-0x1.63525600a9c59p+3
+-0x1.698548f4593fcp+3
+-0x1.86cf32e34efcp+3
+-0x1.8d7f46e5b51f3p+3
+-0x1.86592fc63d5bbp+3
+-0x1.8d079bd43df1bp+3
+-0x1.8658d2e711bdep+3
+-0x1.d03649ce8d432p+2
+-0x1.bd3a211a0f76p+3
+-0x1.c4b35f9546575p+3
+-0x1.e701bdab6fce6p+3
+-0x1.ef1d123af11d7p+3
+-0x1.e66f65b9e0708p+3
+-0x1.ee88771209571p+3
+-0x1.e66ee8a3f61a3p+3
+-0x1.8de79e71271ffp+2
+-0x1.acd803d68827ap+3
+-0x1.b41382dd5768ap+3
+-0x1.d35662e0b8508p+3
+-0x1.db2494d605e36p+3
+-0x1.d2d90f741d606p+3
+-0x1.daa55abd896bbp+3
+-0x1.d2d8a6c1c3651p+3
+-0x1.567e206b54fbep+2
+-0x1.89e2b2a9033a5p+3
+-0x1.909dd905a1561p+3
+-0x1.ad362a4eaa468p+3
+-0x1.b47309512967fp+3
+-0x1.acc8807b7de38p+3
+-0x1.b403c586856cdp+3
+-0x1.acc82802f9fcp+3
+-0x1.35e322f6f9999p+2
+-0x1.8658d2e711bdep+3
+-0x1.8d073da783b5dp+3
+-0x1.a87f214d38206p+3
+-0x1.afaa69c020ad6p+3
+-0x1.a818d6f6da05ap+3
+-0x1.af42a2d643f14p+3
+-0x1.a818850b13395p+3
+-0x1.cc9a830fd7e03p+2
+-0x1.e66ee8a3f61a3p+3
+-0x1.ee87f80d2db8dp+3
+-0x1.0854a3a17bcb2p+4
+-0x1.0cb6691dedd67p+4
+-0x1.080e6cd145b4cp+4
+-0x1.0c6f1143a4af3p+4
+-0x1.080e2f547dc14p+4
+-0x1.92d32f6a0ebb9p+2
+-0x1.d2d8a6c1c3651p+3
+-0x1.daa4f074b84e7p+3
+-0x1.fa4af989dc2d3p+3
+-0x1.0159aeec352f1p+4
+-0x1.f9ce88353b27p+3
+-0x1.011a7b69ade1fp+4
+-0x1.f9ce1d888fe1cp+3
+-0x1.4771c987d6b9bp+2
+-0x1.acc82802f9fcp+3
+-0x1.b4036bc356943p+3
+-0x1.cf9ee29535e1dp+3
+-0x1.d75eab775936p+3
+-0x1.cf3a9ddd60d35p+3
+-0x1.d6f8e2c79dfa9p+3
+-0x1.cf3a4b50ce7c4p+3
+-0x1.288599db9cac6p+2
+-0x1.a818850b13395p+3
+-0x1.af424fb9c2a37p+3
+-0x1.c9fedfd2fd786p+3
+-0x1.d1a8f3354d7c8p+3
+-0x1.c99fd8b935c8p+3
+-0x1.d1487e72342d5p+3
+-0x1.c99f8b00913f5p+3
+-0x1.d0ada0184d33ap+2
+-0x1.080e2f547dc14p+4
+-0x1.0c6ed2c9cfa55p+4
+-0x1.1dbd11b004d9ep+4
+-0x1.2278bc50d0381p+4
+-0x1.1d773d5fb5b32p+4
+-0x1.2231bd274bc2dp+4
+-0x1.1d76fe974b46ep+4
+-0x1.9af929fa0ef28p+2
+-0x1.f9ce1d888fe1cp+3
+-0x1.011a453c5da54p+4
+-0x1.114b37b89392fp+4
+-0x1.15d233ad18535p+4
+-0x1.110c38b7cbedcp+4
+-0x1.15922d09ca122p+4
+-0x1.110c014127e5cp+4
+-0x1.345776da9eb35p+2
+-0x1.cf3a4b50ce7c4p+3
+-0x1.d6f88efbb33aap+3
+-0x1.f1782abe3a9bbp+3
+-0x1.f9bd2089db402p+3
+-0x1.f11d39585018fp+3
+-0x1.f960c38969764p+3
+-0x1.f11ced01491afp+3
+-0x1.1df6b80e51247p+2
+-0x1.c99f8b00913f5p+3
+-0x1.d1482f8e8c90fp+3
+-0x1.eb9d36fd6fcc7p+3
+-0x1.f3cad37023463p+3
+-0x1.eb42ecf7ced06p+3
+-0x1.f36f227024d1cp+3
+-0x1.eb42a18205fc7p+3
+-0x1.d170181d25f8ep+2
+-0x1.1d76fe974b46ep+4
+-0x1.22317d52410ap+4
+-0x1.3839f9290c0f8p+4
+-0x1.3d69b40e9df65p+4
+-0x1.37d16750d142ap+4
+-0x1.3cff4d9bdfdap+4
+-0x1.37d103da16212p+4
+-0x1.9df7143c6f92ep+2
+-0x1.110c014127e5cp+4
+-0x1.1591f4ab16f38p+4
+-0x1.2a6b28806c43dp+4
+-0x1.2f5db7baa8bd8p+4
+-0x1.2a0acaaa7d86fp+4
+-0x1.2efbb43151a0dp+4
+-0x1.2a0a70eec186fp+4
+-0x1.1e465c379b611p+2
+-0x1.f11ced01491afp+3
+-0x1.f960760137c3dp+3
+-0x1.0d5fdc69f63e6p+4
+-0x1.11d67f6cb5586p+4
+-0x1.0d1cf5be73866p+4
+-0x1.119282c79a1c2p+4
+-0x1.0d1cbaf24026ep+4
+-0x1.1500ae1ba7824p+2
+-0x1.eb42a18205fc7p+3
+-0x1.f36ed5ce63fb9p+3
+-0x1.0a9bbc9ddd38ap+4
+-0x1.0f06e81dc873ep+4
+-0x1.0a570d26609e1p+4
+-0x1.0ec11cb5b8e6ep+4
+-0x1.0a56d0e7f4d03p+4
+-0x1.d8b12c94c7a83p+2
+-0x1.37d103da16212p+4
+-0x1.3cfee86793901p+4
+-0x1.5e999d7d21dep+4
+-0x1.647afd8d5c34dp+4
+-0x1.5dbfec03b546bp+4
+-0x1.639d3d15e9c8cp+4
+-0x1.5dbf051f860fp+4
+-0x1.a30ab92cb1fe4p+2
+-0x1.2a0a70eec186fp+4
+-0x1.2efb58ed0a3adp+4
+-0x1.4ee47c2b54e8bp+4
+-0x1.547bc8cb9a4f2p+4
+-0x1.4e1a52d636d17p+4
+-0x1.53adf2d3270cap+4
+-0x1.4e19813f0d7b8p+4
+-0x1.10c93eaa6b7d5p+2
+-0x1.0d1cbaf24026ep+4
+-0x1.1192470727a1bp+4
+-0x1.2b233f11795e1p+4
+-0x1.3018f4a2e5088p+4
+-0x1.2a969139532cdp+4
+-0x1.2f89de8012308p+4
+-0x1.2a9609dbd1ca7p+4
+-0x1.178ae938546fep+2
+-0x1.0a56d0e7f4d03p+4
+-0x1.0ec0df7e51ebbp+4
+-0x1.293109167f47ep+4
+-0x1.2e1e3abb1e21ap+4
+-0x1.289abad14617fp+4
+-0x1.2d855c3fc3543p+4
+-0x1.289a297c6d163p+4
+-0x1.e949f1ed5dd4ep+2
+-0x1.5dbf051f860fp+4
+-0x1.639c51e47fd03p+4
+-0x1.93e2a5466e916p+4
+-0x1.9acd5fd5016b6p+4
+-0x1.92501200f7c76p+4
+-0x1.9932a813421b6p+4
+-0x1.924e2a45ec7cdp+4
+-0x1.9930b67dc1f1bp+4
+-0x1.924e28651824dp+4
+-0x1.a9d6c2f92ddbbp+2
+-0x1.4e19813f0d7b8p+4
+-0x1.53ad1d6d6be25p+4
+-0x1.80ff30159b357p+4
+-0x1.87895e0191087p+4
+-0x1.7f909013bce4fp+4
+-0x1.8613888387596p+4
+-0x1.7f8ee06117e9fp+4
+-0x1.8611d056382fap+4
+-0x1.7f8edec098423p+4
+-0x1.149c1fdd7d59ep+2
+-0x1.2a9609dbd1ca7p+4
+-0x1.2f8954d1d6766p+4
+-0x1.546553f1e45ap+4
+-0x1.5a165da851aa2p+4
+-0x1.535d5d72e8944p+4
+-0x1.5909901c16d6fp+4
+-0x1.535c40317549p+4
+-0x1.1ff63899abf9bp+2
+-0x1.289a297c6d163p+4
+-0x1.2d84c870bf633p+4
+-0x1.53bbaf72d3308p+4
+-0x1.59699c9d19424p+4
+-0x1.52a06be260e3dp+4
+-0x1.584928e9fe719p+4
+-0x1.529f367ad6141p+4
+-0x1.e873833a2f033p-3
+-0x1.40df59de61ad6p-2
+-0x1.e8738325d015bp-3
+-0x1.e8738325d015bp-3
+-0x1.40df59d41c5f2p-2
+-0x1.e8738325c66e9p-3
+0x1.f029c096e6763p-4
+0x1.9394b00ceff45p-5
+0x1.f029c0be5da8fp-4
+0x1.f029c0be5da8fp-4
+0x1.9394b05c8431ap-5
+0x1.f029c0be6ffbcp-4
+0x1.34e91a3e67f73p-5
+-0x1.1d7512d113a1p-5
+0x1.35084637cda23p-5
+0x1.35084637cda23p-5
+-0x1.1d55a508c26c4p-5
+0x1.3513b9ff763bdp-5
+-0x1.0ebde4fac48d2p-1
+-0x1.365204072dcedp-1
+-0x1.0ebda4a8d96c6p-1
+-0x1.0ebda4a8d96c6p-1
+-0x1.3651c32914abcp-1
+-0x1.0ebda20e5405ep-1
+-0x1.d9a5cd8c2073dp-2
+-0x1.141d3cab6847ep-1
+-0x1.d84f79a5eb439p-2
+-0x1.13709f103dea9p-1
+-0x1.d8528e5ec63bcp-2
+-0x1.d8528e5ec63bcp-2
+-0x1.13722cc4ef2bp-1
+-0x1.d8614c0553213p-2
+-0x1.f47216265eb4p-4
+-0x1.918709cd6a56cp-3
+-0x1.f471e5ba36bc1p-4
+-0x1.f471e5ba36bc1p-4
+-0x1.9186f163c1e27p-3
+-0x1.f471e5473e147p-4
+-0x1.17c1710c9179fp-3
+-0x1.af4e611eb6bf7p-3
+-0x1.0d67a4ac59b47p-3
+-0x1.a4de83c7d428ap-3
+-0x1.0d86100720497p-3
+-0x1.0d86100720497p-3
+-0x1.a4fd2ff9b4b6ap-3
+-0x1.0e117b2c9519bp-3
+-0x1.a589c44d2a2fbp-3
+-0x1.0e0ffbfc1f6adp-3
+-0x1.c82c8eb3ec496p-1
+-0x1.f158dbf6a661fp-1
+-0x1.c6196346233cdp-1
+-0x1.ef4113d6dd9a4p-1
+-0x1.c61d530ae53abp-1
+-0x1.c61d530ae53abp-1
+-0x1.ef450c5b7800fp-1
+-0x1.c62f97a08263ap-1
+-0x1.ef57798b35821p-1
+-0x1.c62f769c26baep-1
+-0x1.9928b419970ddp-1
+-0x1.c1ecbf7b0de13p-1
+-0x1.92a814359687p-1
+-0x1.bb5dbeb8756ecp-1
+-0x1.92b6b7e016e4p-1
+-0x1.bb6c82bf12775p-1
+-0x1.92b69b47d610ep-1
+-0x1.92b69b47d610ep-1
+-0x1.bb6c65e79c601p-1
+-0x1.92f475014f63ap-1
+-0x1.bbaac859a654ep-1
+-0x1.92f3fcc1557a1p-1
+-0x1.bea8881ec21c4p-2
+-0x1.068151f3787bep-1
+-0x1.b7b6d0c06e442p-2
+-0x1.0300ef5cb5708p-1
+-0x1.b7c9cc63836ffp-2
+-0x1.b7c9cc63836ffp-2
+-0x1.030a81c0bb77ep-1
+-0x1.b81dae7803f2bp-2
+-0x1.0334cdb31c701p-1
+-0x1.b81cdbf02605cp-2
+-0x1.b52494d1844ffp-2
+-0x1.01b5081b13899p-1
+-0x1.a3a49d382551bp-2
+-0x1.f1c4308c28587p-2
+-0x1.a3d9adfe54c1bp-2
+-0x1.f1f9b4368600fp-2
+-0x1.a3d92997c82ep-2
+-0x1.a3d92997c82ep-2
+-0x1.f1f92eb150768p-2
+-0x1.a4ac03c64523p-2
+-0x1.f2cdd1665feefp-2
+-0x1.a4a9f9eb2b45p-2
+-0x1.630f2844a8341p+0
+-0x1.78c35f3e467fp+0
+-0x1.5e9b0d51e9cdp+0
+-0x1.74451ac8380c5p+0
+-0x1.5ea258c797bfep+0
+-0x1.744c76e127d54p+0
+-0x1.5ea24ec43e384p+0
+-0x1.5ea24ec43e384p+0
+-0x1.744c6cc6f7dc2p+0
+-0x1.5ec0dc4345dacp+0
+-0x1.746b3ff559b45p+0
+-0x1.5ec0b2820474bp+0
+-0x1.46000e449ad48p+0
+-0x1.5b7221ad3652dp+0
+-0x1.3f05921c7bc42p+0
+-0x1.5467d29a01807p+0
+-0x1.3f1383e850a22p+0
+-0x1.5475e3fea7ff3p+0
+-0x1.3f136e93f3ad2p+0
+-0x1.3f136e93f3ad2p+0
+-0x1.5475ce79f64e9p+0
+-0x1.3f47ae54a1e3dp+0
+-0x1.54aa849fa399bp+0
+-0x1.3f475efe1213ep+0
+-0x1.b893b3240b9bbp-1
+-0x1.e19d5b5904fc8p-1
+-0x1.acf07d858e332p-1
+-0x1.d5e055c5a5e71p-1
+-0x1.ad0fe45a1f079p-1
+-0x1.d6000235a1a56p-1
+-0x1.ad0fa1ad17254p-1
+-0x1.ad0fa1ad17254p-1
+-0x1.d5ffbef4cd24ep-1
+-0x1.ad85176f13a02p-1
+-0x1.d676391781dfcp-1
+-0x1.ad84202270107p-1
+-0x1.b51c6ba2b1b09p-1
+-0x1.de1e62fb87c2fp-1
+-0x1.a3993df4c1fa7p-1
+-0x1.cc74644452f9fp-1
+-0x1.a3cd0a998bf1cp-1
+-0x1.cca8a39e84ce5p-1
+-0x1.a3cc9da70c44cp-1
+-0x1.a3cc9da70c44cp-1
+-0x1.cca835bac1923p-1
+-0x1.a47e999ba997fp-1
+-0x1.cd5bbbd88d17ep-1
+-0x1.a47d2805296c7p-1
+-0x1.08b68e7cc0268p+1
+-0x1.145b45fefbe08p+1
+-0x1.048da7977a24dp+1
+-0x1.10288aab476d2p+1
+-0x1.04924c661894p+1
+-0x1.102d3a70ce019p+1
+-0x1.0492487c9ab41p+1
+-0x1.0492487c9ab41p+1
+-0x1.102d367e137d1p+1
+-0x1.04a586e97f30bp+1
+-0x1.1040a25b07074p+1
+-0x1.04a576c8f95a8p+1
+-0x1.ed6bd566569bap+0
+-0x1.023035c35b02ap+1
+-0x1.e2132a439ec82p+0
+-0x1.f8ed23d4804fp+0
+-0x1.e2239a56163a5p+0
+-0x1.f8fdba6952b82p+0
+-0x1.e22389ebd8707p+0
+-0x1.e22389ebd8707p+0
+-0x1.f8fda9d8a02cp+0
+-0x1.e25e84516e32cp+0
+-0x1.f9392e6aa59a8p+0
+-0x1.e25e49e067e5bp+0
+-0x1.752842d99f051p+0
+-0x1.8b05de55d49e9p+0
+-0x1.6a10a9dda8a7dp+0
+-0x1.7fd4e22309c9fp+0
+-0x1.6a2a76930e5c6p+0
+-0x1.7feee9d40fc2ap+0
+-0x1.6a2a4ddcfdb0bp+0
+-0x1.6a2a4ddcfdb0bp+0
+-0x1.7feec0c0ec02dp+0
+-0x1.6a80d41081b3fp+0
+-0x1.80460cc650369p+0
+-0x1.6a804d1f3736ap+0
+-0x1.71048fbc4e6abp+0
+-0x1.86d8b010e28e2p+0
+-0x1.62d31e9930ca9p+0
+-0x1.7886cc84be6d5p+0
+-0x1.62f6fdaf8a164p+0
+-0x1.78aafd7e26418p+0
+-0x1.62f6c52fa3b31p+0
+-0x1.62f6c52fa3b31p+0
+-0x1.78aac47d455a5p+0
+-0x1.63657330073a1p+0
+-0x1.791a6f2a08cb5p+0
+-0x1.6364c76225e34p+0
+-0x1.7bdec28e0eea6p+1
+-0x1.889a13bf939d3p+1
+-0x1.75d8a8f32938ep+1
+-0x1.828517fb3dc2cp+1
+-0x1.75db28a0e4e09p+1
+-0x1.75db28a0e4e09p+1
+-0x1.82879dd3a757bp+1
+-0x1.75ead97adfa61p+1
+-0x1.829775670f201p+1
+-0x1.75ead4c6c4dfcp+1
+-0x1.66e9bf03737dbp+1
+-0x1.73716e50ca689p+1
+-0x1.5f04cc5583894p+1
+-0x1.6b792414a65efp+1
+-0x1.5f09eb86b5983p+1
+-0x1.6b7e4fcd8c924p+1
+-0x1.5f09e957741ddp+1
+-0x1.5f09e957741ddp+1
+-0x1.6b7e4d98f2ec5p+1
+-0x1.5f21b83ea968ap+1
+-0x1.6b9656bf1141cp+1
+-0x1.5f21ae27c0c43p+1
+-0x1.2030e992a5f7ap+1
+-0x1.2c0d6a39dfa0fp+1
+-0x1.17dde2ced3818p+1
+-0x1.23a68cbb21108p+1
+-0x1.17ea7fca8517ep+1
+-0x1.23b347b9a5029p+1
+-0x1.17ea740a8db7ap+1
+-0x1.17ea740a8db7ap+1
+-0x1.23b33bddb89d8p+1
+-0x1.1814646680503p+1
+-0x1.23dd90041a9c1p+1
+-0x1.18143dbfd687ap+1
+-0x1.17a59cf550cf3p+1
+-0x1.236dc0ff2702cp+1
+-0x1.0dd3f339b9b34p+1
+-0x1.1984c6a35ebc5p+1
+-0x1.0de4bc07c8eb3p+1
+-0x1.1995b73853849p+1
+-0x1.0de4ab8e888edp+1
+-0x1.0de4ab8e888edp+1
+-0x1.1995a69808a99p+1
+-0x1.0e1721b7619dfp+1
+-0x1.19c89458eb7eap+1
+-0x1.0e16f0cdf46fbp+1
+-0x1.02139b52faa5ep+2
+-0x1.091e33675d988p+2
+-0x1.fcafbe39c848ep+1
+-0x1.0558c38eb0f67p+2
+-0x1.fcae3e5b936b5p+1
+-0x1.fcae3e5b936b5p+1
+-0x1.055801ad7e27fp+2
+-0x1.fcb783fa92949p+1
+-0x1.055cb084f1ff4p+2
+-0x1.fcb785102ffcfp+1
+-0x1.eec9dd18dad15p+1
+-0x1.fca7ac1f65ba7p+1
+-0x1.e5137169367a9p+1
+-0x1.f2d837d5a0b22p+1
+-0x1.e512692f41236p+1
+-0x1.e512692f41236p+1
+-0x1.f2d72cf3da581p+1
+-0x1.e52091a30520cp+1
+-0x1.f2e579d4e6405p+1
+-0x1.e520923a61bcep+1
+-0x1.999b77b24065cp+1
+-0x1.a6a0c2772c492p+1
+-0x1.8f034bc24476bp+1
+-0x1.9bee232bcbf39p+1
+-0x1.8f091b1b8bd3ep+1
+-0x1.9bf400ff0e61cp+1
+-0x1.8f091924ec68cp+1
+-0x1.8f091924ec68cp+1
+-0x1.9bf3ff038a96ap+1
+-0x1.8f25a9f002d01p+1
+-0x1.9c10d6fc26eb5p+1
+-0x1.8f25a05c6874bp+1
+-0x1.87e584e98f2ap+1
+-0x1.94bea7319cbb7p+1
+-0x1.7bc4a1feb24cep+1
+-0x1.887fb28fb29f5p+1
+-0x1.7bcd96fdec022p+1
+-0x1.8888bdb6b412fp+1
+-0x1.7bcd9332eaaefp+1
+-0x1.7bcd9332eaaefp+1
+-0x1.8888b9e250ee1p+1
+-0x1.7bf149fd37ae5p+1
+-0x1.88acc90444c86p+1
+-0x1.7bf13b020857fp+1
+-0x1.4a575753d5425p+2
+-0x1.5222e95e9385bp+2
+-0x1.461c357723b9ap+2
+-0x1.4ddc35818f28bp+2
+-0x1.4619bb612b106p+2
+-0x1.4dd9b4a81df84p+2
+-0x1.4619ba75db85cp+2
+-0x1.4619ba75db85cp+2
+-0x1.4dd9b3ba4be0cp+2
+-0x1.461c01fb32fd5p+2
+-0x1.4ddc0179086bp+2
+-0x1.461c02d3382fcp+2
+-0x1.412bea5598b56p+2
+-0x1.48de73e8d8ec3p+2
+-0x1.3ba9d7d4752bcp+2
+-0x1.434d6b75b8e98p+2
+-0x1.3ba68df0f63e9p+2
+-0x1.434a18a7ef211p+2
+-0x1.3ba68cd632f83p+2
+-0x1.3ba68cd632f83p+2
+-0x1.434a178a2d4f7p+2
+-0x1.3ba9fd4a230fap+2
+-0x1.434d9150f3c5dp+2
+-0x1.3ba9fe70d292p+2
+-0x1.0f9d19404820fp+2
+-0x1.16cb17797e93bp+2
+-0x1.097457b4b463p+2
+-0x1.10922fc8e7819p+2
+-0x1.0973039c26426p+2
+-0x1.0973039c26426p+2
+-0x1.1090d8369ecd9p+2
+-0x1.0976f54f7744ep+2
+-0x1.1094d43b6f752p+2
+-0x1.0976f5ac05a87p+2
+-0x1.0274e509a79c6p+2
+-0x1.09807a5054462p+2
+-0x1.f6f8357207cabp+1
+-0x1.0275961a4b364p+2
+-0x1.f6f70952e2915p+1
+-0x1.f6f70952e2915p+1
+-0x1.0274fe861a25p+2
+-0x1.f701ddb6fbaabp+1
+-0x1.027a76be10d46p+2
+-0x1.f701ddd5f145dp+1
+-0x1.952d23da600ap+2
+-0x1.9dcaf3396e6d1p+2
+-0x1.9092693f7e707p+2
+-0x1.9922fae514cfap+2
+-0x1.908ebf734ea26p+2
+-0x1.991f46941f3cp+2
+-0x1.908ebd9179653p+2
+-0x1.908ebd9179653p+2
+-0x1.991f44ace27a2p+2
+-0x1.908fc1d40f12bp+2
+-0x1.8d6f800e2822ap+2
+-0x1.95f7129c32063p+2
+-0x1.876fe5cb12edp+2
+-0x1.8fe650d7d65ddp+2
+-0x1.876abddb3c529p+2
+-0x1.8fe11a30c3413p+2
+-0x1.876abb49e5784p+2
+-0x1.876abb49e5784p+2
+-0x1.8fe11798184cep+2
+-0x1.876c3d75740e7p+2
+-0x1.577641e9d316dp+2
+-0x1.5f65ec83e1fa3p+2
+-0x1.508e5ff2502f1p+2
+-0x1.586b00a0d4a7dp+2
+-0x1.50898c0f7aea7p+2
+-0x1.58661f76d6532p+2
+-0x1.50898a5315008p+2
+-0x1.50898a5315008p+2
+-0x1.58661db5aa276p+2
+-0x1.508b23fb5b0ap+2
+-0x1.469e6e7b958cp+2
+-0x1.4e5fd22e482afp+2
+-0x1.3ed8f5569ba17p+2
+-0x1.46852d242cf2p+2
+-0x1.3ed3f7ede547cp+2
+-0x1.4680222cd5caep+2
+-0x1.3ed3f66c980bep+2
+-0x1.3ed3f66c980bep+2
+-0x1.468020a771ba9p+2
+-0x1.3ed64dd9d41e7p+2
+-0x1.46827e7145a84p+2
+-0x1.3ed64e8df0c96p+2
+-0x1.e214b167cf195p+2
+-0x1.eb9596a75be45p+2
+-0x1.dd285e00e4ca7p+2
+-0x1.e69a63eb3e82p+2
+-0x1.dd23e56065318p+2
+-0x1.e695ddce47921p+2
+-0x1.dd23e2b6c572ep+2
+-0x1.dd23e2b6c572ep+2
+-0x1.e695db1c9fe5cp+2
+-0x1.dd245027b541ap+2
+-0x1.da24c63e04955p+2
+-0x1.e38db709d7633p+2
+-0x1.d3bb9ec195291p+2
+-0x1.dd114cba972edp+2
+-0x1.d3b54136bba6p+2
+-0x1.dd0adc19b9ff5p+2
+-0x1.d3b53d7a7eb5bp+2
+-0x1.d3b53d7a7eb5bp+2
+-0x1.dd0ad85249e68p+2
+-0x1.d3b5e01d87fb4p+2
+-0x1.a1634a23a92e5p+2
+-0x1.aa246938a22aep+2
+-0x1.99ca8ced54169p+2
+-0x1.a275ac07ff694p+2
+-0x1.99c3361bebd85p+2
+-0x1.a26e400310e82p+2
+-0x1.99c3325f0610ap+2
+-0x1.99c3325f0610ap+2
+-0x1.a26e3c3b5ede9p+2
+-0x1.99c3ca11caec6p+2
+-0x1.90ac1bdd6a7a3p+2
+-0x1.993cf74d6b9bfp+2
+-0x1.882691cb5184fp+2
+-0x1.909f0655cf7e9p+2
+-0x1.881e40bedb2d2p+2
+-0x1.90969d89f9d0fp+2
+-0x1.881e3cc39eb41p+2
+-0x1.881e3cc39eb41p+2
+-0x1.909699835f018p+2
+-0x1.881f1e7547283p+2
+-0x1.189a782c33d29p+3
+-0x1.1dd594a20b86fp+3
+-0x1.15fdbe2e8345cp+3
+-0x1.1b30927ee112fp+3
+-0x1.15fb336d00af2p+3
+-0x1.1b2dffb16dd22p+3
+-0x1.15fb31c7d7a1fp+3
+-0x1.15fb31c7d7a1fp+3
+-0x1.1b2dfe070f9cap+3
+-0x1.15fb47befd071p+3
+-0x1.13939cfeea52ap+3
+-0x1.18becf76307e3p+3
+-0x1.102e14ae62636p+3
+-0x1.154e943558847p+3
+-0x1.102a760752442p+3
+-0x1.154aea2d6823dp+3
+-0x1.102a73b59d583p+3
+-0x1.102a73b59d583p+3
+-0x1.154ae7d468f41p+3
+-0x1.102a9542f0d8fp+3
+-0x1.ec127ce084a91p+2
+-0x1.f5b1b517f2884p+2
+-0x1.e3c95cce79065p+2
+-0x1.ed4f6bef0626fp+2
+-0x1.e3c022fe4115fp+2
+-0x1.ed46162d6e631p+2
+-0x1.e3c01d83fffd3p+2
+-0x1.e3c01d83fffd3p+2
+-0x1.ed4610a2963ddp+2
+-0x1.e3c052c1611f4p+2
+-0x1.df642792839e9p+2
+-0x1.e8dceb5a0f39fp+2
+-0x1.d61ccfab3fbb9p+2
+-0x1.df79a19fb3c4fp+2
+-0x1.d612093d83bafp+2
+-0x1.df6ebad6bacd4p+2
+-0x1.d61202facf3dbp+2
+-0x1.d61202facf3dbp+2
+-0x1.df6eb48139a42p+2
+-0x1.d6124edf51722p+2
+-0x1.413b391fad3efp+3
+-0x1.46fa786a55a78p+3
+-0x1.3e780e1843ffcp+3
+-0x1.442e1eafba684p+3
+-0x1.3e753f73d0e31p+3
+-0x1.442b46ba36ffp+3
+-0x1.3e753d879cc21p+3
+-0x1.3e753d879cc21p+3
+-0x1.442b44c7a1543p+3
+-0x1.3e7546005cd8cp+3
+-0x1.3a243bc06389cp+3
+-0x1.3fcbf8b7ad522p+3
+-0x1.368efe37082f7p+3
+-0x1.3c2aec4234639p+3
+-0x1.368b02e9a7a5cp+3
+-0x1.3c26e3dc7eaeep+3
+-0x1.368b003610cb1p+3
+-0x1.368b003610cb1p+3
+-0x1.3c26e1200550dp+3
+-0x1.368b0de47416bp+3
+-0x1.1bd024c4a7237p+3
+-0x1.211577582172ep+3
+-0x1.1750353302e28p+3
+-0x1.1c8739c36b49dp+3
+-0x1.174acb19229adp+3
+-0x1.1c81be7efc9f7p+3
+-0x1.174ac7995dadbp+3
+-0x1.174ac7995dadbp+3
+-0x1.1c81baf41fbfp+3
+-0x1.174ad07c17754p+3
+-0x1.17965fed5fbcp+3
+-0x1.1cce42fda75c3p+3
+-0x1.128e6b3a101aep+3
+-0x1.17b665c811f43p+3
+-0x1.12880d5202d05p+3
+-0x1.17aff3cddec48p+3
+-0x1.1288093d1ed4ap+3
+-0x1.1288093d1ed4ap+3
+-0x1.17afefac1ce6ap+3
+-0x1.1288152504b95p+3
+-0x1.6a6c31b536b6ep+3
+-0x1.70b7cc7747aacp+3
+-0x1.6782384fa6dbbp+3
+-0x1.6dc3af09a48e2p+3
+-0x1.677f295a69e38p+3
+-0x1.6dc09574039d9p+3
+-0x1.677f2729a9a8bp+3
+-0x1.677f2729a9a8bp+3
+-0x1.6dc0933ba7113p+3
+-0x1.677f2a592af78p+3
+-0x1.60ab4ae985f47p+3
+-0x1.66d514b71cafbp+3
+-0x1.5ce698def759cp+3
+-0x1.63036abecb886p+3
+-0x1.5ce2486fa36bp+3
+-0x1.62ff0b7e90c9dp+3
+-0x1.5ce24560adfd9p+3
+-0x1.5ce24560adfd9p+3
+-0x1.62ff08651a834p+3
+-0x1.5ce24aeb53aa6p+3
+-0x1.4168f26cc46a8p+3
+-0x1.4728c9f6515a5p+3
+-0x1.3ca89dd6e25e5p+3
+-0x1.4258adee3847fp+3
+-0x1.3ca2ab93c97b8p+3
+-0x1.4252a7f9738cfp+3
+-0x1.3ca2a783d2b99p+3
+-0x1.3ca2a783d2b99p+3
+-0x1.4252a3dc08852p+3
+-0x1.3ca2b98854bfdp+3
+-0x1.3e583912453p+3
+-0x1.440de0062095bp+3
+-0x1.38e91774fb489p+3
+-0x1.3e8cc46a203f1p+3
+-0x1.38e1d9cee2e04p+3
+-0x1.3e856ee32cf7bp+3
+-0x1.38e1d4e17ee11p+3
+-0x1.38e1d4e17ee11p+3
+-0x1.3e8569e5894c6p+3
+-0x1.38e1d87f87ecep+3
+-0x1.93d03f37aec86p+3
+-0x1.9aaf5fd564efbp+3
+-0x1.90bf0a4880b42p+3
+-0x1.9793032dc242ep+3
+-0x1.90bbbb4f5afe9p+3
+-0x1.978fa83134e8fp+3
+-0x1.90bbb8d8c32d8p+3
+-0x1.90bbb8d8c32d8p+3
+-0x1.978fa5b1ab645p+3
+-0x1.90bbba06c1133p+3
+-0x1.86ebbe3a06f71p+3
+-0x1.8d9c38cfbbfbap+3
+-0x1.82f7b07e5389fp+3
+-0x1.8999fd978185p+3
+-0x1.82f30d61ffc64p+3
+-0x1.899549e2d7d61p+3
+-0x1.82f309f888856p+3
+-0x1.82f309f888856p+3
+-0x1.8995466d2ab95p+3
+-0x1.82f30c371db3ep+3
+-0x1.6630ba742ebap+3
+-0x1.6c6d9d669f7d4p+3
+-0x1.6134c1960b067p+3
+-0x1.6760659529126p+3
+-0x1.612e5a538cd38p+3
+-0x1.6759e83a4b987p+3
+-0x1.612e55c3cc63p+3
+-0x1.612e55c3cc63p+3
+-0x1.6759e39acdcfp+3
+-0x1.612e5d6430347p+3
+-0x1.63525600a9c59p+3
+-0x1.698548f4593fcp+3
+-0x1.5d97789f4aed8p+3
+-0x1.63b6aa29bd2fap+3
+-0x1.5d8f9e7a7a92fp+3
+-0x1.63aeb508612cbp+3
+-0x1.5d8f98e6a23ecp+3
+-0x1.5d8f98e6a23ecp+3
+-0x1.63aeaf615da7p+3
+-0x1.5d8fa26d2bbd7p+3
+-0x1.bd3a211a0f76p+3
+-0x1.c4b35f9546575p+3
+-0x1.ba01463656cbep+3
+-0x1.c16e4b36ba039p+3
+-0x1.b9fdb61839e67p+3
+-0x1.c16aad99ac161p+3
+-0x1.b9fdb3589edf3p+3
+-0x1.b9fdb3589edf3p+3
+-0x1.c16aaacfa7f13p+3
+-0x1.b9fdb3c6ca125p+3
+-0x1.acd803d68827ap+3
+-0x1.b41382dd5768ap+3
+-0x1.a8b498673b2b8p+3
+-0x1.afe0a7d576e6p+3
+-0x1.a8afa2b361355p+3
+-0x1.afdb9fabb34b7p+3
+-0x1.a8af9eed5b243p+3
+-0x1.a8af9eed5b243p+3
+-0x1.afdb9bd7a1a9ap+3
+-0x1.a8af9fd5faa54p+3
+-0x1.89e2b2a9033a5p+3
+-0x1.909dd905a1561p+3
+-0x1.84ac84659fae9p+3
+-0x1.8b54ee35923cbp+3
+-0x1.84a5ae7cc8a53p+3
+-0x1.8b4dffcafcc74p+3
+-0x1.84a5a97211af3p+3
+-0x1.84a5a97211af3p+3
+-0x1.8b4dfaae326f9p+3
+-0x1.84a5acbf9b69cp+3
+-0x1.8658d2e711bdep+3
+-0x1.8d073da783b5dp+3
+-0x1.805c14fc29fe1p+3
+-0x1.86f5102f9d58ap+3
+-0x1.8053b72bc72bp+3
+-0x1.86ec94838b444p+3
+-0x1.8053b104ebabfp+3
+-0x1.8053b104ebabfp+3
+-0x1.86ec8e46bb886p+3
+-0x1.8053b53a2947dp+3
+-0x1.e66ee8a3f61a3p+3
+-0x1.ee87f80d2db8dp+3
+-0x1.e30e27cd2f67dp+3
+-0x1.eb19df175f6ffp+3
+-0x1.e30a551367a03p+3
+-0x1.eb15fd498d5bp+3
+-0x1.e30a52070837cp+3
+-0x1.e30a52070837cp+3
+-0x1.eb15fa3128391p+3
+-0x1.e30a522e24897p+3
+-0x1.d2d8a6c1c3651p+3
+-0x1.daa4f074b84e7p+3
+-0x1.ce85489ad4783p+3
+-0x1.d640d0448573ap+3
+-0x1.ce7ffe6d7eebap+3
+-0x1.d63b71a42ef41p+3
+-0x1.ce7ffa46673a7p+3
+-0x1.ce7ffa46673a7p+3
+-0x1.d63b6d6d09946p+3
+-0x1.ce7ffaa2c0279p+3
+-0x1.acc82802f9fcp+3
+-0x1.b4036bc356943p+3
+-0x1.a75898cad6499p+3
+-0x1.ae7f99d6333ccp+3
+-0x1.a751566867a2dp+3
+-0x1.ae783c7860173p+3
+-0x1.a75150e2a17dp+3
+-0x1.a75150e2a17dp+3
+-0x1.ae7836de1330dp+3
+-0x1.a75152563c42p+3
+-0x1.a818850b13395p+3
+-0x1.af424fb9c2a37p+3
+-0x1.a1dbc8a2cbb53p+3
+-0x1.a8ee72ba90be3p+3
+-0x1.a1d2ebfe20f3ap+3
+-0x1.a8e57554f42a9p+3
+-0x1.a1d2e546dfe4dp+3
+-0x1.a1d2e546dfe4dp+3
+-0x1.a8e56e84e0d43p+3
+-0x1.a1d2e7314d0adp+3
+-0x1.080e2f547dc14p+4
+-0x1.0c6ed2c9cfa55p+4
+-0x1.064964cb341c7p+4
+-0x1.0aa2c3d836627p+4
+-0x1.064758b17fbacp+4
+-0x1.0aa0af58a790ap+4
+-0x1.064757022624ep+4
+-0x1.064757022624ep+4
+-0x1.0aa0ada26499dp+4
+-0x1.06475708542bfp+4
+-0x1.f9ce1d888fe1cp+3
+-0x1.011a453c5da54p+4
+-0x1.f54910a1de093p+3
+-0x1.fd9d4ff7ba62cp+3
+-0x1.f5436d95710cap+3
+-0x1.fd97964be7029p+3
+-0x1.f5436905924aap+3
+-0x1.f5436905924aap+3
+-0x1.fd9791a9b946fp+3
+-0x1.f54369279adecp+3
+-0x1.cf3a4b50ce7c4p+3
+-0x1.d6f88efbb33aap+3
+-0x1.c991930a84624p+3
+-0x1.d13a01db4fe25p+3
+-0x1.c989e3eeef949p+3
+-0x1.d132353054084p+3
+-0x1.c989ddeb100efp+3
+-0x1.c989ddeb100efp+3
+-0x1.d1322f1550c11p+3
+-0x1.c989de8e43cdep+3
+-0x1.c99f8b00913f5p+3
+-0x1.d1482f8e8c90fp+3
+-0x1.c322abd5cd8dp+3
+-0x1.cab26f1d8db86p+3
+-0x1.c3194f94fcfdap+3
+-0x1.caa8ef1513331p+3
+-0x1.c31948495753ap+3
+-0x1.c31948495753ap+3
+-0x1.caa8e7ad8a986p+3
+-0x1.c3194927d9392p+3
+-0x1.1d76fe974b46ep+4
+-0x1.22317d52410ap+4
+-0x1.1b9cfa5949e5dp+4
+-0x1.204f904628e18p+4
+-0x1.1b9ac9659573ep+4
+-0x1.204d55fa466b7p+4
+-0x1.1b9ac789593e1p+4
+-0x1.1b9ac789593e1p+4
+-0x1.204d54161b51ep+4
+-0x1.1b9ac78a6f0e6p+4
+-0x1.110c014127e5cp+4
+-0x1.1591f4ab16f38p+4
+-0x1.0eaf80ba613d2p+4
+-0x1.132b9858c929ep+4
+-0x1.0eac7feca7dbdp+4
+-0x1.13288b084242p+4
+-0x1.0eac7d6b839abp+4
+-0x1.0eac7d6b839abp+4
+-0x1.1328887caf105p+4
+-0x1.0eac7d7093d33p+4
+-0x1.f11ced01491afp+3
+-0x1.f960760137c3dp+3
+-0x1.eb3b7087d2c31p+3
+-0x1.f367883e0b5a9p+3
+-0x1.eb335440b8aa5p+3
+-0x1.f35f4bb9ae134p+3
+-0x1.eb334dbb6042cp+3
+-0x1.eb334dbb6042cp+3
+-0x1.f35f451a6a13cp+3
+-0x1.eb334e0212f16p+3
+-0x1.eb42a18205fc7p+3
+-0x1.f36ed5ce63fb9p+3
+-0x1.e484d24f32d54p+3
+-0x1.ec965050b427ap+3
+-0x1.e47af3a0cd251p+3
+-0x1.ec8c4aa742133p+3
+-0x1.e47aebba24d27p+3
+-0x1.e47aebba24d27p+3
+-0x1.ec8c42a1657a7p+3
+-0x1.e47aec1c5a7e6p+3
+-0x1.37d103da16212p+4
+-0x1.3cfee86793901p+4
+-0x1.35dc8502cc67cp+4
+-0x1.3b01ab3c73b37p+4
+-0x1.35da250bc1101p+4
+-0x1.3aff40ab029a5p+4
+-0x1.35da22f486823p+4
+-0x1.35da22f486823p+4
+-0x1.3aff3e8a726aep+4
+-0x1.35da22f36e0b1p+4
+-0x1.2a0a70eec186fp+4
+-0x1.2efb58ed0a3adp+4
+-0x1.278d4bd0172c5p+4
+-0x1.2c73569fcdc2ap+4
+-0x1.278a0e64d3e64p+4
+-0x1.2c700b17fbb49p+4
+-0x1.278a0b9838385p+4
+-0x1.278a0b9838385p+4
+-0x1.2c70083f2eda8p+4
+-0x1.278a0b97f6acp+4
+-0x1.0d1cbaf24026ep+4
+-0x1.1192470727a1bp+4
+-0x1.0a092f7f2909ep+4
+-0x1.0e71fd55ec9cep+4
+-0x1.0a04dd7461e5cp+4
+-0x1.0e6d9972a025ap+4
+-0x1.0a04d9df32ab1p+4
+-0x1.0a04d9df32ab1p+4
+-0x1.0e6d95cea488fp+4
+-0x1.0a04d9eae8a43p+4
+-0x1.0a56d0e7f4d03p+4
+-0x1.0ec0df7e51ebbp+4
+-0x1.06cf83bb1bf9dp+4
+-0x1.0b2b0937268a9p+4
+-0x1.06ca4229c7d91p+4
+-0x1.0b25b21103d14p+4
+-0x1.06ca3dd25359bp+4
+-0x1.06ca3dd25359bp+4
+-0x1.0b25ada7bbd9bp+4
+-0x1.06ca3de2df138p+4
+-0x1.5dbf051f860fp+4
+-0x1.639c51e47fd03p+4
+-0x1.5ba3b977e6dd9p+4
+-0x1.6176fe6f1e891p+4
+-0x1.5ba1129a15a46p+4
+-0x1.61744af670461p+4
+-0x1.5ba1102672514p+4
+-0x1.5ba1102672514p+4
+-0x1.61744877259d9p+4
+-0x1.5ba110244dc94p+4
+-0x1.4e19813f0d7b8p+4
+-0x1.53ad1d6d6be25p+4
+-0x1.4b6c74dfb1725p+4
+-0x1.50f3a6ad4beb6p+4
+-0x1.4b68dc200f1dfp+4
+-0x1.50effd472e8fp+4
+-0x1.4b68d8dd7eb39p+4
+-0x1.4b68d8dd7eb39p+4
+-0x1.50eff9f586afbp+4
+-0x1.4b68d8daef727p+4
+-0x1.2a9609dbd1ca7p+4
+-0x1.2f8954d1d6766p+4
+-0x1.274fe4e121e5cp+4
+-0x1.2c34e44e35c42p+4
+-0x1.274b2e153c578p+4
+-0x1.2c3018fc4fd13p+4
+-0x1.274b2a01b3d18p+4
+-0x1.274b2a01b3d18p+4
+-0x1.2c3014d708291p+4
+-0x1.274b2a01fa537p+4
+-0x1.289a297c6d163p+4
+-0x1.2d84c870bf633p+4
+-0x1.24d6fe3725db7p+4
+-0x1.29b1401e3a059p+4
+-0x1.24d1406132ddap+4
+-0x1.29ab6964d3c34p+4
+-0x1.24d13b6d7d713p+4
+-0x1.24d13b6d7d713p+4
+-0x1.29ab645ba72ddp+4
+-0x1.24d13b6e3d4d5p+4
+-0x1.924e28651824dp+4
+-0x1.9930b49336d97p+4
+-0x1.8ffbc308fa847p+4
+-0x1.96d25268f5266p+4
+-0x1.8ff8b39c652e5p+4
+-0x1.96cf3336a4314p+4
+-0x1.8ff8b09992d2cp+4
+-0x1.8ff8b09992d2cp+4
+-0x1.96cf30244d16fp+4
+-0x1.8ff8b096a038ap+4
+-0x1.7f8edec098423p+4
+-0x1.8611cead8a4d2p+4
+-0x1.7c9e9071a2e01p+4
+-0x1.8312c21af1311p+4
+-0x1.7c9a72f060aeap+4
+-0x1.830e90003e33ep+4
+-0x1.7c9a6ef9f6875p+4
+-0x1.7c9a6ef9f6875p+4
+-0x1.830e8bf5fe578p+4
+-0x1.7c9a6ef631a21p+4
+-0x1.535c40317549p+4
+-0x1.59086da0c443ap+4
+-0x1.4fcebee7e8713p+4
+-0x1.556a4f0ce97dep+4
+-0x1.4fc975f9a48fep+4
+-0x1.5564ed7a2756ep+4
+-0x1.4fc9712706332p+4
+-0x1.4fc9712706332p+4
+-0x1.5564e8910c406p+4
+-0x1.4fc971233611fp+4
+-0x1.529f367ad6141p+4
+-0x1.5847edd910badp+4
+-0x1.4e874175088bdp+4
+-0x1.541cdc24f6c6p+4
+-0x1.4e80ceb494b34p+4
+-0x1.54164b637e162p+4
+-0x1.4e80c8d36790dp+4
+-0x1.4e80c8d36790dp+4
+-0x1.54164566f5728p+4
+-0x1.4e80c8cec763cp+4
+-0x1.4e401fed87954p+2
+-0x1.45af0919bd016p+2
+-0x1.ba20dfdee7519p+1
+-0x1.f20991d921956p+1
+-0x1.b21acfd8034d2p+2
+-0x1.792da65b08d12p+2
+-0x1.ed0f2881c3685p+1
+-0x1.14fb226b96fbbp+2
+-0x1.f1e984baded37p+2
+-0x1.a17ae476b7b3ap+2
+-0x1.02250eb7ca45bp+2
+-0x1.28d495483ae98p+2
+-0x1.f30ec3a437d46p+2
+-0x1.ad5206a9e5453p+2
+-0x1.169b1317496c5p+2
+-0x1.27a394a5babep+2
+-0x1.f14db2e583b2ap+2
+-0x1.ab32fd7065facp+2
+-0x1.1a7ff15be7de3p+2
+-0x1.224d672ba3f94p+2
+-0x1.e15a4aa8c57f3p+2
+-0x1.a87b240768095p+2
+-0x1.0ec4d2278c8fcp+2
+-0x1.1da102706fdf3p+2
+-0x1.d01fbfd01210dp+2
+-0x1.9da402b87908fp+2
+-0x1.12cf2844a199cp+2
+-0x1.1182250498bfdp+2
+-0x1.d2c0fe627c5e7p+2
+-0x1.9e4a2eb04fad6p+2
+-0x1.29edd6e56adbbp+2
+-0x1.1883ad9a3b927p+2
+-0x1.ce9ba2cf417fep+2
+-0x1.97abc847bdbc8p+2
+-0x1.3ee839f3715dbp+2
+-0x1.237492f3ae22ap+2
+-0x1.ca9aad5d45c01p+2
+-0x1.8e0260f4a5f47p+2
+-0x1.50153da143996p+2
+-0x1.2d9fe6bc9fd0ap+2
+-0x1.d5dc10b2f1ff2p+2
+-0x1.8dccdcdd7277p+2
+-0x1.5cf56a2d312f3p+2
+-0x1.3e3eea2467a76p+2
+-0x1.e0f66009a2c25p+2
+-0x1.9a952a38f2625p+2
+-0x1.743a1a9777a5cp+2
+-0x1.64dc929df2efp+2
+-0x1.d949ae1a56b9dp+2
+-0x1.9f676719e5ab1p+2
+-0x1.833fd4594ddefp+2
+-0x1.84ec9c173308p+2
+-0x1.d19087cebc2a5p+2
+-0x1.9fa84b10d501bp+2
+-0x1.86db2da9b55f8p+2
+-0x1.9c7e9226339f4p+2
+-0x1.afbc17b90b5bcp+2
+-0x1.8fc65a42dd4acp+2
+-0x1.72c4a9e3534b9p+2
+-0x1.975c85fa23e41p+2
+-0x1.8a193e57a07a1p+2
+-0x1.7ed0d5c8bf3ecp+2
+-0x1.549fad56bfd36p+2
+-0x1.6298d41833817p+2
+-0x1.5d028b238116ep+2
+-0x1.5d91dbf7ef552p+2
+-0x1.378d6b21a3fbdp+2
+-0x1.18ed3b3d94812p+2
+-0x1.30da26f179dbap+2
+-0x1.3b8ee0ac1ce57p+2
+-0x1.fd77c7ff82f43p+1
+-0x1.b49ab187225aep+1
+-0x1.efc9e6b7ac0bap+1
+-0x1.ed0b222a565c6p+1
+-0x1.793a3cd2288ffp+1
+-0x1.47ea36089cf24p+1
+-0x1.761a8c011e657p+1
+-0x1.62fcd96ba9c89p+1
+-0x1.0d9e3014a4e92p+1
+-0x1.aacb260f786afp+0
+-0x1.07778c3a3e6cap+1
+-0x1.dc4c79af98ffap+0
+-0x1.72bc240a1349ap+0
+-0x1.570c078fa07bfp+0
+-0x1.6c36fa4ef9e85p+0
+-0x1.31d57e218875ep+0
+-0x1.c11a7c82ab243p-1
+-0x1.bd3620ff605a7p-1
+-0x1.c3b19e1f40d3fp-1
+-0x1.6dcdfc725bd85p-1
+-0x1.d1570077175bfp-2
+-0x1.d5ac053b1d55fp-2
+-0x1.05442146bbbf1p-1
+-0x1.8dcafdf3bfd81p-2
+-0x1.e1ea35822e695p-4
+-0x1.08bf7ea3df0ddp-3
+-0x1.1f127ce667d2ap-2
+-0x1.daf772a1b031dp-3
+0x1.e994837f155d6p-4
+0x1.4c5bd39f03469p-5
+-0x1.442189cfbfa13p-3
+-0x1.c4bd44b64b961p-4
+0x1.f90a8003589e3p-3
+0x1.4f2558353976cp-3
+0x1.1656f5e444ea9p-6
+0x1.1656f5e444ea9p-6
+0x1.8bc824de72df6p-5
+0x1.8bc824de72df6p-5
+0x1.8b1c67ea3e0ecp-5
+0x1.8b1c67ea3e0ecp-5
+0x1.6b99478000488p-4
+0x1.6b99478000488p-4
+0x1.8ff59b00c5d82p-5
+0x1.8ff59b00c5d82p-5
+0x1.1bb2b2f16b4ccp-3
+0x1.1bb2b2f16b4ccp-3
+0x1.1bcbbaf4eae08p-3
+0x1.1bcbbaf4eae08p-3
+0x1.bc74f7b30c27fp-3
+0x1.bc74f7b30c27fp-3
+0x1.84c918dbf2d1p-4
+0x1.84c918dbf2d1p-4
+0x1.136dcf64b310ap-2
+0x1.136dcf64b310ap-2
+0x1.13bdd39765c85p-2
+0x1.13bdd39765c85p-2
+0x1.87482fbba2b8ep-2
+0x1.87482fbba2b8ep-2
+0x1.3c359aecde5cp-3
+0x1.3c359aecde5cp-3
+0x1.c017ae316edd7p-2
+0x1.c017ae316edd7p-2
+0x1.c0e2a6bdbc1dfp-2
+0x1.c0d0f9990b9b3p-7
+0x1.29b24da8f2a0bp-1
+0x1.29b24da8f2a0bp-1
+0x1.cf07c6c271f5p-3
+0x1.cf07c6c271f5p-3
+0x1.486609099ca76p-1
+0x0p+0
+0x1.498f60f3c668ep-6
+0x0p+0
+0x1.9e823bb929b8p-1
+0x0p+0
+0x1.3b51c858f73afp-2
+0x1.3b51c858f73afp-2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8b7d3a6379e1dp-2
+0x1.8b7d3a6379e1dp-2
+0x1.d862ab157e756p-2
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.4f3793def901cp-3
+0x1.3a6df5c51019dp-2
+0x1.521b67c43949cp-2
+0x1.b43f0443f50d6p-2
+0x1.2c61dddba2a6cp-1
+0x1.095314f8de7fep-1
+0x1.0b28ebd7fad49p-2
+0x1.87482fbba2b8ep-1
+0x1.29ec58fab2ec4p-1
+0x1.c3e99591c9698p-2
+0x1.720941f4b6b9bp-3
+0x1.3b51c858f73afp-1
+0x1.136dcf64b310ap-1
+0x1.1bcbbaf4eae08p-2
+-0x1.287329d5245aep-2
+0x1.224bbb0bd91dcp-4
+-0x1.b035f81dcd337p-7
+-0x1.53a0314bf0c25p-1
+-0x1.3de66e628f07p-1
+-0x1.035244bae36fbp-2
+-0x1.3f6bbe1f1524dp-3
+-0x1.0d0d532c4ad41p-2
+-0x1.353f61ea40aa6p-4
+-0x1.650811e95f329p-2
+-0x1.086350168b226p-1
+-0x1.f5402d328ce6cp-3
+-0x1.9ef7c860fabbbp-2
+-0x1.4cb45b812948fp-7
+-0x1.186eda938a70ep-1
+-0x1.6c7ccf653274ep-3
+-0x1.600889207e844p-5
+-0x1.d6cd59d63ed9ep-3
+-0x1.36e5f9052ef0ap-5
+-0x1.4f3dd0435573ap-5
+-0x1.e9a543a495fe9p-3
+-0x1.ff80a69d541fep-4
+-0x1.3f4b5cfeb5a55p-3
+-0x1.1b259eddb89ecp-2
+-0x1.c5fddc91ba213p-2
+-0x1.4c5366ae69e6cp-5
+-0x1.ba90101653accp-1
+-0x1.37313a3a16529p-3
+-0x1.05a25cb01456dp-2
+-0x1.b79eb07d6194dp-2
+-0x1.b754e18cc668dp-6
+-0x1.b6f83de3a845ep-5
+-0x1.ea01c1b780874p-3
+-0x1.40ae1e4552763p-4
+-0x1.f0c349f347aeap-3
+-0x1.3e034edca954dp-3
+-0x1.fc3d8aea73fc7p+4
+-0x1.0903f9856412ep+5
+-0x1.9f78a3ea12fa4p+4
+-0x1.90fdcd25d5b0ep+4
+-0x1.b7b742de076b7p+4
+-0x1.cbc50e5d7707cp+4
+-0x1.67b5cf04ae2dep+4
+-0x1.5c078f931209fp+4
+-0x1.7f0941b7615a6p+4
+-0x1.90144a970665ep+4
+-0x1.37af7213655d7p+4
+-0x1.2e780f4c9b857p+4
+-0x1.500df7b4e29dp+4
+-0x1.5e0836722d793p+4
+-0x1.0ecbf7bf9e9b6p+4
+-0x1.07dd9f0ba5c54p+4
+-0x1.28e4e98fc31bcp+4
+-0x1.349020640c5e5p+4
+-0x1.da4025d967be2p+3
+-0x1.cf4ae73df4677p+3
+-0x1.097f8d4db1d4p+4
+-0x1.134ecc652feb3p+4
+-0x1.a470382955771p+3
+-0x1.9b826cf7a7accp+3
+-0x1.e042f0a7262b6p+3
+-0x1.f13eb369c17bfp+3
+-0x1.79022e3bde406p+3
+-0x1.71e6608aa903cp+3
+-0x1.b9c2c746a80f4p+3
+-0x1.c8df4e41912fdp+3
+-0x1.586eff46a0b49p+3
+-0x1.5260bae0b2edbp+3
+-0x1.9f0e922caf739p+3
+-0x1.ad132d561c2e5p+3
+-0x1.4329633f2b39ap+3
+-0x1.3d1eea122108ep+3
+-0x1.8470822d413dp+3
+-0x1.914a83aebe768p+3
+-0x1.2e1eaf893f16dp+3
+-0x1.280a18e5da054p+3
+-0x1.69e3477659109p+3
+-0x1.75748068a0a52p+3
+-0x1.1942a06e4d38cp+3
+-0x1.131dcecf559d7p+3
+-0x1.4f99396a2e765p+3
+-0x1.59b2ef4db47b1p+3
+-0x1.0487fe3bfd6f5p+3
+-0x1.fcd9bcf478b84p+2
+-0x1.358cd45a032a8p+3
+-0x1.3e35d255a01e5p+3
+-0x1.e01d2adf15da1p+2
+-0x1.d46fdf506dbbcp+2
+-0x1.1b780772a8e97p+3
+-0x1.22da9c187027cp+3
+-0x1.b77a21c881f4p+2
+-0x1.acca9c01901ddp+2
+-0x1.01579a86fa6c6p+3
+-0x1.078d1f7b6db7dp+3
+-0x1.8ee42ea0be806p+2
+-0x1.85b19b09087b8p+2
+-0x1.cd92b3a8e40e5p+2
+-0x1.d818c008fc59ap+2
+-0x1.65cfdc87dc526p+2
+-0x1.5e81fd02f566ap+2
+-0x1.976eb20b837aep+2
+-0x1.a0a274609c513p+2
+-0x1.3bfc0be2fafcep+2
+-0x1.3625dd583d83p+2
+-0x1.5ff48944d3d9cp+2
+-0x1.682a0dfa733cap+2
+-0x1.1168a77e16b1p+2
+-0x1.0bfd4e6ee79a9p+2
+-0x1.27136e71dfd29p+2
+-0x1.2e9a43a04a381p+2
+-0x1.ca9b0629079cdp+1
+-0x1.c04a593824617p+1
+-0x1.d8715fec7b635p+1
+-0x1.e52ab954ee64ep+1
+-0x1.6e820ea13a007p+1
+-0x1.65680d937109ep+1
+-0x1.5e1a4931c6fdap+1
+-0x1.67b2ec8cf010ep+1
+-0x1.0ef10eab62cf9p+1
+-0x1.06d9b66bbb35ep+1
+-0x1.e65538ddcf43cp+0
+-0x1.f393cdf6941a3p+0
+-0x1.78016503accf9p+0
+-0x1.6c0d8a9b13fa5p+0
+-0x1.3542c574881aep+0
+-0x1.3d308152f7a7ep+0
+-0x1.dd82173fef7c9p-1
+-0x1.cdfb152ecd2d3p-1
+-0x1.576ac7fc70954p-1
+-0x1.5fb112e53f491p-1
+-0x1.091a9e8331a38p-1
+-0x1.0040b1b2a2678p-1
+-0x1.31fdf4edfcd55p-2
+-0x1.38eac4398914ap-2
+-0x1.d8e2197f230fcp-3
+-0x1.c83b170c6a7fap-3
+-0x1.98cc4ac61dc9ep-4
+-0x1.a22ea7c908a49p-4
+-0x1.3cdd7de507f5p-4
+-0x1.312e51e7f254ap-4
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.dd1a560aee2a8p-17
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.03a2ba086a9ap-3
+-0x1.dc6d30eb6c57dp-3
+-0x0p+0
+-0x1.b1a01eeed875bp-3
+-0x0p+0
+-0x1.485dc03e67913p-1
+-0x0p+0
+-0x1.81b3170e668d3p-2
+-0x1.77ac4880b042p-9
+-0x1.2a5d2084fb273p-1
+-0x0p+0
+-0x1.c38a3ea6385a1p+0
+-0x1.576e10e952cc3p-3
+-0x1.798b271ecba01p-1
+-0x1.360859f80ebe6p+1
+-0x0p+0
+-0x1.4c91305e54f23p+5
+-0x1.e98d91dfd1fc1p-15
+-0x1.1200e42f92904p+7
+-0x1.3ec6e1213a6d2p+7
+-0x1.61619b200bdc9p+3
+-0x0p+0
+-0x1.de09737c189edp-5
+-0x1.df7b6775e37fcp+4
+-0x1.a33734be689e2p-12
+-0x0p+0
+-0x1.9f48653d3418p+0
+-0x1.7706065634046p+2
+-0x1.92a43e5724443p-16
+-0x0p+0
+-0x0p+0
+-0x1.d9d83178e3aa5p-14
+-0x1.667e6d99abda8p-16
+-0x0p+0
+-0x0p+0
+-0x1.3f8429b906accp+1
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.f252b08f1a1efp+0
+-0x1.9p+4
+-0x1.713b84ea397f9p+1
+-0x1.2f4462e785496p+1
+-0x1.32bf4534a4ac2p+1
+-0x1.9p+4
+-0x1.c6916a51f8187p+1
+-0x1.755b9bb59313ap+1
+-0x1.01309ddea97p+2
+-0x1.9p+4
+-0x1.64aee239e67ecp+2
+-0x1.25119eb723bc9p+2
+-0x1.5a930d37ac32fp+2
+-0x1.9p+4
+-0x1.0bc2a90e8e0f1p+3
+-0x1.b81c12a7342a8p+2
+-0x1.b63050a2b84cp+2
+-0x1.9p+4
+-0x1.48f13e93325p+3
+-0x1.0e768e217972fp+3
+-0x1.ece0e2f2ea721p+2
+-0x1.9p+4
+-0x1.2742f984d780fp+3
+-0x1.e626b4b10f32ep+2
+-0x1.b5d687788eb96p+2
+-0x1.9p+4
+-0x1.ca7fb013bcf9p+2
+-0x1.7a433979371a3p+2
+-0x1.32f1c7815a697p+2
+-0x1.9p+4
+-0x1.337e2229172f3p+2
+-0x1.fcfa6704cd295p+1
+-0x1.7a19a211b1324p+1
+-0x1.9p+4
+-0x1.662c5fc1e22acp+1
+-0x1.29a8df586c9c8p+1
+-0x1.551df9e212197p+1
+-0x1.9p+4
+-0x1.33d5ffad41e33p+1
+-0x1.012495f15c38p+1
+-0x1.39721367a2983p+1
+-0x1.9p+4
+-0x1.099990b2ad656p+1
+-0x1.bed0f11576373p+0
+-0x1.29e317e85e759p+1
+-0x1.9p+4
+-0x1.d3eab038a894dp+0
+-0x1.8d0de1212013bp+0
+-0x1.152261f3afd5ep+1
+-0x1.9p+4
+-0x1.aa56ee1988807p+0
+-0x1.6d7ca6dbd160ap+0
+-0x1.d4b392d935cb7p+0
+-0x1.9p+4
+-0x1.86dbf85ba9374p+0
+-0x1.536aa625d72f7p+0
+-0x1.5a00463fcd6ap+0
+-0x1.9p+4
+-0x1.5f117fba1726fp+0
+-0x1.3674f3aa40977p+0
+-0x1.ed5bf9085f6dbp-1
+-0x1.9p+4
+-0x1.2fae8574fcbf5p+0
+-0x1.1425db522071ap+0
+-0x1.7517db925465dp-1
+-0x1.9p+4
+-0x1.7517b221ce113p-1
+-0x1.9p+4
+-0x1.0371a2b82ca67p+0
+-0x1.eb43031892b4dp-1
+-0x1.47587c835ad5dp-1
+-0x1.9p+4
+-0x1.3c2f23cdeff92p-1
+-0x1.9p+4
+-0x1.eab050345fc19p-1
+-0x1.0e9ff0c24b4c9p+0
+-0x1.d669df8c5f7e9p-1
+-0x1.d147bf38ddb9ep-1
+-0x1.28f066d9c7a42p-1
+-0x1.9p+4
+-0x1.f6fc0cfa341c9p-1
+-0x1.2f528f4bc9fb1p+0
+-0x1.d7900e28d8e32p-1
+-0x1.e27204569debp-1
+-0x1.27fa639fcf24bp-1
+-0x1.9p+4
+-0x1.27c478e23bd5cp-1
+-0x1.9p+4
+-0x1.28177e558de79p+0
+-0x1.bb9b81954b879p+0
+-0x1.fe1563d7c16c1p-1
+-0x1.0a52fa149a28ep+0
+-0x1.422a3395b2c5cp-1
+-0x1.9p+4
+-0x1.3a0eb3e2c4c33p-1
+-0x1.9p+4
+-0x1.1e1ee947b5bd9p+0
+-0x1.2e4f54310488ep+0
+-0x1.d9a5517a17e35p+0
+-0x1.9p+4
+-0x1.31c69a4473283p-1
+-0x1.9p+4
+-0x1.4096bf31e0419p+2
+-0x1.9p+4
+-0x1.0e3f42094ca24p+0
+-0x1.20ab49bdaa86ep+0
+-0x1.f65e8499c325bp-1
+-0x1.9p+4
+-0x1.16cd7b24a2f2ap-1
+-0x1.9p+4
+-0x1.17a1929f48f99p+1
+-0x1.3916dfecc4fe8p+3
+-0x1.e0d32a81ceb8ep-1
+-0x1.074a1a8e2f933p+0
+-0x1.d05f644a0fbdbp-2
+-0x1.9p+4
+-0x1.195df064a1a81p+0
+-0x1.49dcb0bb58a18p+1
+-0x1.8a935c0ffd6eap-1
+-0x1.bc32a79715bf4p-1
+-0x1.528cf0c4546c9p-2
+-0x1.9p+4
+-0x1.16b7cd2df76cfp-1
+-0x1.3292ae839bce2p-1
+-0x1.761e84bd105dep-3
+-0x1.9p+4
+-0x1.be02b34977976p-2
+-0x1.1040ef616203ap+0
+-0x1.31a356a9ccb0dp-2
+-0x1.574f62abbc619p-2
+-0x1.7d6efe2e41329p-4
+-0x1.9p+4
+-0x1.3572514b03262p-3
+-0x1.57ce967081994p-3
+-0x1.2e8965cfa80dfp+2
+-0x1.9p+4
+-0x1.c0c48943c732cp+2
+-0x1.6ffe8bf55401ep+2
+-0x1.74750bf35218ap+2
+-0x1.9p+4
+-0x1.143df2d10d39fp+3
+-0x1.c50b0c190bf2p+2
+-0x1.38306c506a078p+3
+-0x1.9p+4
+-0x1.b15bdddb01ec3p+3
+-0x1.63637ac4021bdp+3
+-0x1.a463580315fcdp+3
+-0x1.9p+4
+-0x1.453fee3bb5a42p+4
+-0x1.0abe730e8cebap+4
+-0x1.099b47d006285p+4
+-0x1.9p+4
+-0x1.8f62e52a777cp+4
+-0x1.47944958a5937p+4
+-0x1.2a9930faeb588p+4
+-0x1.9p+4
+-0x1.660e8b34afacep+4
+-0x1.25c36789acb9cp+4
+-0x1.08db39ed3d98cp+4
+-0x1.9p+4
+-0x1.156fc6af345c7p+4
+-0x1.c774b4576f214p+3
+-0x1.7252ecc725dedp+3
+-0x1.9p+4
+-0x1.72fd791b8f26ap+3
+-0x1.30bcd479673f6p+3
+-0x1.c689e71cb155bp+2
+-0x1.9p+4
+-0x1.ae6dd46d6a31p+2
+-0x1.61e49cfa1675ap+2
+-0x1.9878bb1129228p+2
+-0x1.9p+4
+-0x1.70213138f1bb2p+2
+-0x1.2f06c5766da3cp+2
+-0x1.7592a28587903p+2
+-0x1.9p+4
+-0x1.3b896c3cd69c8p+2
+-0x1.04269eb6bfad6p+2
+-0x1.6139178c40589p+2
+-0x1.9p+4
+-0x1.13a9c7d2976efp+2
+-0x1.c77bed5913fccp+1
+-0x1.46530febf41f5p+2
+-0x1.9p+4
+-0x1.f19636b806318p+1
+-0x1.9c14dea697a7ep+1
+-0x1.1062e8c64c16fp+2
+-0x1.9p+4
+-0x1.c2ce8a813d70bp+1
+-0x1.76802b0c3e071p+1
+-0x1.8771d4abac328p+1
+-0x1.9p+4
+-0x1.8e50843079d12p+1
+-0x1.4c6108aa18666p+1
+-0x1.0a9e1b883b726p+1
+-0x1.9p+4
+-0x1.502f4257f9821p+1
+-0x1.1a8920129123bp+1
+-0x1.7b66199a0b78bp+0
+-0x1.9p+4
+-0x1.7b6600c9d7b87p+0
+-0x1.9p+4
+-0x1.1592ec9313531p+1
+-0x1.d7a80c5be56a6p+0
+-0x1.3594d22f5d649p+0
+-0x1.9p+4
+-0x1.2e6f6c2409af3p+0
+-0x1.9p+4
+-0x1.f1b0eb074aa9dp+0
+-0x1.c7bb355a1c0e4p+0
+-0x1.e5a0757da96a2p+0
+-0x1.a1bf24343f9eap+0
+-0x1.0e03526376599p+0
+-0x1.9p+4
+-0x1.ed79979ee81b8p+0
+-0x1.da3f6bbfbf106p+0
+-0x1.da3680c4507eep+0
+-0x1.9c25de9f440adp+0
+-0x1.02259ea2b9454p+0
+-0x1.9p+4
+-0x1.01fffba449a02p+0
+-0x1.9p+4
+-0x1.1684042a662dcp+1
+-0x1.35a05ae6e53f4p+1
+-0x1.f92e280125595p+0
+-0x1.b9f82e4d19202p+0
+-0x1.107b6d1c1c8fap+0
+-0x1.9p+4
+-0x1.0aa8288b0f6ffp+0
+-0x1.9p+4
+-0x1.18d6383220dd1p+1
+-0x1.ed384df701fb7p+0
+-0x1.75057a097c9c9p+1
+-0x1.9p+4
+-0x1.03647683c8fap+0
+-0x1.9p+4
+-0x1.fa43d4245df0ep+2
+-0x1.9p+4
+-0x1.07690029fe7dep+1
+-0x1.d0832041d6567p+0
+-0x1.92cda7ae1c129p+0
+-0x1.9p+4
+-0x1.d8ee2a27fe701p-1
+-0x1.9p+4
+-0x1.c966373c44f99p+1
+-0x1.4c1d90d414e87p+3
+-0x1.d1046b3bc6a1p+0
+-0x1.9f7fa1c8aee21p+0
+-0x1.89f04c04ddd61p-1
+-0x1.9p+4
+-0x1.eb5fb116ecda3p+0
+-0x1.86aa1db3baa3cp+1
+-0x1.7acb0a7d01adfp+0
+-0x1.57b42dbc4ee3dp+0
+-0x1.1f33c86182e44p-1
+-0x1.9p+4
+-0x1.0b6654de9f0a1p+0
+-0x1.dd885b94c4d01p-1
+-0x1.3d5f943b9be7fp-2
+-0x1.9p+4
+-0x1.82801e0646f25p-1
+-0x1.3e5e9443f410cp+0
+-0x1.23d92cc79faf2p-1
+-0x1.07e2fb1b024aep-1
+-0x1.43946557d450bp-3
+-0x1.9p+4
+-0x1.279c11b6c16ebp-2
+-0x1.0945dc3e1a877p-2
+-0x1.ade104215d335p+1
+-0x1.9p+4
+-0x1.3ed25719ef617p+2
+-0x1.0572f5c6151p+2
+-0x1.089d7d930889dp+2
+-0x1.9p+4
+-0x1.88817ab5b9b76p+2
+-0x1.41dfbd988525dp+2
+-0x1.bb992e09d43b4p+2
+-0x1.9p+4
+-0x1.33e0bb1afec7ep+3
+-0x1.f8fee94852b12p+2
+-0x1.2aad399a5d6dap+3
+-0x1.9p+4
+-0x1.ce25b3809ee31p+3
+-0x1.7b09ec1d8c69fp+3
+-0x1.796beaf7ac449p+3
+-0x1.9p+4
+-0x1.1bbf637ae2d3bp+4
+-0x1.d17ed987dc838p+3
+-0x1.a84f04bc6cf05p+3
+-0x1.9p+4
+-0x1.fcc976b7582d9p+3
+-0x1.a177eccc5530cp+3
+-0x1.7860919647492p+3
+-0x1.9p+4
+-0x1.8a4058de9313ap+3
+-0x1.43a8c973d0997p+3
+-0x1.0725bece2cefdp+3
+-0x1.9p+4
+-0x1.079ef5a2b6d98p+3
+-0x1.b12d9c6c7ecebp+2
+-0x1.4305cf841cd51p+2
+-0x1.9p+4
+-0x1.31e47c4652257p+2
+-0x1.f727c999ef1fep+1
+-0x1.22515316c7b65p+2
+-0x1.9p+4
+-0x1.05a7df6c25ccap+2
+-0x1.aef225d2c5106p+1
+-0x1.098cd91099049p+2
+-0x1.9p+4
+-0x1.c0a2cd5b32feep+1
+-0x1.7219cab9bff22p+1
+-0x1.f63ec49bc915cp+1
+-0x1.9p+4
+-0x1.880a3f2f9dbe6p+1
+-0x1.4423ba05e64eap+1
+-0x1.d01867caf31c2p+1
+-0x1.9p+4
+-0x1.61edeef34bbefp+1
+-0x1.25681b02d8716p+1
+-0x1.8389c319042d8p+1
+-0x1.9p+4
+-0x1.40c61182f6919p+1
+-0x1.0ad3b26ecc3bp+1
+-0x1.16b38e46a6f05p+1
+-0x1.9p+4
+-0x1.1b923a11938f4p+1
+-0x1.da150c9b21e05p+0
+-0x1.7c3d75cd8341ap+0
+-0x1.9p+4
+-0x1.df1187c171e43p+0
+-0x1.939673fdeb3e2p+0
+-0x1.0f294a3d78259p+0
+-0x1.9p+4
+-0x1.0f29319392128p+0
+-0x1.9p+4
+-0x1.8c07655e3bfb6p+0
+-0x1.51a1a2f309691p+0
+-0x1.bf89883139761p-1
+-0x1.9p+4
+-0x1.b16e1d87de693p-1
+-0x1.9p+4
+-0x1.66d734e061c18p+0
+-0x1.51c1770a78873p+0
+-0x1.5ae6109598398p+0
+-0x1.2bc565e49c178p+0
+-0x1.83e78f31aa196p-1
+-0x1.9p+4
+-0x1.661c940c0c598p+0
+-0x1.66789f2df722bp+0
+-0x1.531e4da8661ffp+0
+-0x1.285f120d7c1d2p+0
+-0x1.73c390ad3b466p-1
+-0x1.9p+4
+-0x1.73794b1717e48p-1
+-0x1.9p+4
+-0x1.9c1a7783b9aeep+0
+-0x1.ef8c381a33cb1p+0
+-0x1.69859ded6e524p+0
+-0x1.3e43b099826c7p+0
+-0x1.8bf63dee5e0aap-1
+-0x1.9p+4
+-0x1.8087037d1db7ep-1
+-0x1.9p+4
+-0x1.921b3c3ef7961p+0
+-0x1.6368eec69c8b1p+0
+-0x1.3546cefeb7d07p+1
+-0x1.9p+4
+-0x1.7609375851afp-1
+-0x1.9p+4
+-0x1.a6bab928b1aa2p+2
+-0x1.9p+4
+-0x1.7954292bd9644p+0
+-0x1.4f1c38ae06826p+0
+-0x1.437d56905f051p+0
+-0x1.9p+4
+-0x1.553217cd7a994p-1
+-0x1.9p+4
+-0x1.7398a2c2b36bcp+1
+-0x1.3de8cab2dfddap+3
+-0x1.4dbc00a0e9e86p+0
+-0x1.2dd970bf068c5p+0
+-0x1.1c028b4268062p-1
+-0x1.9p+4
+-0x1.7b528df360bfbp+0
+-0x1.58c5d9418b659p+1
+-0x1.108c2609a9dbap+0
+-0x1.f7d749afe0cf7p-1
+-0x1.9e1c73926f38cp-2
+-0x1.9p+4
+-0x1.7f9c6b3a98a1dp-1
+-0x1.59fcfb73036e5p-1
+-0x1.c9a01926ca3acp-3
+-0x1.9p+4
+-0x1.2b4f4f270fb92p-1
+-0x1.1a9431e08e75p+0
+-0x1.a35dc777820a1p-2
+-0x1.809c6ca86e26dp-2
+-0x1.d2917d1269f02p-4
+-0x1.6731f9cfa53cap+4
+-0x1.a857aeabbeccap-3
+-0x1.81292f10056dp-3
+-0x1.a3719755148a5p+0
+-0x1.9p+4
+-0x1.3702a8208620cp+1
+-0x1.fe4854afc9aafp+0
+-0x1.02313b8348193p+1
+-0x1.9p+4
+-0x1.7ee3cdc8270bap+1
+-0x1.3a1bfa1095e1p+1
+-0x1.b0dcbecdd1a1fp+1
+-0x1.9p+4
+-0x1.2c5c595b82cb7p+2
+-0x1.ece39089650b6p+1
+-0x1.237f55dcc4a36p+2
+-0x1.9p+4
+-0x1.c2e3042f2d2bep+2
+-0x1.71fc6acea7f7cp+2
+-0x1.70662df101f7fp+2
+-0x1.9p+4
+-0x1.14dd1f5534d13p+3
+-0x1.c6774cf126f38p+2
+-0x1.9e37af7d3ce99p+2
+-0x1.9p+4
+-0x1.f0964869d723bp+2
+-0x1.97ca03113b108p+2
+-0x1.6f8e9e452ce1dp+2
+-0x1.9p+4
+-0x1.80fc4d06abd61p+2
+-0x1.3c6ed3bb7d531p+2
+-0x1.0126af7fb14cap+2
+-0x1.9p+4
+-0x1.019d1635eb352p+2
+-0x1.a810ab977e47dp+1
+-0x1.3bef0bae26cccp+1
+-0x1.9p+4
+-0x1.2b34e8aebc4f2p+1
+-0x1.ed6a9cb92957ep+0
+-0x1.1c372e17dbd6ap+1
+-0x1.9p+4
+-0x1.003d8bce77f8bp+1
+-0x1.a78270170811p+0
+-0x1.0444120330212p+1
+-0x1.9p+4
+-0x1.b80eb63652231p+0
+-0x1.6cc57c09d44fp+0
+-0x1.ecdd6ef21e17ap+0
+-0x1.9p+4
+-0x1.8153ba0734eb1p+0
+-0x1.40a6494022592p+0
+-0x1.c836abd38826bp+0
+-0x1.9p+4
+-0x1.5cb2313ba6a1p+0
+-0x1.237f833ef6d59p+0
+-0x1.7e31afb3d25f8p+0
+-0x1.9p+4
+-0x1.3cfb10b17f4a3p+0
+-0x1.0a89f52928b72p+0
+-0x1.14c486ce3e9bp+0
+-0x1.9p+4
+-0x1.196882ae70f36p+0
+-0x1.dd3c98e219753p-1
+-0x1.7e45c7adc91c2p-1
+-0x1.9p+4
+-0x1.de856ddb80ca1p-1
+-0x1.9b23e089dfcfap-1
+-0x1.1572e85e27e9bp-1
+-0x1.9p+4
+-0x1.1572b95c41e48p-1
+-0x1.9p+4
+-0x1.8f5643a864c87p-1
+-0x1.5e06d843078e3p-1
+-0x1.de14be5e8e181p-2
+-0x1.9p+4
+-0x1.c4060262041aap-2
+-0x1.9p+4
+-0x1.77f3d67d0482ep-1
+-0x1.88b25a9219748p-1
+-0x1.616a2c7a3c6b6p-1
+-0x1.3cba384660953p-1
+-0x1.9b7639948521ep-2
+-0x1.9p+4
+-0x1.7f910c24da6c3p-1
+-0x1.ba1842146046dp-1
+-0x1.5c44c4d81e8dbp-1
+-0x1.3de527d36a3bdp-1
+-0x1.906dcacda4bedp-2
+-0x1.9p+4
+-0x1.8fe7482e2ecb7p-2
+-0x1.9p+4
+-0x1.d04666d6f682p-1
+-0x1.5d9764941a455p+0
+-0x1.751b496a5efb7p-1
+-0x1.589dba26d1cd8p-1
+-0x1.b6685aef90297p-2
+-0x1.9p+4
+-0x1.a2165341054abp-2
+-0x1.9p+4
+-0x1.a0298f6031d3ap-1
+-0x1.82cfb2d386002p-1
+-0x1.a82094fb92526p+0
+-0x1.9p+4
+-0x1.96ba4e63db355p-2
+-0x1.9p+4
+-0x1.23fe99923d455p+2
+-0x1.9p+4
+-0x1.878c98508d199p-1
+-0x1.6edb1011c0d1fp-1
+-0x1.aa69ba1b06d66p-1
+-0x1.9p+4
+-0x1.737e90076d605p-2
+-0x1.9p+4
+-0x1.ef710f1bc49ebp+0
+-0x1.2d3edf872d18dp+3
+-0x1.5c741c94369a2p-1
+-0x1.51142ec2e0ca9p-1
+-0x1.34cbc46c49d17p-2
+-0x1.9p+4
+-0x1.d2c68ca2c408p-1
+-0x1.22b5679795cap+1
+-0x1.1e7c57fcbff82p-1
+-0x1.1f9583080a615p-1
+-0x1.c23cbf63b2397p-3
+-0x1.9p+4
+-0x1.90ebecab94865p-2
+-0x1.81a4a6f4427d5p-2
+-0x1.f193299a4b4d2p-4
+-0x1.9p+4
+-0x1.72dc960cad1cdp-2
+-0x1.e1f243c58e6c7p-1
+-0x1.b8945eeda419p-3
+-0x1.b4605962a2569p-3
+-0x1.fb48bedf519a7p-5
+-0x1.adbe753c816dbp+3
+-0x1.bc9978c18552p-4
+-0x1.b05cddf68c394p-4
+-0x1.2bf5d4ec3edc3p-1
+-0x1.9p+4
+-0x1.bc7e227a6beb6p-1
+-0x1.6d1b69194e6c5p-1
+-0x1.714a1a7ab68p-1
+-0x1.9p+4
+-0x1.119cd440fe246p+0
+-0x1.c17eaca6b8e11p-1
+-0x1.35a1da632ea32p+0
+-0x1.9p+4
+-0x1.ad65193f2dd3bp+0
+-0x1.60d7dff252ac8p+0
+-0x1.a1418c6cbf101p+0
+-0x1.9p+4
+-0x1.425914f795e68p+1
+-0x1.08f12869c5026p+1
+-0x1.07c8af839a57p+1
+-0x1.9p+4
+-0x1.8c02d8764230dp+1
+-0x1.45a5108fde577p+1
+-0x1.28b6a10b0c278p+1
+-0x1.9p+4
+-0x1.637b9a5a96c73p+1
+-0x1.24b2df840347ep+1
+-0x1.0798b834322e2p+1
+-0x1.9p+4
+-0x1.140866428ec26p+1
+-0x1.c78fa101b5ac1p+0
+-0x1.71a1cccda3685p+0
+-0x1.9p+4
+-0x1.724bce8c06627p+0
+-0x1.3292a6643da3p+0
+-0x1.c7645d4f7a5d9p-1
+-0x1.9p+4
+-0x1.af6868da488bap-1
+-0x1.66b2ce0319239p-1
+-0x1.9aeb6a75a026ep-1
+-0x1.9p+4
+-0x1.72dcfeeb687bdp-1
+-0x1.360062b7942afp-1
+-0x1.79a9c550da82ap-1
+-0x1.9p+4
+-0x1.4013ee834ccep-1
+-0x1.0d7b33791654ep-1
+-0x1.66ff283a665c9p-1
+-0x1.9p+4
+-0x1.1a0ddbe7b3007p-1
+-0x1.df44d11121aeap-2
+-0x1.4e165840a687p-1
+-0x1.9p+4
+-0x1.011ac8e4869f2p-1
+-0x1.b983ac6d27396p-2
+-0x1.1aa9c3ae5d9b6p-1
+-0x1.9p+4
+-0x1.d7aaad5f3f593p-2
+-0x1.9a6a6cdbaf73p-2
+-0x1.a1c3f0e8a3f83p-2
+-0x1.9p+4
+-0x1.a7f03325b58adp-2
+-0x1.77de306accc8cp-2
+-0x1.2a52faf4d4a06p-2
+-0x1.9p+4
+-0x1.6f11717b5ee7ep-2
+-0x1.4eef3d184954ap-2
+-0x1.c41554c5c3f58p-3
+-0x1.9p+4
+-0x1.c414b0174a085p-3
+-0x1.9p+4
+-0x1.3a11238a44d9p-2
+-0x1.2ae30e9123b6ap-2
+-0x1.aa81d1e63c353p-3
+-0x1.9p+4
+-0x1.7fd28b9dd90b2p-3
+-0x1.9p+4
+-0x1.43a354ba0aa7bp-2
+-0x1.b3983b8da9bc4p-2
+-0x1.1d13b33dc919ap-2
+-0x1.1ba7f6f637fdbp-2
+-0x1.691496aca1107p-3
+-0x1.9p+4
+-0x1.58b164d3979ddp-2
+-0x1.0fbf4cdaeb349p-1
+-0x1.1e33ca474b4bp-2
+-0x1.27186533ea531p-2
+-0x1.691b45a1e6fdep-3
+-0x1.9p+4
+-0x1.68464975e52e4p-3
+-0x1.9p+4
+-0x1.c500f25a0013ep-2
+-0x1.0301ad88f7d44p+0
+-0x1.36025a189b38ep-2
+-0x1.46e4982119d69p-2
+-0x1.9e14575d6caaep-3
+-0x1.9p+4
+-0x1.7ee9a25a05412p-3
+-0x1.9p+4
+-0x1.5bea6088c54d1p-2
+-0x1.73196fb03dc53p-2
+-0x1.f4f206df5aab3p-1
+-0x1.9p+4
+-0x1.748fe287d1955p-3
+-0x1.9p+4
+-0x1.5aec6a82da52dp+1
+-0x1.9p+4
+-0x1.49381f8287377p-2
+-0x1.649bd16aa63b6p-2
+-0x1.e944e478f008ep-2
+-0x1.9p+4
+-0x1.551ada9db43fap-3
+-0x1.9p+4
+-0x1.1f14fd27c5364p+0
+-0x1.22e47913e2a4fp+3
+-0x1.29085b15acb97p-2
+-0x1.56db8f1c7314bp-2
+-0x1.1acbe426720fbp-3
+-0x1.9p+4
+-0x1.f98a5645494a6p-2
+-0x1.012c820bffa1fp+1
+-0x1.efa81ae8ad5c2p-3
+-0x1.32e3d9b363809p-2
+-0x1.9c4e5c0ae0c6bp-4
+-0x1.9p+4
+-0x1.564759b8381f1p-3
+-0x1.861675d0668bep-3
+-0x1.c7b323a1df111p-5
+-0x1.e4ffff6361aa1p+3
+-0x1.943cfa38c839bp-3
+-0x1.ae21a136f42bep-1
+-0x1.7c41d448bbe13p-4
+-0x1.ca3b9e5072a8p-4
+-0x1.d0919ea5f0cb5p-6
+-0x1.ee43f0476eec2p+2
+-0x1.7d940be7e14a4p-5
+-0x1.bc2286957878cp-5
+-0x1.4c8ecc3b5cd84p-3
+-0x1.9p+4
+-0x1.eb7198adfbae3p-3
+-0x1.958c4752c6579p-3
+-0x1.996f331a83266p-3
+-0x1.9p+4
+-0x1.2e854bdc2025dp-2
+-0x1.f34d8d56b80bp-3
+-0x1.5795a5d7104d8p-2
+-0x1.9p+4
+-0x1.db3e5a354e0c4p-2
+-0x1.88a8c221bb5adp-2
+-0x1.cfef2c41bd2a7p-2
+-0x1.9p+4
+-0x1.64fc5b6c5f435p-1
+-0x1.272a6fced475fp-1
+-0x1.25c18e6c195dep-1
+-0x1.9p+4
+-0x1.b72011c9be94cp-1
+-0x1.6ba1a71ba6247p-1
+-0x1.4ae9676082702p-1
+-0x1.9p+4
+-0x1.8b873b4d16251p-1
+-0x1.48dbaa4497bedp-1
+-0x1.2730c7a58d566p-1
+-0x1.9p+4
+-0x1.34df0093971e2p-1
+-0x1.028dfa5d3edd5p-1
+-0x1.a10d31195b39p-2
+-0x1.9p+4
+-0x1.a1ccc23b2480ep-2
+-0x1.6144c91e09a74p-2
+-0x1.0359e58b9541cp-2
+-0x1.9p+4
+-0x1.ebdf5bf92056ep-3
+-0x1.a54892d97f499p-3
+-0x1.d8ca7ffc31402p-3
+-0x1.9p+4
+-0x1.ac2d990249775p-3
+-0x1.7487afaf53dfep-3
+-0x1.b7a6cbb959f4ep-3
+-0x1.9p+4
+-0x1.779311f978045p-3
+-0x1.4d9ba2ef96bc8p-3
+-0x1.a7151aac1d27ep-3
+-0x1.9p+4
+-0x1.516616ae5f0fbp-3
+-0x1.33698a789d88bp-3
+-0x1.9022b7d46a593p-3
+-0x1.9p+4
+-0x1.3a1064d8a103bp-3
+-0x1.2671ed70f72aap-3
+-0x1.5c2c54dc8aeb1p-3
+-0x1.9p+4
+-0x1.2730a458e9c3ep-3
+-0x1.1e800934ebde5p-3
+-0x1.0ee3e50a64ce6p-3
+-0x1.9p+4
+-0x1.11aa65a408602p-3
+-0x1.163a712538612p-3
+-0x1.9f718cdd4a05p-4
+-0x1.7ef6259fd6873p+4
+-0x1.edd9b936449dcp-4
+-0x1.0c551eacca0acp-3
+-0x1.52c72725fac06p-4
+-0x1.6a9fb95693c3cp+4
+-0x1.52c6357715451p-4
+-0x1.6a9bdcb2641dcp+4
+-0x1.bbfd83ba4a8d7p-4
+-0x1.07de605eebac9p-3
+-0x1.699c3763b2bb9p-4
+-0x1.9p+4
+-0x1.307eee998d8c3p-4
+-0x1.77ffb624178dcp+4
+-0x1.08eb87af4017ep-3
+-0x1.204f0923c021bp-2
+-0x1.a4fda052ae708p-4
+-0x1.10bd89189cc6p-3
+-0x1.29aa94bbbc389p-4
+-0x1.9p+4
+-0x1.28c422d785436p-3
+-0x1.8eb32e5dbce4fp-2
+-0x1.b3192bc7c903fp-4
+-0x1.2c99f3b7a19d9p-3
+-0x1.323d741a2477fp-4
+-0x1.9p+4
+-0x1.312900463686dp-4
+-0x1.9p+4
+-0x1.a5f9f84251f3p-3
+-0x1.b8930d52b0a32p-1
+-0x1.df10921adef1fp-4
+-0x1.5807f94537978p-3
+-0x1.7092a3e9e2defp-4
+-0x1.9p+4
+-0x1.496c47aba0734p-4
+-0x1.9p+4
+-0x1.0f353f686ca8fp-3
+-0x1.8ce8aeca48a5p-3
+-0x1.05db89ce16934p-1
+-0x1.9p+4
+-0x1.408178d8e0127p-4
+-0x1.9p+4
+-0x1.6d2c9e6561612p+0
+-0x1.9p+4
+-0x1.02b547e39a113p-3
+-0x1.84d556039fa51p-3
+-0x1.f7218909f183ep-3
+-0x1.9p+4
+-0x1.26480d81910ep-4
+-0x1.9p+4
+-0x1.2a02454265573p-1
+-0x1.1e6d09ec16dbfp+3
+-0x1.dc13206a4a851p-4
+-0x1.8fdb5445f3f01p-3
+-0x1.e67232b2c6edcp-5
+-0x1.8cc72f77fa0bep+4
+-0x1.fa07e03bccb0ap-3
+-0x1.e54646902c8adp+0
+-0x1.95182b4dc90cap-4
+-0x1.7d31c728313afp-3
+-0x1.62962502f276cp-5
+-0x1.210d52e2eab87p+4
+-0x1.1288c994e4364p-4
+-0x1.c21efbd212401p-4
+-0x1.87f3326709086p-6
+-0x1.3fd7fe45a3945p+3
+-0x1.962511594c74bp-4
+-0x1.97ae636e5ed27p-1
+-0x1.35ab7771f4ddap-5
+-0x1.16a1b00bc7df3p-4
+-0x1.8f8e156f0262p-7
+-0x1.45e01f4a322ebp+2
+-0x1.342e421c38b3fp-6
+-0x1.05afe9cd99c11p-5
+-0x1.f5cd085a64864p-8
+-0x1.7c081c5494622p+0
+-0x1.61a591b19b0aap-7
+-0x1.4198391ef355fp-7
+-0x1.3525d4a3b1ce1p-7
+-0x1.d4812c76e3188p+0
+-0x1.b3a6d0bc05c5bp-7
+-0x1.8c55ac7af1e6fp-7
+-0x1.0704c557c0149p-6
+-0x1.93c013f763afbp+1
+-0x1.5c69cf6f601f2p-6
+-0x1.42389f7dff448p-6
+-0x1.6e3939b8968a3p-6
+-0x1.215c5dd13429ap+2
+-0x1.088005cbb2869p-5
+-0x1.ee037fce14ff5p-6
+-0x1.da87a8e318dfap-6
+-0x1.7f41a6046cc8p+2
+-0x1.4c5daa237d795p-5
+-0x1.3c923e15a5b43p-5
+-0x1.10c4e17bdc5afp-5
+-0x1.c15edcfbb0df6p+2
+-0x1.3b7d7508f45fbp-5
+-0x1.3bbdfd81c603ap-5
+-0x1.0086a3f901a7fp-5
+-0x1.bd2f1869031d7p+2
+-0x1.09d9149332f25p-5
+-0x1.1e7fa03028d79p-5
+-0x1.89d39e6b199c9p-6
+-0x1.73e3887c9d055p+2
+-0x1.8ab03a5945e3ap-6
+-0x1.d350c5cdaf691p-6
+-0x1.0b33147feb895p-6
+-0x1.14c3707094b49p+2
+-0x1.ff621c5050d41p-7
+-0x1.4ef482bd33214p-6
+-0x1.07212c73d3a09p-6
+-0x1.28ede02e2ac8ep+2
+-0x1.e8bac36659173p-7
+-0x1.62dce85034bedp-6
+-0x1.07ea77ffde568p-6
+-0x1.450be2fca05bdp+2
+-0x1.d8929086e3d7ap-7
+-0x1.802e46e86ea42p-6
+-0x1.0fa33fc356e66p-6
+-0x1.6ae1ba2b82ed3p+2
+-0x1.d22fc8e44a7a9p-7
+-0x1.a8f4e7178054cp-6
+-0x1.14da80cc6bab9p-6
+-0x1.96cc7d3e74fafp+2
+-0x1.d798a60394aefp-7
+-0x1.deab3fc0cd756p-6
+-0x1.0b46bd1aa8273p-6
+-0x1.c53efe1d99d8ap+2
+-0x1.e01898daab218p-7
+-0x1.100e33a614022p-5
+-0x1.dd7be7a96c38fp-7
+-0x1.f8696498aa198p+2
+-0x1.e310623f8b704p-7
+-0x1.367fad7c677fcp-5
+-0x1.a0aff137fc791p-7
+-0x1.1d64f37772f75p+3
+-0x1.db270c604338ep-7
+-0x1.63af3a97c48e4p-5
+-0x1.74c73c14894dap-7
+-0x1.48b55b3ff7a53p+3
+-0x1.74c502c606a2dp-7
+-0x1.48ada1f798593p+3
+-0x1.d08c4385afcd5p-7
+-0x1.9cc8bbf051bb9p-5
+-0x1.d9a1d43bc3c1p-7
+-0x1.9p+4
+-0x1.6205030374d87p-7
+-0x1.7f41b88d4d542p+3
+-0x1.6497db64b464cp-6
+-0x1.a7555a0a9ad96p-3
+-0x1.d6cb0431d60adp-7
+-0x1.ddd3436edd704p-5
+-0x1.656a3c9150465p-7
+-0x1.c38857b87b408p+3
+-0x1.acb292f0f5d38p-6
+-0x1.3ee4513b3ac53p-2
+-0x1.0060b68f3ee96p-6
+-0x1.19f872e53abc2p-4
+-0x1.78813db0bbe67p-7
+-0x1.11f891c976a23p+4
+-0x1.7634a80e70844p-7
+-0x1.0b84ef33eaa22p+4
+-0x1.50b328d25408cp-5
+-0x1.8c706871d5054p-1
+-0x1.25b776d6a38bap-6
+-0x1.4efacb8392412p-4
+-0x1.e7ca29baed8f7p-7
+-0x1.9p+4
+-0x1.9801e95fd6e03p-7
+-0x1.3b82bd25bd9adp+4
+-0x1.54d2142ed1611p-6
+-0x1.8853375066702p-4
+-0x1.c5db4510d1725p-4
+-0x1.9p+4
+-0x1.8b9c13cc63714p-7
+-0x1.31841be52a315p+4
+-0x1.5e45edc62c8b6p-2
+-0x1.9p+4
+-0x1.4a1d0932376c6p-6
+-0x1.8ad730074b81fp-4
+-0x1.93a4c256b7e08p-5
+-0x1.9p+4
+-0x1.6d8a190a54dbep-7
+-0x1.26c3ceb3e83a6p+4
+-0x1.096300ba7aeebp-3
+-0x1.1bc49ce92471ap+3
+-0x1.38c66df38f3d8p-6
+-0x1.cb802712b2bd6p-4
+-0x1.2c0f349426b88p-7
+-0x1.cdb0ec9f9b577p+3
+-0x1.b1475b18ab754p-5
+-0x1.d3e0fc19cab56p+0
+-0x1.128f2bddd43cap-6
+-0x1.e40ee6ea451c4p-4
+-0x1.b562733edf1b6p-8
+-0x1.502628ba2824cp+3
+-0x1.668f1925076c3p-7
+-0x1.f2214cc9ac818p-5
+-0x1.e396c69379abbp-9
+-0x1.745474707d6a2p+2
+-0x1.5d3d7a471fa32p-6
+-0x1.89f7d4422b561p-1
+-0x1.9ee3746fe7132p-8
+-0x1.51da6d5457f76p-5
+-0x1.ece8f7d8f9f51p-10
+-0x1.7b28409b6854fp+1
+-0x1.959a068da4337p-9
+-0x1.2b497747cc8eap-6
+-0x1.264bdc75304b2p-10
+-0x1.dd2470ba37571p-3
+-0x1.971ada75040ccp-10
+-0x1.85837ded565e5p-10
+-0x1.6ba77d51094bfp-10
+-0x1.2765568ab74f6p-2
+-0x1.f697f661f7d6dp-10
+-0x1.e1b750dc7c1b5p-10
+-0x1.36fb8cd256756p-9
+-0x1.0113e52384c72p-1
+-0x1.951129d97bafdp-9
+-0x1.8d606bcc5f89bp-9
+-0x1.b5c093a2af79ep-9
+-0x1.7845ae76447b1p-1
+-0x1.34da3684b44ebp-8
+-0x1.3324099743ac1p-8
+-0x1.1dc377cac247fp-8
+-0x1.f9b68dbadad1dp-1
+-0x1.876038e4376c8p-8
+-0x1.8ff92a33efe6fp-8
+-0x1.4a9c7285bae47p-8
+-0x1.2c24aeb8f2fb9p+0
+-0x1.7a96ebc7f75ebp-8
+-0x1.9d91640135b99p-8
+-0x1.3bad876289b37p-8
+-0x1.323b93f78fb62p+0
+-0x1.46b0cb056c347p-8
+-0x1.88ad587daff33p-8
+-0x1.eeac3045de429p-9
+-0x1.0a3037fe2dcc2p+0
+-0x1.f124720e5dda7p-9
+-0x1.4f7042af8d023p-8
+-0x1.55b319d4c37c8p-9
+-0x1.9a1c577cd237cp-1
+-0x1.4922fad476394p-9
+-0x1.f40551dcc986fp-9
+-0x1.551b94bd3732cp-9
+-0x1.c3648eaa4ad0fp-1
+-0x1.408b06678dc3bp-9
+-0x1.114ece07acd83p-8
+-0x1.5a3159221e5edp-9
+-0x1.f8cdfd2f6aa7ep-1
+-0x1.3ba493f62edfap-9
+-0x1.2ff1d9d6ef6e3p-8
+-0x1.67d129a42d6f9p-9
+-0x1.1e8fce206d937p+0
+-0x1.3cddd440330edp-9
+-0x1.5776e08ef54d1p-8
+-0x1.7261e0320cc28p-9
+-0x1.46b52e977a0cap+0
+-0x1.45f2590853a95p-9
+-0x1.8939ce0a3bc32p-8
+-0x1.69893a70f276bp-9
+-0x1.72d303240b588p+0
+-0x1.514f5898bb566p-9
+-0x1.c4ec7178fdddap-8
+-0x1.462b6d1d8f46dp-9
+-0x1.a3a6dc7154ab5p+0
+-0x1.580b8a35981f2p-9
+-0x1.050fa8c768c6ep-7
+-0x1.1e4e61239d7c6p-9
+-0x1.e0114fc595282p+0
+-0x1.56c92a5d18e51p-9
+-0x1.2de27de859163p-7
+-0x1.00fc253517b12p-9
+-0x1.16a6fa1ac6362p+1
+-0x1.00f4e303b263dp-9
+-0x1.168814f949064p+1
+-0x1.5766b04cd79bp-9
+-0x1.6a197da800421p-7
+-0x1.0b71058e50988p-8
+-0x1.529d80d4d97f9p+4
+-0x1.ea1ff6eef69bap-10
+-0x1.47be213ee8afp+1
+-0x1.dcbe3f9d47c61p-8
+-0x1.49d8984715388p-3
+-0x1.660150b9bc637p-9
+-0x1.9f80f1831bb41p-7
+-0x1.f39390e1832c6p-10
+-0x1.8b042c775b6bap+1
+-0x1.3a8a1f128ddeap-7
+-0x1.0840239fbca71p-2
+-0x1.9c0690237648p-9
+-0x1.fb3de3ba121dap-7
+-0x1.0ff44092d3515p-9
+-0x1.0b3a2219fde22p+2
+-0x1.0896744ee301ap-9
+-0x1.e2d72f879bc38p+1
+-0x1.19bd6c5b5657fp-6
+-0x1.6c60bbe079899p-1
+-0x1.f2d19435e8cfp-9
+-0x1.39f59be2d98d5p-6
+-0x1.f242740827029p-9
+-0x1.539cc5acb5628p+4
+-0x1.20e17290b3e58p-9
+-0x1.2009c0ace12b3p+2
+-0x1.28b4bf19bf34ep-8
+-0x1.6bd0c4e116b68p-6
+-0x1.d6c2008520fdp-5
+-0x1.9p+4
+-0x1.13acfe5bc21ccp-9
+-0x1.0ff0b308db37p+2
+-0x1.940ce93afe0a4p-3
+-0x1.9p+4
+-0x1.2948f5b45e667p-8
+-0x1.92f423093d463p-6
+-0x1.430b68c298e6bp-6
+-0x1.9p+4
+-0x1.0d314b799c57cp-9
+-0x1.3fc0a4838bc28p+2
+-0x1.0072e876bedfap-4
+-0x1.19b8e47cccbc5p+3
+-0x1.4d1809d8b0e12p-8
+-0x1.8b47e1cdb02adp-5
+-0x1.a05b2caa567ap-10
+-0x1.93fed47f38f98p+1
+-0x1.85c2059786ae4p-6
+-0x1.c68d6600ae18fp+0
+-0x1.48445935118fbp-8
+-0x1.0ed585587b56cp-4
+-0x1.2f1b4fe044c25p-10
+-0x1.24d2a6cd02a49p+1
+-0x1.62c6c7077b621p-9
+-0x1.61d5c84551695p-6
+-0x1.4fcb6eb731af1p-11
+-0x1.46ea512705073p+0
+-0x1.3b72f3d1a972fp-7
+-0x1.7f334f3d9b87bp-1
+-0x1.d1f0cf8851ee7p-10
+-0x1.4b243a16b622p-6
+-0x1.55e9db9c1fc98p-12
+-0x1.4b8efc72a7b36p-1
+-0x1.a14f3d3dac481p-11
+-0x1.dd7080a21b1dep-8
+-0x1.c79b22ec99624p-11
+-0x1.3ef3d92440188p-3
+-0x1.4b4b5e6b9d0f6p-10
+-0x1.1ca2021fb9513p-10
+-0x1.196d26a7bddaap-10
+-0x1.8b07e81dc125fp-3
+-0x1.98e029ae010ebp-10
+-0x1.5ff11bcf4f195p-10
+-0x1.db936184e20c6p-10
+-0x1.4ffeec24f0a5p-2
+-0x1.444c2f9f9dbf7p-9
+-0x1.196be35e1248ep-9
+-0x1.462e69bdcff8fp-9
+-0x1.d4055efb9b72dp-2
+-0x1.ea08261f3048bp-9
+-0x1.ab512d05886f3p-9
+-0x1.a214a28b24ff1p-9
+-0x1.2f859872034d5p-1
+-0x1.30fd3115eca75p-8
+-0x1.0ca0014ed0a61p-8
+-0x1.dc1e1b7a423a2p-9
+-0x1.5d6add2853f53p-1
+-0x1.1b33ae2b698b6p-8
+-0x1.ffe3742547055p-9
+-0x1.b56888df612f3p-9
+-0x1.4a9e3b6770ff6p-1
+-0x1.cfdd01519a2dep-9
+-0x1.b491109db6775p-9
+-0x1.449b48696fa13p-9
+-0x1.0218a77c34db2p-1
+-0x1.4e6f49b6469e6p-9
+-0x1.4c82ac049c127p-9
+-0x1.aac8762a91156p-10
+-0x1.67f8736e82ba8p-2
+-0x1.a74296b738d43p-10
+-0x1.bff968b8660ep-10
+-0x1.99fce94c6ae22p-10
+-0x1.6e67378bd67c8p-2
+-0x1.8dff11b2b98f1p-10
+-0x1.c250a821a863ep-10
+-0x1.9292315422378p-10
+-0x1.7edfc2ac33856p-2
+-0x1.7d160ac65abdcp-10
+-0x1.d0fb78937745dp-10
+-0x1.97c0f50bdc393p-10
+-0x1.9c464240fe84cp-2
+-0x1.77573400d684bp-10
+-0x1.ef0c32c768e34p-10
+-0x1.996497ce82ffap-10
+-0x1.bebc16cf28c36p-2
+-0x1.7e07271537a5ap-10
+-0x1.0f4a0c5b45ec3p-9
+-0x1.83eaa938659ffp-10
+-0x1.dc52a6c475c5fp-2
+-0x1.89b001bf72ff2p-10
+-0x1.2da10daa6e49dp-9
+-0x1.52fdaa60a78acp-10
+-0x1.f4b6582f522b8p-2
+-0x1.930be048238bcp-10
+-0x1.4ff078af16157p-9
+-0x1.239842fe00eaep-10
+-0x1.0e33befc530b5p-1
+-0x1.9894aa128c5dfp-10
+-0x1.7912b65c6d077p-9
+-0x1.04c0d5a058794p-10
+-0x1.306fbd9370738p-1
+-0x1.04a57bce1b786p-10
+-0x1.2ff4290d7bb42p-1
+-0x1.ad955f5b81dc4p-10
+-0x1.d8524d6c6feap-9
+-0x1.e7242032ac33ap-9
+-0x1.34cfd66243ffdp+4
+-0x1.f5d7925e7611dp-11
+-0x1.654336a8f2c85p-1
+-0x1.0792c599460fap-7
+-0x1.37f3923d0c4c8p-3
+-0x1.c68dfeb57701p-10
+-0x1.026121c519e65p-8
+-0x1.06018bc77aaf6p-10
+-0x1.c4a613ec426d1p-1
+-0x1.60902a502fde9p-7
+-0x1.fb690a3513732p-3
+-0x1.0aff450ebb92p-9
+-0x1.5394262768e59p-8
+-0x1.39936afc7c3f6p-10
+-0x1.90726500adbaep+0
+-0x1.1e85c38903bap-10
+-0x1.29383ba7edb94p+0
+-0x1.3d35822865933p-6
+-0x1.6628829c75cfdp-1
+-0x1.46cc234e2203dp-9
+-0x1.cbb9cd898948cp-8
+-0x1.bd75bf73d893cp-9
+-0x1.224848770fa78p+4
+-0x1.3e862c7b897edp-10
+-0x1.6adf2f5928fe1p+0
+-0x1.7d087d46c9aa1p-9
+-0x1.0391824e3a0f3p-7
+-0x1.dcfe91c28dddbp-5
+-0x1.9p+4
+-0x1.2bfe43346dd55p-10
+-0x1.425d9007f02f6p+0
+-0x1.b302979b37de5p-3
+-0x1.9p+4
+-0x1.97add08c29cedp-9
+-0x1.5bce63b325664p-7
+-0x1.4a48864baf767p-6
+-0x1.9p+4
+-0x1.5442186d42ba5p-10
+-0x1.262c793355ffep+1
+-0x1.22e15f2abc05p-4
+-0x1.1958f4f978b0dp+3
+-0x1.3110135cd8d7cp-8
+-0x1.2b585e79a4bbbp-5
+-0x1.bf33756023d3ep-11
+-0x1.c8bf291bf1ea2p-1
+-0x1.c2fda059ee9fep-6
+-0x1.c44945b875795p+0
+-0x1.4e0c46a9badf2p-8
+-0x1.d52701a9e2c06p-5
+-0x1.44749fcd7273dp-11
+-0x1.46e15bd3de8bfp-1
+-0x1.2e7c19d890836p-9
+-0x1.d0bf07506d6f3p-7
+-0x1.699c04bdcec2dp-12
+-0x1.75271d3c808ap-2
+-0x1.6fdbd6b50ceffp-7
+-0x1.7d5c45d9688c3p-1
+-0x1.cb3db7e4a6cc4p-10
+-0x1.10430d9056b7ap-6
+-0x1.6f10b25a31ec2p-13
+-0x1.762a15f58e118p-3
+-0x1.7b7d593197592p-11
+-0x1.58fa55be5ec43p-8
+-0x1.4dd35262c9c5p-16
+-0x1.15f48744c2e73p-6
+-0x1.7786e92080fabp-14
+-0x1.fdaaae1c6576ep-14
+-0x1.e7eea8a252766p-16
+-0x1.618e6c2c01dd7p-6
+-0x1.d886891de90ep-14
+-0x1.411095634e917p-13
+-0x1.c09859f01fff5p-15
+-0x1.462162f891588p-5
+-0x1.b44ecf2481263p-13
+-0x1.2876841bcb0fdp-12
+-0x1.6e3b7fc09a2f3p-14
+-0x1.0afee5ea57989p-4
+-0x1.655fa03642461p-12
+-0x1.e5ab19df5aaf2p-12
+-0x1.076a0f7296d9p-13
+-0x1.81035e564de69p-4
+-0x1.01c8b8348fbc1p-11
+-0x1.5e55bb368011cp-11
+-0x1.4937b8e1a39d1p-13
+-0x1.e2c9768ef4e18p-4
+-0x1.439530f46909fp-11
+-0x1.b7c76ba6a6b2bp-11
+-0x1.791039d935844p-13
+-0x1.151af366106cfp-3
+-0x1.746291cfc0071p-11
+-0x1.fa35feb79d258p-11
+-0x1.76ed8c41e3ed1p-13
+-0x1.13ccf10b018eep-3
+-0x1.73fede5d99ca4p-11
+-0x1.f9fd8e27ddf94p-11
+-0x1.3f28ae2e8afb9p-13
+-0x1.d5f84ff5928ecp-4
+-0x1.356c697ac777ap-11
+-0x1.a55786d9791bfp-11
+-0x1.773184fe31b85p-13
+-0x1.147fa8e95e26ap-3
+-0x1.6d367b1f7b80fp-11
+-0x1.f2061948ea26fp-11
+-0x1.b96fbf5a3aad5p-13
+-0x1.4597da6452034p-3
+-0x1.aee6d3ed765c3p-11
+-0x1.2647fe6c67127p-10
+-0x1.04283b71e7262p-12
+-0x1.80474fef48ed9p-3
+-0x1.fc67f0d8d5d7ep-11
+-0x1.5bdb706b517f7p-10
+-0x1.31a924fc3311bp-12
+-0x1.c728d2c30a3b9p-3
+-0x1.2c026f56a5d23p-10
+-0x1.9bb7ed4f57a06p-10
+-0x1.61f243850f356p-12
+-0x1.0ce93f0338881p-2
+-0x1.61ae28b45e359p-10
+-0x1.e7665bfdadf5dp-10
+-0x1.916ca1c0a0e7ep-12
+-0x1.3abdb8a104da5p-2
+-0x1.9f2d1183c8ed5p-10
+-0x1.1f2f4e1cb3777p-9
+-0x1.c7c0bf3a21701p-12
+-0x1.6f8c092fbc319p-2
+-0x1.e700ddbfadc0dp-10
+-0x1.5347a9109b9ccp-9
+-0x1.075163e32f4a7p-11
+-0x1.b1d68c809eaf1p-2
+-0x1.072910cdde74dp-11
+-0x1.b0e5940d4371ap-2
+-0x1.25bd572abba9dp-9
+-0x1.b72c3216a8038p-9
+-0x1.1020bf5b0a9bap-8
+-0x1.2a59f8a83df5bp+4
+-0x1.36c97d2324275p-11
+-0x1.046055de58da7p-1
+-0x1.b86a3b8075504p-7
+-0x1.3011a2793fae6p-3
+-0x1.56b256cc9f5ddp-9
+-0x1.efd3379215dfp-9
+-0x1.7bcb0e925b41dp-11
+-0x1.4de57a514ca39p-1
+-0x1.4200d428f6dacp-6
+-0x1.f0e1aef5d5dacp-3
+-0x1.a5de4728cb5d3p-9
+-0x1.47428d51200d5p-8
+-0x1.110786ac26d06p-10
+-0x1.4149be547ec17p+0
+-0x1.e0a090020adaap-11
+-0x1.b93d5f8fbe9fdp-1
+-0x1.5d35f23ec9bap-5
+-0x1.71c96dc99ed3ep-1
+-0x1.0833be3a3ac01p-8
+-0x1.bae93d45ef195p-8
+-0x1.4f86be9e4fffdp-8
+-0x1.1e176301b364p+4
+-0x1.3808c541afeb8p-10
+-0x1.0ee4bcc45c81cp+0
+-0x1.39350d925f0d6p-8
+-0x1.f898721fcff1ep-8
+-0x1.0b80088238073p-1
+-0x1.9p+4
+-0x1.621de4885965cp-10
+-0x1.ebbc1b580b4c3p-1
+-0x1.b9acd3f9914d3p+0
+-0x1.9p+4
+-0x1.621b111c20c0ep-8
+-0x1.53912bf2ae30dp-7
+-0x1.d0464fdf88112p-4
+-0x1.9p+4
+-0x1.1487b4546322dp-9
+-0x1.f41b1afc6d7fdp+0
+-0x1.56c83f4719d4ap-2
+-0x1.316a6dd945d1p+3
+-0x1.4fb48c5682fbep-7
+-0x1.358af772f36d8p-5
+-0x1.8645716bb5628p-10
+-0x1.71a29863cbf5p-1
+-0x1.84a9edfcf75cbp-4
+-0x1.eb2951bcb7c23p+0
+-0x1.cd2acecd1ccb7p-7
+-0x1.f6e3dff92c0b9p-5
+-0x1.3dfb239ae6b94p-10
+-0x1.0fe93292a0e5dp-1
+-0x1.4f6789049bbcdp-8
+-0x1.d73b81f782a54p-7
+-0x1.b737485679f2bp-11
+-0x1.48849ba0e1babp-2
+-0x1.36469752e4b4bp-5
+-0x1.9df171e704c44p-1
+-0x1.2653271b9dc7ep-8
+-0x1.1bc5b1c780e3fp-6
+-0x1.c933599833247p-12
+-0x1.4cc0c3b4b9561p-3
+-0x1.cd150fd7f6772p-10
+-0x1.61c95f5c8046p-8
+-0x1.4142bd0182188p-20
+-0x1.f66db1e52d6f9p-8
+-0x1.2ebf98c31cf58p-18
+-0x1.3d9c1e78bab24p-15
+-0x1.57b31ab9e8699p-17
+-0x1.4a5de0e7d6e37p-7
+-0x1.8c599918a6eccp-17
+-0x1.a24089e2ceb22p-15
+-0x1.38f826fcfbb62p-16
+-0x1.30821b4f3c3e5p-6
+-0x1.6f78f66998da3p-16
+-0x1.82610fc2cda07p-14
+-0x1.fb59f328b0827p-16
+-0x1.f26436650f76dp-6
+-0x1.2d7f2449c6f3ep-15
+-0x1.3c8b88f42e5dcp-13
+-0x1.6adc8a30ede6ep-15
+-0x1.673da467ae138p-5
+-0x1.b3cefc77ba141p-15
+-0x1.c8c7625574fdep-13
+-0x1.c1dff1216c195p-15
+-0x1.c246ff2f92de7p-5
+-0x1.13fcccbe59ba6p-14
+-0x1.1effa769829fdp-12
+-0x1.00554ce4b5fa4p-14
+-0x1.02576e1715de4p-4
+-0x1.4784f4b7acabp-14
+-0x1.4ba5ce6709d49p-12
+-0x1.fd7cf5ab0c438p-15
+-0x1.011937a9895dcp-4
+-0x1.57b979db7e791p-14
+-0x1.4df18273c21a3p-12
+-0x1.b1b400e58e14bp-15
+-0x1.b6323d822622dp-5
+-0x1.2b63ffd445392p-14
+-0x1.1870b59f9c58dp-12
+-0x1.fe19809a983b3p-15
+-0x1.01e39e21f3b8fp-4
+-0x1.6ee1ec35f7794p-14
+-0x1.4e53f72609c0ap-12
+-0x1.2dfcdf063ab34p-14
+-0x1.3011e77113aa6p-4
+-0x1.bf157ebf2d026p-14
+-0x1.8e74b25970142p-12
+-0x1.6c1cfa6dddfc3p-14
+-0x1.68620241011b4p-4
+-0x1.1082173d2f5b2p-13
+-0x1.db4eba3f71e5bp-12
+-0x1.b623f26b10507p-14
+-0x1.ae6ea8288ac28p-4
+-0x1.547c8ca1b78a4p-13
+-0x1.1d51d9298ca04p-11
+-0x1.f489f316564e9p-14
+-0x1.ffa2d0dc7fbd2p-4
+-0x1.a4bda87b9e41ap-13
+-0x1.57177c5d2eb5dp-11
+-0x1.057592e4928e9p-13
+-0x1.2a4a6e7ca99bdp-3
+-0x1.ea153d8cfe7adp-13
+-0x1.96df2c45d652p-11
+-0x1.29ec952a535a6p-13
+-0x1.5b58674522023p-3
+-0x1.28e891de5d19dp-12
+-0x1.e8d3cf847c6afp-11
+-0x1.96185c11248ep-13
+-0x1.9ed46546ea289p-3
+-0x1.91355497ef0c2p-13
+-0x1.9d03369dca901p-3
+-0x1.da8b461ed6d99p-12
+-0x1.7799ce634cfc2p-10
+-0x1.e0ff5386d629p-6
+-0x1.1ce23cabeb16cp+4
+-0x1.47a7415aafa06p-12
+-0x1.02b8fe4dc87e3p-2
+-0x1.9d5bb23a67ab9p-5
+-0x1.2334b5915900cp-3
+-0x1.87c4029e848ecp-11
+-0x1.ae36302234d78p-10
+-0x1.295ce0b267af5p-11
+-0x1.71ca2b814p-2
+-0x1.68c9adad64dadp-4
+-0x1.e42d8a5c558f9p-3
+-0x1.a2182971c7927p-10
+-0x1.720fe139e4f2ep-9
+-0x1.e970facdf8cedp-10
+-0x1.e196eee6f069bp-1
+-0x1.32d105a5836bp-10
+-0x1.1d81d82f60fd7p-1
+-0x1.fc2a2173d31d6p-3
+-0x1.87eaaffddb9f9p-1
+-0x1.bd0f14d488dbcp-9
+-0x1.4d87b15afa272p-8
+-0x1.061d626004f3p-5
+-0x1.2106a12f0b5a7p+4
+-0x1.4f7b06f46078cp-9
+-0x1.aec5b416437c6p-1
+-0x1.6abfc085e2011p-8
+-0x1.c43266795bad8p-8
+-0x1.1d7dd899723ebp+2
+-0x1.9p+4
+-0x1.414ec8eb7cf5ap-8
+-0x1.1f6975dbd1791p+0
+-0x1.c61d854f0b68cp+3
+-0x1.9p+4
+-0x1.5c70b8162a2f4p-7
+-0x1.a8e9adb7767e4p-7
+-0x1.ccdffd0426448p-1
+-0x1.9p+4
+-0x1.5409c2cfbe8cfp-7
+-0x1.6575ba8e5fe25p+1
+-0x1.3e93858dc4852p+1
+-0x1.5727ad5b0fccdp+3
+-0x1.a2741666374dcp-6
+-0x1.7c5f344a6830ep-5
+-0x1.48cbbf6cd3edep-7
+-0x1.db3c1915b24fbp+0
+-0x1.07698daf27d7ep-1
+-0x1.148da0d54270ep+1
+-0x1.31bf90e18cb42p-5
+-0x1.32a9adc9848c5p-4
+-0x1.322ec2663c51cp-7
+-0x1.af5ced26d37c3p+0
+-0x1.62a9a45c1b4b3p-6
+-0x1.abac355be9e5ap-6
+-0x1.02b0211499d52p-7
+-0x1.64b9762c26352p+0
+-0x1.ca632ffb2867fp-3
+-0x1.d454d0fad7601p-1
+-0x1.229937fc58f3fp-6
+-0x1.ad6eec8e32f74p-6
+-0x1.13ffacf5a8821p-8
+-0x1.7ad68cd7aeb6fp-1
+-0x1.1269b4a65188fp-7
+-0x1.4cfc3b8b480dp-7
+-0x1.069ad7892776bp-19
+-0x1.91da310ef058bp-9
+-0x1.0555c35bd6af5p-17
+-0x1.1dfae2ed2833bp-16
+-0x1.bd853b88d5c0fp-18
+-0x1.19afe5a50c9fp-8
+-0x1.9246fc228d05p-17
+-0x1.8c654eab85972p-16
+-0x1.97b85e089287cp-17
+-0x1.036301d896f71p-7
+-0x1.74c1809bc4b7ep-16
+-0x1.6e8c391ac6fecp-15
+-0x1.4d23e62c4b835p-16
+-0x1.a891972563e62p-7
+-0x1.3297b68712626p-15
+-0x1.2ca55714bd719p-14
+-0x1.e1f90367328e8p-16
+-0x1.3238edd6e88eap-6
+-0x1.bc0c964ce56edp-15
+-0x1.b250cf83cdb97p-14
+-0x1.2f1afdefdf9e2p-15
+-0x1.801372e97d9e8p-6
+-0x1.183a5a9597b4fp-14
+-0x1.11521ef8f4c79p-13
+-0x1.5ec0823f1aeccp-15
+-0x1.b918f768f11fdp-6
+-0x1.451d4af2eca7fp-14
+-0x1.3cb62650308e6p-13
+-0x1.61edd7143e0bdp-15
+-0x1.b7a6285c5da2fp-6
+-0x1.4abcacb311b25p-14
+-0x1.410a12b7e14fcp-13
+-0x1.310cbac5712ffp-15
+-0x1.775e2b92ab91fp-6
+-0x1.1b49408a48316p-14
+-0x1.109b11e2cc138p-13
+-0x1.6bf79ba0e9dd5p-15
+-0x1.badee49246dc6p-6
+-0x1.55e1981c81ac3p-14
+-0x1.48456becc629cp-13
+-0x1.bcec03a2c1aa4p-15
+-0x1.06d1fda61713dp-5
+-0x1.9f956cba0289dp-14
+-0x1.8c487baf56903p-13
+-0x1.22f565075ff5bp-14
+-0x1.3dc41687955cap-5
+-0x1.ff304255987cep-14
+-0x1.e0ec08bf9396fp-13
+-0x1.87c5bc01d1afep-14
+-0x1.88cca5a99170dp-5
+-0x1.5e22e9c6c751bp-13
+-0x1.30d518f2ef5cbp-12
+-0x1.f371e3afec8c4p-14
+-0x1.e024ab20ba60cp-5
+-0x1.e0570bebf2579p-13
+-0x1.869b6827dde02p-12
+-0x1.26a17fe804d5p-13
+-0x1.198680e26c8e9p-4
+-0x1.2ea1cf68e639p-12
+-0x1.e047c9b186336p-12
+-0x1.a85effacfe1a4p-13
+-0x1.570a14fe91d8ep-4
+-0x1.b5f115d4f6112p-12
+-0x1.3eb2b3d16348bp-11
+-0x1.587cbc20c15a5p-12
+-0x1.c7aa0db50ce51p-4
+-0x1.5701010018eb1p-12
+-0x1.c407b062cdb42p-4
+-0x1.db3e86631df0fp-11
+-0x1.49edf2e575536p-10
+-0x1.e4b155a2c5e25p-6
+-0x1.1b98182d5aa36p+4
+-0x1.488bcd1d2fce5p-11
+-0x1.605fbd535752dp-3
+-0x1.a9ca4b0cf3271p-5
+-0x1.24207ab76aa0dp-3
+-0x1.04c5f4c28f0dcp-9
+-0x1.120c6195826dep-9
+-0x1.6330c3fa53c63p-10
+-0x1.56bc7da50ee7cp-2
+-0x1.7d13830ad574fp-4
+-0x1.e99476c5bea9fp-3
+-0x1.6ef0fcc2a679p-8
+-0x1.65e57dca15c58p-8
+-0x1.19d84eba41f9cp-8
+-0x1.26f0f26bd5c96p+0
+-0x1.cf3a260bec0fap-9
+-0x1.89ccce201c264p-1
+-0x1.0d5bf7b05589ep-2
+-0x1.8c37653684c02p-1
+-0x1.dc9503ee1dd99p-7
+-0x1.b9f126d7c536ap-7
+-0x1.52db3d86e0daep-5
+-0x1.328834870c17ep+4
+-0x1.4f1c8edef974bp-7
+-0x1.ef7c0f8b2d945p+0
+-0x1.ba285a7693c3ep-6
+-0x1.84b9f3e561097p-6
+-0x1.1f6c5914f80b2p+2
+-0x1.9p+4
+-0x1.9ee97cd77ba94p-6
+-0x1.199d34cef1061p+2
+-0x1.c8733c08e4614p+3
+-0x1.9p+4
+-0x1.cce5a7d6c4832p-5
+-0x1.959ddc874bde1p-5
+-0x1.f2177de28a3cfp-1
+-0x1.9p+4
+-0x1.bd23276d4e219p-5
+-0x1.3ea4128db3da3p+3
+-0x1.50afcb6b3c987p+1
+-0x1.596179384515ap+3
+-0x1.d015a5157e2bap-4
+-0x1.db1588bfd88a7p-4
+-0x1.f630a9568dbafp-5
+-0x1.4b1fe62b7120bp+3
+-0x1.5f54fe7e89c0ap-1
+-0x1.2073583251cf1p+1
+-0x1.3d72beb841e9bp-3
+-0x1.57b04cb5b82a4p-3
+-0x1.ddb1483b2192cp-5
+-0x1.3a231147bab69p+3
+-0x1.f25285f8699f5p-4
+-0x1.b775e93aa29eep-4
+-0x1.9cf891f98aaeap-5
+-0x1.0f2389b3fd9a9p+3
+-0x1.4f801bac46a1bp-2
+-0x1.f26d591ccc02dp-1
+-0x1.72c88cfe71c6bp-4
+-0x1.5c1ffc3331d0fp-4
+-0x1.b9e38dd1bede9p-6
+-0x1.21f79aa59d3fcp+2
+-0x1.8289e99b6689cp-5
+-0x1.55a4f004b115dp-5
+-0x1.b3fada9bb1d7ap-19
+-0x1.822c0b497e819p-10
+-0x1.42ded49daa42cp-16
+-0x1.3e41bdba8fac7p-16
+-0x1.82d1b32a63d65p-18
+-0x1.19c60daa55ea4p-9
+-0x1.a512b66020222p-16
+-0x1.a440df4e55b7ep-16
+-0x1.68e4c6a97f77dp-17
+-0x1.04a634453513cp-8
+-0x1.86657dd5ff52bp-15
+-0x1.8566f38828f04p-15
+-0x1.2f8e664c53605p-16
+-0x1.aea321e3a7ab8p-8
+-0x1.423508f076fa8p-14
+-0x1.40eef3ced513bp-14
+-0x1.c83d018242d15p-16
+-0x1.3afd243a81728p-7
+-0x1.d406dc06aa03p-14
+-0x1.d19a85d30db2cp-14
+-0x1.2bfd38e46a39p-15
+-0x1.91da8d79f10a5p-7
+-0x1.26f17e8c0bc5dp-13
+-0x1.255646cc6c8fcp-13
+-0x1.6a9d37c44aebep-15
+-0x1.d6452b509d218p-7
+-0x1.4fe7e6ef037aep-13
+-0x1.4f7c623e58cc7p-13
+-0x1.7ce65d6f952bfp-15
+-0x1.de3e29172a3abp-7
+-0x1.4ca0f07bdb88ep-13
+-0x1.4e579148f5712p-13
+-0x1.5296fff43a246p-15
+-0x1.9f2c56618c35dp-7
+-0x1.1950b85efbbe5p-13
+-0x1.1b85e4c900a8ap-13
+-0x1.a1c747513ff6bp-15
+-0x1.f362210574e5dp-7
+-0x1.4e5e328626ec3p-13
+-0x1.52dbab6cae46cp-13
+-0x1.11aafb3cc18c5p-14
+-0x1.361f960620888p-6
+-0x1.9699f772a910ap-13
+-0x1.9c8d83dceb83fp-13
+-0x1.a10cf716652d6p-14
+-0x1.a76a4fc5de68ap-6
+-0x1.fc55a7d78bp-13
+-0x1.01132cae52798p-12
+-0x1.4cfbea4962db4p-13
+-0x1.33a2cf551daf8p-5
+-0x1.8d052ef23d989p-12
+-0x1.81dbfbeac240bp-12
+-0x1.dfe3420076215p-13
+-0x1.a768b214defe9p-5
+-0x1.34cb5fb876d22p-11
+-0x1.2391cac062c54p-11
+-0x1.34712466bb2a4p-12
+-0x1.09f8a34eb533bp-4
+-0x1.a252f92b1eeeep-11
+-0x1.86f8ded544b23p-11
+-0x1.0cc164f5c006fp-11
+-0x1.a6c63cda4006ap-4
+-0x1.60d77a1245b6dp-10
+-0x1.40234235ed97bp-10
+-0x1.069c39a30a496p-10
+-0x1.8258938c2e8c1p-3
+-0x1.06254d341310dp-10
+-0x1.808764e30ef39p-3
+-0x1.cf66acf51c2d9p-9
+-0x1.a34035b69a29bp-9
+-0x1.04fca165ea12ap-5
+-0x1.1f8d98d95c34bp+4
+-0x1.32aea9385423ap-9
+-0x1.ad9009aa0ffebp-2
+-0x1.f6046a039df1bp-5
+-0x1.30469c94dbca4p-3
+-0x1.35cf0c07515ffp-7
+-0x1.06e5363c7331ep-7
+-0x1.7fd21af782f19p-8
+-0x1.08df2ddf95d03p+0
+-0x1.ef109cadf9697p-4
+-0x1.08338d818d704p-2
+-0x1.dc1d598dcef37p-6
+-0x1.900e815d6726fp-6
+-0x1.2a0a405f0ff47p-6
+-0x1.b16390dbe0675p+1
+-0x1.1c189e1e9c536p-6
+-0x1.805e4b2dfc8c2p+1
+-0x1.5f87cac7b7fe5p-2
+-0x1.a6fe9f89f201ap-1
+-0x1.4300f116e2c73p-4
+-0x1.0d77f77662b28p-4
+-0x1.704c0535df83dp-4
+-0x1.9p+4
+-0x1.c3979dd742cf3p-5
+-0x1.2b63da60cb692p+3
+-0x1.340400f790472p-3
+-0x1.fdbe81d23f268p-4
+-0x1.2a4d3aee0c003p+2
+-0x1.9p+4
+-0x1.259067949a939p-3
+-0x1.81388904f3cf7p+4
+-0x1.d58ac40c089c6p+3
+-0x1.9p+4
+-0x1.438cd6328f7d5p-2
+-0x1.0bed46718bb5p-2
+-0x1.569ef8c5f6ap+0
+-0x1.9p+4
+-0x1.377b69885e5dp-2
+-0x1.9p+4
+-0x1.add0c98d4100ap+1
+-0x1.6603e744142c2p+3
+-0x1.32bcd0abe835p-1
+-0x1.058991d4ec78bp-1
+-0x1.69ccdf3a12f28p-2
+-0x1.9p+4
+-0x1.7411d31fe6f87p+0
+-0x1.6329572b8f9efp+1
+-0x1.98388d3148b5bp-1
+-0x1.60c40f12654a3p-1
+-0x1.58c3eda0c9122p-2
+-0x1.9p+4
+-0x1.5f5f0713bc0bep-1
+-0x1.234007fe358f4p-1
+-0x1.2a88b4cf0c366p-2
+-0x1.9p+4
+-0x1.9501723e546cfp-1
+-0x1.4e5dc900cb0f4p+0
+-0x1.fe269d3c8f2c2p-2
+-0x1.aba470d660ac2p-2
+-0x1.3f86343e532acp-3
+-0x1.9p+4
+-0x1.10709cfa3bc2p-2
+-0x1.c3dce191b86e2p-3
+-0x1.bf8c28ff974f3p-18
+-0x1.761030c5e5773p-10
+-0x1.2f8dca2e7021dp-14
+-0x1.fc9ecbca90d0cp-15
+-0x1.466bc7145f8cfp-17
+-0x1.15ba8f6a1cdb2p-9
+-0x1.7c532b2703c79p-14
+-0x1.40bc05c3892f9p-14
+-0x1.37328e7d9d42fp-16
+-0x1.064882e2d241ep-8
+-0x1.60cbb5ead7657p-13
+-0x1.2980302c8e243p-13
+-0x1.0e51147c0e066p-15
+-0x1.c10ce0e1d24cep-8
+-0x1.23a912ef517cbp-12
+-0x1.ebc7766173b43p-13
+-0x1.a7f13e67064d8p-15
+-0x1.596d94fbc754dp-7
+-0x1.a843724c0498p-12
+-0x1.659cbfb3e807ap-12
+-0x1.24227454c469fp-14
+-0x1.d2ae1b83063e5p-7
+-0x1.0b5401ef57954p-11
+-0x1.c2b10e423be51p-12
+-0x1.71cc89ff6c57p-14
+-0x1.21cb85d5ef37ap-6
+-0x1.2e692aa17f69dp-11
+-0x1.fe751416d9ad1p-12
+-0x1.955d5bbce8c93p-14
+-0x1.385b3f693dd89p-6
+-0x1.288a0ed36366fp-11
+-0x1.f5993b7970b86p-12
+-0x1.737b29a86e421p-14
+-0x1.1b1c2ce19cce6p-6
+-0x1.f3b5234fbc18dp-12
+-0x1.a74dc9bc14cfcp-12
+-0x1.d9ab78041f4c6p-14
+-0x1.64fd1a580da26p-6
+-0x1.273d62ca4c5ecp-11
+-0x1.f5538bc2b0599p-12
+-0x1.4b743fe5dd42fp-13
+-0x1.e9629bcab39d3p-6
+-0x1.6756ecd6b6c6ap-11
+-0x1.3180a3f3ac0b6p-11
+-0x1.1fc27038281b9p-12
+-0x1.9a52e3119c082p-5
+-0x1.c4b5a8c8fb868p-11
+-0x1.8114f8c92ed8dp-11
+-0x1.019c9b26970bap-11
+-0x1.672361ef2210bp-4
+-0x1.757605d12d139p-10
+-0x1.3b63370c557fp-10
+-0x1.8c036479949b4p-11
+-0x1.117c95b83b481p-3
+-0x1.2ecf23b048cd4p-9
+-0x1.fd0350ed6a8c8p-10
+-0x1.08a7d9600134ep-10
+-0x1.6b6a816fff59ap-3
+-0x1.a1cb297f0f6e3p-9
+-0x1.5ea361d6e87dbp-9
+-0x1.fdf1806ae5c71p-10
+-0x1.573299ae2b46bp-2
+-0x1.6d998866eebc3p-8
+-0x1.3139fd5e0ff78p-8
+-0x1.0b5e1873e06edp-8
+-0x1.63e32aa3d3967p-1
+-0x1.0b3e5dbee9a5ap-8
+-0x1.636edef98bb06p-1
+-0x1.e8a91d7fffc79p-7
+-0x1.992167d66a64fp-7
+-0x1.51fd1966ded6dp-5
+-0x1.33f2ed407af38p+4
+-0x1.4831349e8ad51p-7
+-0x1.b1b948dc6febcp+0
+-0x1.91916553d001fp-4
+-0x1.66d13caa20511p-3
+-0x1.5808c61a63bcfp-5
+-0x1.1be3cde42ee7cp-5
+-0x1.a2c62d2d506d3p-6
+-0x1.147e17fac3514p+2
+-0x1.d6b159e0935ap-3
+-0x1.5d21833355dap-2
+-0x1.0adcc4c125106p-3
+-0x1.b7bb771e7b70bp-4
+-0x1.3f5b452c46f82p-4
+-0x1.abe50c34aed2p+3
+-0x1.3bcf85c6e2ed4p-4
+-0x1.9fa3bac935db3p+3
+-0x1.4c40a76686ee3p-1
+-0x1.0d8eeddae1cb7p+0
+-0x1.6c28adf8a418cp-2
+-0x1.2b9c76353bd79p-2
+-0x1.24e3f5b7ad79cp-2
+-0x1.9p+4
+-0x1.fddd8089cf48ap-3
+-0x1.9p+4
+-0x1.5d5121d7fca47p-1
+-0x1.1ee3afbb8c436p-1
+-0x1.57198c5456b31p+2
+-0x1.9p+4
+-0x1.4df4464a8ce68p-1
+-0x1.9p+4
+-0x1.05c57ff7fbe16p+4
+-0x1.9p+4
+-0x1.6ebea3341b58ap+0
+-0x1.2d4572cc0cbe4p+0
+-0x1.4e8dccecfececp+1
+-0x1.9p+4
+-0x1.607b8a8d364e9p+0
+-0x1.9p+4
+-0x1.7a6401b4955a7p+2
+-0x1.9c07df92f1be9p+3
+-0x1.544540a5201f2p+1
+-0x1.197245b0b1687p+1
+-0x1.9c8ea0e48c159p+0
+-0x1.9p+4
+-0x1.0fe06366a9d19p+2
+-0x1.3f547221e9d91p+2
+-0x1.bfe3ce9941739p+1
+-0x1.73b090dcdd65ep+1
+-0x1.89370bd706ad8p+0
+-0x1.9p+4
+-0x1.8e0c81b1af46bp+1
+-0x1.471303c0cf5f1p+1
+-0x1.5486f18517d3fp+0
+-0x1.9p+4
+-0x1.485fca85ed90dp+1
+-0x1.5de5e8171126dp+1
+-0x1.1ead7e44178b7p+1
+-0x1.d8572362ef694p+0
+-0x1.6c7c722cf83bp-1
+-0x1.9p+4
+-0x1.3484bad9b8e62p+0
+-0x1.fb1285bc630e3p-1
+-0x1.72333323a8484p-16
+-0x1.f392d5bc0adb8p-9
+-0x1.3b2a60cfa8938p-12
+-0x1.02ebc0ddb7403p-12
+-0x1.e7e87936a435cp-16
+-0x1.4a0e77f79f15bp-8
+-0x1.860e247bbb6ecp-12
+-0x1.40904c5726af3p-12
+-0x1.d872317771c87p-15
+-0x1.3f0cece8e19b7p-7
+-0x1.69d7b3c1e2d0cp-11
+-0x1.295fecceadecap-11
+-0x1.a3ce077ccdc6bp-14
+-0x1.1ac620c71fa9ep-6
+-0x1.2b3c05c19cbe8p-10
+-0x1.ebd4a012791cap-11
+-0x1.529d18635b504p-13
+-0x1.c6b686f40a272p-6
+-0x1.b365a1151a17ap-10
+-0x1.65ceefcba1b11p-10
+-0x1.e063c2249d656p-13
+-0x1.418a73e894354p-5
+-0x1.124ec26bb1131p-9
+-0x1.c2d9e110a828cp-10
+-0x1.382202016773cp-12
+-0x1.a0aa48cd8e2d9p-5
+-0x1.35c2b4e2bbbf8p-9
+-0x1.fd2b399a09bf6p-10
+-0x1.5de7fb3656dd4p-12
+-0x1.d1fa7803c9283p-5
+-0x1.2ee5feaa9ca04p-9
+-0x1.f1f74c558c1acp-10
+-0x1.459190d78bacp-12
+-0x1.b0e85ee3c396bp-5
+-0x1.fd94167dc4e79p-10
+-0x1.a2ea14f8dcc0ep-10
+-0x1.a58843a367e74p-12
+-0x1.17d59104d6948p-4
+-0x1.2c6f32fc7ea73p-9
+-0x1.ee0a9d9d04174p-10
+-0x1.2f6599fed2343p-11
+-0x1.91bc2d7b6754dp-4
+-0x1.6d6f9c01070cfp-9
+-0x1.2c7f271d15602p-9
+-0x1.14242356ed297p-10
+-0x1.6c19dc91fdbfcp-3
+-0x1.cccac429dc12p-9
+-0x1.7af087f641ecbp-9
+-0x1.ff68d8279d029p-10
+-0x1.504ac074d9442p-2
+-0x1.80458bba70fb3p-8
+-0x1.3bd63bf2831bcp-8
+-0x1.8f7de648e2deep-9
+-0x1.06763bb766c8dp-1
+-0x1.3a08e2a1a9da6p-7
+-0x1.020824d7f3938p-7
+-0x1.0d629284dfdabp-8
+-0x1.61d85ee4522bp-1
+-0x1.b2e92fbed71f4p-7
+-0x1.65583aac5159fp-7
+-0x1.0885142bddf7dp-7
+-0x1.5ac93010c7571p+0
+-0x1.7f53dcba2b0c5p-6
+-0x1.3acd875b6e81dp-6
+-0x1.1882f0f7344c8p-6
+-0x1.6f4bce0356b4cp+1
+-0x1.1865cc1fbdc18p-6
+-0x1.6f2362a4c60ffp+1
+-0x1.016d163436e63p-4
+-0x1.a6dd21859be77p-5
+-0x1.719ed7c02607ap-3
+-0x1.9p+4
+-0x1.5a96f88d1667cp-5
+-0x1.c57a3228acbaep+2
+-0x1.9f59d2ffe8132p-2
+-0x1.5ff67ea25b0a4p-2
+-0x1.6caceff99977ap-3
+-0x1.2b1d191545ef7p-3
+-0x1.bb5715b3b1e98p-4
+-0x1.21fc63978cc9ep+4
+-0x1.dde6301668fd6p-1
+-0x1.92f74c3318be3p-1
+-0x1.1b46cbd7ecb95p-1
+-0x1.d09a72203acd5p-2
+-0x1.522a2bd572cb9p-2
+-0x1.9p+4
+-0x1.4f09d09fce6e1p-2
+-0x1.9p+4
+-0x1.582f7c8739078p+1
+-0x1.328e370477e42p+1
+-0x1.82d9b509a5e4cp+0
+-0x1.3d306456fb60dp+0
+-0x1.313b2dd1998dep+0
+-0x1.9p+4
+-0x1.0ee5a29fd8219p+0
+-0x1.9p+4
+-0x1.734ad0f9fc8f4p+1
+-0x1.30638ab875acp+1
+-0x1.9p+4
+-0x1.9p+4
+-0x1.6325a44e80bdap+1
+-0x1.9p+4
+-0x1.9p+4
+-0x1.9p+4
+-0x1.85dc501a71395p+2
+-0x1.3f9b3554dc28fp+2
+-0x1.7258a6e6248cap+3
+-0x1.9p+4
+-0x1.76af0f1b05831p+2
+-0x1.9p+4
+-0x1.9p+4
+-0x1.9p+4
+-0x1.6915426457958p+3
+-0x1.28265ac979f12p+3
+-0x1.b6d7c697c3a5ep+2
+-0x1.9p+4
+-0x1.1e13e08ded5cbp+4
+-0x1.ee73f03dae8d2p+3
+0x1.9c9f1a0696507p-1
+0x1.b748b31994d3fp-1
+-0x1.6653147570c59p-25
+0x1.90de5484df9abp-1
+0x1.aaafeafce4b6bp-1
+-0x1.621a6e4507439p-25
+0x1.cd90a33f85d24p-2
+0x1.ea1cb140988p-2
+-0x1.1cb0ab955659p-25
+0x1.18399ef902541p-1
+0x1.29be214515957p-1
+-0x1.2f69229577166p-25
+0x1.71e6a46bb6d1p-1
+0x1.6189bf40df1a1p-1
+-0x1.adad0707e8044p-26
+0x1.6643b4b933683p-1
+0x1.56af0ef9d3166p-1
+-0x1.a6304eab64085p-26
+0x1.8d1aca0807a99p-2
+0x1.7f975d270026p-2
+-0x1.3ea8bf559284dp-26
+0x1.e7093b6dd9633p-2
+0x1.d53b7838df5ddp-2
+-0x1.58489c287aab2p-26
+0x1.2fe6309dff816p-1
+0x1.0da4f0eebf1bdp-1
+-0x1.a1f7d65033cd9p-26
+0x1.2659a37c7bcc2p-1
+0x1.05052ee94ebeap-1
+-0x1.9bdd18cd1df0cp-26
+0x1.466ae9b7432c7p-2
+0x1.1f54b0dd27fc8p-2
+-0x1.43988dcf24a0fp-26
+0x1.904a1ce5a1fc2p-2
+0x1.610d7d93500a4p-2
+-0x1.59c5f7ff8c57ep-26
+0x1.93239df639e33p-1
+0x1.b4cf0c641d395p-1
+-0x1.22f2e15050089p-26
+0x1.86ce399228c0cp-1
+0x1.a61562e9b916dp-1
+-0x1.1dd163dbfb31ap-26
+0x1.b6117fc803dd2p-2
+0x1.c605ff784f793p-2
+-0x1.acff21b3b661ep-27
+0x1.0bd643b55a5bp-1
+0x1.18af616d0084fp-1
+-0x1.d081c0f13068dp-27
+0x1.b255d8d9aff55p-1
+0x1.9e4803806160fp-1
+-0x1.d488207926025p-27
+0x1.a54e362363b52p-1
+0x1.91d70c6f8c282p-1
+-0x1.cc59fb221258p-27
+0x1.dbe10eb388563p-2
+0x1.c5b58a803cd47p-2
+-0x1.5911019a0c489p-27
+0x1.225e43bca08f1p-1
+0x1.14dec04cc32bep-1
+-0x1.760b9d2a5ff38p-27
+0x1.1aabd0ab77358p-1
+0x1.44c550800290fp-1
+-0x1.cc23f85f526f6p-26
+0x1.1295c78cbeb36p-1
+0x1.3b836e7e99dd6p-1
+-0x1.c82ed2af2fa78p-26
+0x1.3bad581b70041p-2
+0x1.6b315d6dea292p-2
+-0x1.810a7a6a92688p-26
+0x1.7f75ba76e3131p-2
+0x1.b90842267fc3cp-2
+-0x1.947b32a4a3f03p-26
+-0x1.93a0ebb0fcc8p-29
+-0x1.5a960257a6af6p-26
+-0x1.2d4e34d3b77d3p-24
+-0x1.2b3ce45946e3bp-25
+-0x1.b25f78b4707bdp-26
+-0x1.f30252b76568cp-31
+-0x1.71be8567056c7p-24
+-0x1.08ff25c071d3fp-26
+-0x1.1566bfd1f7948p-13
+-0x1.93a0ebb0fcc87p-29
+-0x1.5a960257a6afcp-26
+-0x1.2d4e34d3b77d8p-24
+-0x1.2b3ce45946e4p-25
+-0x1.b25f78b4707c5p-26
+-0x1.f30252b765695p-31
+-0x1.71be8567056cep-24
+-0x1.08ff25c071d43p-26
+-0x1.167dcbe42e081p-13
+-0x1.d7bc37fb95f51p-25
+-0x1.95114594eb937p-22
+-0x1.3221b25411097p-17
+-0x1.3007e76b54db2p-18
+-0x1.b954995d03ae8p-19
+-0x1.239adb50ce2eap-26
+-0x1.b02222f3d943ap-20
+-0x1.0d3dc143627dfp-19
+-0x1.15ac52c11a64fp-13
+-0x1.d7bc37fb95f51p-25
+-0x1.95114594eb937p-22
+-0x1.3221b25411097p-17
+-0x1.3007e76b54db2p-18
+-0x1.b954995d03ae8p-19
+-0x1.239adb50ce2eap-26
+-0x1.b02222f3d943ap-20
+-0x1.0d3dc143627dfp-19
+-0x1.16ce74149540bp-13
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.37c443532a173p-5
+-0x1.19f67abb07d4cp-3
+-0x1.6158c663913d8p-5
+-0x1.3b090c802dbd1p-3
+-0x1.78cbda6d99979p-5
+-0x1.4d2932fbac6f1p-3
+-0x1.82e4fb240322fp-5
+-0x1.554e8f71773edp-3
+-0x1.c3b5d187da0acp+0
+-0x1.c32a0ab19db54p+0
+-0x1.bbf39460d4faep+0
+-0x1.bcd4feede96fep+0
+0x1.27f10ec52fea3p-1
+0x1.3a81fcd30d94fp-1
+-0x1.20b39e8249af4p-9
+0x1.2bde4d9490c23p-1
+0x1.3eb2a70800f44p-1
+-0x1.887a225482bc3p-9
+0x1.5f3b76a9d9c72p-1
+0x1.758fb5db0c749p-1
+-0x1.9d8758377db4fp-9
+0x1.5903f1e0e506bp-1
+0x1.6eea4d5611cdp-1
+-0x1.baa6e8b64802ap-9
+0x1.02098f048254cp-1
+0x1.f0c6ff52c4576p-2
+-0x1.0bb8677734052p-9
+0x1.05aedc9101ee9p-1
+0x1.f7af68b8b80e7p-2
+-0x1.6097e11d5e875p-9
+0x1.3615c99cedb09p-1
+0x1.2987e34497a51p-1
+-0x1.6b14e74d7f9a3p-9
+0x1.3027130c08ba2p-1
+0x1.23f2b699042d8p-1
+-0x1.85149a24d27ffp-9
+0x1.a82355cd6d216p-2
+0x1.7654d49e1d7fap-2
+-0x1.be3ef965fb22dp-10
+0x1.ae203af9c6b92p-2
+0x1.7badc86d156a9p-2
+-0x1.25cec67c3df55p-9
+0x1.fd9c067760a75p-2
+0x1.c2d9f966af4fp-2
+-0x1.2e912da132cc5p-9
+0x1.f3de6e6a51a9dp-2
+0x1.ba1c25afa0aafp-2
+-0x1.4436af9424ec5p-9
+0x1.1b8655c3e5e9ep-1
+0x1.2a3713e3e127cp-1
+-0x1.61afee039ebb4p-10
+0x1.1f7552a138384p-1
+0x1.2ea1ef2ceda5fp-1
+-0x1.d1d650ca2de35p-10
+0x1.53769b663d4b4p-1
+0x1.69e5854248d1ap-1
+-0x1.dfbb3a725140ap-10
+0x1.4d1c8f303ead9p-1
+0x1.6291dacb439cp-1
+-0x1.0109d4e433b7bp-9
+0x1.332b499507564p-1
+0x1.24e67e7475ea6p-1
+-0x1.098847fb52745p-10
+0x1.3760a8e4eabb6p-1
+0x1.28ea80d9ad8a5p-1
+-0x1.5db3fba9fcd82p-10
+0x1.6edaa8a72d524p-1
+0x1.5ddbed2e9b2b6p-1
+-0x1.682773f5b4035p-10
+0x1.68185c39750aep-1
+0x1.57686d8312df4p-1
+-0x1.81ed55008ab7bp-10
+0x1.95053e246e249p-2
+0x1.d1c736ef0823dp-2
+-0x1.d9d2a2d052c73p-11
+0x1.9a6891f8e92e1p-2
+0x1.d7f60b1348941p-2
+-0x1.376c53f27213dp-10
+0x1.e0ee681643281p-2
+0x1.146c43096f423p-1
+-0x1.40caf8c57150fp-10
+0x1.d8640e50116f3p-2
+0x1.0f8708e19e3dep-1
+-0x1.5797ff8a2f9aap-10
+-0x1.fe529d719658p-19
+-0x1.b6339bbedf8a2p-16
+-0x1.7cf1bb6c88881p-14
+-0x1.7a54836f306ffp-15
+-0x1.12976f2f2a014p-15
+-0x1.3b75397fd011p-20
+-0x1.d37b3f5f3cdfp-14
+-0x1.4f09dfc42c6p-16
+-0x1.8910eb7c65cb3p-4
+-0x1.fa0c375e4433dp-19
+-0x1.b287e00293dc9p-16
+-0x1.79c0c9d6d9cedp-14
+-0x1.77292d012469ep-15
+-0x1.104a91048f637p-15
+-0x1.38d0b7c8c9327p-20
+-0x1.cf90b9111faadp-14
+-0x1.4c3b604f565e2p-16
+-0x1.aecac34f27a04p-4
+-0x1.e71f0b314124ep-19
+-0x1.a24771b90dac6p-16
+-0x1.6b9ffa4663583p-14
+-0x1.69212f394c1ddp-15
+-0x1.061b80ecf50f1p-15
+-0x1.2d1da7ff1d035p-20
+-0x1.be3a4cb41721cp-14
+-0x1.3fce68c55599p-16
+-0x1.babcd9cfd09bdp-4
+-0x1.f33b9c2ea3d8dp-19
+-0x1.acadd3127abc5p-16
+-0x1.74aa7acdea082p-14
+-0x1.721bcdc86aa33p-15
+-0x1.0c9fd6b5a5cbp-15
+-0x1.349a4873b8d12p-20
+-0x1.c9529349adfcp-14
+-0x1.47c2009147ebcp-16
+-0x1.c541c7940350ep-4
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.32daa296efe6bp-5
+-0x1.1615a29e26227p-3
+-0x1.5c9d037d7ca58p-5
+-0x1.374edcd8948ddp-3
+-0x1.743d03a739c46p-5
+-0x1.49918db07c9dbp-3
+-0x1.7ce98810146a6p-5
+-0x1.50a8664318ca6p-3
+-0x1.c60846ff0d9cfp+0
+-0x1.c4e83be3b2da7p+0
+-0x1.bd58c43ac1b54p+0
+-0x1.bf1afcb06c527p+0
+0x1.172f9d679bd3ep-1
+0x1.28a274c0db609p-1
+-0x1.1d70cafe1e157p-9
+0x1.1f50e25605b54p-1
+0x1.314e3802355cdp-1
+-0x1.8410aef28318bp-9
+0x1.555fbe552be1p-1
+0x1.6b05edcc5e651p-1
+-0x1.98e38233598ep-9
+0x1.48e4a2cde6195p-1
+0x1.5dafef6870a24p-1
+-0x1.b5aa12938a56bp-9
+0x1.e51fcca0ef71fp-2
+0x1.d36ab9f490dc9p-2
+-0x1.08b68b517d91bp-9
+0x1.f41bee6ac7633p-2
+0x1.e1a3bf2c3ddb8p-2
+-0x1.5ca40524c07fdp-9
+0x1.2cb00bea834bbp-1
+0x1.20af67802a796p-1
+-0x1.6703b4dcca1f9p-9
+0x1.20dd9fdd43f64p-1
+0x1.158a4476e0af6p-1
+-0x1.80b69cf0de8edp-9
+0x1.8eb822f444f7dp-2
+0x1.5fa71aa979f45p-2
+-0x1.b93c1e700cd1bp-10
+0x1.9b06b9cc5d3eap-2
+0x1.6aa0f34359c4cp-2
+-0x1.2283e6d4a606p-9
+0x1.ee2df61046c75p-2
+0x1.b501b88a2485cp-2
+-0x1.2b2de12f6016ap-9
+0x1.dac469b9dee0ep-2
+0x1.a39bb92664d94p-2
+-0x1.40935717bcb17p-9
+0x1.0acd89e5d23a7p-1
+0x1.1788cf4257bfcp-1
+-0x1.5db628ca6b10dp-10
+0x1.12e765793dd9ep-1
+0x1.2090918312adcp-1
+-0x1.cc9ceb0bc1f49p-10
+0x1.496616a7b1e83p-1
+0x1.5e4c77be69f31p-1
+-0x1.da5b169084778p-10
+0x1.3cb712b2f8ff5p-1
+0x1.4fc5a5d6d81fep-1
+-0x1.fc4db7d4a3cd5p-10
+0x1.2142852126ffp-1
+0x1.13d0088fa6f5ep-1
+-0x1.068b4f1aba474p-10
+0x1.29f0980985d7dp-1
+0x1.1c182163a10ffp-1
+-0x1.59c75751686b2p-10
+0x1.6424626a9efb6p-1
+0x1.53a2914db152ep-1
+-0x1.641dd45a1c562p-10
+0x1.56a023d4cac8p-1
+0x1.46bc2a5a07563p-1
+-0x1.7d96cc62530adp-10
+0x1.7e08dff02119dp-2
+0x1.b76570c713ad9p-2
+-0x1.d47a6a8933f01p-11
+0x1.892fc095af7c1p-2
+0x1.c4325effe71d1p-2
+-0x1.33ed631dfb54p-10
+0x1.d3639a1b0df29p-2
+0x1.0ca8ff12c0bc8p-1
+-0x1.3d331ec545d0bp-10
+0x1.c23fbbb01c57ep-2
+0x1.02d52c81445bp-1
+-0x1.53b9c91ad167ep-10
+-0x1.fe529d719658p-19
+-0x1.b6339bbedf8a2p-16
+-0x1.7cf1bb6c88881p-14
+-0x1.7a54836f306ffp-15
+-0x1.12976f2f2a014p-15
+-0x1.3b75397fd011p-20
+-0x1.d37b3f5f3cdfp-14
+-0x1.4f09dfc42c6p-16
+-0x1.86dc821718c4dp-4
+-0x1.fa0c375e444d2p-19
+-0x1.b287e00293f24p-16
+-0x1.79c0c9d6d9e1cp-14
+-0x1.77292d01247cbp-15
+-0x1.104a91048f712p-15
+-0x1.38d0b7c8c9421p-20
+-0x1.cf90b9111fc2p-14
+-0x1.4c3b604f566edp-16
+-0x1.ac602e0484f15p-4
+-0x1.e71f0b314124ep-19
+-0x1.a24771b90dac6p-16
+-0x1.6b9ffa4663583p-14
+-0x1.69212f394c1ddp-15
+-0x1.061b80ecf50f1p-15
+-0x1.2d1da7ff1d035p-20
+-0x1.be3a4cb41721cp-14
+-0x1.3fce68c55599p-16
+-0x1.b8411d594b579p-4
+-0x1.f33b9c2ea3c8p-19
+-0x1.acadd3127aaddp-16
+-0x1.74aa7acde9fb8p-14
+-0x1.721bcdc86a96ap-15
+-0x1.0c9fd6b5a5c1ep-15
+-0x1.349a4873b8c6bp-20
+-0x1.c9529349adecap-14
+-0x1.47c2009147e0bp-16
+-0x1.c2b6f04885c65p-4
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.29e1a7ead3e56p-4
+-0x1.00e438315f0ddp-2
+-0x1.57045d6eccafbp-4
+-0x1.21ba34b969f6ep-2
+-0x1.6e76ef2dfea0cp-4
+-0x1.32b0c253600a9p-2
+-0x1.78d763e8dc564p-4
+-0x1.3a4d3494af0c7p-2
+-0x1.c4de492f6c7aap+0
+-0x1.c408b52f826a2p+0
+-0x1.bca5e4925f18cp+0
+-0x1.bdf73fef15cafp+0
+0x1.1f98ab8c9db25p-1
+0x1.319acad1287e3p-1
+-0x1.abf21326873b3p-8
+0x1.259c52cf47909p-1
+0x1.38054cbefbfdcp-1
+-0x1.2321e739e5037p-7
+0x1.5a50d75070a44p-1
+0x1.704e262c14325p-1
+-0x1.32b8d43855784p-7
+0x1.50fcc8d296074p-1
+0x1.6655da9589eefp-1
+-0x1.48609be4c53ddp-7
+0x1.f4a085d0598ccp-2
+0x1.e221875941439p-2
+-0x1.8dc0a97a01e11p-8
+0x1.ffc0d62ef163cp-2
+0x1.ecae7f2e5faf1p-2
+-0x1.0603fbf6f68c7p-7
+0x1.31644a0c3ebcap-1
+0x1.251d5459dc4eep-1
+-0x1.0dc9c799588fdp-7
+0x1.2885f3150a7d9p-1
+0x1.1cc2e83705c4cp-1
+-0x1.21219417cdd64p-7
+0x1.9b739e94a0ad5p-2
+0x1.6b021aa01882fp-2
+-0x1.4b49f573e7298p-8
+0x1.a496d13c5de55p-2
+0x1.7329b6dfdc9f2p-2
+-0x1.b470007b633abp-8
+0x1.f5e74766932f7p-2
+0x1.bbef745e9699p-2
+-0x1.c1696c9eb1e86p-8
+0x1.e7576b3b74066p-2
+0x1.aee026c3ac698p-2
+-0x1.e19db6a42a94ap-8
+0x1.132f08b83b024p-1
+0x1.20e097a731918p-1
+-0x1.06b7dad3af4dap-8
+0x1.193140a4e9363p-1
+0x1.27999e9a1bb5ep-1
+-0x1.5a25cc5f1a37p-8
+0x1.4e7053f4a2dadp-1
+0x1.64193f052c91ep-1
+-0x1.6470bfbf0f084p-8
+0x1.44ef02ebaef2dp-1
+0x1.592c69969495ep-1
+-0x1.7dfe274b579dcp-8
+0x1.2a3d51cab1d84p-1
+0x1.1c615625aade2p-1
+-0x1.8a60892f3c5dap-9
+0x1.30ac44a2606dp-1
+0x1.2284c3758140dp-1
+-0x1.03cc7cb11ece9p-8
+0x1.698203985a43cp-1
+0x1.58c19b320913dp-1
+-0x1.0b88cfd73db87p-8
+0x1.5f62ca0adab46p-1
+0x1.4f187c76260c6p-1
+-0x1.1eb53194de4a7p-8
+0x1.89923ad7ed868p-2
+0x1.c4a3661b16e8fp-2
+-0x1.5e35226f83586p-9
+0x1.91d2805defc9ap-2
+0x1.ce1ba035c2a55p-2
+-0x1.cce5e1fd68d73p-9
+0x1.da2d5815aa86p-2
+0x1.108d2b09a3b78p-1
+-0x1.daaccaefd4809p-9
+0x1.cd5d47c9c94c7p-2
+0x1.0934c3fca3721p-1
+-0x1.fc8e42ee19e47p-9
+-0x1.7ebdf61530c42p-17
+-0x1.48a6b4cf27a97p-14
+-0x1.1db54c916667bp-12
+-0x1.1bbf629364558p-13
+-0x1.9be326c6bf042p-14
+-0x1.d92fd63fb81c3p-19
+-0x1.5e9c6f876da93p-12
+-0x1.f68ecfa64292dp-15
+-0x1.53222dec27395p-3
+-0x1.7b892986b335ap-17
+-0x1.45e5e801eef21p-14
+-0x1.1b50976123663p-12
+-0x1.195ee1c0db5a6p-13
+-0x1.986fd986d7252p-14
+-0x1.d53913ad2dddep-19
+-0x1.5bac8accd7cdap-12
+-0x1.f259107701a0bp-15
+-0x1.73aedec91bcfcp-3
+-0x1.6d574864f0dbbp-17
+-0x1.39b5954aca415p-14
+-0x1.10b7fbb4ca822p-12
+-0x1.0ed8e36af9166p-13
+-0x1.892941636f969p-14
+-0x1.c3ac7bfeab84fp-19
+-0x1.4eabb98711595p-12
+-0x1.dfb59d2800658p-15
+-0x1.7dfd5ba9e3c2ep-3
+-0x1.766cb522fada3p-17
+-0x1.41825e4ddc06p-14
+-0x1.177fdc1a6f7fdp-12
+-0x1.1594da564ff42p-13
+-0x1.92efc21078a77p-14
+-0x1.cee76cad952f4p-19
+-0x1.56fdee7742755p-12
+-0x1.eba300d9ebd6ap-15
+-0x1.8710ca4afa3b4p-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.2aa735d482b22p-4
+-0x1.01799157cf587p-2
+-0x1.57ea71f9c9fe5p-4
+-0x1.2264175d637c4p-2
+-0x1.6f69452a1c532p-4
+-0x1.3362d66a17af9p-2
+-0x1.79dfca99c8ed2p-4
+-0x1.3b0b4a9fe3aa5p-2
+-0x1.c4de492f6c7aap+0
+-0x1.c408b52f826a2p+0
+-0x1.bca5e4925f18cp+0
+-0x1.bdf73fef15cafp+0
+0x1.1f98ab8c9db25p-1
+0x1.319acad1287e3p-1
+-0x1.ad8c6f16a535ep-8
+0x1.259c52cf47909p-1
+0x1.38054cbefbfdcp-1
+-0x1.24393acf1a009p-7
+0x1.5a50d75070a44p-1
+0x1.704e262c14325p-1
+-0x1.33df17f7b51e4p-7
+0x1.50fcc8d296074p-1
+0x1.6655da9589eefp-1
+-0x1.499bb0c3cb0ddp-7
+0x1.f4a085d0598ccp-2
+0x1.e221875941439p-2
+-0x1.8f3ea95d6e14ep-8
+0x1.ffc0d62ef163cp-2
+0x1.ecae7f2e5faf1p-2
+-0x1.06ffae7854b2p-7
+0x1.31644a0c3ebcap-1
+0x1.251d5459dc4eep-1
+-0x1.0eccedc446e72p-7
+0x1.2885f3150a7d9p-1
+0x1.1cc2e83705c4cp-1
+-0x1.22375380c412cp-7
+0x1.9b739e94a0ad5p-2
+0x1.6b021aa01882fp-2
+-0x1.4c87fd8010dffp-8
+0x1.a496d13c5de55p-2
+0x1.7329b6dfdc9f2p-2
+-0x1.b6131a2b4b0b6p-8
+0x1.f5e74766932f7p-2
+0x1.bbef745e9699p-2
+-0x1.c318f52dfc1aep-8
+0x1.e7576b3b74066p-2
+0x1.aee026c3ac698p-2
+-0x1.e36c355a88ef4p-8
+0x1.132f08b83b024p-1
+0x1.20e097a731918p-1
+-0x1.07b427f50da3p-8
+0x1.193140a4e9363p-1
+0x1.27999e9a1bb5ep-1
+-0x1.5b724d1f27ed9p-8
+0x1.4e7053f4a2dadp-1
+0x1.64193f052c91ep-1
+-0x1.65c71e056dfep-8
+0x1.44ef02ebaef2dp-1
+0x1.592c69969495ep-1
+-0x1.7f6d17419d108p-8
+0x1.2a3d51cab1d84p-1
+0x1.1c615625aade2p-1
+-0x1.8bdb35369ae2ap-9
+0x1.30ac44a2606dp-1
+0x1.2284c3758140dp-1
+-0x1.04c601e081c0fp-8
+0x1.698203985a43cp-1
+0x1.58c19b320913dp-1
+-0x1.0c89bdfcf604fp-8
+0x1.5f62ca0adab46p-1
+0x1.4f187c76260c6p-1
+-0x1.1fc88f234631bp-8
+0x1.89923ad7ed868p-2
+0x1.c4a3661b16e8fp-2
+-0x1.5f844e1dfa014p-9
+0x1.91d2805defc9ap-2
+0x1.ce1ba035c2a55p-2
+-0x1.ce9f58b3b71e7p-9
+0x1.da2d5815aa86p-2
+0x1.108d2b09a3b78p-1
+-0x1.dc7363b098c48p-9
+0x1.cd5d47c9c94c7p-2
+0x1.0934c3fca3721p-1
+-0x1.fe7568f69490cp-9
+-0x1.7ebdf61530c42p-17
+-0x1.48a6b4cf27a97p-14
+-0x1.1db54c916667bp-12
+-0x1.1bbf629364558p-13
+-0x1.9be326c6bf042p-14
+-0x1.d92fd63fb81c3p-19
+-0x1.5e9c6f876da93p-12
+-0x1.f68ecfa64292dp-15
+-0x1.53c51c4587641p-3
+-0x1.7b892986b32d3p-17
+-0x1.45e5e801eeeadp-14
+-0x1.1b509761235fep-12
+-0x1.195ee1c0db542p-13
+-0x1.986fd986d71c1p-14
+-0x1.d53913ad2dd37p-19
+-0x1.5bac8accd7c5ep-12
+-0x1.f259107701959p-15
+-0x1.7461706ff4c4ep-3
+-0x1.6d574864f0dbbp-17
+-0x1.39b5954aca415p-14
+-0x1.10b7fbb4ca822p-12
+-0x1.0ed8e36af9166p-13
+-0x1.892941636f969p-14
+-0x1.c3ac7bfeab84fp-19
+-0x1.4eabb98711595p-12
+-0x1.dfb59d2800658p-15
+-0x1.7eb4e0eed43bp-3
+-0x1.766cb522fade6p-17
+-0x1.41825e4ddc099p-14
+-0x1.177fdc1a6f82fp-12
+-0x1.1594da564ff74p-13
+-0x1.92efc21078abfp-14
+-0x1.cee76cad95347p-19
+-0x1.56fdee7742792p-12
+-0x1.eba300d9ebdc2p-15
+-0x1.87ccabd1046fbp-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.be44fda27297ep-5
+-0x1.8a408f4d76ff2p-3
+-0x1.ed4842fcc1266p-5
+-0x1.adfd9addf8a4cp-3
+-0x1.0c42b22de21ep-4
+-0x1.ce35be4e62389p-3
+-0x1.187ed457cd35cp-4
+-0x1.e0c2f84ab9258p-3
+-0x1.c768908dc7a47p+0
+-0x1.c634c07db940dp+0
+-0x1.bed7c2cf5b5fbp+0
+-0x1.c0907f4a811c8p+0
+0x1.0d3724479f4d1p-1
+0x1.1e00ef5c6f3a5p-1
+-0x1.133dfdaf3734ap-8
+0x1.15edcc359f8e7p-1
+0x1.274b46ed8b881p-1
+-0x1.573d6dbab5efcp-8
+0x1.4ac2b21a78ebbp-1
+0x1.5faea4639ab34p-1
+-0x1.7b216e655b229p-8
+0x1.3e7e779c47f1p-1
+0x1.52949cd181e81p-1
+-0x1.a7f74ec163557p-8
+0x1.d2d40d31c68b4p-2
+0x1.c20842ca59faap-2
+-0x1.01131688524bdp-8
+0x1.e2d003403a08ap-2
+0x1.d138b69d9f7d2p-2
+-0x1.38ba59d5e08f1p-8
+0x1.22a119aa2d792p-1
+0x1.173433c8313b6p-1
+-0x1.5006aaacddde4p-8
+0x1.1713f3c2c7949p-1
+0x1.0c4c6504ad994p-1
+-0x1.76cc9115ff5eap-8
+0x1.7fb1335423767p-2
+0x1.5243050352ce9p-2
+-0x1.ac50056f6768cp-9
+0x1.8cd217b68a997p-2
+0x1.5df5cfb0525cp-2
+-0x1.04804545abd33p-8
+0x1.dda9c94ccaa55p-2
+0x1.a633d5aa13f88p-2
+-0x1.17ebcdd247badp-8
+0x1.cab1a8962c74ep-2
+0x1.9537ff3ba46dp-2
+-0x1.3833c1fcfea85p-8
+0x1.00e63b2f3b4cep-1
+0x1.0c8b5768ef8f6p-1
+-0x1.539975f102312p-9
+0x1.098d66574e039p-1
+0x1.1624c815cc82ap-1
+-0x1.9d2371eaaa53bp-9
+0x1.3e9bdc14821bfp-1
+0x1.51ef46a34c757p-1
+-0x1.bbf3d2dbaadefp-9
+0x1.3231fbcad3765p-1
+0x1.43cc36e41ba6ap-1
+-0x1.ef2d2f29b64dp-9
+0x1.16a39d312520fp-1
+0x1.09ae0706b9304p-1
+-0x1.fdd14b386e857p-10
+0x1.1feb57c2fc3b5p-1
+0x1.12889d144febdp-1
+-0x1.361964ac9cdf5p-9
+0x1.58a510c6196d5p-1
+0x1.48a97ed50a7ap-1
+-0x1.4d3d87fb99fefp-9
+0x1.4b6699aa3b1b2p-1
+0x1.3c05e38b4f8e2p-1
+-0x1.73ad9bd1e310fp-9
+0x1.705c4d75945ebp-2
+0x1.a7b2bb75ab1fap-2
+-0x1.c55cea8eb57e6p-10
+0x1.7c4f7b362878bp-2
+0x1.b56ac086a6d24p-2
+-0x1.13801ef670cd4p-9
+0x1.c4d02c1e26366p-2
+0x1.044d96d56da21p-1
+-0x1.280a225b4bdffp-9
+0x1.b3f8c146467d3p-2
+0x1.f54a2a80b9712p-2
+-0x1.4a038c7c95937p-9
+-0x1.f484d193cf6d8p-18
+-0x1.adc88200f9ef1p-15
+-0x1.75a039f51d906p-13
+-0x1.730fdd394bfa4p-14
+-0x1.0d50fa35ded9bp-14
+-0x1.3565c8d7630fap-19
+-0x1.ca8025a5b75bep-13
+-0x1.489a229c6c112p-15
+-0x1.0d65102859e6p-3
+-0x1.effa09977265p-18
+-0x1.a9e20e5f60eep-15
+-0x1.723c3c9c2bbfap-13
+-0x1.6fb1d4b49a9d5p-14
+-0x1.0adf50903fe4bp-14
+-0x1.329701c830dbfp-19
+-0x1.c656fb0ad545bp-13
+-0x1.459ebe1f745a3p-15
+-0x1.200a0719071b6p-3
+-0x1.dbde1e711eee4p-18
+-0x1.989daa2ee109bp-15
+-0x1.63396ed7f5758p-13
+-0x1.60c965bb99aa2p-14
+-0x1.000d5a1cc958dp-14
+-0x1.2628cd3d2bce1p-19
+-0x1.b3eb3a083d20cp-13
+-0x1.386b041a71577p-15
+-0x1.2b96bf025ff81p-3
+-0x1.e8bc6bd4c8716p-18
+-0x1.a3aa66be7237ap-15
+-0x1.6cd48df434662p-13
+-0x1.6a53a4d084cacp-14
+-0x1.06f9ee71d1e1ap-14
+-0x1.2e1d2fe549055p-19
+-0x1.bfb4f96dbe8e2p-13
+-0x1.40ddcd12fa388p-15
+-0x1.36d4e5bedb702p-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.b539ee9d99c38p-5
+-0x1.831d95db991e8p-3
+-0x1.e3d42625d436p-5
+-0x1.a69aa9661bbb8p-3
+-0x1.06b699654ee6fp-4
+-0x1.c5a91c4ee5c19p-3
+-0x1.12a950eb78c4p-4
+-0x1.d7d3c219a1436p-3
+-0x1.c9341746f93afp+0
+-0x1.c7b138e2ca7bbp+0
+-0x1.c0bd4565ea8c4p+0
+-0x1.c27c8bfce0b9dp+0
+0x1.002a85ebdb44ap-1
+0x1.10185dc2a3364p-1
+-0x1.0d18ceca96f3ep-8
+0x1.0b27c55dfe734p-1
+0x1.1bcebeb4b9073p-1
+-0x1.4f964a1765edp-8
+0x1.3d3eaa9f4b319p-1
+0x1.513f1f8856223p-1
+-0x1.72b2ef16bc113p-8
+0x1.30bc37d20bb68p-1
+0x1.43e454704be96p-1
+-0x1.9e8461c99531ep-8
+0x1.bb03e18fa2131p-2
+0x1.ab5fb0aa59b7fp-2
+-0x1.f6acb192d13eap-9
+0x1.cf0f26ce3b7dfp-2
+0x1.be72c019de81ep-2
+-0x1.31c163fdb3ff6p-8
+0x1.15e7e72da1e52p-1
+0x1.0b30dda0c8511p-1
+-0x1.488e4988aa463p-8
+0x1.0a363dc6ab0f8p-1
+0x1.00217a07862fdp-1
+-0x1.6e72f875a2474p-8
+0x1.6c21dadcbdd4dp-2
+0x1.40d96a916ce54p-2
+-0x1.a2c1e9c30b5fdp-9
+0x1.7c98aa1acb651p-2
+0x1.4f81272df2ea3p-2
+-0x1.fd63e824748ccp-9
+0x1.c8c4e81f2cb81p-2
+0x1.937f1c8ac96fap-2
+-0x1.11b346d4eac81p-8
+0x1.b590645b3ac25p-2
+0x1.8252fe82e73f8p-2
+-0x1.313fbc38b6a8fp-8
+0x1.e7fa4c161245cp-2
+0x1.fc9871072e683p-2
+-0x1.4c04ed92207a9p-9
+0x1.fdb6fdf20b4bep-2
+0x1.0a48f80cc3e0cp-1
+-0x1.93ed1f8ab99c8p-9
+0x1.30ef3451c1811p-1
+0x1.425df22514681p-1
+-0x1.b214dde79a52ap-9
+0x1.24576e75de626p-1
+0x1.3420fe5efdd9bp-1
+-0x1.e424aa31dc5f4p-9
+0x1.08c749715fa77p-1
+0x1.f8e9ccdd35e7ap-2
+-0x1.f26f91c7dc63dp-10
+0x1.1472b2f3e17eep-1
+0x1.0796e5637ee2dp-1
+-0x1.2f2f12445a77cp-9
+0x1.4a0dfa4110d9fp-1
+0x1.3abd04fe394c5p-1
+-0x1.45d4685861611p-9
+0x1.3c998b4d8485fp-1
+0x1.2de62a45e41ep-1
+-0x1.6b652cc636df1p-9
+0x1.5e77e51b10b15p-2
+0x1.932757e1d55eap-2
+-0x1.bb42480c5d3ebp-10
+0x1.6d8921c557d49p-2
+0x1.a4746ff0d428bp-2
+-0x1.0d5e3dad08d33p-9
+0x1.b241bff924e8cp-2
+0x1.f352945f2f82dp-2
+-0x1.21774b0141bd7p-9
+0x1.a1164afd7667ep-2
+0x1.df9fdad9e3444p-2
+-0x1.42ab51b9fd937p-9
+-0x1.f484d193cf695p-18
+-0x1.adc88200f9eb7p-15
+-0x1.75a039f51d8d3p-13
+-0x1.730fdd394bf71p-14
+-0x1.0d50fa35ded76p-14
+-0x1.3565c8d7630d1p-19
+-0x1.ca8025a5b758p-13
+-0x1.489a229c6c0e5p-15
+-0x1.0a5f3218d752p-3
+-0x1.effa0997725c7p-18
+-0x1.a9e20e5f60e6bp-15
+-0x1.723c3c9c2bb95p-13
+-0x1.6fb1d4b49a97p-14
+-0x1.0adf50903fe01p-14
+-0x1.329701c830d6ap-19
+-0x1.c656fb0ad53dep-13
+-0x1.459ebe1f74549p-15
+-0x1.1ccf3099f7eb9p-3
+-0x1.dbde1e711ef27p-18
+-0x1.989daa2ee10d5p-15
+-0x1.63396ed7f578ap-13
+-0x1.60c965bb99ad4p-14
+-0x1.000d5a1cc95b2p-14
+-0x1.2628cd3d2bd0bp-19
+-0x1.b3eb3a083d24ap-13
+-0x1.386b041a715a3p-15
+-0x1.283d96cdffcf2p-3
+-0x1.e8bc6bd4c8716p-18
+-0x1.a3aa66be7237ap-15
+-0x1.6cd48df434662p-13
+-0x1.6a53a4d084cacp-14
+-0x1.06f9ee71d1e1ap-14
+-0x1.2e1d2fe549055p-19
+-0x1.bfb4f96dbe8e2p-13
+-0x1.40ddcd12fa388p-15
+-0x1.3359aa62a3412p-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.b2d6747cb447fp-4
+-0x1.69d562487a524p-2
+-0x1.e65d7b05021d3p-4
+-0x1.8d5241ed38c28p-2
+-0x1.0947035cc77d2p-3
+-0x1.ab8b252ad0975p-2
+-0x1.16ffbee80926p-3
+-0x1.be2abeb67111dp-2
+-0x1.c84de03924771p+0
+-0x1.c6f2ad2477b74p+0
+-0x1.bfca0080a1555p+0
+-0x1.c185fefd856b7p+0
+0x1.06b5a9ffcd84ep-1
+0x1.17119e92ca5f4p-1
+-0x1.957c2f536a42cp-7
+0x1.108e22dde5e4cp-1
+0x1.2190754154518p-1
+-0x1.f9dfeaff0c91cp-7
+0x1.44067f271418cp-1
+0x1.587cdd03fb5cap-1
+-0x1.176770c65687ap-6
+0x1.37a3396b02279p-1
+0x1.4b42851379f97p-1
+-0x1.3880fc4a199b3p-6
+0x1.c6f00fdd9cb66p-2
+0x1.b6b9000cc2d6bp-2
+-0x1.7b532c1d681fdp-7
+0x1.d8f26c6658c36p-2
+0x1.c7d937b93252p-2
+-0x1.cd869af4148adp-7
+0x1.1c46f76d25d41p-1
+0x1.11358ed811223p-1
+-0x1.efec1b92de24cp-7
+0x1.10a796f108c1bp-1
+0x1.0639fe750194dp-1
+-0x1.1497bd383476bp-6
+0x1.75ecf05554d92p-2
+0x1.49909dbfd99d4p-2
+-0x1.3bdbc7636192bp-7
+0x1.84b7beb419492p-2
+0x1.56bd255bb1ae6p-2
+-0x1.804cf409a3d47p-7
+0x1.d33b73c8039d9p-2
+0x1.9cdc5c17debb8p-2
+-0x1.9cf6c97f1b9cfp-7
+0x1.c0252d7b6bc7ap-2
+0x1.8bc86a41d1185p-2
+-0x1.cca240ad76d8ep-7
+0x1.f4e94a466a08ap-2
+0x1.056c283f71ce4p-1
+-0x1.f5122123a34bep-8
+0x1.04367f7ba5a7cp-1
+0x1.103722dd40d3fp-1
+-0x1.30d7eb46c8e59p-7
+0x1.37c916c99a59bp-1
+0x1.4a2710491c6bdp-1
+-0x1.47963b34e4f53p-7
+0x1.2b484e0ef5aa2p-1
+0x1.3bf70fd782ebcp-1
+-0x1.6d69a8edb42e4p-7
+0x1.0fb92b89ce46ap-1
+0x1.0314fc0c7fa73p-1
+-0x1.780c3ccadd1d2p-8
+0x1.1a3199f1ec3b9p-1
+0x1.0d1232828c359p-1
+-0x1.c98ec27c927a5p-8
+0x1.515dffa6f2a05p-1
+0x1.41b77ec89d8d2p-1
+-0x1.ebb541675ff8ap-8
+0x1.440499a466932p-1
+0x1.34fa501a91f83p-1
+-0x1.123cc08d1f3fap-7
+0x1.67709349331b1p-2
+0x1.9d749db2888f2p-2
+-0x1.4d4c007f7a0fp-8
+0x1.74f0ccb44ccb5p-2
+0x1.acf4da186b6aep-2
+-0x1.9550e4bdded3bp-8
+0x1.bb90c1b269dabp-2
+0x1.fe0000209aee7p-2
+-0x1.b38bd6d137d41p-8
+0x1.aa8f687452d13p-2
+0x1.ea7e3c4fc6121p-2
+-0x1.e5ae3ce08c4d6p-8
+-0x1.77639d2edb911p-16
+-0x1.42566180bb726p-13
+-0x1.18382b77d62b7p-11
+-0x1.164be5eaf8fadp-12
+-0x1.93f97750ce455p-13
+-0x1.d018ad4314963p-18
+-0x1.57e01c3c4983fp-11
+-0x1.ece733eaa2183p-14
+-0x1.cf1f17863ac22p-3
+-0x1.73fb873195c77p-16
+-0x1.3f698ac788aedp-13
+-0x1.15ad2d7520cc9p-11
+-0x1.13c55f8773f2dp-12
+-0x1.904ef8d85fd27p-13
+-0x1.cbe282ac49449p-18
+-0x1.54c13c481ff05p-11
+-0x1.e86e1d2f2e81ap-14
+-0x1.ef2d0edc9c447p-3
+-0x1.64e696d4d733bp-16
+-0x1.32763fa328c82p-13
+-0x1.0a6b1321f818ep-11
+-0x1.08970c4cb3405p-12
+-0x1.8014072b2e066p-13
+-0x1.b93d33dbc1b66p-18
+-0x1.46f06b862dd98p-11
+-0x1.d4a08627aa048p-14
+-0x1.0185a5b95b866p-2
+-0x1.6e8d50df9653fp-16
+-0x1.3abfcd0ed5a8cp-13
+-0x1.119f6a77274bdp-11
+-0x1.0fbebb9c63974p-12
+-0x1.8a76e5aabad14p-13
+-0x1.c52bc7d7ed869p-18
+-0x1.4fc7bb124ee99p-11
+-0x1.e14cb39c77536p-14
+-0x1.0b2e90beb42bp-2
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.b50a4c23a13c4p-4
+-0x1.6b71d50f319c8p-2
+-0x1.e8dbe9d5b2692p-4
+-0x1.8f1ac550c346dp-2
+-0x1.0aaa7c162ff19p-3
+-0x1.ad7cd18d53629p-2
+-0x1.187afd16bfa98p-3
+-0x1.c037ac7d514dp-2
+-0x1.c84de03924771p+0
+-0x1.c6f2ad2477b74p+0
+-0x1.bfca0080a1555p+0
+-0x1.c185fefd856b7p+0
+0x1.06b5a9ffcd84ep-1
+0x1.17119e92ca5f4p-1
+-0x1.988a61be783f3p-7
+0x1.108e22dde5e4cp-1
+0x1.2190754154518p-1
+-0x1.fdaf58be63633p-7
+0x1.44067f271418cp-1
+0x1.587cdd03fb5cap-1
+-0x1.198067b3f6a1cp-6
+0x1.37a3396b02279p-1
+0x1.4b42851379f97p-1
+-0x1.3adaf3f2e47a5p-6
+0x1.c6f00fdd9cb66p-2
+0x1.b6b9000cc2d6bp-2
+-0x1.7e2fb54e7a543p-7
+0x1.d8f26c6658c36p-2
+0x1.c7d937b93252p-2
+-0x1.d10158a6b01c4p-7
+0x1.1c46f76d25d41p-1
+0x1.11358ed811223p-1
+-0x1.f3a6097187215p-7
+0x1.10a796f108c1bp-1
+0x1.0639fe750194dp-1
+-0x1.16acf7f7adbcdp-6
+0x1.75ecf05554d92p-2
+0x1.49909dbfd99d4p-2
+-0x1.3e3d906edcfcap-7
+0x1.84b7beb419492p-2
+0x1.56bd255bb1ae6p-2
+-0x1.8332733426823p-7
+0x1.d33b73c8039d9p-2
+0x1.9cdc5c17debb8p-2
+-0x1.a010eeb883b93p-7
+0x1.c0252d7b6bc7ap-2
+0x1.8bc86a41d1185p-2
+-0x1.d01a117a2b7fep-7
+0x1.f4e94a466a08ap-2
+0x1.056c283f71ce4p-1
+-0x1.f8d9bee12aa8dp-8
+0x1.04367f7ba5a7cp-1
+0x1.103722dd40d3fp-1
+-0x1.33243f6a346f6p-7
+0x1.37c916c99a59bp-1
+0x1.4a2710491c6bdp-1
+-0x1.4a0c56dd09253p-7
+0x1.2b484e0ef5aa2p-1
+0x1.3bf70fd782ebcp-1
+-0x1.702a19ce6ae17p-7
+0x1.0fb92b89ce46ap-1
+0x1.0314fc0c7fa73p-1
+-0x1.7ae2551d5ee3cp-8
+0x1.1a3199f1ec3b9p-1
+0x1.0d1232828c359p-1
+-0x1.cd01b84af74a4p-8
+0x1.515dffa6f2a05p-1
+0x1.41b77ec89d8d2p-1
+-0x1.ef66f03c4f21p-8
+0x1.440499a466932p-1
+0x1.34fa501a91f83p-1
+-0x1.144d5ea355777p-7
+0x1.67709349331b1p-2
+0x1.9d749db2888f2p-2
+-0x1.4fce11ae415c1p-8
+0x1.74f0ccb44ccb5p-2
+0x1.acf4da186b6aep-2
+-0x1.985d7348e2b22p-8
+0x1.bb90c1b269dabp-2
+0x1.fe0000209aee7p-2
+-0x1.b6cfd14b8390fp-8
+0x1.aa8f687452d13p-2
+0x1.ea7e3c4fc6121p-2
+-0x1.e954af05423bp-8
+-0x1.77639d2edb911p-16
+-0x1.42566180bb726p-13
+-0x1.18382b77d62b7p-11
+-0x1.164be5eaf8fadp-12
+-0x1.93f97750ce455p-13
+-0x1.d018ad4314963p-18
+-0x1.57e01c3c4983fp-11
+-0x1.ece733eaa2183p-14
+-0x1.d0dde0cd8774bp-3
+-0x1.73fb873195c99p-16
+-0x1.3f698ac788b0ap-13
+-0x1.15ad2d7520ce2p-11
+-0x1.13c55f8773f46p-12
+-0x1.904ef8d85fd4ap-13
+-0x1.cbe282ac49473p-18
+-0x1.54c13c481ff24p-11
+-0x1.e86e1d2f2e846p-14
+-0x1.f10a6d2737e1bp-3
+-0x1.64e696d4d733bp-16
+-0x1.32763fa328c82p-13
+-0x1.0a6b1321f818ep-11
+-0x1.08970c4cb3405p-12
+-0x1.8014072b2e066p-13
+-0x1.b93d33dbc1b66p-18
+-0x1.46f06b862dd98p-11
+-0x1.d4a08627aa048p-14
+-0x1.027d1574caad6p-2
+-0x1.6e8d50df9653fp-16
+-0x1.3abfcd0ed5a8cp-13
+-0x1.119f6a77274bdp-11
+-0x1.0fbebb9c63974p-12
+-0x1.8a76e5aabad14p-13
+-0x1.c52bc7d7ed869p-18
+-0x1.4fc7bb124ee99p-11
+-0x1.e14cb39c77536p-14
+-0x1.0c2fd6988c94ap-2
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.d2bbaf71a299ep-5
+-0x1.a023a33aec00ap-3
+-0x1.85ca5e2e63cfbp-5
+-0x1.6207b35e01372p-3
+-0x1.648b92b2488ecp-4
+-0x1.2bca9ade2ae75p-2
+-0x1.7a8cf7791ecap-4
+-0x1.3b9772a1895p-2
+-0x1.cbb7779038141p+0
+-0x1.c976eb749cccbp+0
+-0x1.c3511a9c262b8p+0
+-0x1.c5353cdfc2544p+0
+0x1.dba270705f64dp-2
+0x1.f9185dcb0feffp-2
+-0x1.09fc611a126efp-8
+0x1.fc875b2399df6p-2
+0x1.0e11962e9f9b3p-1
+-0x1.4ccf1612994b1p-9
+0x1.2ac581d0ee1c2p-1
+0x1.3d87027685451p-1
+-0x1.370e8b22dd309p-7
+0x1.1d250117f0b91p-1
+0x1.2efd4a77ae742p-1
+-0x1.66952eedd5036p-7
+0x1.99c6786c5a174p-2
+0x1.8baff67e0c586p-2
+-0x1.0ac469373bb53p-8
+0x1.b78e95ea199d6p-2
+0x1.a8149311d919ep-2
+-0x1.5c74830f2fec6p-9
+0x1.04a9f8bbad18fp-1
+0x1.f5c12ab3c6587p-2
+-0x1.17ace6c8ab518p-7
+0x1.f019d4acd9a42p-2
+0x1.ddd631d431deep-2
+-0x1.40d08f13c8d26p-7
+0x1.50d3abe48efbap-2
+0x1.28931e3ec0fdap-2
+-0x1.bc6835e89d376p-9
+0x1.694aa630a510cp-2
+0x1.3e5278b7e2286p-2
+-0x1.225270aa78859p-9
+0x1.ac73bcd56c27dp-2
+0x1.7a2f1123a545ap-2
+-0x1.d1d7a7cd4ee29p-8
+0x1.97bc02e44cc44p-2
+0x1.67b12c7a03efp-2
+-0x1.0b2b71e69d0c9p-7
+0x1.c3dbf67eec9ddp-2
+0x1.d5099fc123c8p-2
+-0x1.605867b220c7ap-9
+0x1.e439626d961f4p-2
+0x1.f877e90f41c7ep-2
+-0x1.cc36dca942333p-10
+0x1.1e5be4b6c88c4p-1
+0x1.2d65a85074fa7p-1
+-0x1.717a70dddd1ddp-8
+0x1.10bce899007e2p-1
+0x1.1e258d0991ba4p-1
+-0x1.a7d40ed91c2fep-8
+0x1.eab93ff50f36ep-2
+0x1.d3de727e332dbp-2
+-0x1.087712a14fb74p-9
+0x1.06c31b9386418p-1
+0x1.f510f5dfa7fd9p-2
+-0x1.5978e59c8c961p-10
+0x1.36339a5ccb70ep-1
+0x1.27cb3cf6bd3ccp-1
+-0x1.154eb39a10963p-8
+0x1.279ea6feae311p-1
+0x1.19e170018982cp-1
+-0x1.3e17211277774p-8
+0x1.455143b43640ep-2
+0x1.764466a213789p-2
+-0x1.d677e286c42c5p-10
+0x1.5bdc77a6aabb6p-2
+0x1.9028e293d8c07p-2
+-0x1.34212d9efcccp-10
+0x1.98e7450aca27ap-2
+0x1.d63be881087b1p-2
+-0x1.ebdd5c6a33432p-9
+0x1.8635343d06184p-2
+0x1.c0c722f29d555p-2
+-0x1.19f5ff266a986p-8
+-0x1.c4f714b7ed282p-17
+-0x1.84f337c88d5d7p-14
+-0x1.5220cf11da875p-12
+-0x1.4fcece88d14d7p-13
+-0x1.e775342de7878p-14
+-0x1.18008aee5edc1p-18
+-0x1.9ef0631c5e482p-12
+-0x1.2961cc0d48f26p-14
+-0x1.22d87153f4cbp-3
+-0x1.c0dac61dd4489p-17
+-0x1.816ba0aec145bp-14
+-0x1.4f0f4921579b7p-12
+-0x1.4cc2ac8d6057dp-13
+-0x1.e308c3db7a83p-14
+-0x1.15760e1da12cdp-18
+-0x1.9b2c6baf4fcc9p-12
+-0x1.26aeeef0ebc91p-14
+-0x1.f742e69f73c3cp-4
+-0x1.aea7f39d40b6bp-17
+-0x1.71cb361641ccp-14
+-0x1.417994c359808p-12
+-0x1.3f44d59882b34p-13
+-0x1.cf732e1138f7ap-14
+-0x1.0a362fc510c42p-18
+-0x1.8a80b42206bc7p-12
+-0x1.1abc4f456fc02p-14
+-0x1.7dce2fa5c55afp-3
+-0x1.ba4d445c58104p-17
+-0x1.7bcb31952a36fp-14
+-0x1.4a2b10a7ba56ap-12
+-0x1.47e70be61d14ep-13
+-0x1.dbfb84b5617adp-14
+-0x1.11691913a09d8p-18
+-0x1.952bbd4d1d6e1p-12
+-0x1.22619c9363e3cp-14
+-0x1.8f47604d644c2p-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.c118e7d18d73fp-5
+-0x1.92252a0c9c2b6p-3
+-0x1.783052218b1f7p-5
+-0x1.56ebbb80784e8p-3
+-0x1.57136c0908f84p-4
+-0x1.21b635d7a156bp-2
+-0x1.6c69ea2ab0577p-4
+-0x1.311c054872fa6p-2
+-0x1.cf125e719db97p+0
+-0x1.cc1f4cc9e33f2p+0
+-0x1.c69df12b865b9p+0
+-0x1.c85b6720db64cp+0
+0x1.aa6076c1df614p-2
+0x1.c4a6f626bbe8bp-2
+-0x1.fdbecfc5cd69fp-9
+0x1.d5b20c4d074e9p-2
+0x1.f2c5285d9a447p-2
+-0x1.3eedd2265b19p-9
+0x1.12f42840a6788p-1
+0x1.241f22b08c8c9p-1
+-0x1.2a1e168c03505p-7
+0x1.0653523ebfd76p-1
+0x1.16a8cd61162ffp-1
+-0x1.57a2aa0427499p-7
+0x1.6d9625534e7cfp-2
+0x1.6175f8faaeb51p-2
+-0x1.ff40d60ab901bp-9
+0x1.946c012c0af8cp-2
+0x1.8693f0db3bb6p-2
+-0x1.4deba9d995d98p-9
+0x1.dd58e44d4733p-2
+0x1.cc07a3c9d06b7p-2
+-0x1.0c0b3cbb8a6dep-7
+0x1.c63c9dc213268p-2
+0x1.b60e407402ac6p-2
+-0x1.337189d2eae04p-7
+0x1.2c85e53e65a84p-2
+0x1.085bd3f99b54bp-2
+-0x1.a9dafa5370c2dp-9
+0x1.4c6dd09c934f6p-2
+0x1.24ab22bbd0a17p-2
+-0x1.16381e8528741p-9
+0x1.8854f52d7fdd5p-2
+0x1.59f596aca3014p-2
+-0x1.be793259ea383p-8
+0x1.75598b191c024p-2
+0x1.490d67b490ddp-2
+-0x1.00097d12e75fcp-7
+0x1.93b5a78a515ddp-2
+0x1.a0d40acba98d4p-2
+-0x1.51a0e4f431bb6p-9
+0x1.be08b90c3dcb7p-2
+0x1.ceb09268b5469p-2
+-0x1.b903e055a75fbp-10
+0x1.06984af66313dp-1
+0x1.12dbae9c117e9p-1
+-0x1.621c476982ce1p-8
+0x1.f426b59f29d0ep-2
+0x1.0500cef6273c6p-1
+-0x1.962987e098e32p-8
+0x1.b6daf2f4f845dp-2
+0x1.a26522a63b7c4p-2
+-0x1.fad56c36b4f83p-10
+0x1.e4745e98b6b82p-2
+0x1.cde39409edfdep-2
+-0x1.4b0ed355ca139p-10
+0x1.1cbf959bd5046p-1
+0x1.0f8222f0c95cap-1
+-0x1.09c5a115b8709p-8
+0x1.0f50b7b147f75p-1
+0x1.02b15615e56dfp-1
+-0x1.30d494e95ac88p-8
+0x1.239267dabb59ap-2
+0x1.4f7f26e427ec8p-2
+-0x1.c2d900081f889p-10
+0x1.413f77c095cd7p-2
+0x1.7197ab450c72ap-2
+-0x1.274fa017a02c7p-10
+0x1.783ae30544392p-2
+0x1.b0bb967fc4879p-2
+-0x1.d76da82bd693dp-9
+0x1.66e9bc4bf4b72p-2
+0x1.9cd9c9a019074p-2
+-0x1.0e3862fa88eaep-8
+-0x1.c4f714b7ed282p-17
+-0x1.84f337c88d5d7p-14
+-0x1.5220cf11da875p-12
+-0x1.4fcece88d14d7p-13
+-0x1.e775342de7878p-14
+-0x1.18008aee5edc1p-18
+-0x1.9ef0631c5e482p-12
+-0x1.2961cc0d48f26p-14
+-0x1.1cb5300e6c6cbp-3
+-0x1.c0dac61dd4489p-17
+-0x1.816ba0aec145bp-14
+-0x1.4f0f4921579b7p-12
+-0x1.4cc2ac8d6057dp-13
+-0x1.e308c3db7a83p-14
+-0x1.15760e1da12cdp-18
+-0x1.9b2c6baf4fcc9p-12
+-0x1.26aeeef0ebc91p-14
+-0x1.eca61a7ba6894p-4
+-0x1.aea7f39d40b6bp-17
+-0x1.71cb361641ccp-14
+-0x1.417994c359808p-12
+-0x1.3f44d59882b34p-13
+-0x1.cf732e1138f7ap-14
+-0x1.0a362fc510c42p-18
+-0x1.8a80b42206bc7p-12
+-0x1.1abc4f456fc02p-14
+-0x1.75c81d1dfd18p-3
+-0x1.ba4d445c58104p-17
+-0x1.7bcb31952a36fp-14
+-0x1.4a2b10a7ba56ap-12
+-0x1.47e70be61d14ep-13
+-0x1.dbfb84b5617adp-14
+-0x1.11691913a09d8p-18
+-0x1.952bbd4d1d6e1p-12
+-0x1.22619c9363e3cp-14
+-0x1.86de829f526abp-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.bd9358b14f16cp-4
+-0x1.77547eef06d4p-2
+-0x1.6da7b729604dfp-4
+-0x1.3caf64c9936f1p-2
+-0x1.62ac6b0cb78efp-3
+-0x1.1446a6fb071a7p-1
+-0x1.7b9a139f2b71ep-3
+-0x1.243834e56f81bp-1
+-0x1.cd635b48cfbc3p+0
+-0x1.caca1fdffdb62p+0
+-0x1.c4f5fbf568426p+0
+-0x1.c6c6ecbdc9e3cp+0
+0x1.c321bf1b902c4p-2
+0x1.df00e02fa9fd7p-2
+-0x1.8298858df3188p-7
+0x1.e9316e33a3effp-2
+0x1.03c4bdbede08p-1
+-0x1.e3175968172e9p-8
+0x1.1eeda692750e6p-1
+0x1.30e45e57cd349p-1
+-0x1.c4c293679cd2fp-6
+0x1.11cb3bcf58d3fp-1
+0x1.22e28b978438p-1
+-0x1.050184130a894p-5
+0x1.83bbfef44f04bp-2
+0x1.76a3c2aa2183ap-2
+-0x1.847113561fcd2p-7
+0x1.a60614a0fb44bp-2
+0x1.975f093870bb9p-2
+-0x1.fb2587118ea3ep-8
+0x1.f364ac9485e64p-2
+0x1.e0f5e4d230bb2p-2
+-0x1.977ca86a6eb2cp-6
+0x1.db37ffaa5c9f1p-2
+0x1.ca01e5715e5ap-2
+-0x1.d3715cec86227p-6
+0x1.3eb82ef4fc989p-2
+0x1.187f7cfaeffebp-2
+-0x1.43680fdcb48d5p-7
+0x1.5ae38c8fd3271p-2
+0x1.3183f2b6cbd44p-2
+-0x1.a64953993172p-8
+0x1.9a7038abe48dep-2
+0x1.6a1aad0b78135p-2
+-0x1.5344e52d214d7p-6
+0x1.86956acd897fbp-2
+0x1.5866c527972fdp-2
+-0x1.852da55bf9fd1p-6
+0x1.abdc8fabb7c5bp-2
+0x1.baf158db19102p-2
+-0x1.0083d19d13fc2p-7
+0x1.d12dbb56b6406p-2
+0x1.e395dad0af4a9p-2
+-0x1.4ee17392d00e6p-8
+0x1.1284613b6cfe4p-1
+0x1.2021fa9ff0773p-1
+-0x1.0d27e13f7d5d1p-6
+0x1.05715974f6d2p-1
+0x1.11945a55b65bep-1
+-0x1.34c2a4cdf698dp-6
+0x1.d0e2f6297e4ddp-2
+0x1.bb39530c95f5cp-2
+-0x1.8101d7f7e999cp-8
+0x1.f90d400bad71p-2
+0x1.e1895fc0dee1bp-2
+-0x1.f6a8f4218af41p-9
+0x1.29868a959f51cp-1
+0x1.1bb2f15e491bep-1
+-0x1.93f9962b4a5cap-7
+0x1.1b834984103aep-1
+0x1.0e545e72560fep-1
+-0x1.cf690eb8c01abp-7
+0x1.34877ae12061bp-2
+0x1.62fb1a6477a5dp-2
+-0x1.554b9a47daf32p-8
+0x1.4e9bdc3e7252cp-2
+0x1.80f0886d36e54p-2
+-0x1.be503822815b1p-9
+0x1.88a79f6600acep-2
+0x1.c396209110252p-2
+-0x1.657c46ba89b15p-7
+0x1.76a3abeb92f1p-2
+0x1.aee819a082e84p-2
+-0x1.99f6378c490b1p-7
+-0x1.53b94f89f1debp-15
+-0x1.23b669d66a069p-12
+-0x1.fb31369ac7cbcp-11
+-0x1.f7b635cd39f4ep-12
+-0x1.6d97e7226da63p-12
+-0x1.a400d0658e4adp-17
+-0x1.37344a5546b6ap-10
+-0x1.be12b213ed6c4p-13
+-0x1.f0b27c23cf999p-3
+-0x1.50a414965f37p-15
+-0x1.2110b88310f4cp-12
+-0x1.f696edb20369fp-11
+-0x1.f32402d410847p-12
+-0x1.6a4692e49be2dp-12
+-0x1.a031152c71c3fp-17
+-0x1.346150c37bd9fp-10
+-0x1.ba06666961ae5p-13
+-0x1.adbb583456f92p-3
+-0x1.42fdf6b5f089ap-15
+-0x1.15586890b1598p-12
+-0x1.e2365f250641bp-11
+-0x1.dee74064c40ddp-12
+-0x1.5b96628ceaba6p-12
+-0x1.8f5147a79926fp-17
+-0x1.27e08719850dep-10
+-0x1.a81a76e827a0fp-13
+-0x1.4609827506d7bp-2
+-0x1.4bb9f345420c3p-15
+-0x1.1cd8652fdfa93p-12
+-0x1.ef4098fb9781fp-11
+-0x1.ebda91d92b9f5p-12
+-0x1.64fca388091c2p-12
+-0x1.9a1da59d70ec5p-17
+-0x1.2fe0cdf9d6129p-10
+-0x1.b3926add15d59p-13
+-0x1.54f294769b2a3p-2
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.c1bdb37c679f3p-4
+-0x1.7a6bd3018a83dp-2
+-0x1.70e94c8bf36f6p-4
+-0x1.3f382e4d4cc62p-2
+-0x1.6645e4f1ed1e7p-3
+-0x1.16ad4b635ba4ap-1
+-0x1.7f81aa402706fp-3
+-0x1.26c96c0dc3618p-1
+-0x1.cd635b48cfbc3p+0
+-0x1.caca1fdffdb62p+0
+-0x1.c4f5fbf568426p+0
+-0x1.c6c6ecbdc9e3cp+0
+0x1.c321bf1b902c4p-2
+0x1.df00e02fa9fd7p-2
+-0x1.881e695feb581p-7
+0x1.e9316e33a3effp-2
+0x1.03c4bdbede08p-1
+-0x1.e9fb2b0085945p-8
+0x1.1eeda692750e6p-1
+0x1.30e45e57cd349p-1
+-0x1.cb34f5ea5300bp-6
+0x1.11cb3bcf58d3fp-1
+0x1.22e28b978438p-1
+-0x1.08bb380f5592dp-5
+0x1.83bbfef44f04bp-2
+0x1.76a3c2aa2183ap-2
+-0x1.89ff83431b6d4p-7
+0x1.a60614a0fb44bp-2
+0x1.975f093870bb9p-2
+-0x1.01324cc9cc5a8p-7
+0x1.f364ac9485e64p-2
+0x1.e0f5e4d230bb2p-2
+-0x1.9d4b0834be6aap-6
+0x1.db37ffaa5c9f1p-2
+0x1.ca01e5715e5ap-2
+-0x1.da1e6aeafc065p-6
+0x1.3eb82ef4fc989p-2
+0x1.187f7cfaeffebp-2
+-0x1.4807f7dc05411p-7
+0x1.5ae38c8fd3271p-2
+0x1.3183f2b6cbd44p-2
+-0x1.ac5155f8b33b2p-8
+0x1.9a7038abe48dep-2
+0x1.6a1aad0b78135p-2
+-0x1.581a2efb99dbbp-6
+0x1.86956acd897fbp-2
+0x1.5866c527972fdp-2
+-0x1.8abc4a2d631dbp-6
+0x1.abdc8fabb7c5bp-2
+0x1.baf158db19102p-2
+-0x1.042f2014e50eep-7
+0x1.d12dbb56b6406p-2
+0x1.e395dad0af4a9p-2
+-0x1.53aa592f40bbbp-8
+0x1.1284613b6cfe4p-1
+0x1.2021fa9ff0773p-1
+-0x1.10fda5ab888acp-6
+0x1.05715974f6d2p-1
+0x1.11945a55b65bep-1
+-0x1.392b8146820fep-6
+0x1.d0e2f6297e4ddp-2
+0x1.bb39530c95f5cp-2
+-0x1.86837dcfd1cap-8
+0x1.f90d400bad71p-2
+0x1.e1895fc0dee1bp-2
+-0x1.fdd73b80e4ef4p-9
+0x1.29868a959f51cp-1
+0x1.1bb2f15e491bep-1
+-0x1.99bafe4e639a5p-7
+0x1.1b834984103aep-1
+0x1.0e545e72560fep-1
+-0x1.d607356844871p-7
+0x1.34877ae12061bp-2
+0x1.62fb1a6477a5dp-2
+-0x1.5a2a3dd141723p-8
+0x1.4e9bdc3e7252cp-2
+0x1.80f0886d36e54p-2
+-0x1.c4ab436d4e362p-9
+0x1.88a79f6600acep-2
+0x1.c396209110252p-2
+-0x1.6a9220101442cp-7
+0x1.76a3abeb92f1p-2
+0x1.aee819a082e84p-2
+-0x1.9fcee34323c9ep-7
+-0x1.53b94f89f1debp-15
+-0x1.23b669d66a069p-12
+-0x1.fb31369ac7cbcp-11
+-0x1.f7b635cd39f4ep-12
+-0x1.6d97e7226da63p-12
+-0x1.a400d0658e4adp-17
+-0x1.37344a5546b6ap-10
+-0x1.be12b213ed6c4p-13
+-0x1.f43d9a826128cp-3
+-0x1.50a414965f37p-15
+-0x1.2110b88310f4cp-12
+-0x1.f696edb20369fp-11
+-0x1.f32402d410847p-12
+-0x1.6a4692e49be2dp-12
+-0x1.a031152c71c3fp-17
+-0x1.346150c37bd9fp-10
+-0x1.ba06666961ae5p-13
+-0x1.b0cb93ab45c45p-3
+-0x1.42fdf6b5f089ap-15
+-0x1.15586890b1598p-12
+-0x1.e2365f250641bp-11
+-0x1.dee74064c40ddp-12
+-0x1.5b96628ceaba6p-12
+-0x1.8f5147a79926fp-17
+-0x1.27e08719850dep-10
+-0x1.a81a76e827a0fp-13
+-0x1.485a708350786p-2
+-0x1.4bb9f345420c3p-15
+-0x1.1cd8652fdfa93p-12
+-0x1.ef4098fb9781fp-11
+-0x1.ebda91d92b9f5p-12
+-0x1.64fca388091c2p-12
+-0x1.9a1da59d70ec5p-17
+-0x1.2fe0cdf9d6129p-10
+-0x1.b3926add15d59p-13
+-0x1.5760070b13607p-2
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.d1508da4288bdp-5
+-0x1.a189cd7d4b27ap-3
+-0x1.bd91c4c649ee6p-5
+-0x1.918c104ed7ffdp-3
+-0x1.8b3c7df7111dcp-4
+-0x1.48d0e73ad5cf9p-2
+-0x1.48b4b0f2a2daap-4
+-0x1.19db35669af1fp-2
+-0x1.d342cfda68f4cp+0
+-0x1.cfcb2e26dcba3p+0
+-0x1.ca907dcc062bfp+0
+-0x1.cbb1e401d099fp+0
+0x1.6c7bf5d0111fap-2
+0x1.82ceb1eb7a382p-2
+-0x1.19a4075508e65p-8
+0x1.9fbd9400fa924p-2
+0x1.b955363a55fc1p-2
+-0x1.dd95c32c425bcp-9
+0x1.ec7b5b2421818p-2
+0x1.05852f3129afep-1
+-0x1.8ea1118791655p-7
+0x1.dbf40f6183e2ap-2
+0x1.f96f4bd0228fp-2
+-0x1.0b6c080db7fc8p-7
+0x1.36b78271c2a38p-2
+0x1.2cde6f62669c9p-2
+-0x1.259b32d2e32d2p-8
+0x1.641b487512456p-2
+0x1.586308b3b70ap-2
+-0x1.f6087a07d7d26p-9
+0x1.a9001d55fcedbp-2
+0x1.9a359789113c2p-2
+-0x1.6b6cc2f710d67p-7
+0x1.9a101829b107ep-2
+0x1.8bf63840e74ddp-2
+-0x1.fe37bcc803e0ep-8
+0x1.fee00a708f78dp-3
+0x1.c0e12b92b2c56p-3
+-0x1.e909d1940c6bfp-9
+0x1.24bbead2941f7p-2
+0x1.01748c4fce3ebp-2
+-0x1.a225623da561ap-9
+0x1.5d5589fc50252p-2
+0x1.33b060fcf78eep-2
+-0x1.2ea070dd0ceb3p-7
+0x1.5110276ffb632p-2
+0x1.28c8d87ed8bb6p-2
+-0x1.a8e24aaa163a1p-8
+0x1.57b6f7c10f851p-2
+0x1.60956a87cff62p-2
+-0x1.83c0d9c91cca3p-9
+0x1.895c406648a7bp-2
+0x1.95aed3764ccap-2
+-0x1.4b81d19578e93p-9
+0x1.d469ef573dfd7p-2
+0x1.e7203bb1e7c45p-2
+-0x1.e017e913c076ep-8
+0x1.c42c0f0c11157p-2
+0x1.d560f88b93c12p-2
+-0x1.50f95b76c19aap-8
+0x1.7612d349b22f6p-2
+0x1.649c9904bb222p-2
+-0x1.2304cfc4a254bp-9
+0x1.abb1375b75a09p-2
+0x1.97bf843d28528p-2
+-0x1.f1a2f920f778fp-10
+0x1.fc87d5c94cbd9p-2
+0x1.e4daece6e7fc7p-2
+-0x1.684d8d3cf4dd3p-8
+0x1.eb0f6ff7c6731p-2
+0x1.d430a925946b5p-2
+-0x1.f9cdbab57a06ep-9
+0x1.f261c5447fc96p-3
+0x1.1ec908eaff3e4p-2
+-0x1.02ab1569ba3c5p-9
+0x1.1c4981089c4a4p-2
+0x1.472013ec070a6p-2
+-0x1.bac39fbb0cd93p-10
+0x1.50dcdc10d8afbp-2
+0x1.83873fca97cbep-2
+-0x1.3f3fdbaf42e88p-8
+0x1.458931ac39b0dp-2
+0x1.7684a58fd93a9p-2
+-0x1.c0b42e03cd58ep-9
+-0x1.36a4524207a23p-16
+-0x1.0abd956d6b056p-13
+-0x1.cfc62f0d8a166p-12
+-0x1.cc97746da7432p-13
+-0x1.4e4bfce69a9aep-13
+-0x1.800c8480c3dbdp-18
+-0x1.1c904da3d0bb7p-11
+-0x1.97e3153bb1584p-14
+-0x1.2b4e276b950e3p-3
+-0x1.33d2a727c07dfp-16
+-0x1.0851e79f75011p-13
+-0x1.cb90c40e8effcp-12
+-0x1.c8696e2bfabe8p-13
+-0x1.4b435d901f571p-13
+-0x1.7c905044a15b6p-18
+-0x1.19fb37f17c48bp-11
+-0x1.942f7fcf62d86p-14
+-0x1.1f105dc38bd7ap-3
+-0x1.2757a6422970dp-16
+-0x1.fb34de07d5155p-14
+-0x1.b8eec578c56eep-12
+-0x1.b5e82b35d27b1p-13
+-0x1.3dd5112055913p-13
+-0x1.6d224e8045237p-18
+-0x1.0e8c6f0127048p-11
+-0x1.83cc5024380e4p-14
+-0x1.a48dc7f0d424p-3
+-0x1.2f54398c84c37p-16
+-0x1.04760f73027f6p-13
+-0x1.c4db3aa672a28p-12
+-0x1.c1bfae0650102p-13
+-0x1.466d557593384p-13
+-0x1.770207d2a72a2p-18
+-0x1.15dd5e3ce66c9p-11
+-0x1.8e48ef2eddd4p-14
+-0x1.77eca0a13261ep-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.b76da10794219p-5
+-0x1.8cf12360a1c79p-3
+-0x1.a5c76e498bd32p-5
+-0x1.7e6f193bdb255p-3
+-0x1.760ccb35b18f7p-4
+-0x1.392cac36d1ca2p-2
+-0x1.3783e1f2c2ea3p-4
+-0x1.0cbeccbb190f4p-2
+-0x1.d86069f75c1bep+0
+-0x1.d451a0a204c12p+0
+-0x1.cef8860b02dc9p+0
+-0x1.cfc237ef9e3d5p+0
+0x1.206402c48a069p-2
+0x1.31ed060ce2b1bp-2
+-0x1.087fe78b67955p-8
+0x1.5ccaded8bb5f8p-2
+0x1.721f3f9bb3c7cp-2
+-0x1.c08df5a595b02p-9
+0x1.abdcfd54623bap-2
+0x1.c63bf54dfb06p-2
+-0x1.767d2f16a8e93p-7
+0x1.a041b0acca34cp-2
+0x1.b9e1cc61badd5p-2
+-0x1.f662995e00a62p-8
+0x1.e85e5a775bfdcp-3
+0x1.d9bda728b9d21p-3
+-0x1.13bf55785e09dp-8
+0x1.28ea6211a1202p-2
+0x1.1f9d0e48d145ep-2
+-0x1.d786a4d88118p-9
+0x1.6ee9bda0613d6p-2
+0x1.62baeafeb90dbp-2
+-0x1.556b38775860ap-7
+0x1.6490e7dc08e83p-2
+0x1.58d3a69508c9fp-2
+-0x1.df410c5af2dbdp-8
+0x1.9184d87dee0d5p-3
+0x1.60500f6c8a1a8p-3
+-0x1.cb4d7a2485caap-9
+0x1.e8313f95281cdp-3
+0x1.acd3a1f9633ffp-3
+-0x1.88bf42e7ae433p-9
+0x1.2d9ce96489fb4p-2
+0x1.09532ee4f575cp-2
+-0x1.1c4e5fb958273p-7
+0x1.251c8f8569a9p-2
+0x1.01ca2fb8b749ep-2
+-0x1.8f1b36f88a968p-8
+0x1.0eabb653b423bp-2
+0x1.13857e18d71fep-2
+-0x1.6c2a070de5996p-9
+0x1.4896cee3616c1p-2
+0x1.508613a1b71fbp-2
+-0x1.375bf9b7a5023p-9
+0x1.95284000d12a9p-2
+0x1.a263b12a3a7dp-2
+-0x1.c30550a49c0ecp-8
+0x1.89dcb34cd076ap-2
+0x1.9638ffb844298p-2
+-0x1.3c85b9c84d0dep-8
+0x1.26fb7ec435187p-2
+0x1.19313bc356a3p-2
+-0x1.114fb133dd71ep-9
+0x1.65b70ef531473p-2
+0x1.5502feb0469efp-2
+-0x1.d3631ebe72e58p-10
+0x1.b86a950bda7cfp-2
+0x1.a3e24c6d7b423p-2
+-0x1.527b9075bcb1bp-8
+0x1.ac3bcb907a061p-2
+0x1.9843affb8c63ap-2
+-0x1.db1a5622a84c7p-9
+0x1.8a3ae1cd4cb74p-3
+0x1.c5ce4a4661488p-3
+-0x1.e5e6fedb27d83p-10
+0x1.dce6228ead5f8p-3
+0x1.126fa1760bfd2p-2
+-0x1.9fe6c2d13e015p-10
+0x1.24970a8519e64p-2
+0x1.50aaa6abdf7cbp-2
+-0x1.2bef7975e72bep-8
+0x1.1ca3fbc2676f5p-2
+0x1.47880e9e667fbp-2
+-0x1.a581e6ec9efdep-9
+-0x1.36a4524207a45p-16
+-0x1.0abd956d6b073p-13
+-0x1.cfc62f0d8a199p-12
+-0x1.cc97746da7464p-13
+-0x1.4e4bfce69a9d3p-13
+-0x1.800c8480c3de8p-18
+-0x1.1c904da3d0bd7p-11
+-0x1.97e3153bb15b1p-14
+-0x1.220f6bfec7d2ap-3
+-0x1.33d2a727c07bdp-16
+-0x1.0851e79f74ff4p-13
+-0x1.cb90c40e8efc9p-12
+-0x1.c8696e2bfabb5p-13
+-0x1.4b435d901f54cp-13
+-0x1.7c905044a158cp-18
+-0x1.19fb37f17c46cp-11
+-0x1.942f7fcf62d59p-14
+-0x1.1634383ba511fp-3
+-0x1.2757a6422972ep-16
+-0x1.fb34de07d518fp-14
+-0x1.b8eec578c572p-12
+-0x1.b5e82b35d27e2p-13
+-0x1.3dd5112055937p-13
+-0x1.6d224e804526p-18
+-0x1.0e8c6f0127067p-11
+-0x1.83cc50243810fp-14
+-0x1.979f0c7e201ap-3
+-0x1.2f54398c84c26p-16
+-0x1.04760f73027e8p-13
+-0x1.c4db3aa672a0fp-12
+-0x1.c1bfae06500e9p-13
+-0x1.466d557593372p-13
+-0x1.770207d2a728ep-18
+-0x1.15dd5e3ce66bap-11
+-0x1.8e48ef2eddd29p-14
+-0x1.6c56315095e78p-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.b722add97ca68p-4
+-0x1.74b6572d57185p-2
+-0x1.a1f57949ffdd1p-4
+-0x1.655e508f686cep-2
+-0x1.8985be00ff9cp-3
+-0x1.2e00a906ef4fbp-1
+-0x1.4008d2e0279e3p-3
+-0x1.fef8aed121eb9p-2
+-0x1.d5ce0c4b14befp+0
+-0x1.d20b9785b155p+0
+-0x1.ccc1cf8500154p+0
+-0x1.cdb7c3f97bba6p+0
+0x1.46b5d3779d843p-2
+0x1.5aa5aebad83aap-2
+-0x1.941ab3e521bf5p-7
+0x1.7e7ca8a4bda3fp-2
+0x1.95f4444669a18p-2
+-0x1.56792c309d0ddp-7
+0x1.cc642e9afd8cfp-2
+0x1.e8dcc343564aep-2
+-0x1.1e71d0918254ap-5
+0x1.be4a1e5ae5731p-2
+0x1.d9d921c47da91p-2
+-0x1.80175e0dd4b37p-6
+0x1.1590f1b40449fp-2
+0x1.0d02f245e2583p-2
+-0x1.a6007a0dc7281p-7
+0x1.469ac088f3e1bp-2
+0x1.3c1d63bd264f7p-2
+-0x1.68bb48dfa395cp-7
+0x1.8c0caa9e7ddcep-2
+0x1.7e9560e97e3e8p-2
+-0x1.055c5c8423a42p-5
+0x1.7f64860a2ae07p-2
+0x1.727d8035d09eap-2
+-0x1.6ed1406735abap-6
+0x1.c863bffb7fedcp-3
+0x1.90bb482d9f316p-3
+-0x1.5f4db1dea8859p-7
+0x1.0c7e3119f137p-2
+0x1.d7fa60756716ep-3
+-0x1.2c50b6eaa43c3p-7
+0x1.458cff0f887b6p-2
+0x1.1e8fae81b51c3p-2
+-0x1.b32bb84cce7dp-6
+0x1.3b2708b7100a3p-2
+0x1.15553dbc91bddp-2
+-0x1.315ffd71b280fp-6
+0x1.335c0e78ff351p-2
+0x1.3a12e41c62fc6p-2
+-0x1.16a67aee25af5p-7
+0x1.691c0bfd20cefp-2
+0x1.731ed82f42f58p-2
+-0x1.dc620738fd9ccp-8
+0x1.b4eb59712d298p-2
+0x1.c4c652982b6b9p-2
+-0x1.594178804195ep-6
+0x1.a721466bbca26p-2
+0x1.b5d0a99c41e45p-2
+-0x1.e483fb69cfbdfp-7
+0x1.4ebced3b280b8p-2
+0x1.3f19ced355907p-2
+-0x1.a235193454db7p-8
+0x1.88df95489311ap-2
+0x1.768a610db3a92p-2
+-0x1.657f23cfa1bacp-8
+0x1.daa453bef68bdp-2
+0x1.c4876cf00828p-2
+-0x1.0315c82d9cce4p-6
+0x1.cbc9fc87872ccp-2
+0x1.b65c999e61be4p-2
+-0x1.6b9733d8d4c89p-7
+0x1.beabf1b7057f1p-3
+0x1.010edc6ade118p-2
+-0x1.729448b62b364p-8
+0x1.05841c0ee18ap-2
+0x1.2cf41ca2c3525p-2
+-0x1.3cf9043a3561p-8
+0x1.3adf7d3dedf01p-2
+0x1.6a44dfd0441edp-2
+-0x1.ca4dcd8827c02p-7
+0x1.313640a62ba5cp-2
+0x1.5f2b66d38c449p-2
+-0x1.41cfc46d88514p-7
+-0x1.d1f67b630b756p-15
+-0x1.901c60242089ep-12
+-0x1.5bd4a34a27926p-10
+-0x1.597197523d73fp-11
+-0x1.f571fb59e7eaap-12
+-0x1.2009636092e63p-16
+-0x1.aad87475b91b2p-10
+-0x1.31ea4fecc5039p-12
+-0x1.fbcaf5f68276p-3
+-0x1.cdbbfabba0bb4p-15
+-0x1.8c7adb6f2f804p-12
+-0x1.58ac930aeb3eap-10
+-0x1.564f12a0fc0dbp-11
+-0x1.f0e50c582f00ep-12
+-0x1.1d6c3c3379039p-16
+-0x1.a6f8d3ea3a6b9p-10
+-0x1.2f239fdb8a214p-12
+-0x1.e7084f0090102p-3
+-0x1.bb0379633e2adp-15
+-0x1.7c67a685dfd16p-12
+-0x1.4ab3141a94146p-10
+-0x1.486e20685ddd8p-11
+-0x1.dcbf99b0805b8p-12
+-0x1.11d9bae033db9p-16
+-0x1.95d2a681ba884p-10
+-0x1.22d93c1b2a0bcp-12
+-0x1.64c862e5cbf8ep-2
+-0x1.c6fe5652c7242p-15
+-0x1.86b1172c83be3p-12
+-0x1.53a46bfcd5f92p-10
+-0x1.514fc284bc0b5p-11
+-0x1.e9a400305cd34p-12
+-0x1.194185ddfd5efp-16
+-0x1.a0cc0d5b59a1ep-10
+-0x1.2ab6b363265e5p-12
+-0x1.3ee7accc8145fp-2
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.bd2d87b7fddbap-4
+-0x1.7939c7d12e2b8p-2
+-0x1.a797443c44f41p-4
+-0x1.69a34a5171fcbp-2
+-0x1.8f7b51230fd06p-3
+-0x1.31e647febafc9p-1
+-0x1.44a72e91ee0dep-3
+-0x1.02a9df8909badp-1
+-0x1.d5ce0c4b14befp+0
+-0x1.d20b9785b155p+0
+-0x1.ccc1cf8500154p+0
+-0x1.cdb7c3f97bba6p+0
+0x1.46b5d3779d843p-2
+0x1.5aa5aebad83aap-2
+-0x1.9ca022111691ep-7
+0x1.7e7ca8a4bda3fp-2
+0x1.95f4444669a18p-2
+-0x1.5dafc7b8a0ab5p-7
+0x1.cc642e9afd8cfp-2
+0x1.e8dcc343564aep-2
+-0x1.2476947438aabp-5
+0x1.be4a1e5ae5731p-2
+0x1.d9d921c47da91p-2
+-0x1.882da9ac3ca51p-6
+0x1.1590f1b40449fp-2
+0x1.0d02f245e2583p-2
+-0x1.aee93e3714305p-7
+0x1.469ac088f3e1bp-2
+0x1.3c1d63bd264f7p-2
+-0x1.7057116215c26p-7
+0x1.8c0caa9e7ddcep-2
+0x1.7e9560e97e3e8p-2
+-0x1.0adaff8f9e645p-5
+0x1.7f64860a2ae07p-2
+0x1.727d8035d09eap-2
+-0x1.768bfbdd8aa39p-6
+0x1.c863bffb7fedcp-3
+0x1.90bb482d9f316p-3
+-0x1.66b7cc71610e7p-7
+0x1.0c7e3119f137p-2
+0x1.d7fa60756716ep-3
+-0x1.32a5bbfc5fb2cp-7
+0x1.458cff0f887b6p-2
+0x1.1e8fae81b51c3p-2
+-0x1.bc5165c1d0207p-6
+0x1.3b2708b7100a3p-2
+0x1.15553dbc91bddp-2
+-0x1.37ceec8171e45p-6
+0x1.335c0e78ff351p-2
+0x1.3a12e41c62fc6p-2
+-0x1.1c8873a01d6a7p-7
+0x1.691c0bfd20cefp-2
+0x1.731ed82f42f58p-2
+-0x1.e66e34c07f31fp-8
+0x1.b4eb59712d298p-2
+0x1.c4c652982b6b9p-2
+-0x1.6083995d48c62p-6
+0x1.a721466bbca26p-2
+0x1.b5d0a99c41e45p-2
+-0x1.eeb990d5f73d7p-7
+0x1.4ebced3b280b8p-2
+0x1.3f19ced355907p-2
+-0x1.ab09134543307p-8
+0x1.88df95489311ap-2
+0x1.768a610db3a92p-2
+-0x1.6d092b4de0a47p-8
+0x1.daa453bef68bdp-2
+0x1.c4876cf00828p-2
+-0x1.08880ec9ee50dp-6
+0x1.cbc9fc87872ccp-2
+0x1.b65c999e61be4p-2
+-0x1.734054110460fp-7
+0x1.beabf1b7057f1p-3
+0x1.010edc6ade118p-2
+-0x1.7a628935c77f3p-8
+0x1.05841c0ee18ap-2
+0x1.2cf41ca2c3525p-2
+-0x1.43a40c2ce8258p-8
+0x1.3adf7d3dedf01p-2
+0x1.6a44dfd0441edp-2
+-0x1.d3ed09cdb6f73p-7
+0x1.313640a62ba5cp-2
+0x1.5f2b66d38c449p-2
+-0x1.4894bd804fd21p-7
+-0x1.d1f67b630b746p-15
+-0x1.901c60242089p-12
+-0x1.5bd4a34a27919p-10
+-0x1.597197523d732p-11
+-0x1.f571fb59e7e98p-12
+-0x1.2009636092e59p-16
+-0x1.aad87475b91a3p-10
+-0x1.31ea4fecc502ep-12
+-0x1.00909f55e6d0bp-2
+-0x1.cdbbfabba0bb4p-15
+-0x1.8c7adb6f2f804p-12
+-0x1.58ac930aeb3eap-10
+-0x1.564f12a0fc0dbp-11
+-0x1.f0e50c582f00ep-12
+-0x1.1d6c3c3379039p-16
+-0x1.a6f8d3ea3a6b9p-10
+-0x1.2f239fdb8a214p-12
+-0x1.ec25ae41e04a5p-3
+-0x1.bb0379633e2adp-15
+-0x1.7c67a685dfd16p-12
+-0x1.4ab3141a94146p-10
+-0x1.486e20685ddd8p-11
+-0x1.dcbf99b0805b8p-12
+-0x1.11d9bae033db9p-16
+-0x1.95d2a681ba884p-10
+-0x1.22d93c1b2a0bcp-12
+-0x1.688402422b258p-2
+-0x1.c6fe5652c7254p-15
+-0x1.86b1172c83bf3p-12
+-0x1.53a46bfcd5f9ep-10
+-0x1.514fc284bc0c2p-11
+-0x1.e9a400305cd47p-12
+-0x1.194185ddfd5fap-16
+-0x1.a0cc0d5b59a2ep-10
+-0x1.2ab6b363265fp-12
+-0x1.423feaefe7fd7p-2
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.946daa655dce5p-5
+-0x1.71b9789b5c1cbp-3
+-0x1.65994472e2a3cp-5
+-0x1.4a8c57c720e66p-3
+-0x1.2d938b9293e9bp-4
+-0x1.05911e8d59de1p-2
+-0x1.ebd292aee26c4p-5
+-0x1.b6f3232fb7186p-3
+-0x1.de67bef882207p+0
+-0x1.d9b280b7a1adap+0
+-0x1.d3af600d38126p+0
+-0x1.d48795c062546p+0
+0x1.8c34fda97241p-3
+0x1.a41a145fdd422p-3
+-0x1.f7a373942972ap-9
+0x1.0caa1c52d658ep-2
+0x1.1cf8746dd958p-2
+-0x1.5cfeb3c4adcf3p-9
+0x1.6632589b28faap-2
+0x1.7c1f0f6d35107p-2
+-0x1.f8fa9742243bp-8
+0x1.59a9c653a1ff2p-2
+0x1.6ecb878c1aaaap-2
+-0x1.42131bf68d72dp-8
+0x1.4ceaddec913eep-3
+0x1.439a902430d44p-3
+-0x1.134a8e96ed41dp-8
+0x1.c62ffee74ec9p-3
+0x1.b8c88870384aap-3
+-0x1.87cdc50dc9151p-9
+0x1.312e7c1243c52p-2
+0x1.278dc9c04d4f2p-2
+-0x1.eee4b24acec09p-8
+0x1.262b1e8f53c54p-2
+0x1.1cf9481dfeed7p-2
+-0x1.4db09a2a656a7p-8
+0x1.11bd73b1c0ddbp-3
+0x1.dfa46523ebce2p-4
+-0x1.ca799f4076238p-9
+0x1.756cbf88696a4p-3
+0x1.478c6e595818fp-3
+-0x1.4653b65dc6f9dp-9
+0x1.f5c725e942591p-3
+0x1.b8d5ec210bab9p-3
+-0x1.9c17250c93c14p-8
+0x1.e3ad633562c85p-3
+0x1.a8d627c337671p-3
+-0x1.15e1fd9490b89p-8
+0x1.71e2d47b6dbfdp-3
+0x1.7538c0b8a9261p-3
+-0x1.6b856f9eb75d9p-9
+0x1.f7b6911dd2f02p-3
+0x1.ffbd81ce8a221p-3
+-0x1.02ae43b2d04eep-9
+0x1.51a665a93357ep-2
+0x1.5a23467c7630bp-2
+-0x1.46d4268cbe9a9p-8
+0x1.4593a26d4f1dep-2
+0x1.4d54ec46eefb3p-2
+-0x1.b8b131f8963cfp-9
+0x1.93bbcb8d533aap-3
+0x1.80d40aac02758p-3
+-0x1.10cfd94053001p-9
+0x1.1292b8b084aa8p-2
+0x1.05bb7faca9fd8p-2
+-0x1.844c5eaac65c2p-10
+0x1.6f8406ae2649ap-2
+0x1.5e5b9e8e9f295p-2
+-0x1.ea8dd22aa71c9p-9
+0x1.6274b7148340cp-2
+0x1.51e759f460113p-2
+-0x1.4abddd100e172p-9
+0x1.0eba2ab83f538p-3
+0x1.37b75c346b2b2p-3
+-0x1.e4cc47a1a7d4p-10
+0x1.6f3d6e6e3c9e4p-3
+0x1.a6c2aa26ab536p-3
+-0x1.59b2df13df419p-10
+0x1.e9c6077e13f58p-3
+0x1.19d64759c0d1ap-2
+-0x1.b315999683cc9p-9
+0x1.d89d784939873p-3
+0x1.0ff92f7537d7fp-2
+-0x1.25cb911d58e6dp-9
+-0x1.745afa154622bp-16
+-0x1.3fbb806b63b39p-13
+-0x1.15f46d8b8c6ep-11
+-0x1.140c2272d85aap-12
+-0x1.90b5b06ae13edp-13
+-0x1.cc5883b5fb35cp-18
+-0x1.5518abe08d485p-11
+-0x1.e8eb7150b894bp-14
+-0x1.15accfe14d203p-3
+-0x1.70f9f05148a7dp-16
+-0x1.3cd4b6f05119cp-13
+-0x1.136eb258ae8c3p-11
+-0x1.118ad5a12c70bp-12
+-0x1.8d12c78f5949bp-13
+-0x1.c82b0fb27f152p-18
+-0x1.520040af05759p-11
+-0x1.e47b9b9c9654bp-14
+-0x1.f1f395d7ad59bp-4
+-0x1.620433b2a9d85p-16
+-0x1.2ffc36ace15e2p-13
+-0x1.0843e2b0746c1p-11
+-0x1.0673a42684413p-12
+-0x1.7cf969e1b0194p-13
+-0x1.b5ac54306ac3bp-18
+-0x1.444c051a47115p-11
+-0x1.d0d6fcdade7bep-14
+-0x1.681d6cf7b58ep-3
+-0x1.6b96f626dd199p-16
+-0x1.38349ee690ec4p-13
+-0x1.0f6952568f987p-11
+-0x1.0d8c85f6474d9p-12
+-0x1.8746cb8d2ac9ap-13
+-0x1.c18238ade8782p-18
+-0x1.4d110a2d3852fp-11
+-0x1.dd68f28fc0368p-14
+-0x1.398b3f83926b8p-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.776dd6906fb08p-5
+-0x1.5a37473154f8fp-3
+-0x1.4c43fa95f2ce6p-5
+-0x1.35b24669786b6p-3
+-0x1.18c20a5e364dp-4
+-0x1.eb0d2832dc444p-3
+-0x1.cb11f41b51c4fp-5
+-0x1.9cd6400465724p-3
+-0x1.e4f99b478d29ap+0
+-0x1.e01720044e063p+0
+-0x1.d94efa7b2bfc9p+0
+-0x1.d99092b2b1f0fp+0
+0x1.8c6b2d5c89e58p-4
+0x1.a41fe83eb1c99p-4
+-0x1.cf91e862365f1p-9
+0x1.59880abed63dep-3
+0x1.6e52f20ce7ad5p-3
+-0x1.41408f31e4e61p-9
+0x1.12797fa6acb76p-2
+0x1.232465aeeb5d9p-2
+-0x1.d1049043fac95p-8
+0x1.0ea54441c0056p-2
+0x1.1f132842306b4p-2
+-0x1.2887f75617a2bp-8
+0x1.4a76e3da207b4p-4
+0x1.41e6d3b3c65a9p-4
+-0x1.facdd02f3ef51p-9
+0x1.21bc46dc31bd2p-3
+0x1.19c927aea7b1cp-3
+-0x1.68ad81db8fbb9p-9
+0x1.d03dfb8906efep-3
+0x1.c27b371bc0d66p-3
+-0x1.c7bc3bddaf808p-8
+0x1.c99d571414623p-3
+0x1.bc16d59567b35p-3
+-0x1.333954d33e97ap-8
+0x1.0fc05f5f1c025p-4
+0x1.db62d95a84dd6p-5
+-0x1.a6084a66b616bp-9
+0x1.dc7b0ad913651p-4
+0x1.a1438bf32466dp-4
+-0x1.2c69efe2f439cp-9
+0x1.7db0653360817p-3
+0x1.4ed4d7247424fp-3
+-0x1.7b7e22aca316p-8
+0x1.783ddedf0f90cp-3
+0x1.4a07dfd888e81p-3
+-0x1.ffb3a64f68e45p-9
+0x1.700cba03573ep-4
+0x1.6ff62ab1557bep-4
+-0x1.4e9cb9867653p-9
+0x1.421cb4e9b1fd3p-3
+0x1.443cff6f07c48p-3
+-0x1.dc40d19c70215p-10
+0x1.01649e84283ebp-2
+0x1.05a50bc44f94p-2
+-0x1.2cf7607657481p-8
+0x1.fb7cde17d876ap-3
+0x1.01d67c867d2e3p-2
+-0x1.95bc705ef3a54p-9
+0x1.92600b359aed9p-4
+0x1.7f8051f6bdf2ap-4
+-0x1.f639d8e59dc88p-10
+0x1.5fbc4fba044d3p-3
+0x1.4f41ff4212a07p-3
+-0x1.65705f3d4d8e8p-10
+0x1.18949f0183741p-2
+0x1.0b75d72276b8bp-2
+-0x1.c3bb7a4604cbfp-9
+0x1.149f01f6a747dp-2
+0x1.07af6360ab46fp-2
+-0x1.3081336c26cf1p-9
+0x1.0eca0d17c5e18p-4
+0x1.37ddea09410c5p-4
+-0x1.be49ad155a3fbp-10
+0x1.d829e7e8483cap-4
+0x1.0fd7f2a727e1p-3
+-0x1.3e45efa53fdc6p-10
+0x1.77306c646b10bp-3
+0x1.afe785e4671cp-3
+-0x1.90b1f9387975ap-9
+0x1.71f34b6e6dfbcp-3
+0x1.a9e0d3ca23bep-3
+-0x1.0e87c8285f189p-9
+-0x1.745afa154622bp-16
+-0x1.3fbb806b63b39p-13
+-0x1.15f46d8b8c6ep-11
+-0x1.140c2272d85aap-12
+-0x1.90b5b06ae13edp-13
+-0x1.cc5883b5fb35cp-18
+-0x1.5518abe08d485p-11
+-0x1.e8eb7150b894bp-14
+-0x1.0a6825e8a2e6ep-3
+-0x1.70f9f05148a8dp-16
+-0x1.3cd4b6f0511aap-13
+-0x1.136eb258ae8dp-11
+-0x1.118ad5a12c718p-12
+-0x1.8d12c78f594adp-13
+-0x1.c82b0fb27f166p-18
+-0x1.520040af05768p-11
+-0x1.e47b9b9c96561p-14
+-0x1.ddc3044a0d4c1p-4
+-0x1.620433b2a9d74p-16
+-0x1.2ffc36ace15d4p-13
+-0x1.0843e2b0746b5p-11
+-0x1.0673a42684407p-12
+-0x1.7cf969e1b0181p-13
+-0x1.b5ac54306ac27p-18
+-0x1.444c051a47106p-11
+-0x1.d0d6fcdade7a7p-14
+-0x1.599285b6a9887p-3
+-0x1.6b96f626dd1aap-16
+-0x1.38349ee690ed2p-13
+-0x1.0f6952568f994p-11
+-0x1.0d8c85f6474e6p-12
+-0x1.8746cb8d2acadp-13
+-0x1.c18238ade8796p-18
+-0x1.4d110a2d3853ep-11
+-0x1.dd68f28fc037fp-14
+-0x1.2cd9594d684b8p-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.77a9c32fe04eap-4
+-0x1.468b4cf1d0bb3p-2
+-0x1.476c509ede081p-4
+-0x1.21d3891eb9981p-2
+-0x1.222494bcd3368p-3
+-0x1.d612af55f48dap-2
+-0x1.cef030542e9c8p-4
+-0x1.8604014a755dbp-2
+-0x1.e1aaf1096040ap+0
+-0x1.dcdf5436221e6p+0
+-0x1.d67ae00f31517p+0
+-0x1.d708a26b0638dp+0
+0x1.2a05c9ecf5064p-3
+0x1.3beb6f464a0a3p-3
+-0x1.64abefd406d96p-7
+0x1.ba3ba0bd48744p-3
+0x1.d4f541f2491afp-3
+-0x1.edd940dc8791ap-8
+0x1.3ca9d52377f7p-2
+0x1.4ff805625fa37p-2
+-0x1.6607f5b0fb9bp-6
+0x1.346a7a08eceecp-2
+0x1.47343340253a6p-2
+-0x1.c8505251de6fep-7
+0x1.f2d70d229e49dp-4
+0x1.e566ce80845eap-4
+-0x1.86946ffbb067cp-7
+0x1.744d3bb73f0d8p-3
+0x1.69b3b29a03612p-3
+-0x1.15db8eb2c78fep-7
+0x1.0cca4d602497cp-2
+0x1.04915451f22d9p-2
+-0x1.5f43b2a39842bp-6
+0x1.059945f024a2bp-2
+0x1.fb4a548d1e608p-3
+-0x1.d980774afcc5cp-7
+0x1.9a30d61e47aa4p-4
+0x1.6712670278d2ap-4
+-0x1.451c201388401p-7
+0x1.321dac7f119f1p-3
+0x1.0c4a1a6e1857ap-3
+-0x1.ce9cbb117bf77p-8
+0x1.b9f702ee0d2ebp-3
+0x1.83ff0827e1328p-3
+-0x1.24683a3ea4e1bp-6
+0x1.ae24e63ad10ebp-3
+0x1.79903ff2a122dp-3
+-0x1.8a29e61a726c1p-7
+0x1.15741eee246b8p-3
+0x1.16aa260c1a452p-3
+-0x1.01df9bf352042p-7
+0x1.9d675308bd2ecp-3
+0x1.a20d3fcb2eaa7p-3
+-0x1.6ee305562dd1fp-8
+0x1.29b8d4820a8c5p-2
+0x1.2feab14e8b2f2p-2
+-0x1.cff0b847b0019p-7
+0x1.21d1fc855a92cp-2
+0x1.279aeab71a5f8p-2
+-0x1.38a8a94ab2d76p-7
+0x1.2f166ba99b64fp-3
+0x1.20e20860550fp-3
+-0x1.8301227766d63p-8
+0x1.c30f13d91e676p-3
+0x1.adf23db2c11f4p-3
+-0x1.1350de7ab8fbdp-8
+0x1.444cebe6e389ep-2
+0x1.3525dfe96e07dp-2
+-0x1.5c23b30dcd0ddp-7
+0x1.3bbd683ee78aap-2
+0x1.2cfc290254894p-2
+-0x1.d53df6c7710d1p-8
+0x1.9736ace85230dp-4
+0x1.d4ed56f99395dp-4
+-0x1.56ddb289395fap-8
+0x1.2e32ebcd7371cp-3
+0x1.5bee766e7826ap-3
+-0x1.e86871b356264p-9
+0x1.b0ebb4350205fp-3
+0x1.f24da6688183ap-3
+-0x1.341a4fae4e20dp-7
+0x1.a5a222341f35bp-3
+0x1.e5529ded8b786p-3
+-0x1.9fa995d177704p-8
+-0x1.17443b8ff49ap-14
+-0x1.df9940a1158d5p-12
+-0x1.a0eea45152a51p-10
+-0x1.9e1233ac4487fp-11
+-0x1.2c88445028ef2p-11
+-0x1.594262c87c685p-16
+-0x1.ffa501d0d3ec8p-10
+-0x1.6eb094fc8a6f8p-12
+-0x1.d406bc58d0f84p-3
+-0x1.14bb743cf67e6p-14
+-0x1.db3f126879a78p-12
+-0x1.9d260b8505d31p-10
+-0x1.9a504071c2a9dp-11
+-0x1.29ce15ab82f7dp-11
+-0x1.56204bc5df508p-16
+-0x1.fb00610688315p-10
+-0x1.6b5cb4b570c03p-12
+-0x1.a3a9be82215b4p-3
+-0x1.098326c5ff617p-14
+-0x1.c7fa5203520bep-12
+-0x1.8c65d408aea0ep-10
+-0x1.89ad7639c660ap-11
+-0x1.1dbb0f6944121p-11
+-0x1.48413f245011dp-16
+-0x1.e67207a76a98ap-10
+-0x1.5ca13da426dbdp-12
+-0x1.2f87d4b5b85fbp-2
+-0x1.10b1389d25d37p-14
+-0x1.d44eee59d962dp-12
+-0x1.971dfb81d7651p-10
+-0x1.9452c8f16af4cp-11
+-0x1.257518a9e0179p-11
+-0x1.5121aa826e5a7p-16
+-0x1.f3998f43d47cdp-10
+-0x1.660eb5ebd0294p-12
+-0x1.084228488a966p-2
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.7e68cebfcd47cp-4
+-0x1.4bbeff4b9256ap-2
+-0x1.4d1cf6082abccp-4
+-0x1.265b1617d2e44p-2
+-0x1.27a9c5eeb5677p-3
+-0x1.ddccb4cc4f565p-2
+-0x1.d7540d18af4d2p-4
+-0x1.8c3b5361625fdp-2
+-0x1.e1aaf1096040ap+0
+-0x1.dcdf5436221e6p+0
+-0x1.d67ae00f31517p+0
+-0x1.d708a26b0638dp+0
+0x1.2a05c9ecf5064p-3
+0x1.3beb6f464a0a3p-3
+-0x1.6ea25be00e191p-7
+0x1.ba3ba0bd48744p-3
+0x1.d4f541f2491afp-3
+-0x1.fb9efda5d1c39p-8
+0x1.3ca9d52377f7p-2
+0x1.4ff805625fa37p-2
+-0x1.6ffcc333a4c9p-6
+0x1.346a7a08eceecp-2
+0x1.47343340253a6p-2
+-0x1.d507e3be8dfbp-7
+0x1.f2d70d229e49dp-4
+0x1.e566ce80845eap-4
+-0x1.91809bc376235p-7
+0x1.744d3bb73f0d8p-3
+0x1.69b3b29a03612p-3
+-0x1.1d9e78d6483a2p-7
+0x1.0cca4d602497cp-2
+0x1.04915451f22d9p-2
+-0x1.690a3cc2461aap-6
+0x1.059945f024a2bp-2
+0x1.fb4a548d1e608p-3
+-0x1.e6b65558c59fep-7
+0x1.9a30d61e47aa4p-4
+0x1.6712670278d2ap-4
+-0x1.4e32ebae0dd45p-7
+0x1.321dac7f119f1p-3
+0x1.0c4a1a6e1857ap-3
+-0x1.db879378de2ddp-8
+0x1.b9f702ee0d2ebp-3
+0x1.83ff0827e1328p-3
+-0x1.2c8b005a2b936p-6
+0x1.ae24e63ad10ebp-3
+0x1.79903ff2a122dp-3
+-0x1.952856b7d1e07p-7
+0x1.15741eee246b8p-3
+0x1.16aa260c1a452p-3
+-0x1.0915b53073edap-7
+0x1.9d675308bd2ecp-3
+0x1.a20d3fcb2eaa7p-3
+-0x1.792283a7e44dbp-8
+0x1.29b8d4820a8c5p-2
+0x1.2feab14e8b2f2p-2
+-0x1.dcd9f49c82c7ep-7
+0x1.21d1fc855a92cp-2
+0x1.279aeab71a5f8p-2
+-0x1.4161b4c06ad77p-7
+0x1.2f166ba99b64fp-3
+0x1.20e20860550fp-3
+-0x1.8dd36d914c6cap-8
+0x1.c30f13d91e676p-3
+0x1.adf23db2c11f4p-3
+-0x1.1b01556555e06p-8
+0x1.444cebe6e389ep-2
+0x1.3525dfe96e07dp-2
+-0x1.65d3c16b9bd9bp-7
+0x1.3bbd683ee78aap-2
+0x1.2cfc290254894p-2
+-0x1.e25506c77439bp-8
+0x1.9736ace85230dp-4
+0x1.d4ed56f99395dp-4
+-0x1.606ef5294bc6fp-8
+0x1.2e32ebcd7371cp-3
+0x1.5bee766e7826ap-3
+-0x1.f60338a27e7e4p-9
+0x1.b0ebb4350205fp-3
+0x1.f24da6688183ap-3
+-0x1.3ca9bc47b3c03p-7
+0x1.a5a222341f35bp-3
+0x1.e5529ded8b786p-3
+-0x1.ab3c0dfa44471p-8
+-0x1.17443b8ff49ap-14
+-0x1.df9940a1158d5p-12
+-0x1.a0eea45152a51p-10
+-0x1.9e1233ac4487fp-11
+-0x1.2c88445028ef2p-11
+-0x1.594262c87c685p-16
+-0x1.ffa501d0d3ec8p-10
+-0x1.6eb094fc8a6f8p-12
+-0x1.da87e13bf814p-3
+-0x1.14bb743cf67ddp-14
+-0x1.db3f126879a6ap-12
+-0x1.9d260b8505d24p-10
+-0x1.9a504071c2a91p-11
+-0x1.29ce15ab82f74p-11
+-0x1.56204bc5df4fep-16
+-0x1.fb00610688306p-10
+-0x1.6b5cb4b570bf8p-12
+-0x1.a97d7f5e873dap-3
+-0x1.098326c5ff61fp-14
+-0x1.c7fa5203520ccp-12
+-0x1.8c65d408aea1bp-10
+-0x1.89ad7639c6616p-11
+-0x1.1dbb0f694412ap-11
+-0x1.48413f2450127p-16
+-0x1.e67207a76a999p-10
+-0x1.5ca13da426dc8p-12
+-0x1.33ba5674df319p-2
+-0x1.10b1389d25d37p-14
+-0x1.d44eee59d962dp-12
+-0x1.971dfb81d7651p-10
+-0x1.9452c8f16af4cp-11
+-0x1.257518a9e0179p-11
+-0x1.5121aa826e5a7p-16
+-0x1.f3998f43d47cdp-10
+-0x1.660eb5ebd0294p-12
+-0x1.0bec24fd3208fp-2
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.e80aa2f93f9c4p-6
+-0x1.d4903611ff94dp-4
+-0x1.f3516802193fdp-6
+-0x1.dd6f8541b7033p-4
+-0x1.7052c232382a3p-5
+-0x1.53462e13ee371p-3
+-0x1.3e90d153a0574p-5
+-0x1.29bd1e173702p-3
+-0x1.ebef50ee132a8p+0
+-0x1.e7806c58d13fdp+0
+-0x1.dfd84b8728289p+0
+-0x1.deb4d3a0fcb32p+0
+0x1.920ffc6bed887p-8
+0x1.a9ecf1a64e6e4p-8
+-0x1.c1fce342e6eebp-10
+0x1.e728d7b71de7dp-5
+0x1.0219a583ac844p-4
+-0x1.b0e6f309d5289p-10
+0x1.60ead29bff3c7p-3
+0x1.76293fba78b26p-3
+-0x1.b5839f8dbad5dp-9
+0x1.832876152b309p-3
+0x1.9a7f770c0bfccp-3
+-0x1.2efca26e559f5p-9
+0x1.4cd0f7eb9a555p-8
+0x1.44cec43347f03p-8
+-0x1.113d3ca5cb6fap-9
+0x1.94ea28e59005fp-5
+0x1.8abc1f75dc03p-5
+-0x1.056245e87a31dp-9
+0x1.28047bf7001efp-3
+0x1.1fdf533812e0fp-3
+-0x1.e11f6e4e40e58p-9
+0x1.45315d3cf79f2p-3
+0x1.3c206d059e296p-3
+-0x1.5aba25c00299ap-9
+0x1.11b609518a87bp-8
+0x1.de1e5df967ab3p-9
+-0x1.c72050bac92b3p-10
+0x1.4cfcbeb3990ep-5
+0x1.2313ed348ce8p-5
+-0x1.b36a9f7d2bcd3p-10
+0x1.e6cf4e789f1abp-4
+0x1.aa55de644a05p-4
+-0x1.90a7704156f54p-9
+0x1.0b63cb070b134p-3
+0x1.d47ad996ae20fp-4
+-0x1.20c8e65c5bca6p-9
+0x1.73787662abae5p-8
+0x1.70514b0299bdp-8
+-0x1.68bbb181ea2a9p-10
+0x1.c35fc7bd908f1p-5
+0x1.c1b635a6112d6p-5
+-0x1.5916d3718d4e4p-10
+0x1.4910ebc8c5296p-3
+0x1.4b5a7702a5bc2p-3
+-0x1.3da81e9a54b58p-9
+0x1.6958379791275p-3
+0x1.6c7242034a6f6p-3
+-0x1.c9d147d21bc46p-10
+0x1.96b22b591fff6p-8
+0x1.8397268fb294cp-8
+-0x1.0eb7ed2219fecp-10
+0x1.edc3efd7f472cp-5
+0x1.d6970a2e46fffp-5
+-0x1.02fd004e84969p-10
+0x1.674ea6eee0f3dp-3
+0x1.5679cfaa0284ap-3
+-0x1.dcc9fb1b99119p-10
+0x1.8a70b4539f74p-3
+0x1.77f7f97bd4873p-3
+-0x1.579a29082fffcp-10
+0x1.129213a85bcp-8
+0x1.3c4aea228c15cp-8
+-0x1.e232740ee40fp-11
+0x1.4cbc6414a0d19p-5
+0x1.7f3f1803f947bp-5
+-0x1.cd94ed778a2b9p-11
+0x1.e2430efcc47fep-4
+0x1.15a7a3a7723fdp-3
+-0x1.a7ce85854adaap-10
+0x1.088a509229707p-3
+0x1.3098a3f4a8c56p-3
+-0x1.31f8a462788fep-10
+-0x1.99095f6a9a8b6p-16
+-0x1.5f3acddd78092p-13
+-0x1.315624ea833d2p-11
+-0x1.2f3dbf9849329p-12
+-0x1.b82f268b0f4c8p-13
+-0x1.f9b1ee7e2243fp-18
+-0x1.76b2bfcf0bc62p-11
+-0x1.0c8abb4bea6fcp-13
+-0x1.7fe91bf1649a6p-4
+-0x1.95531e4dc8667p-16
+-0x1.5c0ad814c340ep-13
+-0x1.2e90cd0ef6693p-11
+-0x1.2c7d45ddc948bp-12
+-0x1.b43089215b703p-13
+-0x1.f51b200051df9p-18
+-0x1.734c44a73f5cbp-11
+-0x1.0a1ade2b3dc05p-13
+-0x1.81b99bc79e803p-4
+-0x1.84e41bc602d0fp-16
+-0x1.4dee634ce8741p-13
+-0x1.224c5d353ecb2p-11
+-0x1.204e62efa7e37p-12
+-0x1.a2812af67f7bdp-13
+-0x1.e0c9f78c994dbp-18
+-0x1.643e6f275c333p-11
+-0x1.fea1bd19bd61dp-14
+-0x1.01e8c14ca1f6bp-3
+-0x1.8f684bcaa8a33p-16
+-0x1.56f61a728d0d9p-13
+-0x1.2a26054cfe55dp-11
+-0x1.281a40977bb5ap-12
+-0x1.add25c9ad512p-13
+-0x1.edca56b9614e9p-18
+-0x1.6de09d40b446cp-11
+-0x1.06385a2cab614p-13
+-0x1.cb73b29929f7ep-4
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.bd7ecb7e070a6p-6
+-0x1.b031578a7c672p-4
+-0x1.c6e73c4b8b75ep-6
+-0x1.b7add1f83ca8dp-4
+-0x1.5231014980803p-5
+-0x1.3a6c03bf1ccfbp-3
+-0x1.25b5ca421d3e5p-5
+-0x1.14c26617c1539p-3
+-0x1.f437efcec361ep+0
+-0x1.f03d11b807e36p+0
+-0x1.e657a771876a5p+0
+-0x1.e446e350bcb91p+0
+0x1.fc858dff48acbp-4
+0x1.0d8062e8700f7p-3
+-0x1.966acabdda5f6p-10
+0x1.189555f9ff727p-4
+0x1.2952807e3d8cp-4
+-0x1.86d12d2a92b3cp-10
+0x1.39bcdb2f1dc7cp-4
+0x1.4c77a0a81e8f3p-4
+-0x1.8af11478fd48p-9
+0x1.b6999de772c21p-4
+0x1.d0da01fee4872p-4
+-0x1.1170c9aed94a1p-9
+0x1.a8d97fd22d0b1p-4
+0x1.9d98e4af67551p-4
+-0x1.ed32f275efcb9p-10
+0x1.d2c1e48f61b38p-5
+0x1.c6efb2659c2c2p-5
+-0x1.d7c51d8f76678p-10
+0x1.051f1423af8a8p-4
+0x1.fcedf047c9174p-5
+-0x1.b24f8a7eae498p-9
+0x1.6dedd7c97ffc1p-4
+0x1.645e6056403fcp-4
+-0x1.38e7862b393e2p-9
+0x1.5d5b755c75aeep-4
+0x1.31b5e679b7abap-4
+-0x1.9aca793d8a4bp-10
+0x1.7fd7458084217p-5
+0x1.4f9478b0df2c4p-5
+-0x1.88f8446ed1069p-10
+0x1.ad774f8b11e98p-5
+0x1.77848fa43859cp-5
+-0x1.69afa71d69151p-9
+0x1.2ce972575f174p-4
+0x1.073e4dc29c573p-4
+-0x1.04a0c98940069p-9
+0x1.d8da13ca318b9p-4
+0x1.d9f43cbe4ffcap-4
+-0x1.459263e826f7dp-10
+0x1.04199729603e7p-4
+0x1.035b73a19c608p-4
+-0x1.376d094e81765p-10
+0x1.22f660f7e31c9p-4
+0x1.22592689cbb8p-4
+-0x1.1ebee7197512bp-9
+0x1.977201e1ebe31p-4
+0x1.97bd716046306p-4
+-0x1.9d27078da54b2p-10
+0x1.025c4bda2b244p-3
+0x1.ec7ebe0cdadb8p-4
+-0x1.e8b16a3a58957p-11
+0x1.1c7c9862e7a77p-4
+0x1.0f22d4d59cacbp-4
+-0x1.d375b2846526dp-11
+0x1.3e33a329c3b45p-4
+0x1.2f455a2d46d1ap-4
+-0x1.ae634cba015c4p-10
+0x1.bd5edf444046fp-4
+0x1.a87bcecfd6f6ep-4
+-0x1.3613c1481e7d8p-10
+0x1.5b651981e378fp-4
+0x1.9010af52aad66p-4
+-0x1.b392131847811p-11
+0x1.7f4b460548512p-5
+0x1.b978367a5dc57p-5
+-0x1.a0ca6db8947dap-11
+0x1.ac986a984c052p-5
+0x1.eda2fc124bcf8p-5
+-0x1.7ea2b14bea98fp-10
+0x1.2b9cc48c2b23p-4
+0x1.590da15d30474p-4
+-0x1.143198869f2fap-10
+-0x1.99095f6a9a883p-16
+-0x1.5f3acddd78066p-13
+-0x1.315624ea833adp-11
+-0x1.2f3dbf9849304p-12
+-0x1.b82f268b0f492p-13
+-0x1.f9b1ee7e224p-18
+-0x1.76b2bfcf0bc33p-11
+-0x1.0c8abb4bea6dbp-13
+-0x1.6ca4fe6db0514p-4
+-0x1.95531e4dc8645p-16
+-0x1.5c0ad814c33f1p-13
+-0x1.2e90cd0ef6679p-11
+-0x1.2c7d45ddc9471p-12
+-0x1.b43089215b6dfp-13
+-0x1.f51b200051dcep-18
+-0x1.734c44a73f5acp-11
+-0x1.0a1ade2b3dbefp-13
+-0x1.6e630008f8103p-4
+-0x1.84e41bc602d0fp-16
+-0x1.4dee634ce8741p-13
+-0x1.224c5d353ecb2p-11
+-0x1.204e62efa7e37p-12
+-0x1.a2812af67f7bdp-13
+-0x1.e0c9f78c994dbp-18
+-0x1.643e6f275c333p-11
+-0x1.fea1bd19bd61dp-14
+-0x1.ea130b744e5a6p-4
+-0x1.8f684bcaa8a33p-16
+-0x1.56f61a728d0d9p-13
+-0x1.2a26054cfe55dp-11
+-0x1.281a40977bb5ap-12
+-0x1.add25c9ad512p-13
+-0x1.edca56b9614e9p-18
+-0x1.6de09d40b446cp-11
+-0x1.06385a2cab614p-13
+-0x1.b4742e544b85bp-4
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.b2558996b29p-5
+-0x1.9431cf33aaf53p-3
+-0x1.bbab334f3b5b4p-5
+-0x1.9b4c11882b9dfp-3
+-0x1.520dcd180f9a4p-4
+-0x1.292a107567b16p-2
+-0x1.2088689931772p-4
+-0x1.0325e2a9a9834p-2
+-0x1.f00ac611ed88bp+0
+-0x1.ebd4d065c5ac5p+0
+-0x1.e31261b0f3f2ap+0
+-0x1.e179bb8f71766p+0
+0x1.0d20a16fa74bp-4
+0x1.1d2de026b4fdcp-4
+-0x1.3a4d4832640bfp-8
+0x1.2ddc18848f425p-8
+0x1.3fc60035522fcp-8
+-0x1.2e32a0f177026p-8
+0x1.ff5c678e5d1aap-4
+0x1.0f01d4aba45c8p-3
+-0x1.31ea2277de8e1p-7
+0x1.2fd0c72241916p-3
+0x1.4210a3ce9858ap-3
+-0x1.a73ed45f2abf9p-8
+0x1.bf9a23e0f28eap-5
+0x1.b44ab80c6fc44p-5
+-0x1.7e93ddff8784dp-8
+0x1.f3af41953d287p-9
+0x1.e7ad04d56ca64p-9
+-0x1.6dec28e806889p-8
+0x1.ab3ee52cb1782p-4
+0x1.9fec70ea08078p-4
+-0x1.5102026932fa2p-7
+0x1.fca78ee29d592p-4
+0x1.eeebc1a21f54cp-4
+-0x1.e57f1810f8d0ap-8
+0x1.7016e9d633209p-5
+0x1.41cb62f32ad45p-5
+-0x1.3e74f0fd47726p-8
+0x1.9af219832443fp-9
+0x1.66e9544cdab01p-9
+-0x1.309b2a1545e3ap-8
+0x1.5f53caca947c4p-4
+0x1.3370219a2d46dp-4
+-0x1.18867359aa52p-7
+0x1.a242840eafafap-4
+0x1.6e271a711ad79p-4
+-0x1.9427a9874eaa3p-8
+0x1.f2e289d6db5cdp-5
+0x1.f15512f700c21p-5
+-0x1.f9148b12ff877p-9
+0x1.16dea180ac231p-8
+0x1.1476fae2b56a1p-8
+-0x1.e317f36a8efc4p-9
+0x1.db82b0ee615f5p-4
+0x1.dca66c69c4619p-4
+-0x1.bd006b84a7406p-8
+0x1.1ae4713c32e66p-3
+0x1.1c342d6ed2269p-3
+-0x1.4083a73ddf9dep-8
+0x1.10d7934ca9d1cp-4
+0x1.04098d7d250ebp-4
+-0x1.7b005cecad5cp-9
+0x1.315239612eb89p-8
+0x1.22fa4533983d9p-8
+-0x1.6a80c8d47248fp-9
+0x1.03cf6b1db55e7p-3
+0x1.ef4243401e452p-4
+-0x1.4debb9d377456p-8
+0x1.3503a83c71bbcp-3
+0x1.268858f22c6cfp-3
+-0x1.e1077ddad7f5dp-9
+0x1.6fa43ad744a01p-5
+0x1.a771beb2dcae1p-5
+-0x1.504eac8739208p-9
+0x1.9c480f62e1d04p-9
+0x1.daee5143937e5p-9
+-0x1.41ba357a5e8d3p-9
+0x1.5d55d66648671p-4
+0x1.924c8cfddf935p-4
+-0x1.27ea469aee61p-8
+0x1.9f21f5499b49cp-4
+0x1.de0af2f1ec741p-4
+-0x1.aabe7524cb86dp-9
+-0x1.32c7078ff3e6fp-14
+-0x1.076c1a661a057p-11
+-0x1.ca01375fc4d95p-10
+-0x1.c6dc9f646dc97p-11
+-0x1.4a235ce84b77bp-11
+-0x1.7b4572de99b0fp-16
+-0x1.19060fdb48d32p-9
+-0x1.92d018f1dfa58p-12
+-0x1.417304473cb12p-3
+-0x1.2ffe56ba564b7p-14
+-0x1.0508220f926f8p-11
+-0x1.c5d93396719bcp-10
+-0x1.c2bbe8ccadebp-11
+-0x1.472466d90492bp-11
+-0x1.77d458003d65fp-16
+-0x1.1679337d6f844p-9
+-0x1.8f284d40dc9ecp-12
+-0x1.42faacecab5c6p-3
+-0x1.23ab14d4821cbp-14
+-0x1.f4e594f35cae1p-12
+-0x1.b3728bcfde30ap-10
+-0x1.b07594677bd53p-11
+-0x1.39e0e038df9cep-11
+-0x1.689779a972fa4p-16
+-0x1.0b2ed35d85266p-9
+-0x1.7ef94dd34e096p-12
+-0x1.aff9f56600aa8p-3
+-0x1.2b8e38d7fe7a7p-14
+-0x1.013893d5e9ca3p-11
+-0x1.bf3907f37d80bp-10
+-0x1.bc2760e339907p-11
+-0x1.425dc5741fcd8p-11
+-0x1.7257c10b08faep-16
+-0x1.126875f087351p-9
+-0x1.895487430111ep-12
+-0x1.80bbd1b7c577fp-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.bb68b85ff6792p-5
+-0x1.9bf4a82b7bba7p-3
+-0x1.c4ede9b778c91p-5
+-0x1.a32ecdb98bdddp-3
+-0x1.5973107610b2cp-4
+-0x1.2efaf97ad511ap-2
+-0x1.26a5986c5cebep-4
+-0x1.0822e6b407b11p-2
+-0x1.f00ac611ed88bp+0
+-0x1.ebd4d065c5ac5p+0
+-0x1.e31261b0f3f2ap+0
+-0x1.e179bb8f71766p+0
+0x1.0d20a16fa74bp-4
+0x1.1d2de026b4fdcp-4
+-0x1.453c4b8af988ep-8
+0x1.2ddc18848f425p-8
+0x1.3fc60035522fcp-8
+-0x1.38b302fa29901p-8
+0x1.ff5c678e5d1aap-4
+0x1.0f01d4aba45c8p-3
+-0x1.3c814989543cep-7
+0x1.2fd0c72241916p-3
+0x1.4210a3ce9858ap-3
+-0x1.b5eed78d70cc3p-8
+0x1.bf9a23e0f28eap-5
+0x1.b44ab80c6fc44p-5
+-0x1.8be9558c43c19p-8
+0x1.f3af41953d287p-9
+0x1.e7ad04d56ca64p-9
+-0x1.7aa9a0a1fc424p-8
+0x1.ab3ee52cb1782p-4
+0x1.9fec70ea08078p-4
+-0x1.5cb07bca0068bp-7
+0x1.fca78ee29d592p-4
+0x1.eeebc1a21f54cp-4
+-0x1.f65f6a03a8ea4p-8
+0x1.7016e9d633209p-5
+0x1.41cb62f32ad45p-5
+-0x1.498d28c9bacadp-8
+0x1.9af219832443fp-9
+0x1.66e9544cdab01p-9
+-0x1.3b34fabc016c7p-8
+0x1.5f53caca947c4p-4
+0x1.3370219a2d46dp-4
+-0x1.223ef301aac73p-7
+0x1.a242840eafafap-4
+0x1.6e271a711ad79p-4
+-0x1.a232c30438c5dp-8
+0x1.f2e289d6db5cdp-5
+0x1.f15512f700c21p-5
+-0x1.055779dad3be9p-8
+0x1.16dea180ac231p-8
+0x1.1476fae2b56a1p-8
+-0x1.f3e9b7f349b63p-9
+0x1.db82b0ee615f5p-4
+0x1.dca66c69c4619p-4
+-0x1.cc6d22fa1272ep-8
+0x1.1ae4713c32e66p-3
+0x1.1c342d6ed2269p-3
+-0x1.4ba7c8f32115cp-8
+0x1.10d7934ca9d1cp-4
+0x1.04098d7d250ebp-4
+-0x1.88357c5395375p-9
+0x1.315239612eb89p-8
+0x1.22fa4533983d9p-8
+-0x1.771f5ef4776f1p-9
+0x1.03cf6b1db55e7p-3
+0x1.ef4243401e452p-4
+-0x1.597e7e21071e7p-8
+0x1.3503a83c71bbcp-3
+0x1.268858f22c6cfp-3
+-0x1.f1bf7b26198d7p-9
+0x1.6fa43ad744a01p-5
+0x1.a771beb2dcae1p-5
+-0x1.5bfe65959884ap-9
+0x1.9c480f62e1d04p-9
+0x1.daee5143937e5p-9
+-0x1.4ce4fea8ff7d4p-9
+0x1.5d55d66648671p-4
+0x1.924c8cfddf935p-4
+-0x1.32260baf5c9f7p-8
+0x1.9f21f5499b49cp-4
+0x1.de0af2f1ec741p-4
+-0x1.b9890b1bda31fp-9
+-0x1.32c7078ff3e7fp-14
+-0x1.076c1a661a065p-11
+-0x1.ca01375fc4dafp-10
+-0x1.c6dc9f646dcbp-11
+-0x1.4a235ce84b78dp-11
+-0x1.7b4572de99b24p-16
+-0x1.19060fdb48d41p-9
+-0x1.92d018f1dfa6fp-12
+-0x1.47026071947cbp-3
+-0x1.2ffe56ba564c9p-14
+-0x1.0508220f92707p-11
+-0x1.c5d93396719d5p-10
+-0x1.c2bbe8ccadecap-11
+-0x1.472466d90493ep-11
+-0x1.77d458003d675p-16
+-0x1.1679337d6f854p-9
+-0x1.8f284d40dca02p-12
+-0x1.488f5f8e88a7bp-3
+-0x1.23ab14d4821cbp-14
+-0x1.f4e594f35cae1p-12
+-0x1.b3728bcfde30ap-10
+-0x1.b07594677bd53p-11
+-0x1.39e0e038df9cep-11
+-0x1.689779a972fa4p-16
+-0x1.0b2ed35d85266p-9
+-0x1.7ef94dd34e096p-12
+-0x1.b767e88ec0fccp-3
+-0x1.2b8e38d7fe7a7p-14
+-0x1.013893d5e9ca3p-11
+-0x1.bf3907f37d80bp-10
+-0x1.bc2760e339907p-11
+-0x1.425dc5741fcd8p-11
+-0x1.7257c10b08faep-16
+-0x1.126875f087351p-9
+-0x1.895487430111ep-12
+-0x1.875ee6bbc8ac3p-3
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.0870622b0008p-6
+-0x1.092bceb8dd5bbp-4
+-0x1.3436a60f5036ep-6
+-0x1.3230ea6adc2fbp-4
+-0x1.d5b18df4368adp-6
+-0x1.c31dbf62fb3fep-4
+-0x1.fcc1c6db7c5f8p-6
+-0x1.e58c6cafd891ep-4
+-0x1.fdd726f11222fp+0
+-0x1.fa4d8d7747962p+0
+-0x1.ec8e011d6e527p+0
+-0x1.ea2b8ac801a28p+0
+0x1.0119b06d48ddap-2
+0x1.10b0218b938bfp-2
+-0x1.80f1b3277ff94p-11
+0x1.a51ec146ff18fp-3
+0x1.be8ba4082b831p-3
+-0x1.e9c205efbad41p-11
+0x1.f416cf529ee7ap-7
+0x1.08e56978672p-6
+-0x1.b477c114bf108p-10
+0x1.478ff17ea012bp-6
+0x1.5b068db7231afp-6
+-0x1.e6d813812b248p-10
+0x1.b2350980fde2dp-3
+0x1.a580f425cbea9p-3
+-0x1.f7da78cf2fcedp-11
+0x1.6237435e3598fp-3
+0x1.583632c702b87p-3
+-0x1.3b06880684c5bp-10
+0x1.9e3f46dfbecf7p-7
+0x1.943418fee79cbp-7
+-0x1.04b0fb03f3d14p-9
+0x1.0f6edd0321c63p-6
+0x1.08d384c834aaap-6
+-0x1.1fd9c77af8e93p-9
+0x1.650081214baabp-3
+0x1.39149d78185c3p-3
+-0x1.a3c8c59edd3b6p-11
+0x1.233fa78d723fp-3
+0x1.fe6d6c6c95addp-4
+-0x1.066c6a0e5f637p-10
+0x1.54ad6bb97d6d6p-7
+0x1.29972894691bap-7
+-0x1.b23ee58ff578fp-10
+0x1.be73a0aaaaf8fp-7
+0x1.86041f6d2a877p-7
+-0x1.df78bb6834b35p-10
+0x1.e1b2e667cc29ep-3
+0x1.e8d1d5435dd8bp-3
+-0x1.4c93e649efc6dp-11
+0x1.896d1e2e46123p-3
+0x1.8d725aef1d1aep-3
+-0x1.9fe1605241c01p-11
+0x1.ce42b5a1ab21p-7
+0x1.cab6720aa3351p-7
+-0x1.582da28f59dfcp-10
+0x1.2edc291787759p-6
+0x1.2ca9e0bf8d50ep-6
+-0x1.7c0ade58b506fp-10
+0x1.06a0359aee041p-2
+0x1.f4aeb20a2f1afp-3
+-0x1.f34656a89963bp-12
+0x1.ad5699fe03296p-3
+0x1.993d0e7792debp-3
+-0x1.3825578b79355p-11
+0x1.fa062c0be10c6p-7
+0x1.e2418496f1398p-7
+-0x1.024c875bd0217p-10
+0x1.4b822288e8113p-6
+0x1.3bf03e637f21fp-6
+-0x1.1d3664df5c50dp-10
+0x1.5f6b57ddd6c02p-3
+0x1.948f96b0347ecp-3
+-0x1.be71fd83fd4dbp-12
+0x1.1fc302338601ep-3
+0x1.4b51a34f9d797p-3
+-0x1.16bac99d0b37ep-11
+0x1.5585c643fe8b3p-7
+0x1.8968d7115cb23p-7
+-0x1.cc214f490ec66p-11
+0x1.bf67f2af2c943p-7
+0x1.01afd9d86df1dp-6
+-0x1.fbe5eb31f1329p-11
+-0x1.a27b754322abep-16
+-0x1.6757279b50ea5p-13
+-0x1.3863309366921p-11
+-0x1.363e6843df9f8p-12
+-0x1.c2595ea6d4801p-13
+-0x1.02afb6e0a13f9p-17
+-0x1.7f59d67a79096p-11
+-0x1.12be4297bc505p-13
+-0x1.db35c8d939a41p-5
+-0x1.9eaf42978ac08p-16
+-0x1.64145a29e90aap-13
+-0x1.358d7756e7f3cp-11
+-0x1.336da9ef17463p-12
+-0x1.be4323e96fa8bp-13
+-0x1.0056bf1e0597ep-17
+-0x1.7bdf415b139b8p-11
+-0x1.103ffd68d944p-13
+-0x1.0d4f7e88a8d9ep-4
+-0x1.8ddf19c03dcb9p-16
+-0x1.55a479db802bap-13
+-0x1.2900825e91884p-11
+-0x1.26f6c1485d2fbp-12
+-0x1.ac2b39981c413p-13
+-0x1.ebe43a6e18ebfp-18
+-0x1.6c786d64943dp-11
+-0x1.053635dc836d1p-13
+-0x1.7266f0d79ed5bp-4
+-0x1.98a175007546ap-16
+-0x1.5ee1930639f1bp-13
+-0x1.310892d202668p-11
+-0x1.2ef0b5c53991cp-12
+-0x1.b7bf526443cbfp-13
+-0x1.f93175ba21bep-18
+-0x1.76538ea68a481p-11
+-0x1.0c46823374df8p-13
+-0x1.89a64dbfcd72ep-4
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.daaab065bf5f5p-7
+-0x1.e1dfb5fd9ee9p-5
+-0x1.1375ce8728ccdp-6
+-0x1.1555eb5330f99p-4
+-0x1.a89bfe5845543p-6
+-0x1.9c322d9981af3p-4
+-0x1.ce490ac88221cp-6
+-0x1.bd6967098c9f8p-4
+-0x1.0421d0fbf7d3cp+1
+-0x1.02d2c1c9dc532p+1
+-0x1.f4ae6cefdbdaap+0
+-0x1.f0de490e90586p+0
+0x1.82539c2f4675bp-2
+0x1.9a09d4ab93ceap-2
+-0x1.5552717ac3366p-11
+0x1.62f2c0149702dp-2
+0x1.78aacf4d4f3d9p-2
+-0x1.b2408f8d35e54p-11
+0x1.0b4351fe3c365p-3
+0x1.1b4ab418f72a1p-3
+-0x1.82f9a8ac631f4p-10
+0x1.3d2c535bec90fp-4
+0x1.501bf1367c1e5p-4
+-0x1.af4e13a8a5867p-10
+0x1.4a00277e26bd8p-2
+0x1.3f5f3253e8dbep-2
+-0x1.be1f4f8d6b10ep-11
+0x1.2e531669671e8p-2
+0x1.24cf51430d299p-2
+-0x1.16f535264c6cdp-10
+0x1.bece23e7d253dp-4
+0x1.b2e94d6744d6cp-4
+-0x1.cde5d987d94ap-10
+0x1.07ff85b128131p-4
+0x1.014378142716bp-4
+-0x1.fdbeef4a46c07p-10
+0x1.0f4895c03c63dp-2
+0x1.dceadf43ec37fp-3
+-0x1.73bd52ea7e4dcp-11
+0x1.f1151382187ccp-3
+0x1.b4af399d92ff4p-3
+-0x1.d0d1a5e70ee0cp-11
+0x1.6f68b794ca8b2p-4
+0x1.418a7e677ba0ep-4
+-0x1.80be331c69107p-10
+0x1.b23270efbaab5p-5
+0x1.7ba8e03b3e43cp-5
+-0x1.a8945a8bc2388p-10
+0x1.6cd34d5bc442p-2
+0x1.7716f85bd2b1ep-2
+-0x1.267c4bdc8118p-11
+0x1.4e84d00abd277p-2
+0x1.56d03120193b9p-2
+-0x1.70486c7e4bea3p-11
+0x1.f135c06e8819cp-4
+0x1.f2ab0ba46ce84p-4
+-0x1.30eb46cac9ffep-10
+0x1.262975774135dp-4
+0x1.259053a4a8bf5p-4
+-0x1.5081e357fbb1ep-10
+0x1.8ce336a416f67p-2
+0x1.7a5e6c1186355p-2
+-0x1.ba23c1c25bb7ap-12
+0x1.6c211ab94eb99p-2
+0x1.5b20e46af1a1ap-2
+-0x1.1473528d37788p-11
+0x1.0fa421caf827bp-3
+0x1.02e82bbb79667p-3
+-0x1.c9b3c69cda7d2p-11
+0x1.41b24b293c4efp-4
+0x1.329a1584b080cp-4
+-0x1.f91a546fe2b0cp-11
+0x1.08251f40f607ep-2
+0x1.2ff9b68281971p-2
+-0x1.8bdd3519ab2e2p-12
+0x1.e55386934d3bbp-3
+0x1.1747d28223c0ep-2
+-0x1.ee4e6b7519cc5p-12
+0x1.6d2ab710c5525p-4
+0x1.a486512606dcap-4
+-0x1.98095b273398ep-11
+0x1.b14a22a06b9ffp-5
+0x1.f30acd01e44a8p-5
+-0x1.c20ea64eb8956p-11
+-0x1.a27b754322aadp-16
+-0x1.6757279b50e97p-13
+-0x1.3863309366914p-11
+-0x1.363e6843df9ecp-12
+-0x1.c2595ea6d47efp-13
+-0x1.02afb6e0a13eep-17
+-0x1.7f59d67a79087p-11
+-0x1.12be4297bc4f9p-13
+-0x1.bf018b9592888p-5
+-0x1.9eaf42978ac2ap-16
+-0x1.64145a29e90c7p-13
+-0x1.358d7756e7f56p-11
+-0x1.336da9ef1747cp-12
+-0x1.be4323e96fabp-13
+-0x1.0056bf1e05993p-17
+-0x1.7bdf415b139d7p-11
+-0x1.103ffd68d9456p-13
+-0x1.fab07e8eb835fp-5
+-0x1.8ddf19c03dcb9p-16
+-0x1.55a479db802bap-13
+-0x1.2900825e91884p-11
+-0x1.26f6c1485d2fbp-12
+-0x1.ac2b39981c413p-13
+-0x1.ebe43a6e18ebfp-18
+-0x1.6c786d64943dp-11
+-0x1.053635dc836d1p-13
+-0x1.5c8eb8f129ff8p-4
+-0x1.98a175007546ap-16
+-0x1.5ee1930639f1bp-13
+-0x1.310892d202668p-11
+-0x1.2ef0b5c53991cp-12
+-0x1.b7bf526443cbfp-13
+-0x1.f93175ba21bep-18
+-0x1.76538ea68a481p-11
+-0x1.0c46823374df8p-13
+-0x1.725af09e26c09p-4
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x0p+0
+-0x1.c4b389f24aa66p-6
+-0x1.bf06e51fc688ep-4
+-0x1.092c828b8c1eep-5
+-0x1.02aa039b28ed8p-3
+-0x1.9f866208b4527p-5
+-0x1.82f59674f7fcap-3
+-0x1.c4f1a534a574dp-5
+-0x1.a201bbad53879p-3
+-0x1.017ff20e6d3a9p+1
+-0x1.ffe972a588daap+0
+-0x1.f095b4366253p+0
+-0x1.ed7f1870d920dp+0
+0x1.427f6fdf1d8fdp-2
+0x1.562b77e688a07p-2
+-0x1.08f0e276d6335p-9
+0x1.1bb4a192296b3p-2
+-0x0p+0
+-0x1.0c8b57f2636a4p-4
+-0x0p+0
+-0x1.1f091e27068e5p-4
+-0x0p+0
+-0x1.faa585438d205p-5
+-0x0p+0
+-0x1.6c174b032b3e4p-4
+-0x0p+0
+-0x1.140ba9d29167p-2
+-0x0p+0
+-0x1.1367ee36623ffp-2
+-0x0p+0
+-0x1.0a5f14d297535p-1
+-0x0p+0
+-0x1.c4ce1a7143d63p-2
+-0x0p+0
+-0x1.48ffdff037fafp-1
+-0x0p+0
+-0x1.141ff1901c0d4p+0
+-0x0p+0
+-0x1.ac0b2af50ff22p-2
+-0x0p+0
+-0x1.9462822a62a04p-1
+-0x0p+0
+-0x1.2f608e820e0a6p+0
+-0x0p+0
+-0x1.839ddea053ecdp+0
+-0x0p+0
+-0x1.0d809d0775723p+0
+-0x0p+0
+-0x1.f91a3f27fe172p-3
+-0x0p+0
+-0x1.018e9f2406a1cp-1
+-0x0p+0
+-0x1.ff8e7be1d8b93p-2
+-0x0p+0
+-0x1.74d9157927575p-1
+-0x0p+0
+-0x1.9f861c2337d45p-1
+-0x0p+0
+-0x1.247103a7540c3p+0
+-0x0p+0
+-0x1.2c47cab37fc21p+0
+-0x0p+0
+-0x1.e4cec4c8ee11bp+0
+-0x0p+0
+-0x1.fdfd9f2471fc7p+0
+-0x0p+0
+-0x1.1327fd99dc02ep+0
+-0x0p+0
+-0x1.58962e221a6dap+0
+-0x0p+0
+-0x1.162499f79df5ep+0
+-0x0p+0
+-0x1.c3eca00e52c35p+0
+-0x0p+0
+-0x1.6468b7edb332ap+1
+-0x0p+0
+-0x1.5f2e41eb27053p+1
+-0x0p+0
+-0x1.087df774d1be3p+1
+-0x0p+0
+-0x1.2ed19db6c9bb3p+1
+-0x0p+0
+-0x1.e1549a9452852p+1
+-0x0p+0
+-0x1.2d84e15d5420dp+1
+-0x0p+0
+-0x1.f772a3b0af6e5p+0
+-0x0p+0
+-0x1.9f99e64ec5b7dp+1
+-0x0p+0
+-0x1.88233b15be065p+1
+-0x0p+0
+-0x1.62425bf341ec8p+0
+-0x0p+0
+-0x1.f6848ef08fcf4p+0
+-0x0p+0
+-0x1.ecf0b69778ff7p+0
+-0x0p+0
+-0x1.259a769221eb3p+1
+-0x0p+0
+-0x1.40f27bfa80657p+1
+-0x0p+0
+-0x1.d3d61afe16567p+1
+-0x0p+0
+-0x1.a08538b928d9bp+1
+-0x0p+0
+-0x1.16335932255a6p+2
+-0x0p+0
+-0x1.5381cd330a4a4p+2
+-0x0p+0
+-0x1.bfa605dec1cep+1
+-0x0p+0
+-0x1.c4c3d5b2af45cp+1
+-0x0p+0
+-0x1.62e3d79b13e0cp+2
+-0x0p+0
+-0x1.185d898a8ff92p+2
+-0x0p+0
+-0x1.a2f33459d65d9p+2
+-0x0p+0
+-0x1.4111a5d5fcb87p+2
+-0x0p+0
+-0x1.b006fd729c098p+1
+-0x0p+0
+-0x1.1b828cbc655a1p+2
+-0x0p+0
+-0x1.2313626804fe5p+2
+-0x0p+0
+-0x1.93b72f39760fep+2
+-0x0p+0
+-0x1.4b776ae8a3be5p+2
+-0x0p+0
+-0x1.c3dd1fe28ed66p+2
+-0x0p+0
+-0x1.e4d7849ab2972p+2
+-0x0p+0
+-0x1.48f4a3e330629p+3
+-0x0p+0
+-0x1.614791c184c36p+3
+-0x0p+0
+-0x1.1d55c8362f5e9p+3
+-0x0p+0
+-0x1.1e5604635fc09p+4
+-0x0p+0
+-0x1.79381198c0338p+2
+-0x0p+0
+-0x1.e185f1f89380cp+2
+-0x0p+0
+-0x1.d2bb6c8f0cae6p+2
+-0x0p+0
+-0x1.3fa692f60c71p+3
+-0x0p+0
+-0x1.c07b539550991p+2
+-0x0p+0
+-0x1.23bcbc0774dfbp+3
+-0x0p+0
+-0x1.3dd8c8cc70c04p+3
+-0x0p+0
+-0x1.9ebc7cbc84636p+3
+-0x0p+0
+-0x1.b36f8211b24e8p+3
+-0x0p+0
+-0x1.887451310a315p+3
+-0x0p+0
+-0x1.b3ad199f4d6ddp+4
+-0x0p+0
+-0x1.ca062a0ba3f64p+2
+-0x0p+0
+-0x1.49885de592b0cp+3
+-0x0p+0
+-0x1.e026a52cec405p+2
+-0x0p+0
+-0x1.2d2ab2c32dffbp+3
+-0x0p+0
+-0x1.e7108fd789b0ap+2
+-0x0p+0
+-0x1.6950828c01fbap+3
+-0x0p+0
+-0x1.1150e02cdc494p+3
+-0x0p+0
+-0x1.9cb9d2479ba9cp+3
+-0x0p+0
+-0x1.54a78726c976fp+3
+-0x0p+0
+-0x1.fa9783065cd9ep+2
+-0x0p+0
+-0x1.4345891a09baep+3
+-0x0p+0
+-0x1.c396fe4b83a6ap+3
+-0x0p+0
+-0x1.7b6ea1490a13fp+3
+-0x0p+0
+-0x1.330b972564418p+4
+-0x0p+0
+-0x1.5d1d6832b50fep+3
+-0x0p+0
+-0x1.f358a5ec47ed7p+3
+-0x0p+0
+-0x1.27f573cae019dp+3
+-0x0p+0
+-0x1.7eb8dd1f36b09p+3
+-0x0p+0
+-0x1.07be94db43c2fp+3
+-0x0p+0
+-0x1.3e281064310ffp+3
+-0x0p+0
+-0x1.1836ebd25c13p+3
+-0x0p+0
+-0x1.87b32eba24e7ap+3
+-0x0p+0
+-0x1.2cf2bc34ace96p+3
+-0x0p+0
+-0x1.641b4700ad8ffp+3
+-0x0p+0
+-0x1.39fc02bb861e3p+3
+-0x0p+0
+-0x1.e54e419c4e155p+3
+-0x0p+0
+-0x1.68d23d98f6d71p+3
+-0x0p+0
+-0x1.080ba03a0ca4ap+4
+-0x0p+0
+-0x1.add6de16d59b9p+3
+-0x0p+0
+-0x1.cda64816d4578p+3
+-0x0p+0
+-0x1.1678e453694b3p+4
+-0x0p+0
+-0x1.256a1efa7936p+4
+-0x0p+0
+-0x1.662f7d60ee1a6p+3
+-0x0p+0
+-0x1.013599f40e6d6p+4
+-0x0p+0
+-0x1.6caaafd109cbep+3
+-0x0p+0
+-0x1.a8c49598c90dp+3
+-0x0p+0
+-0x1.7d099327b5a03p+3
+-0x0p+0
+-0x1.38196a771c236p+4
+-0x0p+0
+-0x1.a4588cdecd6f5p+3
+-0x0p+0
+-0x1.db33c4ccbe64ap+3
+-0x0p+0
+-0x1.3a726bc50a63bp+4
+-0x0p+0
+-0x1.eeb25b7d288d4p+3
+-0x0p+0
+-0x1.79435a9e751d5p+4
+-0x0p+0
+-0x1.3ada05204c0adp+4
+-0x0p+0
+-0x1.00c0037c02d0ep+4
+-0x0p+0
+-0x1.18322aee65597p+4
+-0x0p+0
+-0x1.4edbd56db5a15p+4
+-0x0p+0
+-0x1.875fc621aa2cbp+3
+-0x0p+0
+-0x1.1d0b9224b62f8p+4
+-0x0p+0
+-0x1.6339f94962b34p+3
+-0x0p+0
+-0x1.91de10a1cdfccp+3
+-0x0p+0
+-0x1.51c90acb1464bp+3
+-0x0p+0
+-0x1.074940e9c93acp+4
+-0x0p+0
+-0x1.483d7620b682cp+3
+-0x0p+0
+-0x1.9d7130cca52bp+3
+-0x0p+0
+-0x1.b25cf451d9eb4p+3
+-0x0p+0
+-0x1.610c878c09a68p+3
+-0x0p+0
+-0x1.0570dc982e932p+4
+-0x0p+0
+-0x1.fbd3a85ea409dp+3
+-0x0p+0
+-0x1.34afe800362dp+3
+-0x0p+0
+-0x1.8a8a1f5c4ce2bp+3
+-0x0p+0
+-0x1.8a0c81c8fa57p+3
+-0x0p+0
+-0x1.526fbf47466a9p+3
+-0x0p+0
+-0x1.e911da5e48a8bp+3
+-0x0p+0
+-0x1.ec2c1d14c22d3p+3
+-0x0p+0
+-0x1.55cae171a7fb7p+3
+-0x0p+0
+-0x1.61f686d979988p+3
+-0x0p+0
+-0x1.8b7577ac0a786p+3
+-0x0p+0
+-0x1.770cdb94f1838p+3
+-0x0p+0
+-0x1.8743b6a20c82fp+3
+-0x0p+0
+-0x1.0a0e70ed77036p+4
+-0x0p+0
+-0x1.90c088fce8076p+3
+-0x0p+0
+-0x1.b6fd21631352p+3
+-0x0p+0
+-0x1.0a6f788425bdcp+4
+-0x0p+0
+-0x1.ee44a010a8fbdp+3
+-0x0p+0
+-0x1.1c3e8de97c04p+4
+-0x0p+0
+-0x1.dd8fa8563fa69p+3
+-0x0p+0
+-0x1.2bc2d8e413d4fp+4
+-0x0p+0
+-0x1.8f195a7ab187cp+4
+-0x0p+0
+-0x1.074fb11a07c08p+4
+-0x0p+0
+-0x1.5810ebbe538d2p+4
+-0x0p+0
+-0x1.31ee7633629bfp+4
+-0x0p+0
+-0x1.391d38fc4d349p+4
+-0x0p+0
+-0x1.7b9794d72c1fbp+4
+-0x0p+0
+-0x1.58b009492ff05p+4
+-0x0p+0
+-0x1.7215dfd3dd734p+3
+-0x0p+0
+-0x1.dd22fa0e22304p+3
+-0x0p+0
+-0x1.144700e0a0cdfp+4
+-0x0p+0
+-0x1.20944f1a19d58p+4
+-0x0p+0
+-0x1.7428f7ba9e589p+3
+-0x0p+0
+-0x1.005e8b59dc638p+4
+-0x0p+0
+-0x1.e482ae43711d1p+3
+-0x0p+0
+-0x1.8a1bdb24e92dfp+3
+-0x0p+0
+-0x1.cdc4cee9c8247p+3
+-0x0p+0
+-0x1.d25bfc48b2912p+3
+-0x0p+0
+-0x1.fa66e00df32f8p+3
+-0x0p+0
+-0x1.827bcb29956d4p+3
+-0x0p+0
+-0x1.d7cc2308d16a9p+3
+-0x0p+0
+-0x1.985d0fa2c53fap+3
+-0x0p+0
+-0x1.176379db79a1p+4
+-0x0p+0
+-0x1.3f09d1a4ce72fp+3
+-0x0p+0
+-0x1.90654994fbc35p+3
+-0x0p+0
+-0x1.5615a67f7a898p+3
+-0x0p+0
+-0x1.00f68d8040fc8p+4
+-0x0p+0
+-0x1.ae9b3f4c3b23bp+3
+-0x0p+0
+-0x1.2d8ccb05466b3p+3
+-0x0p+0
+-0x1.219aa28cbb9dbp+3
+-0x0p+0
+-0x1.6cca41f915794p+3
+-0x0p+0
+-0x1.27cf7a53af645p+3
+-0x0p+0
+-0x1.79598520660c1p+3
+-0x0p+0
+-0x1.4b94b23fcf2fp+3
+-0x0p+0
+-0x1.c69b4c16e39ep+3
+-0x0p+0
+-0x1.7958e84039abcp+3
+-0x0p+0
+-0x1.222110b6db4b2p+4
+-0x0p+0
+-0x1.782e5172068d7p+3
+-0x0p+0
+-0x1.296aa7e93aafap+4
+-0x0p+0
+-0x1.73eec55f3390ep+3
+-0x0p+0
+-0x1.0f9af1be32293p+4
+-0x0p+0
+-0x1.710d6941ca2ebp+3
+-0x0p+0
+-0x1.a897459f0197ep+3
+-0x0p+0
+-0x1.54fc921daec27p+3
+-0x0p+0
+-0x1.eda893ce3fee7p+3
+-0x0p+0
+-0x1.8a8a2080223fdp+3
+-0x0p+0
+-0x1.2225429e41971p+4
+-0x0p+0
+-0x1.135d3a03d7bf8p+4
+-0x0p+0
+-0x1.50b0e6078c11fp+3
+-0x0p+0
+-0x1.708d449fa4e15p+3
+-0x0p+0
+-0x1.06cbf67e9ec06p+4
+-0x0p+0
+-0x1.70bc7dec6eaaep+3
+-0x0p+0
+-0x1.04835f0e0938cp+4
+-0x0p+0
+-0x1.648ebd2c4d027p+3
+-0x0p+0
+-0x1.c4d462edf9f49p+3
+-0x0p+0
+-0x1.7da83ad2aa9dbp+4
+-0x0p+0
+-0x1.8454b3ba5f09bp+3
+-0x0p+0
+-0x1.1fc84ba057c1p+4
+-0x0p+0
+-0x1.864befed41c11p+3
+-0x0p+0
+-0x1.289c61631746fp+4
+-0x0p+0
+-0x1.4fe0382195e15p+3
+-0x0p+0
+-0x1.71c68f615000cp+3
+-0x0p+0
+-0x1.8aa714a761fdfp+3
+-0x0p+0
+-0x1.06bf192a9d9ddp+4
+-0x0p+0
+-0x1.7c42b5df98099p+3
+-0x0p+0
+-0x1.94192d95df415p+3
+-0x0p+0
+-0x1.15e079227068cp+4
+-0x0p+0
+-0x1.8a0ed47c4ca1ep+3
+-0x0p+0
+-0x1.8a4e0b61d0b3fp+3
+-0x0p+0
+-0x1.cf80658a5575dp+3
+-0x0p+0
+-0x1.8b6f7795c2665p+3
+-0x0p+0
+-0x1.e60b133d13d67p+3
+-0x0p+0
+-0x1.2d31427f227fbp+4
+-0x0p+0
+-0x1.a35024a20b4e1p+3
+-0x0p+0
+-0x1.ff9f78eb321bep+3
+-0x0p+0
+-0x1.dd2266a493a54p+3
+-0x0p+0
+-0x1.aa27e4653ac04p+3
+-0x0p+0
+-0x1.1d2a00539d38p+4
+-0x0p+0
+-0x1.e7e8ddbfe39d1p+3
+-0x0p+0
+-0x1.0f053b610bc2p+4
+-0x0p+0
+-0x1.e4ffa33d06084p+3
+-0x0p+0
+-0x1.12f77a57f2ceap+4
+-0x0p+0
+-0x1.316ec40c7dc63p+4
+-0x0p+0
+-0x1.72ae898c127c5p+4
+-0x0p+0
+-0x1.6612f69353137p+4
+-0x0p+0
+-0x1.5c356710358a5p+4
+-0x0p+0
+-0x1.430d9f506b9e4p+4
+-0x0p+0
+-0x1.04decb4894b89p+4
+-0x0p+0
+-0x1.355ccb6c1c34ep+4
+-0x0p+0
+-0x1.2596927f3ad52p+4
+-0x0p+0
+-0x1.514a5aadc710ap+4
+-0x0p+0
+-0x1.8372dba1711c4p+4
+-0x0p+0
+-0x1.3d3ce5fdc1aa1p+4
+-0x0p+0
+-0x1.bb673e0cae09bp+3
+-0x0p+0
+-0x1.e7dd46357d397p+3
+-0x0p+0
+-0x1.c2028472d13a7p+3
+-0x0p+0
+-0x1.be5cdf8540117p+3
+-0x0p+0
+-0x1.1aa341abd76bep+4
+-0x0p+0
+-0x1.f4009fbd72365p+3
+-0x0p+0
+-0x1.ec0dcb9ae35bdp+3
+-0x0p+0
+-0x1.e298f5f679519p+3
+-0x0p+0
+-0x1.84e7f5e44adcdp+3
+-0x0p+0
+-0x1.e7fd92026b017p+3
+-0x0p+0
+-0x1.02c85b60c437fp+4
+-0x0p+0
+-0x1.3efb341763b15p+4
+-0x0p+0
+-0x1.3c0624c1d9b43p+4
+-0x0p+0
+-0x1.73f91f29e05a9p+3
+-0x0p+0
+-0x1.f04c61bcf4bcp+3
+-0x0p+0
+-0x1.62efac441c4fcp+3
+-0x0p+0
+-0x1.ca9e3552b2747p+3
+-0x0p+0
+-0x1.12b867099900fp+3
+-0x0p+0
+-0x1.81f6673bbd58dp+3
+-0x0p+0
+-0x1.3dcc7445c6991p+3
+-0x0p+0
+-0x1.99f2e5b4b831bp+3
+-0x0p+0
+-0x1.51ac730a9fe62p+3
+-0x0p+0
+-0x1.b382e6d68b211p+3
+-0x0p+0
+-0x1.01934560d5fedp+3
+-0x0p+0
+-0x1.51791a0277959p+3
+-0x0p+0
+-0x1.e0cc96cc9ff9dp+2
+-0x0p+0
+-0x1.3c8c3ec7dd63fp+3
+-0x0p+0
+-0x1.6c6e034599bb7p+2
+-0x0p+0
+-0x1.19500d3262beep+3
+-0x0p+0
+-0x1.95d9095f04cd6p+2
+-0x0p+0
+-0x1.3c0258cf41532p+3
+-0x0p+0
+-0x1.d3e7d0e0c1f97p+2
+-0x0p+0
+-0x1.9daa5e5369096p+2
+-0x0p+0
+-0x1.9630ab5095e54p+2
+-0x0p+0
+-0x1.177f63758243ap+3
+-0x0p+0
+-0x1.35d7484a5915dp+2
+-0x0p+0
+-0x1.5cf99d881eaaap+2
+-0x0p+0
+-0x1.29044f458cd67p+2
+-0x0p+0
+-0x1.a1a136a07b4ffp+2
+-0x0p+0
+-0x1.128149d7d0c96p+3
+-0x0p+0
+-0x1.3db1423d17fb1p+3
+-0x0p+0
+-0x1.c59c487c10bfep+2
+-0x0p+0
+-0x1.0acd7be80b4e8p+3
+-0x0p+0
+-0x1.85b0680f3624cp+3
+-0x0p+0
+-0x1.b6286106bf587p+2
+-0x0p+0
+-0x1.35fdd65ebf95ep+3
+-0x0p+0
+-0x1.575540f4c0196p+3
+-0x0p+0
+-0x1.3829a3cf0ebf6p+2
+-0x0p+0
+-0x1.f65803f649a9dp+2
+-0x0p+0
+-0x1.15d4d5916d744p+2
+-0x0p+0
+-0x1.6ed65799fc29ep+2
+-0x0p+0
+-0x1.ff380bc8bb104p+1
+-0x0p+0
+-0x1.5177fa45ee98dp+2
+-0x0p+0
+-0x1.8f10660f12996p+1
+-0x0p+0
+-0x1.398a286e72de9p+2
+-0x0p+0
+-0x1.c7d5788afbd14p+1
+-0x0p+0
+-0x1.48cbe9b8d7a45p+2
+-0x0p+0
+-0x1.3bac9c7474a9p+2
+-0x0p+0
+-0x1.c25c4d48f068p+1
+-0x0p+0
+-0x1.cd209279b74e3p+1
+-0x0p+0
+-0x1.465751b9e579p+2
+-0x0p+0
+-0x1.198039cf0522p+2
+-0x0p+0
+-0x1.651934def7f99p+2
+-0x0p+0
+-0x1.868fc39bb3186p+2
+-0x0p+0
+-0x1.3dd8747e4aa31p+1
+-0x0p+0
+-0x1.3ed857dedf201p+1
+-0x0p+0
+-0x1.4d75de6e8956fp+1
+-0x0p+0
+-0x1.e979d69110575p+1
+-0x0p+0
+-0x1.f2bb6c01e25cep+0
+-0x0p+0
+-0x1.0d5bd89020272p+1
+-0x0p+0
+-0x1.2fbdb1826ea4dp+1
+-0x0p+0
+-0x1.7373207680bbdp+1
+-0x0p+0
+-0x1.86cfa7d9ff3ebp+1
+-0x0p+0
+-0x1.b4d0ba658b30fp+1
+-0x0p+0
+-0x1.15c087fac6e07p+2
+-0x0p+0
+-0x1.394fec1684f28p+2
+-0x0p+0
+-0x1.1e20831921af7p+2
+-0x0p+0
+-0x1.3f8525ee2f131p+2
+-0x0p+0
+-0x1.b62f06ee723fcp+2
+-0x0p+0
+-0x1.20d0fa32382a5p+1
+-0x0p+0
+-0x1.53b7512ba3043p+1
+-0x0p+0
+-0x1.7b34fa118f8ap+1
+-0x0p+0
+-0x1.05ae9d9916155p+2
+-0x0p+0
+-0x1.9843925ece04dp+1
+-0x0p+0
+-0x1.0cc8630d7540ap+2
+-0x0p+0
+-0x1.263b34ffc6a61p+2
+-0x0p+0
+-0x1.ac9284216bd45p+2
+-0x0p+0
+-0x1.bdb7f48127131p+2
+-0x0p+0
+-0x1.1c6d2ace866bcp+2
+-0x0p+0
+-0x1.4f5138dd7e7c6p+2
+-0x0p+0
+-0x1.df8788147b1b9p+2
+-0x0p+0
+-0x1.816152d2f54b7p+2
+-0x0p+0
+-0x1.23d57b1df5262p+3
+-0x0p+0
+-0x1.97ee27992e39cp+2
+-0x0p+0
+-0x1.2f92e770d35edp+3
+-0x0p+0
+-0x1.0e3bb633fe927p+4
+-0x0p+0
+-0x1.82682df4814eap+2
+-0x0p+0
+-0x1.1fa0fd74aca2ap+3
+-0x0p+0
+-0x1.4f107c1f1452dp+2
+-0x0p+0
+-0x1.c82f1ffdbf5e1p+2
+-0x0p+0
+-0x1.d979cdc900cfep+1
+-0x0p+0
+-0x1.3ebb49567413fp+2
+-0x0p+0
+-0x1.20911b4b7f598p+2
+-0x0p+0
+-0x1.953b68714df92p+2
+-0x0p+0
+-0x1.1fd9aa5dcadc7p+2
+-0x0p+0
+-0x1.81f5473e4b2bbp+2
+-0x0p+0
+-0x1.5b559327960b6p+2
+-0x0p+0
+-0x1.9364c88c4e0bbp+2
+-0x0p+0
+-0x1.fd1fc90202ccbp+2
+-0x0p+0
+-0x1.b1fcde6829d13p+2
+-0x0p+0
+-0x1.0e1be2d6d1d9bp+3
+-0x0p+0
+-0x1.28ab275e4cf44p+3
+-0x0p+0
+-0x1.62517373771d3p+2
+-0x0p+0
+-0x1.f8cab4b04bd99p+2
+-0x0p+0
+-0x1.9161239a2a54cp+2
+-0x0p+0
+-0x1.061e5a8d1ac6fp+3
+-0x0p+0
+-0x1.9d17307bba386p+2
+-0x0p+0
+-0x1.26b181a4d3e96p+3
+-0x0p+0
+-0x1.e093484132dc9p+2
+-0x0p+0
+-0x1.4289bbea2edfap+3
+-0x0p+0
+-0x1.7eacd62512f76p+3
+-0x0p+0
+-0x1.cefe33308bb22p+2
+-0x0p+0
+-0x1.66d7e2a683034p+3
+-0x0p+0
+-0x1.46fe746d72af4p+3
+-0x0p+0
+-0x1.89e2cebb34951p+3
+-0x0p+0
+-0x1.be6552a972604p+3
+-0x0p+0
+-0x1.bb7e758b7e6acp+3
+-0x0p+0
+-0x1.ebd899b2c82a9p+2
+-0x0p+0
+-0x1.1f03d100aef46p+3
+-0x0p+0
+-0x1.4c1971ad94121p+3
+-0x0p+0
+-0x1.233012f2e02c8p+3
+-0x0p+0
+-0x1.fc9be2b8ee6bcp+2
+-0x0p+0
+-0x1.75733535e354cp+3
+-0x0p+0
+-0x1.0998236c83077p+3
+-0x0p+0
+-0x1.3570c281cff26p+3
+-0x0p+0
+-0x1.2ec2d95c90942p+3
+-0x0p+0
+-0x1.d8bcf7d8642cp+3
+-0x0p+0
+-0x1.810f7ae015f4ap+3
+-0x0p+0
+-0x1.afec45334e852p+3
+-0x0p+0
+-0x1.1c2d74c5966c3p+4
+-0x0p+0
+-0x1.d4f4fc72e6af5p+3
+-0x0p+0
+-0x1.47a1469a673c3p+3
+-0x0p+0
+-0x1.01239a77e875p+4
+-0x0p+0
+-0x1.2eb5e0ae3a663p+3
+-0x0p+0
+-0x1.451f2fba95751p+3
+-0x0p+0
+-0x1.374343037e4c5p+3
+-0x0p+0
+-0x1.0215df2aff036p+4
+-0x0p+0
+-0x1.3b7e6dc215d81p+3
+-0x0p+0
+-0x1.738bc4e94046p+3
+-0x0p+0
+-0x1.c220366475a3cp+3
+-0x0p+0
+-0x1.491911b47e14fp+3
+-0x0p+0
+-0x1.c7c996441ace2p+3
+-0x0p+0
+-0x1.55503a181f35bp+3
+-0x0p+0
+-0x1.586d1866240c8p+3
+-0x0p+0
+-0x1.dde6d323d0875p+3
+-0x0p+0
+-0x1.615546a6b2aep+3
+-0x0p+0
+-0x1.948a622ce1403p+3
+-0x0p+0
+-0x1.6b6da52141f07p+3
+-0x0p+0
+-0x1.0b4eace1373c7p+4
+-0x0p+0
+-0x1.8f08e0539a7afp+3
+-0x0p+0
+-0x1.1654f56195e7ep+4
+-0x0p+0
+-0x1.5db44cb7d72bp+3
+-0x0p+0
+-0x1.aa9047a802503p+3
+-0x0p+0
+-0x1.e4a44441d4d3cp+3
+-0x0p+0
+-0x1.19c9464db8bbbp+4
+-0x0p+0
+-0x1.360ed6c13b80ep+4
+-0x0p+0
+-0x1.cb2bd7800cdefp+3
+-0x0p+0
+-0x1.0bfa26d35e615p+4
+-0x0p+0
+-0x1.1918ecc106e4cp+4
+-0x0p+0
+-0x1.23bdec98a505p+4
+-0x0p+0
+-0x1.41dcb004b9b11p+4
+-0x0p+0
+-0x1.7dcd1ea26aba4p+4
+-0x0p+0
+-0x1.468c92e631882p+5
+-0x0p+0
+-0x1.dbafb26a84722p+3
+-0x0p+0
+-0x1.4a38126427e55p+4
+-0x0p+0
+-0x1.cfa6c45514455p+3
+-0x0p+0
+-0x1.2ad402b183703p+4
+-0x0p+0
+-0x1.f81f85b8a0d79p+3
+-0x0p+0
+-0x1.52bde9a10d8d4p+4
+-0x0p+0
+-0x1.c08f43c0d8b8fp+3
+-0x0p+0
+-0x1.df9cd8f8d96fp+3
+-0x0p+0
+-0x1.2be2ce5aa08c1p+4
+-0x0p+0
+-0x1.ffdaa209ad647p+3
+-0x0p+0
+-0x1.24a0997c1c673p+4
+-0x0p+0
+-0x1.fe0e508aa2eb6p+3
+-0x0p+0
+-0x1.abb1d3c03962p+3
+-0x0p+0
+-0x1.154e83f2284e5p+4
+-0x0p+0
+-0x1.10b8f41819628p+4
+-0x0p+0
+-0x1.9658087c73c99p+3
+-0x0p+0
+-0x1.0049933d5e10cp+4
+-0x0p+0
+-0x1.1470fa3fa9a69p+4
+-0x0p+0
+-0x1.9669b6a143ae2p+3
+-0x0p+0
+-0x1.b096db55d277dp+3
+-0x0p+0
+-0x1.395027ae451e7p+4
+-0x0p+0
+-0x1.a65130580909ep+3
+-0x0p+0
+-0x1.1d6ccd940948ap+4
+-0x0p+0
+-0x1.5ee1099d44ae8p+3
+-0x0p+0
+-0x1.1fa587d970d36p+4
+-0x0p+0
+-0x1.6eadca207437ep+3
+-0x0p+0
+-0x1.e7a84ce294822p+3
+-0x0p+0
+-0x1.ec314d1b2cea8p+3
+-0x0p+0
+-0x1.3a26593873362p+4
+-0x0p+0
+-0x1.c0e158406cfd2p+3
+-0x0p+0
+-0x1.bd450c39f68bdp+4
+-0x0p+0
+-0x1.41854d4fa0ab4p+3
+-0x0p+0
+-0x1.6bfa091568435p+3
+-0x0p+0
+-0x1.59359709e00e7p+3
+-0x0p+0
+-0x1.e2c7db9b494d1p+3
+-0x0p+0
+-0x1.0e6008c5e512dp+3
+-0x0p+0
+-0x1.972ed8572e9d9p+3
+-0x0p+0
+-0x1.3dfde31276b5fp+3
+-0x0p+0
+-0x1.b0610ac75aa06p+3
+-0x0p+0
+-0x1.885a96f2afd3bp+3
+-0x0p+0
+-0x1.8a72eea9f8ebep+3
+-0x0p+0
+-0x1.fc989b4cb8778p+3
+-0x0p+0
+-0x1.fd7ea8443cf75p+3
+-0x0p+0
+-0x1.cfa8ed06fbb8ep+2
+-0x0p+0
+-0x1.16f8fbf214967p+3
+-0x0p+0
+-0x1.e299c8314e154p+2
+-0x0p+0
+-0x1.6d098a32c5b2cp+3
+-0x0p+0
+-0x1.7161794be5337p+2
+-0x0p+0
+-0x1.cb5f964eaceffp+2
+-0x0p+0
+-0x1.bb672771606bcp+2
+-0x0p+0
+-0x1.f451f6f983f5ap+2
+-0x0p+0
+-0x1.572be0da9fc21p+3
+-0x0p+0
+-0x1.0115736eb863dp+3
+-0x0p+0
+-0x1.6d2199ada896ep+3
+-0x0p+0
+-0x1.24bbb562aef13p+3
+-0x0p+0
+-0x1.632c06c0c72e3p+3
+-0x0p+0
+-0x1.162c0247a9761p+3
+-0x0p+0
+-0x1.779db88900414p+2
+-0x0p+0
+-0x1.ba3e061b57911p+2
+-0x0p+0
+-0x1.c3681ae12847fp+2
+-0x0p+0
+-0x1.37b760d7f96bep+3
+-0x0p+0
+-0x1.d3ccd0ce88297p+2
+-0x0p+0
+-0x1.3cda761e5aebdp+3
+-0x0p+0
+-0x1.5926cf7d576dap+3
+-0x0p+0
+-0x1.d61d8fa6a722ap+3
+-0x0p+0
+-0x1.ca3bb54a96d93p+3
+-0x0p+0
+-0x1.b1e9eb3b52929p+3
+-0x0p+0
+-0x1.ee7a1c6cec56ep+2
+-0x0p+0
+-0x1.4d5526ea2657bp+3
+-0x0p+0
+-0x1.eb8e11d3ac57dp+2
+-0x0p+0
+-0x1.16c6fde61b0a2p+3
+-0x0p+0
+-0x1.c440058e6eb08p+2
+-0x0p+0
+-0x1.70b117df7a3bbp+3
+-0x0p+0
+-0x1.00496f00a9c51p+3
+-0x0p+0
+-0x1.77291e058bdecp+3
+-0x0p+0
+-0x1.30ef45f5eaebp+3
+-0x0p+0
+-0x1.31bb9d4e6561p+3
+-0x0p+0
+-0x1.b04453b822a1fp+3
+-0x0p+0
+-0x1.6e60236d5b94ap+3
+-0x0p+0
+-0x1.768af21c9872ap+3
+-0x0p+0
+-0x1.0f22627733417p+4
+-0x0p+0
+-0x1.d0a8ba838e943p+3
+-0x0p+0
+-0x1.44a09d6269944p+4
+-0x0p+0
+-0x1.c9e7878d3e692p+3
+-0x0p+0
+-0x1.b33fdb68ce837p+2
+-0x0p+0
+-0x1.2f92b42e875cap+3
+-0x0p+0
+-0x1.9c6022bc858c6p+2
+-0x0p+0
+-0x1.0375514b94e49p+3
+-0x0p+0
+-0x1.6a63f85e5ae07p+2
+-0x0p+0
+-0x1.19e57b99b9965p+3
+-0x0p+0
+-0x1.513d46afb3f3ap+2
+-0x0p+0
+-0x1.9f92c37c9202cp+2
+-0x0p+0
+-0x1.c9115a9755223p+2
+-0x0p+0
+-0x1.5257f414f9067p+2
+-0x0p+0
+-0x1.e0eba110b5a71p+2
+-0x0p+0
+-0x1.48f98288a8419p+2
+-0x0p+0
+-0x1.a0a0eb97cde95p+2
+-0x0p+0
+-0x1.254b62341cf71p+3
+-0x0p+0
+-0x1.bbecbedac33eap+2
+-0x0p+0
+-0x1.1c193ae2d74c8p+3
+-0x0p+0
+-0x1.bb635ea99532cp+2
+-0x0p+0
+-0x1.432d12f54b452p+3
+-0x0p+0
+-0x1.07038a2645ccbp+3
+-0x0p+0
+-0x1.59a306a1ab5d2p+3
+-0x0p+0
+-0x1.646cbaf06c5f2p+3
+-0x0p+0
+-0x1.1c4b9a581ac7dp+3
+-0x0p+0
+-0x1.35e7557665d6p+3
+-0x0p+0
+-0x1.8726d40432322p+3
+-0x0p+0
+-0x1.73034bd5edd22p+3
+-0x0p+0
+-0x1.0013972151fc4p+4
+-0x0p+0
+-0x1.ad4e8b410c64dp+3
+-0x0p+0
+-0x1.582f186898278p+4
+-0x0p+0
+-0x1.aebf7bedd2c8ap+3
+-0x0p+0
+-0x1.49d4f83ba1a82p+4
+-0x0p+0
+-0x1.74f58ea07199p+3
+-0x0p+0
+-0x1.0522f7466b206p+4
+-0x0p+0
+-0x1.05370ddd75546p+3
+-0x0p+0
+-0x1.57d1106d034b3p+3
+-0x0p+0
+-0x1.289d660b01e63p+3
+-0x0p+0
+-0x1.564adfbc80694p+3
+-0x0p+0
+-0x1.3e7d4d25673f2p+3
+-0x0p+0
+-0x1.0a4f828805a5fp+4
+-0x0p+0
+-0x1.6c62222bdcfccp+3
+-0x0p+0
+-0x1.01a6a5cac9226p+4
+-0x0p+0
+-0x1.a2b5608e8e446p+3
+-0x0p+0
+-0x1.a24e08f4859dp+3
+-0x0p+0
+-0x1.0379cbf645e5p+4
+-0x0p+0
+-0x1.4addb6d96991ep+4
+-0x0p+0
+-0x1.4c5343d987d4dp+3
+-0x0p+0
+-0x1.d595a6aaa44e1p+3
+-0x0p+0
+-0x1.4963a0a779ac2p+3
+-0x0p+0
+-0x1.7e10dd93f0a55p+3
+-0x0p+0
+-0x1.4f73517ca317bp+3
+-0x0p+0
+-0x1.0e275cfeb3a16p+4
+-0x0p+0
+-0x1.7b94fde39ac37p+3
+-0x0p+0
+-0x1.b2afe42cbd99p+3
+-0x0p+0
+-0x1.19198583f420ap+4
+-0x0p+0
+-0x1.ae98d7ebb3aa7p+3
+-0x0p+0
+-0x1.2e3d87ac69495p+4
+-0x0p+0
+-0x1.dde197bbff5bep+3
+-0x0p+0
+-0x1.646f87f71a796p+3
+-0x0p+0
+-0x1.0cbcca4a7bb0dp+4
+-0x0p+0
+-0x1.4540f99fbe96bp+3
+-0x0p+0
+-0x1.708168ca03487p+3
+-0x0p+0
+-0x1.37425dc42f86fp+3
+-0x0p+0
+-0x1.f434652580f0ep+3
+-0x0p+0
+-0x1.3143cf986eadep+3
+-0x0p+0
+-0x1.94c9d8579d391p+3
+-0x0p+0
+-0x1.728a0d6a04c37p+3
+-0x0p+0
+-0x1.32333f1f52fa1p+3
+-0x0p+0
+-0x1.7f964d88a5f83p+3
+-0x0p+0
+-0x1.0eadaf0a5497cp+4
+-0x0p+0
+-0x1.b59b1819accbp+3
+-0x0p+0
+-0x1.37f547ec97a09p+4
+-0x0p+0
+-0x1.6526c2fad73bbp+3
+-0x0p+0
+-0x1.a23fb791c7cc5p+3
+-0x0p+0
+-0x1.28c3cd1102833p+4
+-0x0p+0
+-0x1.bbbbb8fa203bcp+3
+-0x0p+0
+-0x1.5596bc4a06608p+4
+-0x0p+0
+-0x1.8903c588957fep+3
+-0x0p+0
+-0x1.0d43b704aca11p+4
+-0x0p+0
+-0x1.5e871f2e10e2cp+3
+-0x0p+0
+-0x1.b7b24c28f0323p+3
+-0x0p+0
+-0x1.407aba7103dfdp+3
+-0x0p+0
+-0x1.570946b0d2461p+3
+-0x0p+0
+-0x1.fe287f3cc7f37p+3
+-0x0p+0
+-0x1.4b7a2fe9be057p+3
+-0x0p+0
+-0x1.7127176e71585p+3
+-0x0p+0
+-0x1.5d18b7ea44617p+3
+-0x0p+0
+-0x1.0127123433ca6p+4
+-0x0p+0
+-0x1.7a46f33decec9p+3
+-0x0p+0
+-0x1.c4a1a4d232023p+3
+-0x0p+0
+-0x1.16c3bdcdd7dd8p+4
+-0x0p+0
+-0x1.2312e0b16ec76p+4
+-0x0p+0
+-0x1.2c81a4b01cbc4p+4
+-0x0p+0
+-0x1.f4777e63341ap+3
+-0x0p+0
+-0x1.5214466fbf1c2p+4
+-0x0p+0
+-0x1.e46b4e9562bdp+3
+-0x0p+0
+-0x1.3038a7a77e1c9p+4
+-0x0p+0
+-0x1.52b2c5c77c27ap+4
+-0x0p+0
+-0x1.35657889bd7e4p+4
+-0x0p+0
+-0x1.13b017d047eb4p+5
+-0x0p+0
+-0x1.41de50997bd5cp+4
+-0x0p+0
+-0x1.51b38727f8287p+4
+-0x0p+0
+-0x1.5d42c892b4f65p+4
+-0x0p+0
+-0x1.3f39d5fd00e3p+5
+-0x0p+0
+-0x1.68a8171372ccep+4
+-0x0p+0
+-0x1.405c66348b7cap+4
+-0x0p+0
+-0x1.925c25d1a766ep+3
+-0x0p+0
+-0x1.21366fa66f873p+4
+-0x0p+0
+-0x1.c477e959ab86ep+3
+-0x0p+0
+-0x1.3abd56237d722p+4
+-0x0p+0
+-0x1.25ac90d97a42dp+4
+-0x0p+0
+-0x1.0c35c6322fdd7p+4
+-0x0p+0
+-0x1.608f004560d87p+4
+-0x0p+0
+-0x1.5b842eceb5b84p+4
+-0x0p+0
+-0x1.a6242ff3d0df6p+3
+-0x0p+0
+-0x1.1fc382d4e123dp+4
+-0x0p+0
+-0x1.a799233322b1p+3
+-0x0p+0
+-0x1.0fcc552f8168dp+4
+-0x0p+0
+-0x1.90850875abf13p+3
+-0x0p+0
+-0x1.f8e3bb34b0d0ap+3
+-0x0p+0
+-0x1.eca2d734e152bp+3
+-0x0p+0
+-0x1.94fbdf054b8c5p+3
+-0x0p+0
+-0x1.10973fa274c26p+4
+-0x0p+0
+-0x1.90e3d2919e0cp+3
+-0x0p+0
+-0x1.e3d2ef49b0a71p+3
+-0x0p+0
+-0x1.791c9c33cad9bp+3
+-0x0p+0
+-0x1.1326631d1125ap+4
+-0x0p+0
+-0x1.8b991482dc6d6p+3
+-0x0p+0
+-0x1.1f414b281d684p+4
+-0x0p+0
+-0x1.00fb0384867e1p+4
+-0x0p+0
+-0x1.8a15409f6a358p+3
+-0x0p+0
+-0x1.eb36cecd847d6p+3
+-0x0p+0
+-0x1.15cb6459ae141p+4
+-0x0p+0
+-0x1.9d5c0b752ff34p+3
+-0x0p+0
+-0x1.fa95714bd0ff9p+3
+-0x0p+0
+-0x1.0b95a47f2a383p+4
+-0x0p+0
+-0x1.eb06af4979638p+3
+-0x0p+0
+-0x1.54a8b9d6a4022p+4
+-0x0p+0
+-0x1.f77f330f7fa64p+3
+-0x0p+0
+-0x1.12e5d6da9bc9cp+4
+-0x0p+0
+-0x1.1b77b8303f31dp+4
+-0x0p+0
+-0x1.5c14e48fd0bacp+4
+-0x0p+0
+-0x1.643b9800893ap+4
+-0x0p+0
+-0x1.c66de1382e85dp+4
+-0x0p+0
+-0x1.b966bf25e6a3ep+4
+-0x0p+0
+-0x1.b47c0e1c7e5bap+3
+-0x0p+0
+-0x1.193a0a2160b53p+4
+-0x0p+0
+-0x1.01ce72f29a5bap+4
+-0x0p+0
+-0x1.568e2b0f4a695p+4
+-0x0p+0
+-0x1.0caf8ce77bf3bp+4
+-0x0p+0
+-0x1.55061327c8077p+4
+-0x0p+0
+-0x1.38a081f2de52ep+4
+-0x0p+0
+-0x1.369ad32858e14p+4
+-0x0p+0
+-0x1.1fbb6ac61923fp+5
+-0x0p+0
+-0x1.65f0d6dab2bd6p+4
+-0x0p+0
+-0x1.da5fa9832cdd9p+3
+-0x0p+0
+-0x1.e8e0adde100cfp+3
+-0x0p+0
+-0x1.241dd52b675a5p+4
+-0x0p+0
+-0x1.4d91adc17f362p+4
+-0x0p+0
+-0x1.1cd47a0d51c05p+4
+-0x0p+0
+-0x1.1ea1f6a48045fp+4
+-0x0p+0
+-0x1.810576c0e425dp+4
+-0x0p+0
+-0x1.fd52c0275e833p+3
+-0x0p+0
+-0x1.27316b3a53e7ep+4
+-0x0p+0
+-0x1.577e5673b79edp+4
+-0x0p+0
+-0x1.33d8a721e39c6p+4
+-0x0p+0
+-0x1.4d9cb43f1ef8cp+4
+-0x0p+0
+-0x1.4e7aee9db864cp+4
+-0x0p+0
+-0x1.87fe44020be6ep+4
+-0x0p+0
+-0x1.c3ad8e7edd7ap+3
+-0x0p+0
+-0x1.16cbc4d0db364p+4
+-0x0p+0
+-0x1.addfd3444d47fp+3
+-0x0p+0
+-0x1.8dbdca61bb997p+4
+-0x0p+0
+-0x1.02a06e5d5cc2ep+4
+-0x0p+0
+-0x1.59b4444140354p+4
+-0x0p+0
+-0x1.8fc98fd4defc7p+3
+-0x0p+0
+-0x1.13598747032aap+4
+-0x0p+0
+-0x1.8a931711f8b9cp+3
+-0x0p+0
+-0x1.10544f294816ep+4
+-0x0p+0
+-0x1.4d3736a026208p+3
+-0x0p+0
+-0x1.61bbc1bf15e1ep+3
+-0x0p+0
+-0x1.aec840be01154p+3
+-0x0p+0
+-0x1.ec56cdd4e9d7dp+3
+-0x0p+0
+-0x1.72b1ab445762bp+3
+-0x0p+0
+-0x1.c9757d3a7342p+3
+-0x0p+0
+-0x1.149e0100fb5dcp+4
+-0x0p+0
+-0x1.7113fa433f923p+3
+-0x0p+0
+-0x1.bbe568723887p+3
+-0x0p+0
+-0x1.1b20d89ee4ee6p+4
+-0x0p+0
+-0x1.54f558c51c465p+3
+-0x0p+0
+-0x1.11f11bcf303d5p+4
+-0x0p+0
+-0x1.639e0b58dbbcep+3
+-0x0p+0
+-0x1.b814135f0cd3p+3
+-0x0p+0
+-0x1.9959b7824f21ap+3
+-0x0p+0
+-0x1.2cdb48b48aef7p+4
+-0x0p+0
+-0x1.5a19648e3e93cp+3
+-0x0p+0
+-0x1.9c592626c4d1p+3
+-0x0p+0
+-0x1.ab131fe0267cbp+3
+-0x0p+0
+-0x1.430459c35fca4p+4
+-0x0p+0
+-0x1.11f8ae1d1c0eap+4
+-0x0p+0
+-0x1.9ba68c4c5729cp+3
+-0x0p+0
+-0x1.e42ac4a613002p+3
+-0x0p+0
+-0x1.424d43bf532d1p+4
+-0x0p+0
+-0x1.703efdfc50314p+3
+-0x0p+0
+-0x1.0833ad69238dap+4
+-0x0p+0
+-0x1.508d45f7f8e5ep+3
+-0x0p+0
+-0x1.784181f463792p+3
+-0x0p+0
+-0x1.2aa7fae17386ep+3
+-0x0p+0
+-0x1.e7b315e58d255p+3
+-0x0p+0
+-0x1.2eec263c9c863p+3
+-0x0p+0
+-0x1.83d8a66fc74e9p+3
+-0x0p+0
+-0x1.b826b2bdf53a6p+3
+-0x0p+0
+-0x1.1bf69bb56736ep+3
+-0x0p+0
+-0x1.53d26de4f0045p+3
+-0x0p+0
+-0x1.2e28e00770625p+3
+-0x0p+0
+-0x1.2c3897de4b388p+3
+-0x0p+0
+-0x1.8642b97ea9c09p+3
+-0x0p+0
+-0x1.3be131e0cf854p+3
+-0x0p+0
+-0x1.9fd71a47525cfp+3
+-0x0p+0
+-0x1.379c103cb0966p+3
+-0x0p+0
+-0x1.f646e088bf905p+3
+-0x0p+0
+-0x1.7bb8c87f40bbap+3
+-0x0p+0
+-0x1.8a0705606e9adp+3
+-0x0p+0
+-0x1.097fba5e5f8edp+4
+-0x0p+0
+-0x1.fbe488aeec994p+3
+-0x0p+0
+-0x1.37f0b6eba3504p+3
+-0x0p+0
+-0x1.e0647c11ad76fp+3
+-0x0p+0
+-0x1.0406798be54d6p+3
+-0x0p+0
+-0x1.1fad45402ca76p+3
+-0x0p+0
+-0x1.05a885226ffb1p+3
+-0x0p+0
+-0x1.aafa772bf8481p+3
+-0x0p+0
+-0x1.f4b55404cfc81p+2
+-0x0p+0
+-0x1.3fc9aec03265fp+3
+-0x0p+0
+-0x1.711e20808ab34p+3
+-0x0p+0
+-0x1.c5fb714759b6bp+2
+-0x0p+0
+-0x1.1e7cc817db8a4p+3
+-0x0p+0
+-0x1.561016f4b6767p+3
+-0x0p+0
+-0x1.8a5ad7d9f348ep+2
+-0x0p+0
+-0x1.fc8b8fccc5384p+2
+-0x0p+0
+-0x1.f98ed9c419bbep+2
+-0x0p+0
+-0x1.90f566a9f90b5p+2
+-0x0p+0
+-0x1.ce3f5cde16da7p+2
+-0x0p+0
+-0x1.29aef92b1ce31p+3
+-0x0p+0
+-0x1.d7cbf45eebe3fp+2
+-0x0p+0
+-0x1.ee35b61cb334fp+2
+-0x0p+0
+-0x1.09002054c6bebp+3
+-0x0p+0
+-0x1.33880f8819ea1p+3
+-0x0p+0
+-0x1.2e15e2f3e0ff3p+3
+-0x0p+0
+-0x1.b7d3e51cba737p+3
+-0x0p+0
+-0x1.2d840e03f3569p+3
+-0x0p+0
+-0x1.51376efbf4b61p+3
+-0x0p+0
+-0x1.29c9086edde51p+3
+-0x0p+0
+-0x1.bb471ecc97f4ep+3
+-0x0p+0
+-0x1.50c842bb1a4dfp+3
+-0x0p+0
+-0x1.c8cb7cb9caa0cp+3
+-0x0p+0
+-0x1.9a658dc11f295p+3
+-0x0p+0
+-0x1.90d1c2a813fcp+3
+-0x0p+0
+-0x1.029d583e175ap+4
+-0x0p+0
+-0x1.0bc694cdb57cap+4
+-0x0p+0
+-0x1.64c094cedb994p+4
+-0x0p+0
+-0x1.2c7ac8fa759a4p+4
+-0x0p+0
+-0x1.4a1278d458a46p+3
+-0x0p+0
+-0x1.9642796462426p+3
+-0x0p+0
+-0x1.5a16e96606b26p+3
+-0x0p+0
+-0x1.a9437dafd499cp+3
+-0x0p+0
+-0x1.266906a4b9171p+4
+-0x0p+0
+-0x1.144d123c6f4d1p+4
+-0x0p+0
+-0x1.8b5d8ffcec9bp+3
+-0x0p+0
+-0x1.20b5bc8bbe2c5p+4
+-0x0p+0
+-0x1.4835dcfb7cde3p+4
+-0x0p+0
+-0x1.317596c6c2cf8p+5
+-0x0p+0
+-0x1.6400d09b28d6p+4
+-0x0p+0
+-0x1.02ad2053d1368p+4
+-0x0p+0
+-0x1.3197d9bc2cc26p+4
+-0x0p+0
+-0x1.08eeee2f74607p+4
+-0x0p+0
+-0x1.613ab92ed481dp+4
+-0x0p+0
+-0x1.a1f14b476487dp+3
+-0x0p+0
+-0x1.161b018a900a8p+4
+-0x0p+0
+-0x1.072f6d1537262p+4
+-0x0p+0
+-0x1.647dc5c7e5a03p+4
+-0x0p+0
+-0x1.2aca65dfe2626p+4
+-0x0p+0
+-0x1.8efe7b16d4042p+3
+-0x0p+0
+-0x1.203c66e936f7bp+4
+-0x0p+0
+-0x1.588dc82fec6ffp+3
+-0x0p+0
+-0x1.a9300ef446ef5p+3
+-0x0p+0
+-0x1.2809b79ec31c1p+3
+-0x0p+0
+-0x1.c728a08e534e5p+3
+-0x0p+0
+-0x1.105c4fdf60a5dp+3
+-0x0p+0
+-0x1.538eb333bae81p+3
+-0x0p+0
+-0x1.6989fbff9034bp+3
+-0x0p+0
+-0x1.0ad518cdc2727p+3
+-0x0p+0
+-0x1.681c13a8f285p+3
+-0x0p+0
+-0x1.2d0aca7c06edap+3
+-0x0p+0
+-0x1.6e9bd8791248ep+3
+-0x0p+0
+-0x1.441076ec6cbc5p+3
+-0x0p+0
+-0x1.42e2034cf5522p+3
+-0x0p+0
+-0x1.a8e3233c1c918p+3
+-0x0p+0
+-0x1.66cefd7fd68a7p+3
+-0x0p+0
+-0x1.adecbf5e319cbp+3
+-0x0p+0
+-0x1.6cbd08f0a1171p+3
+-0x0p+0
+-0x1.ffd4235b00abcp+3
+-0x0p+0
+-0x1.a53a720926976p+3
+-0x0p+0
+-0x1.42c55545efc6ap+4
+-0x0p+0
+-0x1.1637628ad8f42p+4
+-0x0p+0
+-0x1.a68ce9da89cfp+3
+-0x0p+0
+-0x1.ec778f34344fep+3
+-0x0p+0
+-0x1.32f879ce1a633p+4
+-0x0p+0
+-0x1.dbc2b4f965e57p+3
+-0x0p+0
+-0x1.69a2258074ae4p+4
+-0x0p+0
+-0x1.2eddcbd0cffdfp+4
+-0x0p+0
+-0x1.022eb8be409a1p+4
+-0x0p+0
+-0x1.3f1beb6f3059ap+4
+-0x0p+0
+-0x1.7b7ac6eb1a9d6p+4
+-0x0p+0
+-0x1.3af48563170d6p+4
+-0x0p+0
+-0x1.38791cb954915p+4
+-0x0p+0
+-0x1.b13eabc35dcfap+3
+-0x0p+0
+-0x1.2c028c07ed1c2p+4
+-0x0p+0
+-0x1.c6f670f4c3118p+3
+-0x0p+0
+-0x1.10dbb8dfdd77bp+4
+-0x0p+0
+-0x1.ac0855a2e06bp+3
+-0x0p+0
+-0x1.e5928f6c902e5p+3
+-0x0p+0
+-0x1.39eeff8b883abp+4
+-0x0p+0
+-0x1.5f5816d48b55fp+4
+-0x0p+0
+-0x1.00e4c159198eep+4
+-0x0p+0
+-0x1.43ade2c69d181p+4
+-0x0p+0
+-0x1.6955b259e135fp+4
+-0x0p+0
+-0x1.5edd11a9b13c9p+4
+-0x0p+0
+-0x1.6f22f75bb73dep+4
+-0x0p+0
+-0x1.9bf7fb4da2c9ap+4
+-0x0p+0
+-0x1.d2a1c583bd901p+3
+-0x0p+0
+-0x1.226c4be7a319ap+4
+-0x0p+0
+-0x1.3adc7796134f6p+4
+-0x0p+0
+-0x1.ae9ec5bf87c78p+3
+-0x0p+0
+-0x1.f65626c47b215p+3
+-0x0p+0
+-0x1.071b82777f518p+4
+-0x0p+0
+-0x1.07d5b351b7af2p+4
+-0x0p+0
+-0x1.8de04856195fap+4
+-0x0p+0
+-0x1.021f37050d39ep+4
+-0x0p+0
+-0x1.70b61152d8b8ap+4
+-0x0p+0
+-0x1.e789e07191805p+3
+-0x0p+0
+-0x1.57f1d38714785p+4
+-0x0p+0
+-0x1.54ad1ac296642p+4
+-0x0p+0
+-0x1.466cfcc4e2788p+4
+-0x0p+0
+-0x1.3292b3d5591fbp+4
+-0x0p+0
+-0x1.e3c3c70a36074p+3
+-0x0p+0
+-0x1.2c5a7846e2a66p+4
+-0x0p+0
+-0x1.4d0e9317ed4c1p+4
+-0x0p+0
+-0x1.5eb81bf4bd215p+4
+-0x0p+0
+-0x1.0e73be067ae23p+4
+-0x0p+0
+-0x1.40974ea6b2333p+4
+-0x0p+0
+-0x1.1442f6e8c0abcp+4
+-0x0p+0
+-0x1.39575930bce9ap+4
+-0x0p+0
+-0x1.655aaab8ab20fp+4
+-0x0p+0
+-0x1.769f1d5a827cp+4
+-0x0p+0
+-0x1.5902b8958ac7fp+4
+-0x0p+0
+-0x1.81b1bed73f1d6p+4
+-0x0p+0
+-0x1.679ce74c29784p+4
+-0x0p+0
+-0x1.90dd7de8fb702p+4
+-0x0p+0
+-0x0p+0
+-0x1.ad54b346ef136p-3
+-0x0p+0
+-0x1.7ac4315deeba3p-3
+-0x0p+0
+-0x1.8a5f97c971b8fp-3
+-0x0p+0
+-0x1.08d752bf2c158p-1
+-0x0p+0
+-0x1.f0fc275e56a9cp-2
+-0x0p+0
+-0x1.019d93841a80dp+0
+-0x0p+0
+-0x1.4652a7207754bp-1
+-0x0p+0
+-0x1.80a59ded25d23p-1
+-0x0p+0
+-0x1.813b596b9d486p+0
+-0x0p+0
+-0x1.3bc840da03b51p-1
+-0x0p+0
+-0x1.285d94231480ap+0
+-0x0p+0
+-0x1.c3f45538bc852p+0
+-0x0p+0
+-0x1.1404d3a15673bp+1
+-0x0p+0
+-0x1.5d8546a3271c9p+0
+-0x0p+0
+-0x1.0227a187e34bep-2
+-0x0p+0
+-0x1.bf152a198c358p-2
+-0x0p+0
+-0x1.0634f5f1fbafdp-1
+-0x0p+0
+-0x1.ac046e58d8c1p-1
+-0x0p+0
+-0x1.8a404d12d94f5p-1
+-0x0p+0
+-0x1.fba57bae8bbe6p-1
+-0x0p+0
+-0x1.1eddbaf760d52p+0
+-0x0p+0
+-0x1.f37613e2c90fp+0
+-0x0p+0
+-0x1.e8a24160f915ep+0
+-0x0p+0
+-0x1.e9ff42c49cf9ep-1
+-0x0p+0
+-0x1.1ae9312f6b961p+0
+-0x0p+0
+-0x1.f43f27ac817ffp-1
+-0x0p+0
+-0x1.ab59c03ae44a5p+0
+-0x0p+0
+-0x1.64230815c07a9p+1
+-0x0p+0
+-0x1.4b726083ff2adp+1
+-0x0p+0
+-0x1.f1214dfa9ccfbp+0
+-0x0p+0
+-0x1.22560df149fecp+1
+-0x0p+0
+-0x1.d4815a666950ep+1
+-0x0p+0
+-0x1.0ce7bcf2e557ap+1
+-0x0p+0
+-0x1.a7599a00128b4p+0
+-0x0p+0
+-0x1.7aa962375fc9fp+1
+-0x0p+0
+-0x1.60d6446303e93p+1
+-0x0p+0
+-0x1.6e7a0f83e4ae3p+0
+-0x0p+0
+-0x1.18c811da7bf2p+1
+-0x0p+0
+-0x1.f2bcf6319b9b2p+0
+-0x0p+0
+-0x1.1dc0ab0edb823p+1
+-0x0p+0
+-0x1.50801a88e93cep+1
+-0x0p+0
+-0x1.f711a09621932p+1
+-0x0p+0
+-0x1.abc030df82a38p+1
+-0x0p+0
+-0x1.18b2d16158c56p+2
+-0x0p+0
+-0x1.6381b118df983p+2
+-0x0p+0
+-0x1.c5220c4d2393p+1
+-0x0p+0
+-0x1.bf22abc9f7eedp+1
+-0x0p+0
+-0x1.63f6a5393a481p+2
+-0x0p+0
+-0x1.2534a96512625p+2
+-0x0p+0
+-0x1.beae977c6017ep+2
+-0x0p+0
+-0x1.5124a9f766739p+2
+-0x0p+0
+-0x1.cf45a7382f2e5p+1
+-0x0p+0
+-0x1.2f24767851ee3p+2
+-0x0p+0
+-0x1.3d9494a8ea5d7p+2
+-0x0p+0
+-0x1.b9747d6247887p+2
+-0x0p+0
+-0x1.6dcda9d31b148p+2
+-0x0p+0
+-0x1.f8110686684ccp+2
+-0x0p+0
+-0x1.0f1996bfe3d0bp+3
+-0x0p+0
+-0x1.6cddcd55cfa44p+3
+-0x0p+0
+-0x1.8c638b581e8ffp+3
+-0x0p+0
+-0x1.44d0dbac357dbp+3
+-0x0p+0
+-0x1.474c8854271b6p+4
+-0x0p+0
+-0x1.99797756f6128p+2
+-0x0p+0
+-0x1.015602aa5506fp+3
+-0x0p+0
+-0x1.fdd12141b3adbp+2
+-0x0p+0
+-0x1.615d6198330eep+3
+-0x0p+0
+-0x1.e5cff383c6508p+2
+-0x0p+0
+-0x1.393eb2e35598bp+3
+-0x0p+0
+-0x1.5c046e525affcp+3
+-0x0p+0
+-0x1.c815b1e6eb1ecp+3
+-0x0p+0
+-0x1.e05099e607dbep+3
+-0x0p+0
+-0x1.ab92023308928p+3
+-0x0p+0
+-0x1.dd4bcce39f016p+4
+-0x0p+0
+-0x1.eca158a2b02b6p+2
+-0x0p+0
+-0x1.64bf696c73f0dp+3
+-0x0p+0
+-0x1.fe2d931fada37p+2
+-0x0p+0
+-0x1.3e1a2a50c671ap+3
+-0x0p+0
+-0x1.01ccaeb66eccfp+3
+-0x0p+0
+-0x1.7e9c77d588ff2p+3
+-0x0p+0
+-0x1.1de6afb9191ddp+3
+-0x0p+0
+-0x1.afec1b7934685p+3
+-0x0p+0
+-0x1.6113c1c51eee9p+3
+-0x0p+0
+-0x1.090dc91bccc53p+3
+-0x0p+0
+-0x1.542bfc8aad12dp+3
+-0x0p+0
+-0x1.dcb8dc866e789p+3
+-0x0p+0
+-0x1.8fea9d79bfae9p+3
+-0x0p+0
+-0x1.44e0bded26974p+4
+-0x0p+0
+-0x1.6edbe8c6369bbp+3
+-0x0p+0
+-0x1.0702c6420541cp+4
+-0x0p+0
+-0x1.351673d62882ep+3
+-0x0p+0
+-0x1.8ec4098eae7b4p+3
+-0x0p+0
+-0x1.12aa0b9298ad4p+3
+-0x0p+0
+-0x1.49655a472d1b2p+3
+-0x0p+0
+-0x1.2b49caf38f1b8p+3
+-0x0p+0
+-0x1.a2e129684a0dfp+3
+-0x0p+0
+-0x1.434b94228569fp+3
+-0x0p+0
+-0x1.7e711d4591ef5p+3
+-0x0p+0
+-0x1.536f6ed21b7c5p+3
+-0x0p+0
+-0x1.058cd2b30ace4p+4
+-0x0p+0
+-0x1.87dd0caab52b8p+3
+-0x0p+0
+-0x1.200db24a34038p+4
+-0x0p+0
+-0x1.28cb0f005a7c1p+4
+-0x0p+0
+-0x1.d03f432ee108bp+3
+-0x0p+0
+-0x1.f08cf14aa2a42p+3
+-0x0p+0
+-0x1.2def9342696dp+4
+-0x0p+0
+-0x1.3bc5451500fa8p+4
+-0x0p+0
+-0x1.85b41eb7e978dp+3
+-0x0p+0
+-0x1.1841081b8be27p+4
+-0x0p+0
+-0x1.8e6d587404ec3p+3
+-0x0p+0
+-0x1.cfb30791a1dcp+3
+-0x0p+0
+-0x1.a30d7149dbb81p+3
+-0x0p+0
+-0x1.5834088f83ce7p+4
+-0x0p+0
+-0x1.d18f02c4671a9p+3
+-0x0p+0
+-0x1.0662b1da30506p+4
+-0x0p+0
+-0x1.5d789197db7f7p+4
+-0x0p+0
+-0x1.13ab4e28c9812p+4
+-0x0p+0
+-0x1.a56085e6e2554p+4
+-0x0p+0
+-0x1.5dafd449a13a4p+4
+-0x0p+0
+-0x1.207d148ff97cp+4
+-0x0p+0
+-0x1.3b85a529e8bb8p+4
+-0x0p+0
+-0x1.7a1d2420e6592p+4
+-0x0p+0
+-0x1.ace4d7df8d404p+3
+-0x0p+0
+-0x1.3948b2705265p+4
+-0x0p+0
+-0x1.82998cc88f717p+3
+-0x0p+0
+-0x1.b403991840888p+3
+-0x0p+0
+-0x1.6e49696378013p+3
+-0x0p+0
+-0x1.1f00a57404654p+4
+-0x0p+0
+-0x1.60b656745a042p+3
+-0x0p+0
+-0x1.bcd8c850807afp+3
+-0x0p+0
+-0x1.d005dc08236b4p+3
+-0x0p+0
+-0x1.7a8233f080f46p+3
+-0x0p+0
+-0x1.175dd84c5c0f3p+4
+-0x0p+0
+-0x1.12322b0c04951p+4
+-0x0p+0
+-0x1.4894622e12d36p+3
+-0x0p+0
+-0x1.a5d1e2edddf15p+3
+-0x0p+0
+-0x1.9f8ae988a4d76p+3
+-0x0p+0
+-0x1.6863a129f153cp+3
+-0x0p+0
+-0x1.038f64b1b52b9p+4
+-0x0p+0
+-0x1.086597fa8a766p+4
+-0x0p+0
+-0x1.699a88048b7cp+3
+-0x0p+0
+-0x1.728eb49fe2953p+3
+-0x0p+0
+-0x1.a32e7002406d3p+3
+-0x0p+0
+-0x1.8ea411d8aa3fp+3
+-0x0p+0
+-0x1.a79ab570f812bp+3
+-0x0p+0
+-0x1.2081f2d59bcbep+4
+-0x0p+0
+-0x1.b10d11316ba5ep+3
+-0x0p+0
+-0x1.da170c1df343dp+3
+-0x0p+0
+-0x1.23abdeacaaaap+4
+-0x0p+0
+-0x1.01436ce246496p+4
+-0x0p+0
+-0x1.6ad6e5c708353p+4
+-0x0p+0
+-0x1.1bed13b9e12bcp+4
+-0x0p+0
+-0x1.077709ef58378p+4
+-0x0p+0
+-0x1.308e68864b61bp+4
+-0x0p+0
+-0x1.3af82b5e6cfa1p+4
+-0x0p+0
+-0x1.faa8dafad3be3p+3
+-0x0p+0
+-0x1.5e3457ecca5dcp+4
+-0x0p+0
+-0x1.4d890eaa792abp+4
+-0x0p+0
+-0x1.bd4aa84ee76c8p+4
+-0x0p+0
+-0x1.232159df4e1b9p+4
+-0x0p+0
+-0x1.7d37fd463859fp+4
+-0x0p+0
+-0x1.50d1910e7666bp+4
+-0x0p+0
+-0x1.59271b5d338bep+4
+-0x0p+0
+-0x1.a402c59ff27b5p+4
+-0x0p+0
+-0x1.7a3c5613c010dp+4
+-0x0p+0
+-0x1.62b4ed61bc4f2p+4
+-0x0p+0
+-0x1.942f5ea48810ap+4
+-0x0p+0
+-0x1.84278996cc377p+3
+-0x0p+0
+-0x1.3b4d65ad7b772p+4
+-0x0p+0
+-0x1.f4a0203aacbc8p+3
+-0x0p+0
+-0x1.20bec90c36175p+4
+-0x0p+0
+-0x1.2eb41dc39525dp+4
+-0x0p+0
+-0x1.83722fb59b3c7p+3
+-0x0p+0
+-0x1.09ac4fdde8214p+4
+-0x0p+0
+-0x1.f8e31060edae7p+3
+-0x0p+0
+-0x1.999052b0af941p+3
+-0x0p+0
+-0x1.dfd18efee19fp+3
+-0x0p+0
+-0x1.e1651efee1284p+3
+-0x0p+0
+-0x1.08ba2804a615dp+4
+-0x0p+0
+-0x1.d44e178a919f3p+3
+-0x0p+0
+-0x1.23c88335464eep+4
+-0x0p+0
+-0x1.902fcd869b9d2p+3
+-0x0p+0
+-0x1.8e363fb71b9ecp+3
+-0x0p+0
+-0x1.e4b1d894a9ddfp+3
+-0x0p+0
+-0x1.a36c9faa236acp+3
+-0x0p+0
+-0x1.2003faa313bc8p+4
+-0x0p+0
+-0x1.44dcb10e4d714p+3
+-0x0p+0
+-0x1.95e7fd52dc2fdp+3
+-0x0p+0
+-0x1.5b94cc64684c5p+3
+-0x0p+0
+-0x1.068d1d5c1d6f6p+4
+-0x0p+0
+-0x1.b2819936f6a3p+3
+-0x0p+0
+-0x1.32a990cba160cp+3
+-0x0p+0
+-0x1.241ed5093602cp+3
+-0x0p+0
+-0x1.6cb9aa50e0e09p+3
+-0x0p+0
+-0x1.2b762cc55db7cp+3
+-0x0p+0
+-0x1.7bb6df66fc7a2p+3
+-0x0p+0
+-0x1.53a632ae41f9ap+3
+-0x0p+0
+-0x1.d3fe1252eceep+3
+-0x0p+0
+-0x1.84a8542a09b56p+3
+-0x0p+0
+-0x1.2d031266ce97cp+4
+-0x0p+0
+-0x1.821a9f6079b87p+3
+-0x0p+0
+-0x1.32b8cd5e36ce7p+4
+-0x0p+0
+-0x1.7ad0b11849888p+3
+-0x0p+0
+-0x1.1663250e6ea9fp+4
+-0x0p+0
+-0x1.755f46b0971d6p+3
+-0x0p+0
+-0x1.aad49c1840ea1p+3
+-0x0p+0
+-0x1.59ad9ee341ec5p+3
+-0x0p+0
+-0x1.f74903cbf560dp+3
+-0x0p+0
+-0x1.90d59193f4daep+3
+-0x0p+0
+-0x1.276a0c90a4dcep+4
+-0x0p+0
+-0x1.193383f9cc709p+4
+-0x0p+0
+-0x1.53fe206b1ff0bp+3
+-0x0p+0
+-0x1.71da1c2f3ae8ap+3
+-0x0p+0
+-0x1.07d011975459fp+4
+-0x0p+0
+-0x1.700e908fe68ccp+3
+-0x0p+0
+-0x1.02e4f6b09b4eap+4
+-0x0p+0
+-0x1.64a9f2e5d9d21p+3
+-0x0p+0
+-0x1.c387699b0a404p+3
+-0x0p+0
+-0x1.7ad3148e65fbfp+4
+-0x0p+0
+-0x1.87389b05e08d9p+3
+-0x0p+0
+-0x1.22eaa7d542ecp+4
+-0x0p+0
+-0x1.8acc3d640160cp+3
+-0x0p+0
+-0x1.2daf889421126p+4
+-0x0p+0
+-0x1.528c16e44ccdep+3
+-0x0p+0
+-0x1.717d768747c37p+3
+-0x0p+0
+-0x1.8fb8e320d2ad5p+3
+-0x0p+0
+-0x1.0ba8d2c8e62ep+4
+-0x0p+0
+-0x1.804340549375bp+3
+-0x0p+0
+-0x1.9558f15774addp+3
+-0x0p+0
+-0x1.19d1ddd9c7923p+4
+-0x0p+0
+-0x1.8ff11ed508563p+3
+-0x0p+0
+-0x1.1f0ded156a3f5p+4
+-0x0p+0
+-0x1.8ea218591e70cp+3
+-0x0p+0
+-0x1.d16d46afa53a5p+3
+-0x0p+0
+-0x1.91f9f0bd760a7p+3
+-0x0p+0
+-0x1.34a0a4a39aac6p+4
+-0x0p+0
+-0x1.eecb464fe0f41p+3
+-0x0p+0
+-0x1.2e4dfc4d8ea05p+4
+-0x0p+0
+-0x1.30f67465b5ca6p+4
+-0x0p+0
+-0x1.36e173e5bf49ep+4
+-0x0p+0
+-0x1.17a418adcaa87p+5
+-0x0p+0
+-0x1.a99d30f09116bp+3
+-0x0p+0
+-0x1.01ca2b30af573p+4
+-0x0p+0
+-0x1.e7a5e8b30e0e6p+3
+-0x0p+0
+-0x1.647ae051e0e4bp+4
+-0x0p+0
+-0x1.b44a3817b2249p+3
+-0x0p+0
+-0x1.22777f1d6a3d1p+4
+-0x0p+0
+-0x1.f192426a6d405p+3
+-0x0p+0
+-0x1.6405191d7836p+4
+-0x0p+0
+-0x1.f57b2ebb9adb1p+3
+-0x0p+0
+-0x1.156c31c06bcabp+4
+-0x0p+0
+-0x1.7f45bc41055dbp+4
+-0x0p+0
+-0x1.f176ebc4201b2p+3
+-0x0p+0
+-0x1.1937c448efe4cp+4
+-0x0p+0
+-0x1.3a1b1a37997bp+4
+-0x0p+0
+-0x1.7d2913be827d5p+4
+-0x0p+0
+-0x1.714358e66455bp+4
+-0x0p+0
+-0x1.02df54f590cd9p+4
+-0x0p+0
+-0x1.659ddc2366dd8p+4
+-0x0p+0
+-0x1.6e981618982e9p+4
+-0x0p+0
+-0x1.84a41e7fc33a7p+4
+-0x0p+0
+-0x1.46613d0d98d07p+4
+-0x0p+0
+-0x1.c2894cdb02da9p+3
+-0x0p+0
+-0x1.34ee7755672b3p+4
+-0x0p+0
+-0x1.fb05daa4adbf7p+3
+-0x0p+0
+-0x1.497aefc64ddb2p+4
+-0x0p+0
+-0x1.7bcd7d0214579p+4
+-0x0p+0
+-0x1.0b246aae0e602p+4
+-0x0p+0
+-0x1.7835d69c97c7p+4
+-0x0p+0
+-0x1.3b6273cdef52fp+4
+-0x0p+0
+-0x1.2c72981b17ad4p+4
+-0x0p+0
+-0x1.57a25dd6fdbe4p+4
+-0x0p+0
+-0x1.8e6a363f7c7fp+4
+-0x0p+0
+-0x1.5922fd8fba3c7p+4
+-0x0p+0
+-0x1.f493b73f3d85p+3
+-0x0p+0
+-0x1.4ce098ecafa29p+4
+-0x0p+0
+-0x1.d1afb08ea5f97p+3
+-0x0p+0
+-0x1.52dbaaa4de445p+4
+-0x0p+0
+-0x1.fd629ae4ae912p+3
+-0x0p+0
+-0x1.d9b5a5978dec6p+3
+-0x0p+0
+-0x1.d20ab22690367p+3
+-0x0p+0
+-0x1.2777a5cfe2e18p+4
+-0x0p+0
+-0x1.056c150dc483cp+4
+-0x0p+0
+-0x1.fdf0f760e10b2p+3
+-0x0p+0
+-0x1.cb77818ef2a51p+3
+-0x0p+0
+-0x1.0979ab05fd6fbp+4
+-0x0p+0
+-0x1.f5d313a4d4f0ap+3
+-0x0p+0
+-0x1.4d2a5534011fp+4
+-0x0p+0
+-0x1.91a49e9a422a6p+3
+-0x0p+0
+-0x1.f827debaf9d41p+3
+-0x0p+0
+-0x1.0b5675be89e5cp+4
+-0x0p+0
+-0x1.48664f83f1c36p+4
+-0x0p+0
+-0x1.46205e10393c1p+4
+-0x0p+0
+-0x1.46cfefe53432fp+5
+-0x0p+0
+-0x1.7d463e72f754p+3
+-0x0p+0
+-0x1.fc940d9c47094p+3
+-0x0p+0
+-0x1.69a5853e0417fp+3
+-0x0p+0
+-0x1.d44dea75aded2p+3
+-0x0p+0
+-0x1.152f62c83106cp+3
+-0x0p+0
+-0x1.853db134f3234p+3
+-0x0p+0
+-0x1.418509c660fdcp+3
+-0x0p+0
+-0x1.9f921bf7c4e68p+3
+-0x0p+0
+-0x1.530c8a40adb17p+3
+-0x0p+0
+-0x1.bc60d0adb09dep+3
+-0x0p+0
+-0x1.0115d746afffbp+3
+-0x0p+0
+-0x1.51d54d4a5c187p+3
+-0x0p+0
+-0x1.d9f8c2b0a7addp+2
+-0x0p+0
+-0x1.37da0abf0fd0bp+3
+-0x0p+0
+-0x1.62d8f80ce32b3p+2
+-0x0p+0
+-0x1.13d3dcfe03937p+3
+-0x0p+0
+-0x1.870698952ae8fp+2
+-0x0p+0
+-0x1.33de521776ea1p+3
+-0x0p+0
+-0x1.bf49a30fc3fp+2
+-0x0p+0
+-0x1.8a335c10722abp+2
+-0x0p+0
+-0x1.81fe9a082c2d1p+2
+-0x0p+0
+-0x1.0a4662807978cp+3
+-0x0p+0
+-0x1.2afc8f069d1bcp+2
+-0x0p+0
+-0x1.4d48935f945eep+2
+-0x0p+0
+-0x1.20558b365636ap+2
+-0x0p+0
+-0x1.99d681343ed9fp+2
+-0x0p+0
+-0x1.0cd554e816d0ap+3
+-0x0p+0
+-0x1.3b02fb5b3c833p+3
+-0x0p+0
+-0x1.bd5dba2ceda5ap+2
+-0x0p+0
+-0x1.03b5a495867ebp+3
+-0x0p+0
+-0x1.8276db4e8ca8fp+3
+-0x0p+0
+-0x1.aeb98d812c306p+2
+-0x0p+0
+-0x1.30d6b81c44accp+3
+-0x0p+0
+-0x1.552e6864573d7p+3
+-0x0p+0
+-0x1.2eb8368530d2fp+2
+-0x0p+0
+-0x1.ea9039b87ab98p+2
+-0x0p+0
+-0x1.07fa68a1cac8ap+2
+-0x0p+0
+-0x1.5ce466e10d685p+2
+-0x0p+0
+-0x1.ddfa3bcf20513p+1
+-0x0p+0
+-0x1.3df9c77b444e9p+2
+-0x0p+0
+-0x1.6b3f15c83f3e1p+1
+-0x0p+0
+-0x1.1feae10bb1264p+2
+-0x0p+0
+-0x1.9e5592c779c11p+1
+-0x0p+0
+-0x1.31eff2377fa34p+2
+-0x0p+0
+-0x1.1d8e30c4267c6p+2
+-0x0p+0
+-0x1.9324b46d1a679p+1
+-0x0p+0
+-0x1.8e31974e152a1p+1
+-0x0p+0
+-0x1.296c6042f8c7fp+2
+-0x0p+0
+-0x1.003111b1fec1ep+2
+-0x0p+0
+-0x1.4518ea5b1059cp+2
+-0x0p+0
+-0x1.6b787576a2c9p+2
+-0x0p+0
+-0x1.1768938a2d0e6p+1
+-0x0p+0
+-0x1.0df3bdfd33c0cp+1
+-0x0p+0
+-0x1.290a910e0620cp+1
+-0x0p+0
+-0x1.bf362fff512a5p+1
+-0x0p+0
+-0x1.b5356bdf49cdp+0
+-0x0p+0
+-0x1.c363faaad8e74p+0
+-0x0p+0
+-0x1.0cd37d4749b97p+1
+-0x0p+0
+-0x1.4cb756fc43b1dp+1
+-0x0p+0
+-0x1.5036eab0187e1p+1
+-0x0p+0
+-0x1.938ab55754c43p+1
+-0x0p+0
+-0x1.00f8929f0e04p+2
+-0x0p+0
+-0x1.27d5b7f516a1p+2
+-0x0p+0
+-0x1.0c2b5115cf443p+2
+-0x0p+0
+-0x1.270b53905157p+2
+-0x0p+0
+-0x1.a6151999a6754p+2
+-0x0p+0
+-0x1.0921a3c1671fbp+1
+-0x0p+0
+-0x1.3eaa52aa9cdf5p+1
+-0x0p+0
+-0x1.64c64900aaf0ep+1
+-0x0p+0
+-0x1.e9d77d2788e87p+1
+-0x0p+0
+-0x1.8ea0de358eb6ap+1
+-0x0p+0
+-0x1.093c9388d2179p+2
+-0x0p+0
+-0x1.23e01ddb3cap+2
+-0x0p+0
+-0x1.a6af143a861bp+2
+-0x0p+0
+-0x1.c21ba5a01f13cp+2
+-0x0p+0
+-0x1.1a8f494d2fddep+2
+-0x0p+0
+-0x1.533d6c30c7f7ap+2
+-0x0p+0
+-0x1.eb30a34d6db52p+2
+-0x0p+0
+-0x1.88673d9a2ca85p+2
+-0x0p+0
+-0x1.2da311f326d6ap+3
+-0x0p+0
+-0x1.9b615d2a9339ap+2
+-0x0p+0
+-0x1.3528e3a770b3dp+3
+-0x0p+0
+-0x1.164d6d326989ap+4
+-0x0p+0
+-0x1.7f77b49e1213dp+2
+-0x0p+0
+-0x1.1cb2843444093p+3
+-0x0p+0
+-0x1.49b3a697df0a8p+2
+-0x0p+0
+-0x1.bc92c0bb9d60ap+2
+-0x0p+0
+-0x1.d43d1c9d831f8p+1
+-0x0p+0
+-0x1.37bc57d3a641cp+2
+-0x0p+0
+-0x1.254db8e96dc7ap+2
+-0x0p+0
+-0x1.a03ea1bddc33ep+2
+-0x0p+0
+-0x1.2942134845cf9p+2
+-0x0p+0
+-0x1.8b4e904858eb3p+2
+-0x0p+0
+-0x1.6fa67c3d3d384p+2
+-0x0p+0
+-0x1.ab99aca19055fp+2
+-0x0p+0
+-0x1.0f77742d98dedp+3
+-0x0p+0
+-0x1.d1b82395fd9cbp+2
+-0x0p+0
+-0x1.1f9e736212b84p+3
+-0x0p+0
+-0x1.446f4f56e6572p+3
+-0x0p+0
+-0x1.6feaf25ba5f55p+2
+-0x0p+0
+-0x1.08e2a770123e4p+3
+-0x0p+0
+-0x1.9e24078823155p+2
+-0x0p+0
+-0x1.0bf4b2b861c8ep+3
+-0x0p+0
+-0x1.acbf69235d69cp+2
+-0x0p+0
+-0x1.31cb169b5d4f3p+3
+-0x0p+0
+-0x1.ef9e05d7991eep+2
+-0x0p+0
+-0x1.4b47386fbb8fap+3
+-0x0p+0
+-0x1.8daf38fd832c7p+3
+-0x0p+0
+-0x1.d92557d116799p+2
+-0x0p+0
+-0x1.6d82e674f464fp+3
+-0x0p+0
+-0x1.50e9ec2217ccep+3
+-0x0p+0
+-0x1.979bdbce9ef3cp+3
+-0x0p+0
+-0x1.ca1bbced6198p+3
+-0x0p+0
+-0x1.cbb28e2f38f36p+3
+-0x0p+0
+-0x1.f067ad438a4bap+2
+-0x0p+0
+-0x1.1f31122072cf2p+3
+-0x0p+0
+-0x1.4d9eb914a1688p+3
+-0x0p+0
+-0x1.276be2f676acp+3
+-0x0p+0
+-0x1.0bb68375dde7fp+3
+-0x0p+0
+-0x1.8a935b8b4abf7p+3
+-0x0p+0
+-0x1.19d1dcd4e08c9p+3
+-0x0p+0
+-0x1.47af2e18fabb3p+3
+-0x0p+0
+-0x1.4515736d45c68p+3
+-0x0p+0
+-0x1.fba87acd09c61p+3
+-0x0p+0
+-0x1.a13b214c39185p+3
+-0x0p+0
+-0x1.d4e215e55d5edp+3
+-0x0p+0
+-0x1.361e955756392p+4
+-0x0p+0
+-0x1.fb32d75af0be1p+3
+-0x0p+0
+-0x1.611841546ed12p+3
+-0x0p+0
+-0x1.168cd98a39fadp+4
+-0x0p+0
+-0x1.4510fa9c51f26p+3
+-0x0p+0
+-0x1.5b24a93cff061p+3
+-0x0p+0
+-0x1.4f9956dcf28dap+3
+-0x0p+0
+-0x1.187be3f010cdbp+4
+-0x0p+0
+-0x1.534a2dc968af8p+3
+-0x0p+0
+-0x1.8bc3c3ffb58f7p+3
+-0x0p+0
+-0x1.e550ca57249b3p+3
+-0x0p+0
+-0x1.64a33a993badp+3
+-0x0p+0
+-0x1.f31d534362b39p+3
+-0x0p+0
+-0x1.7070adcebd7a2p+3
+-0x0p+0
+-0x1.72638788c3e27p+3
+-0x0p+0
+-0x1.01bdebee4ec68p+4
+-0x0p+0
+-0x1.7a37604005407p+3
+-0x0p+0
+-0x1.aff3474dd5e06p+3
+-0x0p+0
+-0x1.84ca6fdd4bfb7p+3
+-0x0p+0
+-0x1.1d456d46e347bp+4
+-0x0p+0
+-0x1.a9270ea3d6871p+3
+-0x0p+0
+-0x1.2940343f24c0ap+4
+-0x0p+0
+-0x1.59d8374a87022p+4
+-0x0p+0
+-0x1.715ff33d932a5p+3
+-0x0p+0
+-0x1.c101b7f8acb59p+3
+-0x0p+0
+-0x1.ff5c956b902bep+3
+-0x0p+0
+-0x1.7a0e2850458acp+4
+-0x0p+0
+-0x1.2794e0bfb7984p+4
+-0x0p+0
+-0x1.47e603587e509p+4
+-0x0p+0
+-0x1.e3e78c11ca12bp+3
+-0x0p+0
+-0x1.1ad43436d8befp+4
+-0x0p+0
+-0x1.266f881bd5ba8p+4
+-0x0p+0
+-0x1.65dfe7555797ep+4
+-0x0p+0
+-0x1.cb12b65cd443ep+3
+-0x0p+0
+-0x1.01a3353aeadfdp+4
+-0x0p+0
+-0x1.3bbd12d7f7be2p+4
+-0x0p+0
+-0x1.3f1605b79a723p+4
+-0x0p+0
+-0x1.4c1ee5e73a939p+4
+-0x0p+0
+-0x1.5ff6b75a0afbep+4
+-0x0p+0
+-0x1.a5078bf534d94p+4
+-0x0p+0
+-0x1.68f6fc36d2053p+5
+-0x0p+0
+-0x1.429c289ff64f9p+4
+-0x0p+0
+-0x1.59dbf7039be35p+4
+-0x0p+0
+-0x1.eb60ef2a67becp+3
+-0x0p+0
+-0x1.5361c0e570b7p+4
+-0x0p+0
+-0x1.df3032e2eb32ap+3
+-0x0p+0
+-0x1.3337cf7dc0f43p+4
+-0x0p+0
+-0x1.066937735376ep+4
+-0x0p+0
+-0x1.614af6b21dd64p+4
+-0x0p+0
+-0x1.cb649db0bd55bp+3
+-0x0p+0
+-0x1.e9a200bba69dfp+3
+-0x0p+0
+-0x1.32c4732e07103p+4
+-0x0p+0
+-0x1.0373639583a69p+4
+-0x0p+0
+-0x1.2bcfe0d683dfbp+4
+-0x0p+0
+-0x1.d2aeb230b0fa7p+3
+-0x0p+0
+-0x1.09b9b426cdc4dp+4
+-0x0p+0
+-0x1.774c387976026p+4
+-0x0p+0
+-0x1.8d819166c1debp+4
+-0x0p+0
+-0x1.ba2d7527c3d49p+3
+-0x0p+0
+-0x1.1de7e97d123e6p+4
+-0x0p+0
+-0x1.1a25cc3dc17d9p+4
+-0x0p+0
+-0x1.a282b0fe097bcp+3
+-0x0p+0
+-0x1.0620e2ef2ab79p+4
+-0x0p+0
+-0x1.1d5ca28857f7ep+4
+-0x0p+0
+-0x1.a3fd4e4a18707p+3
+-0x0p+0
+-0x1.4d278625e5581p+4
+-0x0p+0
+-0x1.bd282d5dc0528p+3
+-0x0p+0
+-0x1.4359fe352cb34p+4
+-0x0p+0
+-0x1.b010c421297d6p+3
+-0x0p+0
+-0x1.23b04eac05561p+4
+-0x0p+0
+-0x1.65976cf69e0dfp+3
+-0x0p+0
+-0x1.26ae47c9e1965p+4
+-0x0p+0
+-0x1.749b509739ac4p+3
+-0x0p+0
+-0x1.edf38a037ad91p+3
+-0x0p+0
+-0x1.f7fe68f077ef4p+3
+-0x0p+0
+-0x1.50b19822cbca6p+4
+-0x0p+0
+-0x1.416ccebda58c9p+4
+-0x0p+0
+-0x1.366ea1544e6a1p+4
+-0x0p+0
+-0x1.c5e739ed8d42bp+3
+-0x0p+0
+-0x1.c1f2c67842c0dp+4
+-0x0p+0
+-0x1.452d3dc985dbbp+3
+-0x0p+0
+-0x1.6ea1cce7ac40cp+3
+-0x0p+0
+-0x1.5cb4363c3d82ap+3
+-0x0p+0
+-0x1.ea219f7fc7173p+3
+-0x0p+0
+-0x1.0f208ec925294p+3
+-0x0p+0
+-0x1.9a5ab461a6531p+3
+-0x0p+0
+-0x1.3f3badab600fdp+3
+-0x0p+0
+-0x1.b150c995e504p+3
+-0x0p+0
+-0x1.874327c3cc909p+3
+-0x0p+0
+-0x1.9159f91f47328p+3
+-0x0p+0
+-0x1.046f90212052cp+4
+-0x0p+0
+-0x1.0448964a738dep+4
+-0x0p+0
+-0x1.ca357d3087ce2p+2
+-0x0p+0
+-0x1.12a05316e7ee2p+3
+-0x0p+0
+-0x1.d9ed3a6afeb64p+2
+-0x0p+0
+-0x1.68caa292ed32bp+3
+-0x0p+0
+-0x1.655951abd0a39p+2
+-0x0p+0
+-0x1.b6a3267b2d91p+2
+-0x0p+0
+-0x1.ad1c3fa3f3372p+2
+-0x0p+0
+-0x1.de7db46c7db6fp+2
+-0x0p+0
+-0x1.4d93f9401649cp+3
+-0x0p+0
+-0x1.f846fc5a23e2ep+2
+-0x0p+0
+-0x1.6a1c0701ba006p+3
+-0x0p+0
+-0x1.1ece40f51c4c5p+3
+-0x0p+0
+-0x1.5f1376327c775p+3
+-0x0p+0
+-0x1.0dfc8e9b12ff4p+3
+-0x0p+0
+-0x1.6c858b25305aep+2
+-0x0p+0
+-0x1.a8b6485b9724fp+2
+-0x0p+0
+-0x1.bcd85ce8fb8abp+2
+-0x0p+0
+-0x1.354fa9bd292efp+3
+-0x0p+0
+-0x1.d04ba0e18b7f3p+2
+-0x0p+0
+-0x1.388f8f4e2334ep+3
+-0x0p+0
+-0x1.5a441f35f3064p+3
+-0x0p+0
+-0x1.da24523395e43p+3
+-0x0p+0
+-0x1.ce16101bafdffp+3
+-0x0p+0
+-0x1.b25a72b992036p+3
+-0x0p+0
+-0x1.ee30a0ac1cf8ap+2
+-0x0p+0
+-0x1.4ffb1fb9c9462p+3
+-0x0p+0
+-0x1.ea95e8b24ce2ep+2
+-0x0p+0
+-0x1.1495ab0ba05efp+3
+-0x0p+0
+-0x1.c812d31f72aecp+2
+-0x0p+0
+-0x1.773769888d5d1p+3
+-0x0p+0
+-0x1.02a0df0ef10d2p+3
+-0x0p+0
+-0x1.7af0036b49d5cp+3
+-0x0p+0
+-0x1.3094807fe1ddfp+3
+-0x0p+0
+-0x1.38f10da0e3b3ep+3
+-0x0p+0
+-0x1.bb665a5f6635dp+3
+-0x0p+0
+-0x1.77d2ef84a438dp+3
+-0x0p+0
+-0x1.830a56a243311p+3
+-0x0p+0
+-0x1.18abb61c6e6a5p+4
+-0x0p+0
+-0x1.e30d452df2a22p+3
+-0x0p+0
+-0x1.53217b3e8d345p+4
+-0x0p+0
+-0x1.dbed98f40f536p+3
+-0x0p+0
+-0x1.b7f3358dc0a96p+2
+-0x0p+0
+-0x1.36845f5ddc0b4p+3
+-0x0p+0
+-0x1.9c04ec631b329p+2
+-0x0p+0
+-0x1.ffe8b6ba13e79p+2
+-0x0p+0
+-0x1.6c3d1ee9afc44p+2
+-0x0p+0
+-0x1.1f32e74f1d81dp+3
+-0x0p+0
+-0x1.4db5760c5bd7ap+2
+-0x0p+0
+-0x1.93a389a5caea1p+2
+-0x0p+0
+-0x1.c8253cb8597dfp+2
+-0x0p+0
+-0x1.4f73ce59911b3p+2
+-0x0p+0
+-0x1.e78edd63fba2ep+2
+-0x0p+0
+-0x1.3ee6d6330fd1p+2
+-0x0p+0
+-0x1.a5c4f2b0edabdp+2
+-0x0p+0
+-0x1.2ccc902224c0fp+3
+-0x0p+0
+-0x1.bec2e3e993296p+2
+-0x0p+0
+-0x1.1b62aa4418df6p+3
+-0x0p+0
+-0x1.c217d52302d02p+2
+-0x0p+0
+-0x1.490d13a2e7d9bp+3
+-0x0p+0
+-0x1.096f527589edep+3
+-0x0p+0
+-0x1.59ded6924f5bbp+3
+-0x0p+0
+-0x1.66decbed1ba71p+3
+-0x0p+0
+-0x1.21d8f016da0d1p+3
+-0x0p+0
+-0x1.3eb49736bb117p+3
+-0x0p+0
+-0x1.92ca5dd087a4ep+3
+-0x0p+0
+-0x1.806cfb9c7e19fp+3
+-0x0p+0
+-0x1.0b04dc454276ap+4
+-0x0p+0
+-0x1.bcaff76c81844p+3
+-0x0p+0
+-0x1.665feb0b1718p+4
+-0x0p+0
+-0x1.bb5293ccc3956p+3
+-0x0p+0
+-0x1.53eff36640822p+4
+-0x0p+0
+-0x1.7ccc04c4d4d29p+3
+-0x0p+0
+-0x1.095dfa155e2a5p+4
+-0x0p+0
+-0x1.0c6da89fb745ep+3
+-0x0p+0
+-0x1.6499015938323p+3
+-0x0p+0
+-0x1.30ab72e95f894p+3
+-0x0p+0
+-0x1.5d16597b9c12dp+3
+-0x0p+0
+-0x1.4a390115422d9p+3
+-0x0p+0
+-0x1.14d8ca1e5e2bp+4
+-0x0p+0
+-0x1.797e2a514a756p+3
+-0x0p+0
+-0x1.09a94d3a7e1ebp+4
+-0x0p+0
+-0x1.b1025e6908bd8p+3
+-0x0p+0
+-0x1.b4f47e0d22429p+3
+-0x0p+0
+-0x1.120da32214c6cp+4
+-0x0p+0
+-0x1.6279b4e46b2e4p+4
+-0x0p+0
+-0x1.5ac54d8e4f108p+4
+-0x0p+0
+-0x1.1050264b50f2p+4
+-0x0p+0
+-0x1.5ada48c7f5152p+4
+-0x0p+0
+-0x1.5b6e20c851ff7p+3
+-0x0p+0
+-0x1.ee383194ff594p+3
+-0x0p+0
+-0x1.58547d232ae37p+3
+-0x0p+0
+-0x1.8ce10feddb107p+3
+-0x0p+0
+-0x1.62145cbca97f8p+3
+-0x0p+0
+-0x1.1e7daae6db43fp+4
+-0x0p+0
+-0x1.9118dfb9266f1p+3
+-0x0p+0
+-0x1.c8928c85aa86fp+3
+-0x0p+0
+-0x1.2b81e23fadb4fp+4
+-0x0p+0
+-0x1.c686b9b3557a5p+3
+-0x0p+0
+-0x1.401a85424cbe8p+4
+-0x0p+0
+-0x1.f69009ec39147p+3
+-0x0p+0
+-0x1.7a161f186db48p+3
+-0x0p+0
+-0x1.1f65717b119b8p+4
+-0x0p+0
+-0x1.5735f4c08d8ecp+3
+-0x0p+0
+-0x1.8194ea8de61a6p+3
+-0x0p+0
+-0x1.4a68935c5fddp+3
+-0x0p+0
+-0x1.0b726ed4ea47p+4
+-0x0p+0
+-0x1.41f6608a3e054p+3
+-0x0p+0
+-0x1.ab2b35949f2cap+3
+-0x0p+0
+-0x1.8339b6c36f99bp+3
+-0x0p+0
+-0x1.451bc490856b9p+3
+-0x0p+0
+-0x1.9b8513e368e85p+3
+-0x0p+0
+-0x1.23b954285842p+4
+-0x0p+0
+-0x1.d70cc68c23724p+3
+-0x0p+0
+-0x1.521a1ea18449cp+4
+-0x0p+0
+-0x1.7dca710d3ca0ep+3
+-0x0p+0
+-0x1.bfa8764a6c899p+3
+-0x0p+0
+-0x1.3f927f547646ep+4
+-0x0p+0
+-0x1.d819ad1258e31p+3
+-0x0p+0
+-0x1.6c0e18e12a566p+4
+-0x0p+0
+-0x1.9ee8ba8825ac7p+3
+-0x0p+0
+-0x1.1b461e55336a4p+4
+-0x0p+0
+-0x1.7109ea5396d36p+3
+-0x0p+0
+-0x1.cc0094d461e71p+3
+-0x0p+0
+-0x1.53aa0c7a18b94p+3
+-0x0p+0
+-0x1.6d2659c804e0dp+3
+-0x0p+0
+-0x1.118f355dd2217p+4
+-0x0p+0
+-0x1.5ead08c9819f3p+3
+-0x0p+0
+-0x1.83ee1f4b155e1p+3
+-0x0p+0
+-0x1.72473fca1a6ffp+3
+-0x0p+0
+-0x1.1173541a2b9b3p+4
+-0x0p+0
+-0x1.8ebcc75ce23f5p+3
+-0x0p+0
+-0x1.da923527d145ap+3
+-0x0p+0
+-0x1.259f323c88596p+4
+-0x0p+0
+-0x1.b88ac0e424dd8p+3
+-0x0p+0
+-0x1.142b2cab910a3p+4
+-0x0p+0
+-0x1.334b39e6ec582p+4
+-0x0p+0
+-0x1.1dcd1f6f54ebap+4
+-0x0p+0
+-0x1.829e252b54eaap+4
+-0x0p+0
+-0x1.3a56379c15f2p+4
+-0x0p+0
+-0x1.d471a72462df6p+3
+-0x0p+0
+-0x1.eccd98a1d34f8p+3
+-0x0p+0
+-0x1.09b1283ed1cf7p+4
+-0x0p+0
+-0x1.56ce0517d6c1p+4
+-0x0p+0
+-0x1.7d5bab2bbf5a6p+4
+-0x0p+0
+-0x1.6c781b83f6cb8p+4
+-0x0p+0
+-0x1.06ca0aed5a866p+4
+-0x0p+0
+-0x1.4926b1e661ee5p+4
+-0x0p+0
+-0x1.6c5800b14cd03p+4
+-0x0p+0
+-0x1.50e8301ea6118p+4
+-0x0p+0
+-0x1.2b3f1d2304622p+5
+-0x0p+0
+-0x1.5cc5a388c16e7p+4
+-0x0p+0
+-0x1.ba37458921485p+4
+-0x0p+0
+-0x1.2ebac12798b13p+4
+-0x0p+0
+-0x1.51e83332630fbp+4
+-0x0p+0
+-0x1.5d47ba25c6c2bp+4
+-0x0p+0
+-0x1.3a597ac6d5a6dp+4
+-0x0p+0
+-0x1.7f6353013945cp+4
+-0x0p+0
+-0x1.5f539edc8af0fp+5
+-0x0p+0
+-0x1.89a53eddb1af2p+4
+-0x0p+0
+-0x1.03d789ca8694dp+4
+-0x0p+0
+-0x1.5a9d843ab2d84p+4
+-0x0p+0
+-0x1.af2a84257e843p+3
+-0x0p+0
+-0x1.35a15fc4b27fp+4
+-0x0p+0
+-0x1.e275bb5ef6923p+3
+-0x0p+0
+-0x1.50f10f094b025p+4
+-0x0p+0
+-0x1.38021582b8b42p+4
+-0x0p+0
+-0x1.1caa833ebeb1dp+4
+-0x0p+0
+-0x1.75113e232920ap+4
+-0x0p+0
+-0x1.6f843148fcf9ap+4
+-0x0p+0
+-0x1.c3e39c4b71a3ap+3
+-0x0p+0
+-0x1.327e0821f98ccp+4
+-0x0p+0
+-0x1.c7fb10facd9b8p+3
+-0x0p+0
+-0x1.25a77359c96e5p+4
+-0x0p+0
+-0x1.b01d1181840d4p+3
+-0x0p+0
+-0x1.0e72da445461ap+4
+-0x0p+0
+-0x1.0abc4faa83869p+4
+-0x0p+0
+-0x1.b840a14aecd24p+3
+-0x0p+0
+-0x1.27d3c0da4f5e9p+4
+-0x0p+0
+-0x1.b772666bcd2a7p+3
+-0x0p+0
+-0x1.09a7159dae8a2p+4
+-0x0p+0
+-0x1.a06aafc124279p+3
+-0x0p+0
+-0x1.2f16bdc572efbp+4
+-0x0p+0
+-0x1.b8c056ff3ddc1p+3
+-0x0p+0
+-0x1.41941e8f78bf3p+4
+-0x0p+0
+-0x1.1e0c36fdf5647p+4
+-0x0p+0
+-0x1.b8c114c605744p+3
+-0x0p+0
+-0x1.115971d689e23p+4
+-0x0p+0
+-0x1.36a395d92421fp+4
+-0x0p+0
+-0x1.d3428645e1246p+3
+-0x0p+0
+-0x1.1eeb6450ec9a9p+4
+-0x0p+0
+-0x1.2f0ef122e198fp+4
+-0x0p+0
+-0x1.16eed7154e057p+4
+-0x0p+0
+-0x1.81b77ff74c524p+4
+-0x0p+0
+-0x1.205ffac865661p+4
+-0x0p+0
+-0x1.3ce6f38658a92p+4
+-0x0p+0
+-0x1.4654554ea9ee9p+4
+-0x0p+0
+-0x1.93bec5197c727p+4
+-0x0p+0
+-0x1.98d2b7341fe87p+4
+-0x0p+0
+-0x1.03c5ca4366bccp+5
+-0x0p+0
+-0x1.fd2285319e6efp+4
+-0x0p+0
+-0x1.e335c81b9408cp+3
+-0x0p+0
+-0x1.36c8fee00fbf9p+4
+-0x0p+0
+-0x1.1e860eb38d049p+4
+-0x0p+0
+-0x1.7d453e49f1e9dp+4
+-0x0p+0
+-0x1.29ca484e95c1ap+4
+-0x0p+0
+-0x1.7a05c33efa77p+4
+-0x0p+0
+-0x1.5aff7ba20a1a7p+4
+-0x0p+0
+-0x1.5602a8b4bff02p+4
+-0x0p+0
+-0x1.3b8c6e758491bp+5
+-0x0p+0
+-0x1.944b72182fbbdp+4
+-0x0p+0
+-0x1.0e679488673cep+4
+-0x0p+0
+-0x1.1838d86feab44p+4
+-0x0p+0
+-0x1.4dee601afea2cp+4
+-0x0p+0
+-0x1.80306cd69f43p+4
+-0x0p+0
+-0x1.4b74d3ae01f94p+4
+-0x0p+0
+-0x1.bf5edf24bacf7p+4
+-0x0p+0
+-0x1.25ed54eb1e985p+4
+-0x0p+0
+-0x1.5442e697558ffp+4
+-0x0p+0
+-0x1.8e8a4e885718cp+4
+-0x0p+0
+-0x1.60d748e58ace1p+4
+-0x0p+0
+-0x1.7cc7fa5a1ee8bp+4
+-0x0p+0
+-0x1.7ea6103983c99p+4
+-0x0p+0
+-0x1.c1e4fd991ad25p+4
+-0x0p+0
+-0x1.00e2f39a137b8p+4
+-0x0p+0
+-0x1.3bcc30bcec317p+4
+-0x0p+0
+-0x1.e9e7b5f35eb6bp+3
+-0x0p+0
+-0x1.ca4bc164d0ec6p+4
+-0x0p+0
+-0x1.26ea26c37f61fp+4
+-0x0p+0
+-0x1.8b245c9cbfa7p+4
+-0x0p+0
+-0x1.c6ad2292c9dc4p+3
+-0x0p+0
+-0x1.372aa9617b9afp+4
+-0x0p+0
+-0x1.c2d1213cebfa3p+3
+-0x0p+0
+-0x1.3962adceba87dp+4
+-0x0p+0
+-0x1.7b4173c16e04p+3
+-0x0p+0
+-0x1.9519538b874f1p+3
+-0x0p+0
+-0x1.ebcd75eaf7a6fp+3
+-0x0p+0
+-0x1.1c7ea22be4971p+4
+-0x0p+0
+-0x1.a747410697ca7p+3
+-0x0p+0
+-0x1.05ba907504e93p+4
+-0x0p+0
+-0x1.3d224bab38385p+4
+-0x0p+0
+-0x1.a0509b637e927p+3
+-0x0p+0
+-0x1.f1b6696f180fap+3
+-0x0p+0
+-0x1.3e85b0e65cfacp+4
+-0x0p+0
+-0x1.809c614e80682p+3
+-0x0p+0
+-0x1.353cf4787a596p+4
+-0x0p+0
+-0x1.8d6f3bb97d2e4p+3
+-0x0p+0
+-0x1.eb27b01fb7bd2p+3
+-0x0p+0
+-0x1.c6ca1ed7c82bdp+3
+-0x0p+0
+-0x1.4ed50292eeadep+4
+-0x0p+0
+-0x1.7d844db87863dp+3
+-0x0p+0
+-0x1.c667260d9c8c9p+3
+-0x0p+0
+-0x1.d73dd9b600b98p+3
+-0x0p+0
+-0x1.648772e7a25a8p+4
+-0x0p+0
+-0x1.2cf7efb21794bp+4
+-0x0p+0
+-0x1.c948a27f6b52p+3
+-0x0p+0
+-0x1.0cfbb75abb78cp+4
+-0x0p+0
+-0x1.647a841a525b5p+4
+-0x0p+0
+-0x1.924724180b31ep+3
+-0x0p+0
+-0x1.208aa25c40b74p+4
+-0x0p+0
+-0x1.6cda65804b727p+3
+-0x0p+0
+-0x1.98612ed1b7d0bp+3
+-0x0p+0
+-0x1.406dec1004bffp+3
+-0x0p+0
+-0x1.05b64eecfab57p+4
+-0x0p+0
+-0x1.43a3fbe062eeap+3
+-0x0p+0
+-0x1.9a8aaa496b6c2p+3
+-0x0p+0
+-0x1.d9828dc509afap+3
+-0x0p+0
+-0x1.2f4feedf4448bp+3
+-0x0p+0
+-0x1.6e4b59822914fp+3
+-0x0p+0
+-0x1.3f7fe3b6c6788p+3
+-0x0p+0
+-0x1.3fcbb0d55d5eep+3
+-0x0p+0
+-0x1.a154391eca891p+3
+-0x0p+0
+-0x1.4d16976a256a8p+3
+-0x0p+0
+-0x1.b541d3cff2168p+3
+-0x0p+0
+-0x1.4696bfbe5090ap+3
+-0x0p+0
+-0x1.083e5883ee66dp+4
+-0x0p+0
+-0x1.895f35aff8b45p+3
+-0x0p+0
+-0x1.95a042a21c4c3p+3
+-0x0p+0
+-0x1.12553f53d24f3p+4
+-0x0p+0
+-0x1.0753a13c9a9bbp+4
+-0x0p+0
+-0x1.4748d613ad37fp+3
+-0x0p+0
+-0x1.f8fb3a36cdaep+3
+-0x0p+0
+-0x1.10e38ecb85c2bp+3
+-0x0p+0
+-0x1.2da5735c40c03p+3
+-0x0p+0
+-0x1.137a33418675p+3
+-0x0p+0
+-0x1.c047953daa05bp+3
+-0x0p+0
+-0x1.0614b625ac5fp+3
+-0x0p+0
+-0x1.516a20001488bp+3
+-0x0p+0
+-0x1.8378c4d90f349p+3
+-0x0p+0
+-0x1.d266d5826c7c5p+2
+-0x0p+0
+-0x1.24527d4efe906p+3
+-0x0p+0
+-0x1.5e0ddf3f05471p+3
+-0x0p+0
+-0x1.94254cdb276a4p+2
+-0x0p+0
+-0x1.069ee704681afp+3
+-0x0p+0
+-0x1.052024a660bbep+3
+-0x0p+0
+-0x1.921825900ec23p+2
+-0x0p+0
+-0x1.c998884468092p+2
+-0x0p+0
+-0x1.29ceecce2ad05p+3
+-0x0p+0
+-0x1.d9d796ab189d5p+2
+-0x0p+0
+-0x1.f38d3d62fcbf7p+2
+-0x0p+0
+-0x1.06588539bfff1p+3
+-0x0p+0
+-0x1.38531494ebb74p+3
+-0x0p+0
+-0x1.42612f62e8cp+3
+-0x0p+0
+-0x1.d7787c754093ep+3
+-0x0p+0
+-0x1.43bc0c35c6d89p+3
+-0x0p+0
+-0x1.68dd38e9e248fp+3
+-0x0p+0
+-0x1.434279a7848d9p+3
+-0x0p+0
+-0x1.e1ff6f19aacp+3
+-0x0p+0
+-0x1.70a167cbf546ap+3
+-0x0p+0
+-0x1.f3ae919b6a079p+3
+-0x0p+0
+-0x1.c102b79025e48p+3
+-0x0p+0
+-0x1.bb1943763f9e5p+3
+-0x0p+0
+-0x1.1fc80cffb440ep+4
+-0x0p+0
+-0x1.2828a455de3ap+4
+-0x0p+0
+-0x1.8c881e59dd9eep+4
+-0x0p+0
+-0x1.4ab904145a1a7p+4
+-0x0p+0
+-0x1.66e4e339a1012p+3
+-0x0p+0
+-0x1.bc09f4d8fa31ap+3
+-0x0p+0
+-0x1.76fe1d8d90172p+3
+-0x0p+0
+-0x1.cabc2abaeb277p+3
+-0x0p+0
+-0x1.3e517138f2812p+4
+-0x0p+0
+-0x1.2823c210492b7p+4
+-0x0p+0
+-0x1.082650a47ce8dp+4
+-0x0p+0
+-0x1.644e80cd5965ap+4
+-0x0p+0
+-0x1.ad2cee1235c91p+3
+-0x0p+0
+-0x1.38fa6708b6bb6p+4
+-0x0p+0
+-0x1.24b925f8b188dp+4
+-0x0p+0
+-0x1.587983b0645abp+4
+-0x0p+0
+-0x1.3f572c873326dp+5
+-0x0p+0
+-0x1.285dd096a7eaap+4
+-0x0p+0
+-0x1.7ad9e56d4a35bp+4
+-0x0p+0
+-0x1.aafb05d943ee7p+4
+-0x0p+0
+-0x1.850a5177b781bp+4
+-0x0p+0
+-0x1.1893cb2ef9fbap+4
+-0x0p+0
+-0x1.4ac74585ce855p+4
+-0x0p+0
+-0x1.1e23a20cd86aap+4
+-0x0p+0
+-0x1.7e7510d1fb34ap+4
+-0x0p+0
+-0x1.bf97f56061e7ap+3
+-0x0p+0
+-0x1.28f1cdd565d8dp+4
+-0x0p+0
+-0x1.18e9eee2a9952p+4
+-0x0p+0
+-0x1.7d9c49350c98ep+4
+-0x0p+0
+-0x1.3cead5b6f612p+4
+-0x0p+0
+-0x1.8215f74fb9e48p+4
+-0x0p+0
+-0x1.aab52f801ee6bp+3
+-0x0p+0
+-0x1.361ac51e7b38dp+4
+-0x0p+0
+-0x1.6d55ad0837393p+3
+-0x0p+0
+-0x1.c0b4916a324c2p+3
+-0x0p+0
+-0x1.38d37a8a842d3p+3
+-0x0p+0
+-0x1.e52864de60b8bp+3
+-0x0p+0
+-0x1.1d283043d2c95p+3
+-0x0p+0
+-0x1.62463d2c2a4afp+3
+-0x0p+0
+-0x1.7d4c80613dc9fp+3
+-0x0p+0
+-0x1.13b6f1d961b23p+3
+-0x0p+0
+-0x1.75a1f709c2ec4p+3
+-0x0p+0
+-0x1.3230bfab8891cp+3
+-0x0p+0
+-0x1.722d8d7a20606p+3
+-0x0p+0
+-0x1.4823b5377e2cp+3
+-0x0p+0
+-0x1.532f56df497d9p+3
+-0x0p+0
+-0x1.be16b607251cp+3
+-0x0p+0
+-0x1.78c77f71bff49p+3
+-0x0p+0
+-0x1.c44a894a7bf2bp+3
+-0x0p+0
+-0x1.7e6464e72a686p+3
+-0x0p+0
+-0x1.0b5f6caa3706bp+4
+-0x0p+0
+-0x1.b76466af4628fp+3
+-0x0p+0
+-0x1.517e0cbbd5377p+4
+-0x0p+0
+-0x1.1ff9f270ef2f1p+4
+-0x0p+0
+-0x1.ba1955489b36bp+3
+-0x0p+0
+-0x1.01792dc30c0b1p+4
+-0x0p+0
+-0x1.433b29ec08316p+4
+-0x0p+0
+-0x1.efd9c9f4ad109p+3
+-0x0p+0
+-0x1.79b31ff52b6bap+4
+-0x0p+0
+-0x1.3978bd68f3525p+4
+-0x0p+0
+-0x1.0e0a4d054d54cp+4
+-0x0p+0
+-0x1.4d3b7afe76a3dp+4
+-0x0p+0
+-0x1.8f454ef6e14e3p+4
+-0x0p+0
+-0x1.48eae350133a1p+4
+-0x0p+0
+-0x1.4492c9ad7a241p+4
+-0x0p+0
+-0x1.81ef1e0f3216bp+4
+-0x0p+0
+-0x1.a4a0ecbaaebeap+4
+-0x0p+0
+-0x1.ca7102149b22dp+3
+-0x0p+0
+-0x1.3e29234bafe15p+4
+-0x0p+0
+-0x1.e3e561126a0fcp+3
+-0x0p+0
+-0x1.21d2eb704a6d2p+4
+-0x0p+0
+-0x1.cac504f6ba8adp+3
+-0x0p+0
+-0x1.390070d062bd6p+4
+-0x0p+0
+-0x1.05c597b788b6dp+4
+-0x0p+0
+-0x1.518f894ca4f6dp+4
+-0x0p+0
+-0x1.7c108263ffaadp+4
+-0x0p+0
+-0x1.167f7d859cd7bp+4
+-0x0p+0
+-0x1.5ddaeffe224ebp+4
+-0x0p+0
+-0x1.899718065027bp+4
+-0x0p+0
+-0x1.bde4587801447p+4
+-0x0p+0
+-0x1.08d65c97cff9ep+4
+-0x0p+0
+-0x1.237df3e88226cp+4
+-0x0p+0
+-0x1.753f44ebd8e27p+4
+-0x0p+0
+-0x1.a9c97236e67eap+4
+-0x0p+0
+-0x1.80cd33ecf171fp+4
+-0x0p+0
+-0x1.8bd3ca068822cp+4
+-0x0p+0
+-0x1.2b6e330539793p+4
+-0x0p+0
+-0x1.891b747b13f22p+4
+-0x0p+0
+-0x1.7c67e2b4b4ab3p+4
+-0x0p+0
+-0x1.b117bfe7f3bfbp+4
+-0x0p+0
+-0x1.c5116067a1ec3p+4
+-0x0p+0
+-0x1.f35dbfe8f944bp+4
+-0x0p+0
+-0x1.ac69e76ea791dp+4
+-0x0p+0
+-0x1.7a9607822e0fdp+5
+-0x0p+0
+-0x1.f4f09dfb39b19p+3
+-0x0p+0
+-0x1.37c7187977051p+4
+-0x0p+0
+-0x1.52711f8c7594ap+4
+-0x0p+0
+-0x1.caf79defe61c1p+3
+-0x0p+0
+-0x1.0b5e7e23a2409p+4
+-0x0p+0
+-0x1.97e3a7e4cfa1cp+4
+-0x0p+0
+-0x1.1669f266a6a4p+4
+-0x0p+0
+-0x1.a21cdd412a59bp+4
+-0x0p+0
+-0x1.15a8f1d530ea7p+4
+-0x0p+0
+-0x1.a0f8cb403155ap+4
+-0x0p+0
+-0x1.0fd8ec14df032p+4
+-0x0p+0
+-0x1.82cd24dad42e9p+4
+-0x0p+0
+-0x1.02750cbef3452p+4
+-0x0p+0
+-0x1.6d4caff85c39ep+4
+-0x0p+0
+-0x1.6f49a907bde37p+4
+-0x0p+0
+-0x1.0cf06f40b9d49p+4
+-0x0p+0
+-0x1.5e97316c548b1p+4
+-0x0p+0
+-0x1.f1098a9b801fdp+3
+-0x0p+0
+-0x1.47590e044ed0dp+4
+-0x0p+0
+-0x1.003e63d60a5c1p+4
+-0x0p+0
+-0x1.3d2e921bb5314p+4
+-0x0p+0
+-0x1.600e5c7540d1ep+4
+-0x0p+0
+-0x1.21a80f1e164b4p+4
+-0x0p+0
+-0x1.7017019ce2254p+4
+-0x0p+0
+-0x1.1b9968ffef8c7p+4
+-0x0p+0
+-0x1.5082b5b088a1ap+4
+-0x0p+0
+-0x1.208d501b43e74p+4
+-0x0p+0
+-0x1.7ce60d5631bbap+4
+-0x0p+0
+-0x1.d369392839a98p+4
+-0x0p+0
+-0x1.464ddca2978b9p+4
+-0x0p+0
+-0x1.746e199722da6p+4
+-0x0p+0
+-0x1.8535b5f04c1f7p+4
+-0x0p+0
+-0x1.2dc68ab59d882p+4
+-0x0p+0
+-0x1.71db0cb1385f9p+4
+-0x0p+0
+-0x1.9ec3015668fc1p+4
+-0x0p+0
+-0x1.3794400ff2314p+4
+-0x0p+0
+-0x1.85830837c411ap+4
+-0x0p+0
+-0x1.b413846960ef3p+4
+-0x0p+0
+-0x0p+0
+-0x1.cb68bc1beea0bp-3
+-0x0p+0
+-0x1.971b3cddb620cp-3
+-0x0p+0
+-0x1.505e12b914caap-2
+-0x0p+0
+-0x1.092c7a2474087p-1
+-0x0p+0
+-0x1.a6e5acea8c59dp-1
+-0x0p+0
+-0x1.d78e97c7999bdp-1
+-0x0p+0
+-0x1.5504469243495p+0
+-0x0p+0
+-0x1.edd3f1bb9fc8p+0
+-0x0p+0
+-0x1.d4f8f73e422e5p-1
+-0x0p+0
+-0x1.440a6b912bcc1p+0
+-0x0p+0
+-0x1.b022953e2cf5ap+0
+-0x0p+0
+-0x1.2ca21ba270a6p+1
+-0x0p+0
+-0x1.ba6c9f357a7e3p+0
+-0x0p+0
+-0x1.da62ce8d55924p-2
+-0x0p+0
+-0x1.f71c33d397d3cp-1
+-0x0p+0
+-0x1.698d8fef1cf17p-1
+-0x0p+0
+-0x1.bf5857166ccbcp-1
+-0x0p+0
+-0x1.1f4aac0206a38p+0
+-0x0p+0
+-0x1.ac3935b930898p+0
+-0x0p+0
+-0x1.747630625f6dp+0
+-0x0p+0
+-0x1.1e4dd7adbc0dp+1
+-0x0p+0
+-0x1.4160604bbd66ep+1
+-0x0p+0
+-0x1.43538476c1b56p+0
+-0x0p+0
+-0x1.adab09544c87ep+0
+-0x0p+0
+-0x1.2f05d5bf01b39p+0
+-0x0p+0
+-0x1.fdc42dfc689cep+0
+-0x0p+0
+-0x1.87c6311b61a58p+1
+-0x0p+0
+-0x1.9b62c89bd365cp+1
+-0x0p+0
+-0x1.1fa197a8abe35p+1
+-0x0p+0
+-0x1.36feedcc96b4p+1
+-0x0p+0
+-0x1.05fc0f7371879p+2
+-0x0p+0
+-0x1.55c15bec3f3bbp+1
+-0x0p+0
+-0x1.2348b8ae2921cp+1
+-0x0p+0
+-0x1.ce4570c76d1cap+1
+-0x0p+0
+-0x1.ca9f70bb2dd67p+1
+-0x0p+0
+-0x1.e975da4b50948p+0
+-0x0p+0
+-0x1.5a67123000a27p+1
+-0x0p+0
+-0x1.50261501e6ea6p+1
+-0x0p+0
+-0x1.8dc724ca4b2e9p+1
+-0x0p+0
+-0x1.b144fde64ec7dp+1
+-0x0p+0
+-0x1.40b2dacd3cbdap+2
+-0x0p+0
+-0x1.1a5d871fa898fp+2
+-0x0p+0
+-0x1.73eb4416fcab5p+2
+-0x0p+0
+-0x1.c6cebbaa42ac5p+2
+-0x0p+0
+-0x1.390287d112805p+2
+-0x0p+0
+-0x1.44173977578aap+2
+-0x0p+0
+-0x1.ebbdec78e1c87p+2
+-0x0p+0
+-0x1.8aa5ec0e9bb3dp+2
+-0x0p+0
+-0x1.209f91d70e357p+3
+-0x0p+0
+-0x1.cf4a19d6bea41p+2
+-0x0p+0
+-0x1.183c7e5c3a9b3p+2
+-0x0p+0
+-0x1.66111349a86f7p+2
+-0x0p+0
+-0x1.78814412816bfp+2
+-0x0p+0
+-0x1.08dcf140c449ep+3
+-0x0p+0
+-0x1.a31f58b65aabep+2
+-0x0p+0
+-0x1.19940a2bae5dp+3
+-0x0p+0
+-0x1.335ffafa257e4p+3
+-0x0p+0
+-0x1.a506dbf4b4ba9p+3
+-0x0p+0
+-0x1.baaef098ccef2p+3
+-0x0p+0
+-0x1.6b4c1c1678edcp+3
+-0x0p+0
+-0x1.6c79dcd73ea22p+4
+-0x0p+0
+-0x1.d9facd739b313p+2
+-0x0p+0
+-0x1.31d431da7de1ep+3
+-0x0p+0
+-0x1.206f37de2f98dp+3
+-0x0p+0
+-0x1.87db21782a908p+3
+-0x0p+0
+-0x1.13b9fd7173e47p+3
+-0x0p+0
+-0x1.64f49204f8e5bp+3
+-0x0p+0
+-0x1.82d497010e985p+3
+-0x0p+0
+-0x1.f3e3c462117ddp+3
+-0x0p+0
+-0x1.09e4ae4bcc38dp+4
+-0x0p+0
+-0x1.dd1a35c1871a6p+3
+-0x0p+0
+-0x1.07a7b6af810ccp+5
+-0x0p+0
+-0x1.1ca8cf7596a85p+3
+-0x0p+0
+-0x1.9bd4c9f2635ccp+3
+-0x0p+0
+-0x1.2aafacd754e1ap+3
+-0x0p+0
+-0x1.74b5eb3b7b2ddp+3
+-0x0p+0
+-0x1.3110f54ab8697p+3
+-0x0p+0
+-0x1.c8a1b3c4f673dp+3
+-0x0p+0
+-0x1.5662df6503006p+3
+-0x0p+0
+-0x1.034de8e20022dp+4
+-0x0p+0
+-0x1.ad1e567facd74p+3
+-0x0p+0
+-0x1.398eef930c07fp+3
+-0x0p+0
+-0x1.8e8813e2be8f9p+3
+-0x0p+0
+-0x1.17752407a54fcp+4
+-0x0p+0
+-0x1.cfbf54e08f661p+3
+-0x0p+0
+-0x1.76b6b538708ecp+4
+-0x0p+0
+-0x1.a7c0e8601d02cp+3
+-0x0p+0
+-0x1.2d13fb3c6581fp+4
+-0x0p+0
+-0x1.67b19a01b4f1cp+3
+-0x0p+0
+-0x1.cd8bc929a9228p+3
+-0x0p+0
+-0x1.4423015beb5fcp+3
+-0x0p+0
+-0x1.8841a3517ed69p+3
+-0x0p+0
+-0x1.5d13b12e9cf47p+3
+-0x0p+0
+-0x1.e9e3f73258d61p+3
+-0x0p+0
+-0x1.738577e000897p+3
+-0x0p+0
+-0x1.b596b1b5620cp+3
+-0x0p+0
+-0x1.823e27fe2a091p+3
+-0x0p+0
+-0x1.2ad70ddf218f9p+4
+-0x0p+0
+-0x1.b7e8cd00a0a84p+3
+-0x0p+0
+-0x1.41496e09b9559p+4
+-0x0p+0
+-0x1.04c52154df831p+4
+-0x0p+0
+-0x1.183a85a6a2627p+4
+-0x0p+0
+-0x1.4fd378cb6c43fp+4
+-0x0p+0
+-0x1.64b98c5dc8eaap+4
+-0x0p+0
+-0x1.ba50817e896afp+3
+-0x0p+0
+-0x1.c2ee9143e35d2p+3
+-0x0p+0
+-0x1.06294a3f7a66cp+4
+-0x0p+0
+-0x1.d8bc6829b7dbcp+3
+-0x0p+0
+-0x1.81fb53bf4b161p+4
+-0x0p+0
+-0x1.04875b689a3e5p+4
+-0x0p+0
+-0x1.272bae353c34ap+4
+-0x0p+0
+-0x1.8762a2be4091dp+4
+-0x0p+0
+-0x1.2fe00459a741ap+4
+-0x0p+0
+-0x1.cf44ce7c8999ep+4
+-0x0p+0
+-0x1.811a20b7d1de9p+4
+-0x0p+0
+-0x1.3aa6b00bf3c37p+4
+-0x0p+0
+-0x1.5988498a14639p+4
+-0x0p+0
+-0x1.97277b123e95p+4
+-0x0p+0
+-0x1.e99d11f663d8ap+3
+-0x0p+0
+-0x1.650de8b19be84p+4
+-0x0p+0
+-0x1.bec66e1602d35p+3
+-0x0p+0
+-0x1.f89d3f5887787p+3
+-0x0p+0
+-0x1.ac46017fb52afp+3
+-0x0p+0
+-0x1.4ec10a45fd9ecp+4
+-0x0p+0
+-0x1.a3107c1e0a1fbp+3
+-0x0p+0
+-0x1.08319225dc81ep+4
+-0x0p+0
+-0x1.1455c53bbd76dp+4
+-0x0p+0
+-0x1.c6e33a24cb2cp+3
+-0x0p+0
+-0x1.5052ac1fe3e64p+4
+-0x0p+0
+-0x1.474617e0dde9ep+4
+-0x0p+0
+-0x1.91e3e99acab49p+3
+-0x0p+0
+-0x1.013d2c77314ffp+4
+-0x0p+0
+-0x1.00552db46e684p+4
+-0x0p+0
+-0x1.bc46efe1e2ffap+3
+-0x0p+0
+-0x1.401c3b0bb0907p+4
+-0x0p+0
+-0x1.4293377ff83fbp+4
+-0x0p+0
+-0x1.c67cffec56435p+3
+-0x0p+0
+-0x1.d7474e9ea5353p+3
+-0x0p+0
+-0x1.07d63bce4d4a8p+4
+-0x0p+0
+-0x1.f477e6a4f4727p+3
+-0x0p+0
+-0x1.eed36f397aaf3p+3
+-0x0p+0
+-0x1.f7d7021d0aec9p+3
+-0x0p+0
+-0x1.130a396c51e67p+4
+-0x0p+0
+-0x1.4de34ab7d3954p+4
+-0x0p+0
+-0x1.315306efd017bp+4
+-0x0p+0
+-0x1.27a6e6e05696dp+4
+-0x0p+0
+-0x1.50ed8f8c4f2ecp+4
+-0x0p+0
+-0x1.b9f37b1844275p+4
+-0x0p+0
+-0x1.869e4604a13c7p+4
+-0x0p+0
+-0x1.bc60165b1924fp+4
+-0x0p+0
+-0x1.64c520f7a46fap+4
+-0x0p+0
+-0x1.d2d85ecc469d3p+3
+-0x0p+0
+-0x1.413c4583f75cfp+4
+-0x0p+0
+-0x1.317084983fbabp+4
+-0x0p+0
+-0x1.ee8c33356dc57p+3
+-0x0p+0
+-0x1.1fda90d23b193p+4
+-0x0p+0
+-0x1.26499d83a2568p+4
+-0x0p+0
+-0x1.3dfcf55506c48p+4
+-0x0p+0
+-0x1.e44f7b0663ab8p+3
+-0x0p+0
+-0x1.297a10baa4acep+4
+-0x0p+0
+-0x1.fd38a9cbc094p+3
+-0x0p+0
+-0x1.5aa5d9ceda02bp+4
+-0x0p+0
+-0x1.8e5e9f51997bdp+3
+-0x0p+0
+-0x1.f71e9fdf37c4ep+3
+-0x0p+0
+-0x1.a7f3ad1458d5cp+3
+-0x0p+0
+-0x1.3cb4f18b7d1c6p+4
+-0x0p+0
+-0x1.0acd0dcbe5d8ep+4
+-0x0p+0
+-0x1.755dc39848795p+3
+-0x0p+0
+-0x1.687a3e294c237p+3
+-0x0p+0
+-0x1.c8be56e5384cdp+3
+-0x0p+0
+-0x1.6fabf7b2e1a2bp+3
+-0x0p+0
+-0x1.d7667a4a59eb1p+3
+-0x0p+0
+-0x1.9941cfc29f3b1p+3
+-0x0p+0
+-0x1.180ee26120674p+4
+-0x0p+0
+-0x1.cff228a531b6dp+3
+-0x0p+0
+-0x1.63588e4f8e981p+4
+-0x0p+0
+-0x1.cf40d84491c13p+3
+-0x0p+0
+-0x1.6d4bf3d1ad0d9p+4
+-0x0p+0
+-0x1.d0457d6f838ap+3
+-0x0p+0
+-0x1.ce7522d3d0f29p+3
+-0x0p+0
+-0x1.0b1c4805ab7f6p+4
+-0x0p+0
+-0x1.aafefd8dc7ef2p+3
+-0x0p+0
+-0x1.33a532dc40edep+4
+-0x0p+0
+-0x1.f16919c1d27e8p+3
+-0x0p+0
+-0x1.6d4871ed7f26ep+4
+-0x0p+0
+-0x1.5af8e735059d6p+4
+-0x0p+0
+-0x1.ac23e1642e0b5p+3
+-0x0p+0
+-0x1.d653154e2a405p+3
diff --git a/math/test/traces/sincosf.txt b/math/test/traces/sincosf.txt
new file mode 100644
index 000000000000..33de0c7ab9e3
--- /dev/null
+++ b/math/test/traces/sincosf.txt
@@ -0,0 +1,31999 @@
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.d7dbf4p-10
+0x1.d7dbf4p-10
+-0x1.3e4a7p-14
+0x0p+0
+-0x1.088c36p-9
+0x1.fd3378p-10
+-0x1.7f293cp-14
+0x0p+0
+-0x1.0c0774p-9
+0x1.000dfep-9
+-0x1.88f704p-14
+0x0p+0
+-0x1.0c7494p-9
+0x1.002cbp-9
+-0x1.8aaa08p-14
+0x0p+0
+-0x1.0c822ap-9
+0x1.002cbp-9
+-0x1.8aaa44p-14
+0x0p+0
+-0x1.0c822cp-9
+0x1.002cbp-9
+-0x1.8aaa44p-14
+0x0p+0
+-0x1.0c822cp-9
+0x1.002cbp-9
+-0x1.8ae7e8p-14
+0x0p+0
+-0x1.0c822cp-9
+0x1.002ac2p-9
+-0x1.8ae48p-14
+0x0p+0
+-0x1.0c8212p-9
+0x1.002ac2p-9
+-0x1.8ae48p-14
+0x1.0812dap-17
+0x1.8513cep-6
+0x1.4ea49cp-8
+0x1.7c2b0ep-6
+-0x1.0812cap-17
+0x1.a147dcp-12
+-0x1.4bf24cp-8
+0x1.bce1fcp-7
+-0x1.95f3b8p-7
+-0x1.aa0414p-7
+0x1.90bca2p-16
+0x1.7fef44p-9
+-0x1.71f412p-14
+-0x1.a8c0bap-11
+0x1.5b0e4ep-12
+0x1.0b9b26p-11
+-0x1.45f88cp-10
+-0x1.51a32ep-10
+0x0p+0
+-0x1.90bbeap-16
+0x1.a8929cp-7
+0x1.71f3e4p-14
+-0x1.7ba034p-9
+-0x1.5b0e4cp-12
+0x1.a47ccap-11
+0x1.45f884p-10
+-0x1.0a8a12p-11
+0x0p+0
+0x1.518104p-10
+0x1.21eeacp-14
+0x1.faffcap-18
+-0x1.a34ef4p-10
+0x1.b76764p-10
+-0x1.cea338p-15
+-0x1.7cabbap-18
+-0x1.0324dap-9
+0x1.f6593p-10
+-0x1.85b41p-14
+-0x1.fef13ap-18
+-0x1.0be6c4p-9
+0x1.fd74fcp-10
+-0x1.a5367p-14
+-0x1.0d0cbep-17
+-0x1.0d4b34p-9
+0x1.fe2aa8p-10
+-0x1.ab6ac4p-14
+-0x1.0d0ebep-17
+-0x1.0d8856p-9
+0x1.fe41a4p-10
+-0x1.abff58p-14
+-0x1.0b237ep-17
+-0x1.0d8904p-9
+0x1.fe3d8ap-10
+-0x1.ac3cfcp-14
+-0x1.0d28fep-17
+-0x1.0d8eecp-9
+0x1.fe4178p-10
+-0x1.ac3f44p-14
+-0x1.0d0efep-17
+-0x1.0d8d0ep-9
+0x1.fe3dcep-10
+-0x1.ac38bcp-14
+0x1.6c84eep-10
+-0x1.6efbdap-8
+0x1.c272f4p-8
+0x1.ecbd6p-11
+0x1.4a5fecp-7
+0x1.15fb34p-6
+0x1.bb96dp-7
+0x1.0c52b4p-6
+-0x1.4abd46p-7
+0x1.afa85ap-11
+-0x1.bba80cp-7
+0x1.35d038p-6
+-0x1.2952c2p-6
+-0x1.2fc60ep-6
+0x1.214494p-9
+0x1.1705eap-8
+-0x1.4aa4ecp-11
+-0x1.367a6ep-10
+0x1.e87f56p-12
+0x1.42224ep-11
+-0x1.4bd012p-10
+-0x1.56f264p-10
+0x0p+0
+-0x1.1e06bap-9
+0x1.2f0388p-6
+0x1.47723ep-11
+-0x1.141514p-8
+-0x1.e6e5b8p-12
+0x1.336d76p-10
+0x1.4bc894p-10
+-0x1.408adp-11
+0x0p+0
+0x1.56baf2p-10
+0x1.083b4ep-13
+0x1.9965c4p-16
+-0x1.76fc6ap-10
+0x1.9e64a2p-10
+-0x1.dd84ap-16
+-0x1.0d55bcp-17
+-0x1.f85ebcp-10
+0x1.eecfeep-10
+-0x1.7b8d52p-14
+-0x1.e6395ep-17
+-0x1.0b14e6p-9
+0x1.faa7fcp-10
+-0x1.bbfaecp-14
+-0x1.09aa6ep-16
+-0x1.0df1c8p-9
+0x1.fc0104p-10
+-0x1.cae89cp-14
+-0x1.0a0f7ep-16
+-0x1.0e8414p-9
+0x1.fc353p-10
+-0x1.ccaafp-14
+-0x1.0c01aep-16
+-0x1.0e8e8ap-9
+0x1.fc2636p-10
+-0x1.cd8bccp-14
+-0x1.0c156ep-16
+-0x1.0e996ap-9
+0x1.fc2d96p-10
+-0x1.cd5afp-14
+0x1.0adea6p-12
+-0x1.336a04p-9
+0x1.463292p-9
+0x1.de4982p-14
+0x1.9ba552p-10
+-0x1.d3fe32p-8
+0x1.207bc6p-7
+0x1.0bd0dcp-10
+0x1.0d9cb2p-6
+0x1.9744bep-7
+0x1.362182p-6
+0x1.8742e2p-7
+-0x1.0e09fcp-6
+0x1.8b3f36p-11
+-0x1.369998p-6
+0x1.6f8ee6p-6
+-0x1.67567p-6
+-0x1.6b892ap-6
+0x1.e55026p-9
+0x1.4d70bp-8
+-0x1.0f7a2p-10
+-0x1.731e3ap-10
+0x1.2bc90cp-11
+0x1.62c95p-11
+-0x1.5161d4p-10
+-0x1.599324p-10
+0x0p+0
+-0x1.e02946p-9
+0x1.6ace7ep-6
+0x1.0cd2e2p-10
+-0x1.4a34ccp-8
+-0x1.2a91bep-11
+0x1.6fbb7ep-10
+0x1.5153dap-10
+-0x1.6104p-11
+0x0p+0
+0x1.596016p-10
+0x1.6c4196p-13
+0x1.86913cp-15
+-0x1.d35cf8p-18
+-0x1.523acep-16
+-0x1.876e3ep-16
+-0x1.8ce08ep-16
+-0x1.913ecep-16
+0x1.24105ap-16
+0x1.0b8006p-11
+0x1.508a02p-10
+-0x1.549a52p-6
+0x1.3462aap-8
+-0x1.57806p-10
+0x1.523e9p-11
+-0x1.5575ap-10
+0x0p+0
+0x1.540accp-6
+-0x1.315688p-8
+0x1.546564p-10
+-0x1.50c402p-11
+0x1.555c5cp-10
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.09bd2cp-31
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.09bd2cp-31
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.09bd2cp-31
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.09bd2cp-31
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.09bd2cp-31
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.09bd2cp-31
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.09bd2cp-31
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.09bd2cp-31
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.09bd2cp-31
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.09bd2cp-31
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.50c402p-11
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.523e9p-11
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.6c4196p-13
+0x1.86913cp-15
+0x1.86913cp-15
+-0x1.d35cf8p-18
+-0x1.d35cf8p-18
+-0x1.523acep-16
+-0x1.523acep-16
+-0x1.876e3ep-16
+-0x1.876e3ep-16
+-0x1.8ce08ep-16
+-0x1.8ce08ep-16
+-0x1.913ecep-16
+-0x1.913ecep-16
+0x1.24105ap-16
+0x1.24105ap-16
+0x1.0b8006p-11
+0x1.0b8006p-11
+0x1.508a02p-10
+0x1.508a02p-10
+0x1.540accp-6
+0x1.508a02p-10
+-0x1.549a52p-6
+-0x1.549a52p-6
+0x1.540accp-6
+0x1.3462aap-8
+-0x1.549a52p-6
+-0x1.57806p-10
+0x1.3462aap-8
+0x1.523e9p-11
+-0x1.57806p-10
+-0x1.5575ap-10
+0x1.523e9p-11
+0x0p+0
+-0x1.5575ap-10
+0x1.540accp-6
+-0x1.315688p-8
+-0x1.315688p-8
+0x1.546564p-10
+0x1.546564p-10
+-0x1.50c402p-11
+-0x1.50c402p-11
+0x1.555c5cp-10
+0x1.555c5cp-10
+0x0p+0
+0x1.6c4196p-13
+0x1.86913cp-15
+-0x1.5127cp-10
+0x1.8adbcp-10
+0x1.babf28p-21
+-0x1.d35cf8p-18
+-0x1.e8ca0cp-10
+0x1.e72fc2p-10
+-0x1.63d4f6p-14
+-0x1.523acep-16
+-0x1.098b36p-9
+0x1.f79526p-10
+-0x1.cea7ap-14
+-0x1.876e3ep-16
+-0x1.0e63cep-9
+0x1.f9c53p-10
+-0x1.e90fp-14
+-0x1.8ce08ep-16
+-0x1.0f6d56p-9
+0x1.fa1c14p-10
+-0x1.eca2c4p-14
+-0x1.913ecep-16
+-0x1.0f9222p-9
+0x1.fa1b06p-10
+-0x1.ee248cp-14
+0x1.24105ap-16
+-0x1.1279eap-9
+0x1.054e4ep-9
+-0x1.5a9b9p-14
+0x1.0b8006p-11
+-0x1.61cea2p-9
+0x1.9979e2p-9
+0x1.52c83p-12
+0x1.508a02p-10
+-0x1.f6f7fcp-8
+0x1.2f874cp-7
+0x1.8c5452p-11
+0x1.544aa6p-6
+0x1.33a2fp-7
+0x1.73154ap-6
+0x1.262ba4p-7
+-0x1.54da2ap-6
+0x1.e3d202p-12
+-0x1.73b482p-6
+0x1.999c86p-6
+-0x1.93f64p-6
+-0x1.96c916p-6
+0x1.377de4p-8
+0x1.765dfcp-8
+-0x1.85b1c4p-10
+-0x1.ca9956p-10
+0x1.569e86p-10
+0x1.69a8e4p-10
+-0x1.f0b1aep-9
+-0x1.f37eeap-9
+0x0p+0
+-0x1.3471cap-8
+0x1.961588p-6
+0x1.8296ep-10
+-0x1.730792p-8
+-0x1.55e146p-10
+0x1.c72416p-10
+0x1.f0a504p-9
+-0x1.68cc54p-10
+0x0p+0
+0x1.f36776p-9
+0x1.c25dp-13
+0x1.2bdec6p-14
+-0x1.3070ap-10
+0x1.7b6d5cp-10
+0x1.07198ep-15
+-0x1.45e4ecp-19
+-0x1.d841dp-10
+0x1.dfd85cp-10
+-0x1.3d44eap-14
+-0x1.a0ee9ep-16
+-0x1.075eb2p-9
+0x1.f46b8cp-10
+-0x1.d909ap-14
+-0x1.00f258p-15
+-0x1.0e8f4ap-9
+0x1.f78e18p-10
+-0x1.02804p-13
+-0x1.0745ep-15
+-0x1.1048a6p-9
+0x1.f80ef8p-10
+-0x1.0630aep-13
+-0x1.b6643p-16
+-0x1.10ca0ep-9
+0x1.f9faf8p-10
+-0x1.fa22ecp-14
+0x1.606318p-14
+-0x1.193904p-9
+0x1.145f16p-9
+-0x1.c285dap-16
+0x1.662b4ep-11
+-0x1.8d3128p-9
+0x1.e2a1cep-9
+0x1.e4d7b6p-12
+0x1.bc3766p-11
+-0x1.f9a44ep-8
+0x1.275bbep-7
+0x1.951a72p-12
+0x1.861f3cp-6
+0x1.e08bd2p-8
+0x1.9efa8ap-6
+0x1.cc626p-8
+-0x1.86bf16p-6
+0x1.4ecf5cp-13
+-0x1.9f9bdap-6
+0x1.b9abdep-6
+-0x1.b58f92p-6
+-0x1.b7906ap-6
+0x1.64ed3ap-8
+0x1.924cdp-8
+-0x1.b74ffcp-10
+-0x1.e898d6p-10
+0x1.63bbdep-10
+0x1.7147c6p-10
+-0x1.f21bb2p-9
+-0x1.f40614p-9
+0x0p+0
+-0x1.61ae78p-8
+0x1.b6dd5cp-6
+0x1.b3fb18p-10
+-0x1.8ee452p-8
+-0x1.62f5fep-10
+0x1.e5285ap-10
+0x1.f20b14p-9
+-0x1.7078bp-10
+0x0p+0
+0x1.f3f2e8p-9
+0x1.06c09ap-12
+0x1.99638ap-14
+-0x1.13d6p-10
+0x1.6f0bb2p-10
+0x1.023f22p-14
+0x1.385d4cp-18
+-0x1.c77922p-10
+0x1.d8d48p-10
+-0x1.0df96cp-14
+-0x1.d3fa7ep-16
+-0x1.04b35ep-9
+0x1.f13e3p-10
+-0x1.dc6c3p-14
+-0x1.39a5ep-15
+-0x1.0e6e92p-9
+0x1.f552a6p-10
+-0x1.0eea92p-13
+-0x1.4156cp-15
+-0x1.110982p-9
+0x1.f634bp-10
+-0x1.145524p-13
+-0x1.41b764p-16
+-0x1.125336p-9
+0x1.fd1988p-10
+-0x1.e5cffcp-14
+0x1.5b3a92p-13
+-0x1.220ceap-9
+0x1.2879ep-9
+0x1.5f5ff6p-15
+0x1.915758p-11
+-0x1.b1addp-9
+0x1.0d6228p-8
+0x1.138f5ep-11
+0x1.c4d4c2p-12
+-0x1.edaf6ep-8
+0x1.161306p-7
+0x1.68bbe8p-15
+0x1.ab2f88p-6
+0x1.8558e4p-8
+0x1.c05806p-6
+0x1.762e62p-8
+-0x1.abd6f2p-6
+-0x1.e00c9ap-14
+-0x1.c0eddap-6
+0x1.d364d2p-6
+-0x1.d03b68p-6
+-0x1.d1bb6ap-6
+0x1.85b622p-8
+0x1.a7e4b4p-8
+-0x1.daba82p-10
+-0x1.ff8322p-10
+0x1.6d0516p-10
+0x1.77002ap-10
+-0x1.f31748p-9
+-0x1.f468f8p-9
+0x0p+0
+-0x1.8255d2p-8
+0x1.d1058cp-6
+0x1.d7549cp-10
+-0x1.a46746p-8
+-0x1.6c3c3cp-10
+0x1.fbf9bap-10
+0x1.f2ffb6p-9
+-0x1.762e6cp-10
+0x0p+0
+0x1.f45532p-9
+0x1.285604p-12
+0x1.03b306p-13
+0x1.cefe88p-17
+-0x1.ee683ep-16
+-0x1.6c5358p-15
+-0x1.691928p-15
+-0x1.886354p-19
+0x1.026bcap-12
+0x1.96ca6ep-11
+0x1.50a91p-14
+-0x1.c8c252p-6
+0x1.9e6282p-8
+-0x1.f52404p-10
+0x1.73d75p-10
+-0x1.f3bbd8p-9
+0x0p+0
+0x1.c814fp-6
+-0x1.9aef4cp-8
+0x1.f1a508p-10
+-0x1.72ff24p-10
+0x1.f3aebap-9
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.50068ap-32
+0x1.50068ap-32
+0x0p+0
+-0x1.97e756p-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.50068ap-32
+0x1.50068ap-32
+0x0p+0
+-0x1.97e756p-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.50068ap-32
+0x1.50068ap-32
+0x0p+0
+-0x1.97e756p-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.50068ap-32
+0x1.50068ap-32
+0x0p+0
+-0x1.97e756p-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.50068ap-32
+0x1.50068ap-32
+0x0p+0
+-0x1.97e756p-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.50068ap-32
+0x1.50068ap-32
+0x0p+0
+-0x1.97e756p-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.50068ap-32
+0x1.50068ap-32
+0x0p+0
+-0x1.97e756p-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.50068ap-32
+0x1.50068ap-32
+0x0p+0
+-0x1.97e756p-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.50068ap-32
+0x1.50068ap-32
+0x0p+0
+-0x1.97e756p-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.50068ap-32
+0x1.50068ap-32
+0x0p+0
+-0x1.97e756p-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x1.6c4196p-13
+0x1.86913cp-15
+-0x1.d35cf8p-18
+-0x1.523acep-16
+-0x1.876e3ep-16
+-0x1.8ce08ep-16
+-0x1.913ecep-16
+0x1.24105ap-16
+0x1.0b8006p-11
+0x1.508a02p-10
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x0p+0
+0x1.555c5cp-10
+-0x1.50c402p-11
+0x1.546564p-10
+-0x1.315688p-8
+0x1.540accp-6
+-0x1.549a52p-6
+0x1.3462aap-8
+-0x1.57806p-10
+0x1.523e9p-11
+-0x1.5575ap-10
+0x0p+0
+0x1.92153p+2
+0x0p+0
+0x1.920886p+2
+0x0p+0
+0x1.523e9p-11
+0x0p+0
+0x1.73d75p-10
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.50068ap-32
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.285604p-12
+0x1.03b306p-13
+0x1.03b306p-13
+0x1.cefe88p-17
+0x1.cefe88p-17
+-0x1.ee683ep-16
+-0x1.ee683ep-16
+-0x1.6c5358p-15
+-0x1.6c5358p-15
+-0x1.691928p-15
+-0x1.691928p-15
+-0x1.886354p-19
+-0x1.886354p-19
+0x1.026bcap-12
+0x1.026bcap-12
+0x1.96ca6ep-11
+0x1.96ca6ep-11
+0x1.50a91p-14
+0x1.50a91p-14
+0x1.c814fp-6
+0x1.50a91p-14
+-0x1.c8c252p-6
+-0x1.c8c252p-6
+0x1.c814fp-6
+0x1.9e6282p-8
+-0x1.c8c252p-6
+-0x1.f52404p-10
+0x1.9e6282p-8
+0x1.73d75p-10
+-0x1.f52404p-10
+-0x1.f3bbd8p-9
+0x1.73d75p-10
+0x0p+0
+-0x1.f3bbd8p-9
+0x1.c814fp-6
+-0x1.9aef4cp-8
+-0x1.9aef4cp-8
+0x1.f1a508p-10
+0x1.f1a508p-10
+-0x1.72ff24p-10
+-0x1.72ff24p-10
+0x1.f3aebap-9
+0x1.f3aebap-9
+0x0p+0
+0x1.285604p-12
+0x1.03b306p-13
+-0x1.f54074p-11
+0x1.6517e8p-10
+0x1.7f6302p-14
+0x1.cefe88p-17
+-0x1.b6aa28p-10
+0x1.d23b54p-10
+-0x1.ad06f8p-15
+-0x1.ee683ep-16
+-0x1.0191f6p-9
+0x1.ee0974p-10
+-0x1.d98006p-14
+-0x1.6c5358p-15
+-0x1.0e0aa8p-9
+0x1.f325b8p-10
+-0x1.18faacp-13
+-0x1.691928p-15
+-0x1.11a454p-9
+0x1.f4eb76p-10
+-0x1.1e76fep-13
+-0x1.886354p-19
+-0x1.144a1cp-9
+0x1.0200aep-9
+-0x1.ae57bcp-14
+0x1.026bcap-12
+-0x1.2c135p-9
+0x1.3ec87ep-9
+0x1.cdd194p-14
+0x1.96ca6ep-11
+-0x1.ceb9d8p-9
+0x1.2103fcp-8
+0x1.14fa46p-11
+0x1.50a91p-14
+-0x1.dbee88p-8
+0x1.01f584p-7
+-0x1.0064c8p-12
+0x1.c861dep-6
+0x1.46b4bep-8
+0x1.db2e42p-6
+0x1.3af3a8p-8
+-0x1.c90f3ap-6
+-0x1.6ad936p-12
+-0x1.dbb7bap-6
+0x1.e918c8p-6
+-0x1.e682ep-6
+-0x1.e7b24p-6
+0x1.a2dc58p-8
+0x1.bd9b14p-8
+-0x1.1d08bap-9
+-0x1.2b323cp-9
+0x1.3beb3p-9
+0x1.3fa75ep-9
+-0x1.ee4fep-8
+-0x1.eeb144p-8
+0x0p+0
+-0x1.9f6952p-8
+0x1.e6f81ep-6
+0x1.1b497cp-9
+-0x1.ba0b82p-8
+-0x1.3b7f38p-9
+0x1.296d92p-9
+0x1.ee494ep-8
+-0x1.3f3e22p-9
+0x0p+0
+0x1.eea698p-8
+0x1.4661dcp-12
+0x1.3a224ep-13
+-0x1.c8726ep-11
+0x1.5cfe92p-10
+0x1.f727e4p-14
+0x1.a0f794p-16
+-0x1.a63142p-10
+0x1.cc223p-10
+-0x1.32017ap-15
+-0x1.f6636ep-16
+-0x1.fc3ea2p-10
+0x1.eadc86p-10
+-0x1.d1ca1ep-14
+-0x1.937c9p-15
+-0x1.0d6a92p-9
+0x1.f128dcp-10
+-0x1.20abcap-13
+-0x1.7a2298p-15
+-0x1.1232acp-9
+0x1.f48a4p-10
+-0x1.233d86p-13
+0x1.656e5ep-16
+-0x1.169bd2p-9
+0x1.072fa6p-9
+-0x1.5a0cb8p-14
+0x1.4c4a54p-12
+-0x1.369822p-9
+0x1.551e6cp-9
+0x1.63a88p-13
+0x1.818cfp-11
+-0x1.e51804p-9
+0x1.2d6eacp-8
+0x1.002578p-11
+-0x1.a10682p-13
+-0x1.c8aa44p-8
+0x1.dc0a36p-8
+-0x1.ee6132p-12
+0x1.dfd682p-6
+0x1.1b49c8p-8
+0x1.f11936p-6
+0x1.124164p-8
+-0x1.e0885ap-6
+-0x1.130ce2p-11
+-0x1.f197eep-6
+0x1.fb7fd2p-6
+-0x1.f952a4p-6
+-0x1.fa4a0ap-6
+0x1.b625a8p-8
+0x1.cbe02ep-8
+-0x1.2723aep-9
+-0x1.328278p-9
+0x1.3e4612p-9
+0x1.413f98p-9
+-0x1.ee7faap-8
+-0x1.eebedp-8
+0x0p+0
+-0x1.b29a46p-8
+0x1.f98bdp-6
+0x1.255d36p-9
+-0x1.c8393ep-8
+-0x1.3de672p-9
+0x1.30b056p-9
+0x1.ee78b6p-8
+-0x1.40d91ap-9
+0x0p+0
+0x1.eeb482p-8
+0x1.61e6eap-12
+0x1.6ed44cp-13
+-0x1.a04a3cp-11
+0x1.565f28p-10
+0x1.355012p-13
+0x1.38f392p-15
+-0x1.961dfcp-10
+0x1.c68786p-10
+-0x1.5dd536p-16
+-0x1.e7428ep-16
+-0x1.f4ce56p-10
+0x1.e7c136p-10
+-0x1.c4b716p-14
+-0x1.b0199p-15
+-0x1.0c89fp-9
+0x1.ef54bep-10
+-0x1.2634ccp-13
+-0x1.6d725p-15
+-0x1.12ba2ep-9
+0x1.f54d3cp-10
+-0x1.21234ap-13
+0x1.a875c4p-15
+-0x1.19414p-9
+0x1.0dc99cp-9
+-0x1.e2b5fep-15
+0x1.85e866p-12
+-0x1.41152ep-9
+0x1.6a0914p-9
+0x1.c48a4ep-13
+0x1.5b5e7ep-11
+-0x1.f5eddep-9
+0x1.341eeap-8
+0x1.ba7948p-12
+-0x1.b5da2ap-12
+-0x1.b6009p-8
+0x1.b6e0ecp-8
+-0x1.546842p-11
+0x1.f3a27ep-6
+0x1.f88654p-9
+0x1.01ed2ap-5
+0x1.ea90d6p-9
+-0x1.f4589cp-6
+-0x1.5c57a8p-11
+-0x1.0228b2p-5
+0x1.05db7ep-5
+-0x1.04ea28p-5
+-0x1.0551d2p-5
+0x1.c5c6e8p-8
+0x1.d7f252p-8
+-0x1.2f2c9p-9
+-0x1.3891fep-9
+0x1.400da4p-9
+0x1.427a9ap-9
+-0x1.eea10ap-8
+-0x1.eec256p-8
+0x0p+0
+-0x1.c2275ep-8
+0x1.04f03ap-5
+0x1.2d625cp-9
+-0x1.d430e8p-8
+-0x1.3faf98p-9
+0x1.36b238p-9
+0x1.ee9892p-8
+-0x1.42143ep-9
+0x0p+0
+0x1.eeb702p-8
+0x1.7b110ep-12
+0x1.a2417ep-13
+0x1.aa4a44p-15
+-0x1.bef1bep-16
+-0x1.c22dbp-15
+-0x1.445b72p-15
+0x1.5a41a4p-14
+0x1.ad8316p-12
+0x1.2b90b4p-11
+-0x1.33c9fep-11
+-0x1.02c71ap-5
+0x1.d2cd06p-8
+-0x1.35bf8p-9
+0x1.4174f2p-9
+-0x1.eeafdcp-8
+0x0p+0
+0x1.026a54p-5
+-0x1.cf17fep-8
+0x1.33e926p-9
+-0x1.4115b8p-9
+0x1.eea8aap-8
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.7d7864p-32
+0x1.7d7864p-32
+0x0p+0
+-0x1.8730f4p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.7d7864p-32
+0x1.7d7864p-32
+0x0p+0
+-0x1.8730f4p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.7d7864p-32
+0x1.7d7864p-32
+0x0p+0
+-0x1.8730f4p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.7d7864p-32
+0x1.7d7864p-32
+0x0p+0
+-0x1.8730f4p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.7d7864p-32
+0x1.7d7864p-32
+0x0p+0
+-0x1.8730f4p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.7d7864p-32
+0x1.7d7864p-32
+0x0p+0
+-0x1.8730f4p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.7d7864p-32
+0x1.7d7864p-32
+0x0p+0
+-0x1.8730f4p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.7d7864p-32
+0x1.7d7864p-32
+0x0p+0
+-0x1.8730f4p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.7d7864p-32
+0x1.7d7864p-32
+0x0p+0
+-0x1.8730f4p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.7d7864p-32
+0x1.7d7864p-32
+0x0p+0
+-0x1.8730f4p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x1.285604p-12
+0x1.03b306p-13
+0x1.cefe88p-17
+-0x1.ee683ep-16
+-0x1.6c5358p-15
+-0x1.691928p-15
+-0x1.886354p-19
+0x1.026bcap-12
+0x1.96ca6ep-11
+0x1.50a91p-14
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x0p+0
+0x1.f3aebap-9
+-0x1.72ff24p-10
+0x1.f1a508p-10
+-0x1.9aef4cp-8
+0x1.c814fp-6
+-0x1.c8c252p-6
+0x1.9e6282p-8
+-0x1.f52404p-10
+0x1.73d75p-10
+-0x1.f3bbd8p-9
+0x0p+0
+0x1.920886p+2
+0x0p+0
+0x1.91f794p+2
+0x0p+0
+0x1.73d75p-10
+0x0p+0
+0x1.4174f2p-9
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7d7864p-32
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.7b110ep-12
+0x1.a2417ep-13
+0x1.a2417ep-13
+0x1.aa4a44p-15
+0x1.aa4a44p-15
+-0x1.bef1bep-16
+-0x1.bef1bep-16
+-0x1.c22dbp-15
+-0x1.c22dbp-15
+-0x1.445b72p-15
+-0x1.445b72p-15
+0x1.5a41a4p-14
+0x1.5a41a4p-14
+0x1.ad8316p-12
+0x1.ad8316p-12
+0x1.2b90b4p-11
+0x1.2b90b4p-11
+-0x1.33c9fep-11
+-0x1.33c9fep-11
+0x1.026a54p-5
+-0x1.33c9fep-11
+-0x1.02c71ap-5
+-0x1.02c71ap-5
+0x1.026a54p-5
+0x1.d2cd06p-8
+-0x1.02c71ap-5
+-0x1.35bf8p-9
+0x1.d2cd06p-8
+0x1.4174f2p-9
+-0x1.35bf8p-9
+-0x1.eeafdcp-8
+0x1.4174f2p-9
+0x0p+0
+-0x1.eeafdcp-8
+0x1.026a54p-5
+-0x1.cf17fep-8
+-0x1.cf17fep-8
+0x1.33e926p-9
+0x1.33e926p-9
+-0x1.4115b8p-9
+-0x1.4115b8p-9
+0x1.eea8aap-8
+0x1.eea8aap-8
+0x0p+0
+0x1.7b110ep-12
+0x1.a2417ep-13
+-0x1.7bf7cep-11
+0x1.50eb94p-10
+0x1.6cc6dcp-13
+0x1.aa4a44p-15
+-0x1.868c9ap-10
+0x1.c16ce4p-10
+-0x1.0d254p-18
+-0x1.bef942p-16
+-0x1.ece056p-10
+0x1.e4ddecp-10
+-0x1.af8cc2p-14
+-0x1.c22c82p-15
+-0x1.0b5e8p-9
+0x1.edc078p-10
+-0x1.286cf8p-13
+-0x1.444266p-15
+-0x1.13342p-9
+0x1.f74242p-10
+-0x1.18f44ep-13
+0x1.5a5f8cp-14
+-0x1.1c3892p-9
+0x1.15707p-9
+-0x1.f95e3ap-16
+0x1.ad70ccp-12
+-0x1.4b373p-9
+0x1.7caaa8p-9
+0x1.033954p-12
+0x1.2b50d4p-11
+-0x1.013236p-8
+0x1.3670b4p-8
+0x1.63f8f4p-12
+-0x1.346976p-11
+-0x1.a4d55ep-8
+0x1.954042p-8
+-0x1.9d4efep-11
+0x1.028106p-5
+0x1.cafcb6p-9
+0x1.0a3f24p-5
+0x1.c02ab8p-9
+-0x1.02ddecp-5
+-0x1.96028ep-11
+-0x1.0a7832p-5
+0x1.0d3648p-5
+-0x1.0c5e14p-5
+-0x1.0cb538p-5
+0x1.d81b18p-8
+0x1.e7881cp-8
+-0x1.6301p-9
+-0x1.6ad24p-9
+0x1.ee392cp-9
+0x1.f01934p-9
+-0x1.9a3ca6p-7
+-0x1.9a297cp-7
+0x0p+0
+-0x1.d4676ep-8
+0x1.0c4ff4p-5
+0x1.612bf6p-9
+-0x1.e3aaep-8
+-0x1.edda7cp-9
+0x1.68e832p-9
+0x1.9a3914p-7
+-0x1.efb302p-9
+0x0p+0
+0x1.9a2464p-7
+0x1.9259c4p-12
+0x1.d30d8ap-13
+-0x1.5b24f2p-11
+0x1.4c6b9ep-10
+0x1.a0cdeap-13
+0x1.11141ap-14
+-0x1.77941cp-10
+0x1.bcb15cp-10
+0x1.acdb1cp-17
+-0x1.7bd03ep-16
+-0x1.e4b1f4p-10
+0x1.e22206p-10
+-0x1.95aaeap-14
+-0x1.c32578p-15
+-0x1.0a01aep-9
+0x1.ec9d26p-10
+-0x1.269cf6p-13
+-0x1.01b172p-15
+-0x1.139d72p-9
+0x1.fa6152p-10
+-0x1.0a33aap-13
+0x1.e0a1e6p-14
+-0x1.1f6078p-9
+0x1.1db1b2p-9
+-0x1.61c2bcp-19
+0x1.c3ef36p-12
+-0x1.54d53ep-9
+0x1.8cabap-9
+0x1.15827p-12
+0x1.edaa8cp-12
+-0x1.05ae98p-8
+0x1.358e2ep-8
+0x1.0645d8p-12
+-0x1.791556p-11
+-0x1.95413ap-8
+0x1.7750fcp-8
+-0x1.d56baep-11
+0x1.0a1adap-5
+0x1.a9267cp-9
+0x1.119512p-5
+0x1.a0ed3cp-9
+-0x1.0a7a5ap-5
+-0x1.c1c66cp-11
+-0x1.11cdap-5
+0x1.13cd74p-5
+-0x1.130bbp-5
+-0x1.1356a8p-5
+0x1.e316a4p-8
+0x1.f076ccp-8
+-0x1.685468p-9
+-0x1.6f01f4p-9
+0x1.eee8e2p-9
+0x1.f088b6p-9
+-0x1.9a31aap-7
+-0x1.9a16eep-7
+0x0p+0
+-0x1.df45f4p-8
+0x1.12eddep-5
+0x1.667346p-9
+-0x1.ec7b3p-8
+-0x1.ee8b14p-9
+0x1.6d0a86p-9
+0x1.9a2efep-7
+-0x1.f02264p-9
+0x0p+0
+0x1.9a1276p-7
+0x1.a822f4p-12
+0x1.010f9cp-12
+-0x1.3ce502p-11
+0x1.489e3p-10
+0x1.d2da58p-13
+0x1.4ec776p-14
+-0x1.693558p-10
+0x1.b86c82p-10
+0x1.f4d8fcp-16
+-0x1.241c6cp-16
+-0x1.dc4594p-10
+0x1.df8cd8p-10
+-0x1.77980ep-14
+-0x1.b52d4p-15
+-0x1.087c08p-9
+0x1.ebe254p-10
+-0x1.217eep-13
+-0x1.4b0398p-16
+-0x1.1401b4p-9
+0x1.feac24p-10
+-0x1.eb9678p-14
+0x1.2f3aaap-13
+-0x1.22a522p-9
+0x1.2626d6p-9
+0x1.85292cp-16
+0x1.cb14ccp-12
+-0x1.5dd512p-9
+0x1.99ee5p-9
+0x1.1a607ep-12
+0x1.8279f2p-12
+-0x1.08d312p-8
+0x1.325b14p-8
+0x1.4d54acp-13
+-0x1.aea538p-11
+-0x1.87588ep-8
+0x1.5cc98ep-8
+-0x1.00abf4p-10
+0x1.10f6dp-5
+0x1.8f1e3ap-9
+0x1.183d94p-5
+0x1.890efcp-9
+-0x1.11598ap-5
+-0x1.e3cecep-11
+-0x1.187746p-5
+0x1.19dafep-5
+-0x1.192c2cp-5
+-0x1.196c8cp-5
+0x1.ec8f74p-8
+0x1.f84b5cp-8
+-0x1.6cb90ap-9
+-0x1.728332p-9
+0x1.ef599p-9
+0x1.f0bea8p-9
+-0x1.9a250ap-7
+-0x1.9a01dep-7
+0x0p+0
+-0x1.e8a104p-8
+0x1.190094p-5
+0x1.6acbbcp-9
+-0x1.f42f5cp-8
+-0x1.eefd4cp-9
+0x1.7081p-9
+0x1.9a2198p-7
+-0x1.f05526p-9
+0x0p+0
+0x1.99fdacp-7
+0x1.bc8918p-12
+0x1.17bd68p-12
+0x1.8e938ap-14
+-0x1.70d6b8p-17
+-0x1.974f4p-15
+-0x1.af4ceap-18
+0x1.673aa4p-13
+0x1.c5437ap-12
+0x1.1914fap-12
+-0x1.d8d358p-11
+-0x1.17a052p-5
+0x1.f4cdbep-8
+-0x1.706ae6p-9
+0x1.efa0d8p-9
+-0x1.9a136ap-7
+0x0p+0
+0x1.173abap-5
+-0x1.f0be24p-8
+0x1.6e7752p-9
+-0x1.ef3d2ap-9
+0x1.9a0ee2p-7
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.839dccp-32
+0x1.839dccp-32
+0x0p+0
+-0x1.84ee52p-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.839dccp-32
+0x1.839dccp-32
+0x0p+0
+-0x1.84ee52p-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.839dccp-32
+0x1.839dccp-32
+0x0p+0
+-0x1.84ee52p-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.839dccp-32
+0x1.839dccp-32
+0x0p+0
+-0x1.84ee52p-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.839dccp-32
+0x1.839dccp-32
+0x0p+0
+-0x1.84ee52p-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.839dccp-32
+0x1.839dccp-32
+0x0p+0
+-0x1.84ee52p-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.839dccp-32
+0x1.839dccp-32
+0x0p+0
+-0x1.84ee52p-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.839dccp-32
+0x1.839dccp-32
+0x0p+0
+-0x1.84ee52p-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.839dccp-32
+0x1.839dccp-32
+0x0p+0
+-0x1.84ee52p-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.839dccp-32
+0x1.839dccp-32
+0x0p+0
+-0x1.84ee52p-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x1.7b110ep-12
+0x1.a2417ep-13
+0x1.aa4a44p-15
+-0x1.bef1bep-16
+-0x1.c22dbp-15
+-0x1.445b72p-15
+0x1.5a41a4p-14
+0x1.ad8316p-12
+0x1.2b90b4p-11
+-0x1.33c9fep-11
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x0p+0
+0x1.eea8aap-8
+-0x1.4115b8p-9
+0x1.33e926p-9
+-0x1.cf17fep-8
+0x1.026a54p-5
+-0x1.02c71ap-5
+0x1.d2cd06p-8
+-0x1.35bf8p-9
+0x1.4174f2p-9
+-0x1.eeafdcp-8
+0x0p+0
+0x1.91f794p+2
+0x0p+0
+0x1.91e1cep+2
+0x0p+0
+0x1.4174f2p-9
+0x0p+0
+0x1.efa0d8p-9
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.839dccp-32
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.bc8918p-12
+0x1.17bd68p-12
+0x1.17bd68p-12
+0x1.8e938ap-14
+0x1.8e938ap-14
+-0x1.70d6b8p-17
+-0x1.70d6b8p-17
+-0x1.974f4p-15
+-0x1.974f4p-15
+-0x1.af4ceap-18
+-0x1.af4ceap-18
+0x1.673aa4p-13
+0x1.673aa4p-13
+0x1.c5437ap-12
+0x1.c5437ap-12
+0x1.1914fap-12
+0x1.1914fap-12
+-0x1.d8d358p-11
+-0x1.d8d358p-11
+0x1.173abap-5
+-0x1.d8d358p-11
+-0x1.17a052p-5
+-0x1.17a052p-5
+0x1.173abap-5
+0x1.f4cdbep-8
+-0x1.17a052p-5
+-0x1.706ae6p-9
+0x1.f4cdbep-8
+0x1.efa0d8p-9
+-0x1.706ae6p-9
+-0x1.9a136ap-7
+0x1.efa0d8p-9
+0x0p+0
+-0x1.9a136ap-7
+0x1.173abap-5
+-0x1.f0be24p-8
+-0x1.f0be24p-8
+0x1.6e7752p-9
+0x1.6e7752p-9
+-0x1.ef3d2ap-9
+-0x1.ef3d2ap-9
+0x1.9a0ee2p-7
+0x1.9a0ee2p-7
+0x0p+0
+0x1.bc88cap-12
+0x1.17bc84p-12
+-0x1.2129d6p-11
+0x1.458388p-10
+0x1.00fc22p-12
+0x1.8e9362p-14
+-0x1.5b6fcep-10
+0x1.b4849ap-10
+0x1.8cd1dcp-15
+-0x1.6fed9p-17
+-0x1.d3b33ep-10
+0x1.dd3cbp-10
+-0x1.5407e2p-14
+-0x1.96cf96p-15
+-0x1.06d23p-9
+0x1.ebb9a2p-10
+-0x1.189432p-13
+-0x1.aea942p-18
+-0x1.145e5p-9
+0x1.01fe4p-9
+-0x1.ba2e24p-14
+0x1.6713f6p-13
+-0x1.260f9p-9
+0x1.2e95c2p-9
+0x1.82aab8p-15
+0x1.c5b6c6p-12
+-0x1.664524p-9
+0x1.a4b0b6p-9
+0x1.14213ep-12
+0x1.1bb674p-12
+-0x1.0af7acp-8
+0x1.2dbd6cp-8
+0x1.2bb368p-14
+-0x1.d6902ep-11
+-0x1.7adb64p-8
+0x1.459a0cp-8
+-0x1.110ab8p-10
+0x1.172ba6p-5
+0x1.7ae8d4p-9
+0x1.1e497ap-5
+0x1.76b3bap-9
+-0x1.178d3cp-5
+-0x1.fd018cp-11
+-0x1.1e812ep-5
+0x1.1f6398p-5
+-0x1.1ec054p-5
+-0x1.1ef26ap-5
+0x1.f9f17ep-8
+0x1.02124cp-7
+-0x1.a72612p-9
+-0x1.ac012ap-9
+0x1.62e35ep-8
+0x1.635768p-8
+-0x1.32b9ap-6
+-0x1.328a9p-6
+0x0p+0
+-0x1.f5e568p-8
+0x1.1e8412p-5
+0x1.a535e2p-9
+-0x1.ffeedcp-8
+-0x1.62b222p-8
+0x1.a9f6acp-9
+0x1.32b762p-6
+-0x1.6327a8p-8
+0x0p+0
+0x1.3289b8p-6
+0x1.d0234ap-12
+0x1.2d1166p-12
+-0x1.077d36p-11
+0x1.42e78ap-10
+0x1.174692p-12
+0x1.cf8e8ap-14
+-0x1.4e46fcp-10
+0x1.b0fb4cp-10
+0x1.0f603cp-14
+-0x1.a5496p-19
+-0x1.cb0088p-10
+0x1.db24bcp-10
+-0x1.2b4178p-14
+-0x1.683798p-15
+-0x1.04fae4p-9
+0x1.ec0ab8p-10
+-0x1.0b5e94p-13
+0x1.1c6b66p-17
+-0x1.14b0a2p-9
+0x1.0515a4p-9
+-0x1.818374p-14
+0x1.96b162p-13
+-0x1.296662p-9
+0x1.36a7cep-9
+0x1.148b1p-14
+0x1.b55ff8p-12
+-0x1.6ded22p-9
+0x1.ace7b4p-9
+0x1.04808p-12
+0x1.6d6db4p-13
+-0x1.0c4a62p-8
+0x1.27d42cp-8
+-0x1.e61606p-17
+-0x1.f91772p-11
+-0x1.6fc672p-8
+0x1.3095bcp-8
+-0x1.1f619ep-10
+0x1.1ce21ep-5
+0x1.6a770ap-9
+0x1.23e078p-5
+0x1.67dd4p-9
+-0x1.1d4a9ap-5
+-0x1.09538ap-10
+-0x1.241dfp-5
+0x1.248d1cp-5
+-0x1.241dfp-5
+-0x1.243496p-5
+0x1.007e4ap-7
+0x1.050feap-7
+-0x1.aa064p-9
+-0x1.ae492ep-9
+0x1.62955cp-8
+0x1.6304b4p-8
+-0x1.32a12cp-6
+-0x1.3270aep-6
+0x0p+0
+-0x1.fcd604p-8
+0x1.23c2acp-5
+0x1.a7fa3ep-9
+-0x1.02e434p-7
+-0x1.6261bep-8
+0x1.ac296ap-9
+0x1.32a042p-6
+-0x1.62cfaap-8
+0x0p+0
+0x1.326f1ap-6
+0x1.e2dc26p-12
+0x1.4178c6p-12
+-0x1.df3478p-12
+0x1.40bccp-10
+0x1.2cd26p-12
+0x1.086ca2p-13
+-0x1.419a44p-10
+0x1.adc378p-10
+0x1.57570cp-14
+0x1.874592p-18
+-0x1.c268b2p-10
+0x1.d9641ap-10
+-0x1.fe912ep-15
+-0x1.297298p-15
+-0x1.03026cp-9
+0x1.eccd88p-10
+-0x1.f52c76p-14
+0x1.96f5dp-16
+-0x1.14f62ap-9
+0x1.087706p-9
+-0x1.44fd04p-14
+0x1.bd0be8p-13
+-0x1.2cc1dep-9
+0x1.3e49b8p-9
+0x1.582f42p-14
+0x1.9ca4ep-12
+-0x1.74e7b2p-9
+0x1.b2ea36p-9
+0x1.db00e6p-13
+0x1.5d6324p-14
+-0x1.0d04d6p-8
+0x1.213642p-8
+-0x1.926422p-14
+-0x1.09538ap-10
+-0x1.65fa58p-8
+0x1.1e413p-8
+-0x1.2a14fp-10
+0x1.223f98p-5
+0x1.5cbb3ep-9
+0x1.29217ap-5
+0x1.5ba08p-9
+-0x1.22aac6p-5
+-0x1.115224p-10
+-0x1.2961acp-5
+0x1.296a1ep-5
+-0x1.2961acp-5
+-0x1.29437p-5
+0x1.039e3ep-7
+0x1.07d396p-7
+-0x1.ac4a7ap-9
+-0x1.b028a4p-9
+0x1.623468p-8
+0x1.62970ep-8
+-0x1.328988p-6
+-0x1.325624p-6
+0x0p+0
+-0x1.017894p-7
+0x1.28cdf2p-5
+0x1.aa2fb4p-9
+-0x1.059718p-7
+-0x1.6203aep-8
+0x1.adfbb6p-9
+0x1.3287bcp-6
+-0x1.62635ap-8
+0x0p+0
+0x1.325418p-6
+0x1.f48258p-12
+0x1.5572fep-12
+0x1.2958b2p-13
+0x1.089d84p-16
+-0x1.b9a7d2p-16
+0x1.51d3e6p-15
+0x1.da04e6p-13
+0x1.7dab7ep-12
+-0x1.28e3dcp-20
+-0x1.115224p-10
+-0x1.27cca6p-5
+0x1.067702p-7
+-0x1.ae3714p-9
+0x1.61cbbp-8
+-0x1.326fbep-6
+0x0p+0
+0x1.275d84p-5
+-0x1.04403p-7
+0x1.ac11cap-9
+-0x1.619a54p-8
+0x1.326e9cp-6
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.84729p-32
+0x1.84729p-32
+0x0p+0
+-0x1.84a014p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.84729p-32
+0x1.84729p-32
+0x0p+0
+-0x1.84a014p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.84729p-32
+0x1.84729p-32
+0x0p+0
+-0x1.84a014p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.84729p-32
+0x1.84729p-32
+0x0p+0
+-0x1.84a014p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.84729p-32
+0x1.84729p-32
+0x0p+0
+-0x1.84a014p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.84729p-32
+0x1.84729p-32
+0x0p+0
+-0x1.84a014p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.84729p-32
+0x1.84729p-32
+0x0p+0
+-0x1.84a014p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.84729p-32
+0x1.84729p-32
+0x0p+0
+-0x1.84a014p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.84729p-32
+0x1.84729p-32
+0x0p+0
+-0x1.84a014p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.84729p-32
+0x1.84729p-32
+0x0p+0
+-0x1.84a014p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x1.bc8918p-12
+0x1.17bd68p-12
+0x1.8e938ap-14
+-0x1.70d6b8p-17
+-0x1.974f4p-15
+-0x1.af4ceap-18
+0x1.673aa4p-13
+0x1.c5437ap-12
+0x1.1914fap-12
+-0x1.d8d358p-11
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x0p+0
+0x1.9a0ee2p-7
+-0x1.ef3d2ap-9
+0x1.6e7752p-9
+-0x1.f0be24p-8
+0x1.173abap-5
+-0x1.17a052p-5
+0x1.f4cdbep-8
+-0x1.706ae6p-9
+0x1.efa0d8p-9
+-0x1.9a136ap-7
+0x0p+0
+0x1.91e1cep+2
+0x0p+0
+0x1.91c75p+2
+0x0p+0
+0x1.efa0d8p-9
+0x0p+0
+0x1.61cbbp-8
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84729p-32
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.f48258p-12
+0x1.5572fep-12
+0x1.5572fep-12
+0x1.2958b2p-13
+0x1.2958b2p-13
+0x1.089d84p-16
+0x1.089d84p-16
+-0x1.b9a7d2p-16
+-0x1.b9a7d2p-16
+0x1.51d3e6p-15
+0x1.51d3e6p-15
+0x1.da04e6p-13
+0x1.da04e6p-13
+0x1.7dab7ep-12
+0x1.7dab7ep-12
+-0x1.28e3dcp-20
+-0x1.28e3dcp-20
+-0x1.115224p-10
+-0x1.115224p-10
+0x1.275d84p-5
+-0x1.115224p-10
+-0x1.27cca6p-5
+-0x1.27cca6p-5
+0x1.275d84p-5
+0x1.067702p-7
+-0x1.27cca6p-5
+-0x1.ae3714p-9
+0x1.067702p-7
+0x1.61cbbp-8
+-0x1.ae3714p-9
+-0x1.326fbep-6
+0x1.61cbbp-8
+0x0p+0
+-0x1.326fbep-6
+0x1.275d84p-5
+-0x1.04403p-7
+-0x1.04403p-7
+0x1.ac11cap-9
+0x1.ac11cap-9
+-0x1.619a54p-8
+-0x1.619a54p-8
+0x1.326e9cp-6
+0x1.326e9cp-6
+0x0p+0
+0x1.f480fep-12
+0x1.5577b4p-12
+-0x1.b2ef04p-12
+0x1.3f1312p-10
+0x1.419e1ap-12
+0x1.2963dep-13
+-0x1.3580c2p-10
+0x1.aaf92p-10
+0x1.a0e918p-14
+0x1.06cfbep-16
+-0x1.b9d27cp-10
+0x1.d7f8bp-10
+-0x1.9e903p-15
+-0x1.bfc73cp-16
+-0x1.010da8p-9
+0x1.ee2e2ap-10
+-0x1.ce34fap-14
+0x1.4f5438p-15
+-0x1.1551f6p-9
+0x1.0c17b2p-9
+-0x1.09b6f4p-14
+0x1.dc498ap-13
+-0x1.3048eap-9
+0x1.459bb4p-9
+0x1.8d22a6p-14
+0x1.828d58p-12
+-0x1.7b4b24p-9
+0x1.b7b576p-9
+0x1.aa528ap-13
+0x1.2ad9b8p-17
+-0x1.0d19f2p-8
+0x1.1af1aap-8
+-0x1.544c6cp-13
+-0x1.0d9de4p-10
+-0x1.5ce058p-8
+0x1.0fb89ep-8
+-0x1.2d3b82p-10
+0x1.26f71ap-5
+0x1.51ef42p-9
+0x1.2db96ap-5
+0x1.51ef42p-9
+-0x1.275d0ep-5
+-0x1.132a4ep-10
+-0x1.2df5b6p-5
+0x1.2db96ap-5
+-0x1.2df5b6p-5
+-0x1.2da614p-5
+0x1.07f8fcp-7
+0x1.0bc69cp-7
+-0x1.eb957p-9
+-0x1.eee0dep-9
+0x1.dfdf6ep-8
+0x1.e00b4ep-8
+-0x1.ac1f6p-6
+-0x1.abbd2cp-6
+0x0p+0
+-0x1.05c648p-7
+0x1.2d2e2p-5
+0x1.e97698p-9
+-0x1.097cfep-7
+-0x1.dfae32p-8
+0x1.eca63cp-9
+0x1.ac1e1cp-6
+-0x1.dfd2a6p-8
+0x0p+0
+0x1.abbb12p-6
+0x1.02b4d8p-11
+0x1.686cbcp-12
+-0x1.892356p-12
+0x1.3d967cp-10
+0x1.556442p-12
+0x1.4ada4cp-13
+-0x1.29dd66p-10
+0x1.a8737cp-10
+0x1.e9b144p-14
+0x1.bf2d06p-16
+-0x1.b134fep-10
+0x1.d6c69ep-10
+-0x1.37d708p-15
+-0x1.073d22p-16
+-0x1.fdeb9ep-10
+0x1.f01394p-10
+-0x1.9efa22p-14
+0x1.d6a074p-15
+-0x1.157a38p-9
+0x1.0fd4b4p-9
+-0x1.973266p-15
+0x1.efe35p-13
+-0x1.338a6p-9
+0x1.4c0576p-9
+0x1.af0d3ap-14
+0x1.5ed57ep-12
+-0x1.810fd8p-9
+0x1.ba17d4p-9
+0x1.68ecf4p-13
+-0x1.1ce4b4p-14
+-0x1.0d06c8p-8
+0x1.13d5bep-8
+-0x1.e5169ap-13
+-0x1.132a4ep-10
+-0x1.5536f6p-8
+0x1.022204p-8
+-0x1.31da32p-10
+0x1.2bc308p-5
+0x1.477e9ap-9
+0x1.326984p-5
+0x1.477e9ap-9
+-0x1.2c34bep-5
+-0x1.167454p-10
+-0x1.32aedep-5
+0x1.326984p-5
+-0x1.32aedep-5
+-0x1.3258cp-5
+0x1.0a7446p-7
+0x1.0e0e92p-7
+-0x1.ecbd18p-9
+-0x1.efccp-9
+0x1.ded36cp-8
+0x1.df0a24p-8
+-0x1.abee22p-6
+-0x1.ab8a1ap-6
+0x0p+0
+-0x1.0832bep-7
+0x1.31dc68p-5
+0x1.ea9326p-9
+-0x1.0bb1fp-7
+-0x1.de9fe6p-8
+0x1.ed8bd2p-9
+0x1.abec42p-6
+-0x1.ded55ep-8
+0x0p+0
+0x1.ab888p-6
+0x1.0ac7cep-11
+0x1.7ad0fap-12
+-0x1.620e7p-12
+0x1.3c72ccp-10
+0x1.686d1cp-12
+0x1.6cb0dep-13
+-0x1.1eadb6p-10
+0x1.a63e42p-10
+0x1.18f2c8p-13
+0x1.43a6cap-15
+-0x1.a8ac6ep-10
+0x1.d5df18p-10
+-0x1.90c53ap-16
+-0x1.c2891ep-19
+-0x1.f987ecp-10
+0x1.f263fep-10
+-0x1.69f4bep-14
+0x1.2c9502p-14
+-0x1.1597dcp-9
+0x1.13a26cp-9
+-0x1.1bddb6p-15
+0x1.fa33fep-13
+-0x1.36b57p-9
+0x1.51c158p-9
+0x1.c1dfbcp-14
+0x1.380c06p-12
+-0x1.8643d4p-9
+0x1.bb0f98p-9
+0x1.219c1cp-13
+-0x1.1fda38p-13
+-0x1.0cb54ap-8
+0x1.0cc8aap-8
+-0x1.342b74p-12
+-0x1.167454p-10
+-0x1.4e86f2p-8
+0x1.ed0196p-9
+-0x1.34a0f8p-10
+0x1.307a5ap-5
+0x1.3ce184p-9
+0x1.37011p-5
+0x1.3ce184p-9
+-0x1.30ef6ap-5
+-0x1.185f48p-10
+-0x1.3747e6p-5
+0x1.37011p-5
+-0x1.3747e6p-5
+-0x1.36ee6ap-5
+0x1.0cc78p-7
+0x1.103868p-7
+-0x1.ed8258p-9
+-0x1.f06d4p-9
+0x1.ddbcbp-8
+0x1.ddf03cp-8
+-0x1.abbbcep-6
+-0x1.ab5698p-6
+0x0p+0
+-0x1.0a71bp-7
+0x1.366f0ep-5
+0x1.eb468cp-9
+-0x1.0dcab8p-7
+-0x1.dd8896p-8
+0x1.ee21cap-9
+0x1.abba4ap-6
+-0x1.ddbd3p-8
+0x0p+0
+0x1.ab5562p-6
+0x1.128ec8p-11
+0x1.8ccabp-12
+0x1.8e02fcp-13
+0x1.aff20ap-15
+0x1.4bf256p-17
+0x1.6a1e46p-14
+0x1.fd12d8p-13
+0x1.0f55e2p-12
+-0x1.a1be96p-13
+-0x1.185f48p-10
+-0x1.358abep-5
+0x1.0ef5dcp-7
+-0x1.ee19ecp-9
+0x1.dca3fcp-8
+-0x1.ab8834p-6
+0x0p+0
+0x1.3511fp-5
+-0x1.0c8d5ep-7
+0x1.ebce12p-9
+-0x1.dc717ep-8
+0x1.ab8714p-6
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.848f56p-32
+0x1.848f56p-32
+0x0p+0
+-0x1.84958p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.848f56p-32
+0x1.848f56p-32
+0x0p+0
+-0x1.84958p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.848f56p-32
+0x1.848f56p-32
+0x0p+0
+-0x1.84958p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.848f56p-32
+0x1.848f56p-32
+0x0p+0
+-0x1.84958p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.848f56p-32
+0x1.848f56p-32
+0x0p+0
+-0x1.84958p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.848f56p-32
+0x1.848f56p-32
+0x0p+0
+-0x1.84958p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.848f56p-32
+0x1.848f56p-32
+0x0p+0
+-0x1.84958p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.848f56p-32
+0x1.848f56p-32
+0x0p+0
+-0x1.84958p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.848f56p-32
+0x1.848f56p-32
+0x0p+0
+-0x1.84958p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.848f56p-32
+0x1.848f56p-32
+0x0p+0
+-0x1.84958p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x1.f48258p-12
+0x1.5572fep-12
+0x1.2958b2p-13
+0x1.089d84p-16
+-0x1.b9a7d2p-16
+0x1.51d3e6p-15
+0x1.da04e6p-13
+0x1.7dab7ep-12
+-0x1.28e3dcp-20
+-0x1.115224p-10
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x0p+0
+0x1.326e9cp-6
+-0x1.619a54p-8
+0x1.ac11cap-9
+-0x1.04403p-7
+0x1.275d84p-5
+-0x1.27cca6p-5
+0x1.067702p-7
+-0x1.ae3714p-9
+0x1.61cbbp-8
+-0x1.326fbep-6
+0x0p+0
+0x1.91c75p+2
+0x0p+0
+0x1.91a89ap+2
+0x0p+0
+0x1.61cbbp-8
+0x0p+0
+0x1.dca3fcp-8
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.848f56p-32
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.128ec8p-11
+0x1.8ccabp-12
+0x1.8ccabp-12
+0x1.8e02fcp-13
+0x1.8e02fcp-13
+0x1.aff20ap-15
+0x1.aff20ap-15
+0x1.4bf256p-17
+0x1.4bf256p-17
+0x1.6a1e46p-14
+0x1.6a1e46p-14
+0x1.fd12d8p-13
+0x1.fd12d8p-13
+0x1.0f55e2p-12
+0x1.0f55e2p-12
+-0x1.a1be96p-13
+-0x1.a1be96p-13
+-0x1.185f48p-10
+-0x1.185f48p-10
+0x1.3511fp-5
+-0x1.185f48p-10
+-0x1.358abep-5
+-0x1.358abep-5
+0x1.3511fp-5
+0x1.0ef5dcp-7
+-0x1.358abep-5
+-0x1.ee19ecp-9
+0x1.0ef5dcp-7
+0x1.dca3fcp-8
+-0x1.ee19ecp-9
+-0x1.ab8834p-6
+0x1.dca3fcp-8
+0x0p+0
+-0x1.ab8834p-6
+0x1.3511fp-5
+-0x1.0c8d5ep-7
+-0x1.0c8d5ep-7
+0x1.ebce12p-9
+0x1.ebce12p-9
+-0x1.dc717ep-8
+-0x1.dc717ep-8
+0x1.ab8714p-6
+0x1.ab8714p-6
+0x0p+0
+0x1.129942p-11
+0x1.8cc13p-12
+-0x1.3d503ap-12
+0x1.3ba718p-10
+0x1.7b1192p-12
+0x1.8d23f6p-13
+-0x1.14149ap-10
+0x1.a45a3ep-10
+0x1.3c4d64p-13
+0x1.a7c3bp-15
+-0x1.a09046p-10
+0x1.d54c5ap-10
+-0x1.6a2c34p-17
+0x1.27d9b4p-17
+-0x1.f595cap-10
+0x1.f50e2p-10
+-0x1.366bcap-14
+0x1.6c35a6p-14
+-0x1.16039p-9
+0x1.17a4fep-9
+-0x1.4edf7ap-16
+0x1.040762p-12
+-0x1.39f50cp-9
+0x1.57ae7cp-9
+0x1.d886b4p-14
+0x1.1e0f6ep-12
+-0x1.8a9bfap-9
+0x1.bce2a8p-9
+0x1.e387bap-14
+-0x1.6c3df8p-13
+-0x1.0b7ea2p-8
+0x1.07b7ap-8
+-0x1.563c16p-12
+-0x1.0f9104p-10
+-0x1.4728fp-8
+0x1.dd69cap-9
+-0x1.2dc4acp-10
+0x1.33fedep-5
+0x1.348332p-9
+0x1.3a5c74p-5
+0x1.348332p-9
+-0x1.346586p-5
+-0x1.1261dap-10
+-0x1.3a9662p-5
+0x1.3a5c74p-5
+-0x1.3a9662p-5
+-0x1.3a2b6p-5
+0x1.0dae2cp-7
+0x1.10c6b6p-7
+-0x1.1656d8p-8
+-0x1.178292p-8
+0x1.35152cp-7
+0x1.35091ap-7
+-0x1.1c5886p-5
+-0x1.1bff7p-5
+0x0p+0
+-0x1.0b4e62p-7
+0x1.39a96ep-5
+0x1.15352cp-8
+-0x1.0e4c82p-7
+-0x1.34f9d6p-7
+0x1.16510ep-8
+0x1.1c577cp-5
+-0x1.34eb6ap-7
+0x0p+0
+0x1.1bfe2ap-5
+0x1.1a0bb8p-11
+0x1.9e0c38p-12
+-0x1.1a8ccep-12
+0x1.3b0162p-10
+0x1.8cb4cp-12
+0x1.aef8fcp-13
+-0x1.09c87ap-10
+0x1.a2af1ap-10
+0x1.601ee8p-13
+0x1.0e0bc6p-14
+-0x1.984692p-10
+0x1.d51c5ep-10
+0x1.15dc54p-18
+0x1.85092ap-16
+-0x1.f100c4p-10
+0x1.f8240cp-10
+-0x1.f3570ap-15
+0x1.a758p-14
+-0x1.160caep-9
+0x1.1b6b14p-9
+-0x1.a53262p-18
+0x1.01fb6ap-12
+-0x1.3cd0d8p-9
+0x1.5c137ep-9
+0x1.d11f54p-14
+0x1.e9f4eap-13
+-0x1.8ecb3p-9
+0x1.bbbb98p-9
+0x1.4d483ep-14
+-0x1.e16f22p-13
+-0x1.0ad87ep-8
+0x1.0116dep-8
+-0x1.8b75b8p-12
+-0x1.1261dap-10
+-0x1.41ab82p-8
+0x1.ca5732p-9
+-0x1.302502p-10
+0x1.384388p-5
+0x1.2a3566p-9
+0x1.3e8194p-5
+0x1.2a3566p-9
+-0x1.38be78p-5
+-0x1.13841ap-10
+-0x1.3ecd48p-5
+0x1.3e8194p-5
+-0x1.3ecd48p-5
+-0x1.3e568ap-5
+0x1.0f81f4p-7
+0x1.125824p-7
+-0x1.1623b4p-8
+-0x1.172e54p-8
+0x1.3402cep-7
+0x1.340526p-7
+-0x1.1c2b1ap-5
+-0x1.1bd142p-5
+0x0p+0
+-0x1.0d10eap-7
+0x1.3dd0a8p-5
+0x1.14f766p-8
+-0x1.0fcc7p-7
+-0x1.33e63p-7
+0x1.15f5fap-8
+0x1.1c29eap-5
+-0x1.33e67cp-7
+0x0p+0
+0x1.1bcfd8p-5
+0x1.215734p-11
+0x1.aec08p-12
+-0x1.f2e478p-13
+0x1.3a8cc6p-10
+0x1.9e1a2ap-12
+0x1.d0948cp-13
+-0x1.ffa2a4p-11
+0x1.a14264p-10
+0x1.839aap-13
+0x1.4bd306p-14
+-0x1.900be4p-10
+0x1.d52a5cp-10
+0x1.48c5c4p-16
+0x1.3d60dcp-15
+-0x1.ec6e08p-10
+0x1.fb71acp-10
+-0x1.781feap-15
+0x1.de67ap-14
+-0x1.160dp-9
+0x1.1f0ecp-9
+0x1.a12322p-18
+0x1.f96ffcp-13
+-0x1.3f9564p-9
+0x1.5fd2e4p-9
+0x1.befa76p-14
+0x1.97beeap-13
+-0x1.928c58p-9
+0x1.b9d018p-9
+0x1.6d67b4p-15
+-0x1.25a64ep-12
+-0x1.0a17aep-8
+0x1.f567a2p-9
+-0x1.bbb41ap-12
+-0x1.13841ap-10
+-0x1.3ca5bcp-8
+0x1.b9a968p-9
+-0x1.310da2p-10
+0x1.3c7628p-5
+0x1.204ep-9
+0x1.42936ap-5
+0x1.204ep-9
+-0x1.3cf4d6p-5
+-0x1.13ddbap-10
+-0x1.42e194p-5
+0x1.42936ap-5
+-0x1.42e194p-5
+-0x1.4266b2p-5
+0x1.11201cp-7
+0x1.13cb6ap-7
+-0x1.15a8e4p-8
+-0x1.16a4dp-8
+0x1.32ed5cp-7
+0x1.32efeep-7
+-0x1.1bfe76p-5
+-0x1.1ba3dp-5
+0x0p+0
+-0x1.0e9be8p-7
+0x1.41dd8cp-5
+0x1.14755ap-8
+-0x1.112f18p-7
+-0x1.32d00ap-7
+0x1.15661ap-8
+0x1.1bfcdcp-5
+-0x1.32cfbap-7
+0x0p+0
+0x1.1ba1fep-5
+0x1.284edcp-11
+0x1.bf43b8p-12
+0x1.f28ceap-13
+0x1.8c0ffap-14
+0x1.bbd914p-15
+0x1.0746cap-13
+0x1.e9d82p-13
+0x1.4686e4p-13
+-0x1.551c14p-12
+-0x1.13ddbap-10
+-0x1.410a92p-5
+0x1.12962ap-7
+-0x1.1514f4p-8
+0x1.31dd1ap-7
+-0x1.1bd112p-5
+0x0p+0
+0x1.408822p-5
+-0x1.1000eep-7
+0x1.13dd0ap-8
+-0x1.31be38p-7
+0x1.1bcef6p-5
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.84933cp-32
+0x1.84933cp-32
+0x0p+0
+-0x1.84940cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.84933cp-32
+0x1.84933cp-32
+0x0p+0
+-0x1.84940cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.84933cp-32
+0x1.84933cp-32
+0x0p+0
+-0x1.84940cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.84933cp-32
+0x1.84933cp-32
+0x0p+0
+-0x1.84940cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.84933cp-32
+0x1.84933cp-32
+0x0p+0
+-0x1.84940cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.84933cp-32
+0x1.84933cp-32
+0x0p+0
+-0x1.84940cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.84933cp-32
+0x1.84933cp-32
+0x0p+0
+-0x1.84940cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.84933cp-32
+0x1.84933cp-32
+0x0p+0
+-0x1.84940cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.84933cp-32
+0x1.84933cp-32
+0x0p+0
+-0x1.84940cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.84933cp-32
+0x1.84933cp-32
+0x0p+0
+-0x1.84940cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x1.128ec8p-11
+0x1.8ccabp-12
+0x1.8e02fcp-13
+0x1.aff20ap-15
+0x1.4bf256p-17
+0x1.6a1e46p-14
+0x1.fd12d8p-13
+0x1.0f55e2p-12
+-0x1.a1be96p-13
+-0x1.185f48p-10
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x0p+0
+0x1.ab8714p-6
+-0x1.dc717ep-8
+0x1.ebce12p-9
+-0x1.0c8d5ep-7
+0x1.3511fp-5
+-0x1.358abep-5
+0x1.0ef5dcp-7
+-0x1.ee19ecp-9
+0x1.dca3fcp-8
+-0x1.ab8834p-6
+0x0p+0
+0x1.91a89ap+2
+0x0p+0
+0x1.9186d6p+2
+0x0p+0
+0x1.dca3fcp-8
+0x0p+0
+0x1.31dd1ap-7
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.84933cp-32
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.284edcp-11
+0x1.bf43b8p-12
+0x1.bf43b8p-12
+0x1.f28ceap-13
+0x1.f28ceap-13
+0x1.8c0ffap-14
+0x1.8c0ffap-14
+0x1.bbd914p-15
+0x1.bbd914p-15
+0x1.0746cap-13
+0x1.0746cap-13
+0x1.e9d82p-13
+0x1.e9d82p-13
+0x1.4686e4p-13
+0x1.4686e4p-13
+-0x1.551c14p-12
+-0x1.551c14p-12
+-0x1.13ddbap-10
+-0x1.13ddbap-10
+0x1.408822p-5
+-0x1.13ddbap-10
+-0x1.410a92p-5
+-0x1.410a92p-5
+0x1.408822p-5
+0x1.12962ap-7
+-0x1.410a92p-5
+-0x1.1514f4p-8
+0x1.12962ap-7
+0x1.31dd1ap-7
+-0x1.1514f4p-8
+-0x1.1bd112p-5
+0x1.31dd1ap-7
+0x0p+0
+-0x1.1bd112p-5
+0x1.408822p-5
+-0x1.1000eep-7
+-0x1.1000eep-7
+0x1.13dd0ap-8
+0x1.13dd0ap-8
+-0x1.31be38p-7
+-0x1.31be38p-7
+0x1.1bcef6p-5
+0x1.1bcef6p-5
+0x0p+0
+0x1.2834e4p-11
+0x1.be7bfap-12
+-0x1.b61da2p-13
+0x1.3a50ecp-10
+0x1.ae49a4p-12
+0x1.eee5ap-13
+-0x1.ed7f9ep-11
+0x1.a004bp-10
+0x1.a45faap-13
+0x1.819898p-14
+-0x1.88c1a8p-10
+0x1.d551dap-10
+0x1.18a40ep-15
+0x1.af620cp-15
+-0x1.e8ec52p-10
+0x1.ff1dcp-10
+-0x1.05226ap-15
+0x1.0e74d8p-13
+-0x1.168ed4p-9
+0x1.234dfap-9
+0x1.52898ap-16
+0x1.040c14p-12
+-0x1.422fe8p-9
+0x1.652bp-9
+0x1.d9d5fap-14
+0x1.8a7654p-13
+-0x1.94885ep-9
+0x1.bbd284p-9
+0x1.3d755ep-15
+-0x1.1c592ep-12
+-0x1.077ac4p-8
+0x1.f09e7ap-9
+-0x1.b1c784p-12
+-0x1.01e3aap-10
+-0x1.34e30ap-8
+0x1.b4261ep-9
+-0x1.1febdcp-10
+0x1.3e4644p-5
+0x1.1b516p-9
+0x1.4433acp-5
+0x1.1b516p-9
+-0x1.3ea7eep-5
+-0x1.054b4p-10
+-0x1.4469acp-5
+0x1.4433acp-5
+-0x1.4469acp-5
+-0x1.43d69p-5
+0x1.0bce3cp-7
+0x1.0e07d4p-7
+-0x1.3051ccp-8
+-0x1.30f496p-8
+0x1.7d05ecp-7
+0x1.7cd4e2p-7
+-0x1.6ba0d2p-5
+-0x1.6b080ep-5
+0x0p+0
+-0x1.09497cp-7
+0x1.434daap-5
+0x1.2f1c1ap-8
+-0x1.0b6ae8p-7
+-0x1.7cdd64p-7
+0x1.2fad94p-8
+0x1.6b9ce6p-5
+-0x1.7caac4p-7
+0x0p+0
+0x1.6b04aep-5
+0x1.2ef68ep-11
+0x1.ce44c4p-12
+-0x1.7a7d6ap-13
+0x1.3a2f44p-10
+0x1.be6084p-12
+0x1.088f8p-12
+-0x1.db3b34p-11
+0x1.9f2d14p-10
+0x1.c82396p-13
+0x1.c52352p-14
+-0x1.80cd04p-10
+0x1.d60ae6p-10
+0x1.a4b98cp-15
+0x1.1a0d62p-14
+-0x1.e43764p-10
+0x1.017598p-9
+-0x1.0169b6p-16
+0x1.24e4a2p-13
+-0x1.167a96p-9
+0x1.26b0b6p-9
+0x1.01dcd6p-15
+0x1.f5ed08p-13
+-0x1.449336p-9
+0x1.67cedap-9
+0x1.b9babep-14
+0x1.3bb3a8p-13
+-0x1.9767bap-9
+0x1.b8ccc2p-9
+0x1.c55dd6p-19
+-0x1.47fd78p-12
+-0x1.068f3ep-8
+0x1.e4d956p-9
+-0x1.d9bf48p-12
+-0x1.054b4p-10
+-0x1.306abap-8
+0x1.a47d16p-9
+-0x1.22cbf4p-10
+0x1.41e852p-5
+0x1.122552p-9
+0x1.47bae8p-5
+0x1.122552p-9
+-0x1.426ae6p-5
+-0x1.06841p-10
+-0x1.480e9ep-5
+0x1.47bae8p-5
+-0x1.480e9ep-5
+-0x1.476944p-5
+0x1.0ccb26p-7
+0x1.0eb5b4p-7
+-0x1.2f083cp-8
+-0x1.2f85e8p-8
+0x1.7b2554p-7
+0x1.7b09cep-7
+-0x1.6b543ap-5
+-0x1.6abaccp-5
+0x0p+0
+-0x1.0a3842p-7
+0x1.46dc9ep-5
+0x1.2dc46cp-8
+-0x1.0c09bcp-7
+-0x1.7af7d6p-7
+0x1.2e359ap-8
+0x1.6b4fep-5
+-0x1.7adbf2p-7
+0x0p+0
+0x1.6ab6bap-5
+0x1.359512p-11
+0x1.dda0dap-12
+-0x1.4124a2p-13
+0x1.3a29d6p-10
+0x1.ce09fcp-12
+0x1.19ce6p-12
+-0x1.c98892p-11
+0x1.9e8b94p-10
+0x1.eb90f4p-13
+0x1.056cf6p-13
+-0x1.790788p-10
+0x1.d70af4p-10
+0x1.1b1f7ep-14
+0x1.5bdbbap-14
+-0x1.df6e86p-10
+0x1.0363aep-9
+0x1.1f614ap-21
+0x1.3870d6p-13
+-0x1.16622p-9
+0x1.29e444p-9
+0x1.505a0ep-15
+0x1.e00decp-13
+-0x1.46d956p-9
+0x1.69f23ap-9
+0x1.9246cep-14
+0x1.de3f9p-14
+-0x1.99f962p-9
+0x1.b56158p-9
+-0x1.f79a74p-16
+-0x1.708bf2p-12
+-0x1.0592e6p-8
+0x1.d97828p-9
+-0x1.fedd52p-12
+-0x1.06841p-10
+-0x1.2c4822p-8
+0x1.96f03ap-9
+-0x1.23c3cap-10
+0x1.4585cep-5
+0x1.0997a6p-9
+0x1.4b3c56p-5
+0x1.0997a6p-9
+-0x1.460ba2p-5
+-0x1.07079cp-10
+-0x1.4b923ep-5
+0x1.4b3c56p-5
+-0x1.4b923ep-5
+-0x1.4ae8c4p-5
+0x1.0d8884p-7
+0x1.0f4b5p-7
+-0x1.2d63f4p-8
+-0x1.2dd7fap-8
+0x1.79429p-7
+0x1.792a24p-7
+-0x1.6b0766p-5
+-0x1.6a6e66p-5
+0x0p+0
+-0x1.0ae466p-7
+0x1.4a5864p-5
+0x1.2c1494p-8
+-0x1.0c8d4ap-7
+-0x1.7911ep-7
+0x1.2c7db2p-8
+0x1.6b02ep-5
+-0x1.78f99p-7
+0x0p+0
+0x1.6a69fep-5
+0x1.3c1084p-11
+0x1.ecdb98p-12
+0x1.2abd42p-12
+0x1.292b8p-13
+0x1.9d5f12p-14
+0x1.498456p-13
+0x1.c68a7ap-13
+0x1.4a3458p-14
+-0x1.9573aep-12
+-0x1.07079cp-10
+-0x1.498fd6p-5
+0x1.0e1ebep-7
+-0x1.2ba55ep-8
+0x1.776a1ep-7
+-0x1.6aba44p-5
+0x0p+0
+0x1.4906bap-5
+-0x1.0b67fep-7
+0x1.2a4b66p-8
+-0x1.773782p-7
+0x1.6ab5bp-5
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493c4p-32
+0x1.8493c4p-32
+0x0p+0
+-0x1.8493ep-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493c4p-32
+0x1.8493c4p-32
+0x0p+0
+-0x1.8493ep-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493c4p-32
+0x1.8493c4p-32
+0x0p+0
+-0x1.8493ep-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493c4p-32
+0x1.8493c4p-32
+0x0p+0
+-0x1.8493ep-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493c4p-32
+0x1.8493c4p-32
+0x0p+0
+-0x1.8493ep-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493c4p-32
+0x1.8493c4p-32
+0x0p+0
+-0x1.8493ep-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493c4p-32
+0x1.8493c4p-32
+0x0p+0
+-0x1.8493ep-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493c4p-32
+0x1.8493c4p-32
+0x0p+0
+-0x1.8493ep-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493c4p-32
+0x1.8493c4p-32
+0x0p+0
+-0x1.8493ep-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493c4p-32
+0x1.8493c4p-32
+0x0p+0
+-0x1.8493ep-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.284edcp-11
+0x1.bf43b8p-12
+0x1.f28ceap-13
+0x1.8c0ffap-14
+0x1.bbd914p-15
+0x1.0746cap-13
+0x1.e9d82p-13
+0x1.4686e4p-13
+-0x1.551c14p-12
+-0x1.13ddbap-10
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x0p+0
+0x1.1bcef6p-5
+-0x1.31be38p-7
+0x1.13dd0ap-8
+-0x1.1000eep-7
+0x1.408822p-5
+-0x1.410a92p-5
+0x1.12962ap-7
+-0x1.1514f4p-8
+0x1.31dd1ap-7
+-0x1.1bd112p-5
+0x0p+0
+0x1.9186d6p+2
+0x0p+0
+0x1.91641ap+2
+0x0p+0
+0x1.31dd1ap-7
+0x0p+0
+0x1.776a1ep-7
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493c4p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.3c1084p-11
+0x1.ecdb98p-12
+0x1.ecdb98p-12
+0x1.2abd42p-12
+0x1.2abd42p-12
+0x1.292b8p-13
+0x1.292b8p-13
+0x1.9d5f12p-14
+0x1.9d5f12p-14
+0x1.498456p-13
+0x1.498456p-13
+0x1.c68a7ap-13
+0x1.c68a7ap-13
+0x1.4a3458p-14
+0x1.4a3458p-14
+-0x1.9573aep-12
+-0x1.9573aep-12
+-0x1.07079cp-10
+-0x1.07079cp-10
+0x1.4906bap-5
+-0x1.07079cp-10
+-0x1.498fd6p-5
+-0x1.498fd6p-5
+0x1.4906bap-5
+0x1.0e1ebep-7
+-0x1.498fd6p-5
+-0x1.2ba55ep-8
+0x1.0e1ebep-7
+0x1.776a1ep-7
+-0x1.2ba55ep-8
+-0x1.6aba44p-5
+0x1.776a1ep-7
+0x0p+0
+-0x1.6aba44p-5
+0x1.4906bap-5
+-0x1.0b67fep-7
+-0x1.0b67fep-7
+0x1.2a4b66p-8
+0x1.2a4b66p-8
+-0x1.773782p-7
+-0x1.773782p-7
+0x1.6ab5bp-5
+0x1.6ab5bp-5
+0x0p+0
+0x1.3b2462p-11
+0x1.e9e5bcp-12
+-0x1.0f860cp-13
+0x1.39ce5cp-10
+0x1.dac138p-12
+0x1.262706p-12
+-0x1.ba6a38p-11
+0x1.9d3e62p-10
+0x1.02cf5cp-12
+0x1.2114b8p-13
+-0x1.72d832p-10
+0x1.d78e6p-10
+0x1.52ea98p-14
+0x1.abb368p-14
+-0x1.dc32fcp-10
+0x1.05fff2p-9
+0x1.3a841ap-16
+0x1.6c415cp-13
+-0x1.163588p-9
+0x1.2f549ap-9
+0x1.08f3p-14
+0x1.f72ebcp-13
+-0x1.47882p-9
+0x1.6f1a16p-9
+0x1.c12d18p-14
+0x1.85b8a6p-14
+-0x1.9a1434p-9
+0x1.b43908p-9
+-0x1.8f88b2p-15
+-0x1.99902p-12
+-0x1.040c12p-8
+0x1.cf087ep-9
+-0x1.115bep-11
+-0x1.0c412cp-10
+-0x1.290becp-8
+0x1.891ab6p-9
+-0x1.28d482p-10
+0x1.434edep-5
+0x1.ffb5bep-10
+-0x1.43d314p-5
+0x1.48ebd2p-5
+-0x1.493d3cp-5
+-0x1.4863dap-5
+0x1.f7ad2ap-8
+0x1.fa193ep-8
+-0x1.3a84p-8
+-0x1.3a9704p-8
+0x1.c13c2ep-7
+0x1.c0e5bep-7
+-0x1.c2e4ap-5
+-0x1.c1ef08p-5
+0x0p+0
+-0x1.f2aa8cp-8
+0x1.47daf8p-5
+0x1.393f78p-8
+-0x1.f4e87ep-8
+-0x1.c0fc24p-7
+0x1.394b16p-8
+0x1.c2dd1cp-5
+-0x1.c0a5f4p-7
+0x0p+0
+0x1.c1e774p-5
+0x1.4169ep-11
+0x1.f8eccp-12
+-0x1.b5ef24p-14
+0x1.3a207ap-10
+0x1.ea2396p-12
+0x1.3799cap-12
+-0x1.a9deacp-11
+0x1.9d2bacp-10
+0x1.14d02ep-12
+0x1.46629p-13
+-0x1.6b486p-10
+0x1.d924c8p-10
+0x1.9fae5ap-14
+0x1.ef289cp-14
+-0x1.d765fcp-10
+0x1.081926p-9
+0x1.26c8fep-15
+0x1.7914c2p-13
+-0x1.15f72p-9
+0x1.320864p-9
+0x1.2510f4p-14
+0x1.d7a2bep-13
+-0x1.498ebep-9
+0x1.700b14p-9
+0x1.8918ccp-14
+0x1.e3c654p-15
+-0x1.9c3e08p-9
+0x1.b00b44p-9
+-0x1.504e7cp-14
+-0x1.bac792p-12
+-0x1.031052p-8
+0x1.c4ad3cp-9
+-0x1.20b372p-11
+-0x1.0a8f86p-10
+-0x1.254a04p-8
+0x1.7e902cp-9
+-0x1.273c18p-10
+0x1.46751cp-5
+0x1.f31ec2p-10
+-0x1.46f736p-5
+0x1.4bf95ap-5
+-0x1.4c48c6p-5
+-0x1.4b6cb2p-5
+0x1.f7b066p-8
+0x1.f9989p-8
+-0x1.37d226p-8
+-0x1.37cd4ap-8
+0x1.be2e2ap-7
+0x1.bdfbacp-7
+-0x1.c268a2p-5
+-0x1.c172f6p-5
+0x0p+0
+-0x1.f28bf6p-8
+0x1.4adf8cp-5
+0x1.3686e8p-8
+-0x1.f443cep-8
+-0x1.bdedf8p-7
+0x1.367a4ap-8
+0x1.c26106p-5
+-0x1.bdba7cp-7
+0x0p+0
+0x1.c16b62p-5
+0x1.4784a2p-11
+0x1.03e396p-11
+-0x1.511402p-14
+0x1.3a9634p-10
+0x1.f91592p-12
+0x1.490806p-12
+-0x1.99e78ap-11
+0x1.9d45fep-10
+0x1.26c146p-12
+0x1.6bdaaep-13
+-0x1.63e28ap-10
+0x1.dae68ap-10
+0x1.eb9e94p-14
+0x1.18537ep-13
+-0x1.d2a812p-10
+0x1.0a23a2p-9
+0x1.aaf0cep-15
+0x1.8372ep-13
+-0x1.15c11ep-9
+0x1.3487f2p-9
+0x1.3c06bcp-14
+0x1.b6e038p-13
+-0x1.4b76b4p-9
+0x1.70a0fp-9
+0x1.4e887cp-14
+0x1.90fc8ap-16
+-0x1.9e247p-9
+0x1.abb772p-9
+-0x1.d32e06p-14
+-0x1.d83fd6p-12
+-0x1.0209fep-8
+0x1.bae0eap-9
+-0x1.2e596ep-11
+-0x1.092p-10
+-0x1.21b2c4p-8
+0x1.74a71p-9
+-0x1.25d544p-10
+0x1.4984d4p-5
+0x1.e6964cp-10
+-0x1.4a0aecp-5
+0x1.4ef0c4p-5
+-0x1.4f43ecp-5
+-0x1.4e62c2p-5
+0x1.f744dcp-8
+0x1.f8e8bcp-8
+-0x1.34b7dep-8
+-0x1.34b7dep-8
+0x1.bb22ccp-7
+0x1.baf852p-7
+-0x1.c1ed36p-5
+-0x1.c0f904p-5
+0x0p+0
+-0x1.f1fcd4p-8
+0x1.4dd204p-5
+0x1.33681ep-8
+-0x1.f36eb4p-8
+-0x1.bae224p-7
+0x1.335a96p-8
+0x1.c1e5bp-5
+-0x1.bab60ap-7
+0x0p+0
+0x1.c0f18cp-5
+0x1.4d962ep-11
+0x1.0b1dc2p-11
+0x1.5aaf4cp-12
+0x1.9146dcp-13
+0x1.37e0bep-13
+0x1.8b558ep-13
+0x1.952acep-13
+-0x1.1554a6p-17
+-0x1.f2a92cp-12
+-0x1.07aa0ep-10
+-0x1.4d0488p-5
+0x1.f68aep-8
+-0x1.318992p-8
+0x1.b82e64p-7
+-0x1.c17296p-5
+0x0p+0
+0x1.4c7b0cp-5
+-0x1.f123aap-8
+0x1.30310ep-8
+-0x1.b7ebccp-7
+0x1.c16b4cp-5
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.3c1084p-11
+0x1.ecdb98p-12
+0x1.2abd42p-12
+0x1.292b8p-13
+0x1.9d5f12p-14
+0x1.498456p-13
+0x1.c68a7ap-13
+0x1.4a3458p-14
+-0x1.9573aep-12
+-0x1.07079cp-10
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.6ab5bp-5
+-0x1.773782p-7
+0x1.2a4b66p-8
+-0x1.0b67fep-7
+0x1.4906bap-5
+-0x1.498fd6p-5
+0x1.0e1ebep-7
+-0x1.2ba55ep-8
+0x1.776a1ep-7
+-0x1.6aba44p-5
+0x0p+0
+0x1.91641ap+2
+0x0p+0
+0x1.9143cp+2
+0x0p+0
+0x1.776a1ep-7
+0x0p+0
+0x1.b82e64p-7
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.4d962ep-11
+0x1.0b1dc2p-11
+0x1.0b1dc2p-11
+0x1.5aaf4cp-12
+0x1.5aaf4cp-12
+0x1.9146dcp-13
+0x1.9146dcp-13
+0x1.37e0bep-13
+0x1.37e0bep-13
+0x1.8b558ep-13
+0x1.8b558ep-13
+0x1.952acep-13
+0x1.952acep-13
+-0x1.1554a6p-17
+-0x1.1554a6p-17
+-0x1.f2a92cp-12
+-0x1.f2a92cp-12
+-0x1.07aa0ep-10
+-0x1.07aa0ep-10
+0x1.4c7b0cp-5
+-0x1.07aa0ep-10
+-0x1.4d0488p-5
+-0x1.4d0488p-5
+0x1.4c7b0cp-5
+0x1.f68aep-8
+-0x1.4d0488p-5
+-0x1.318992p-8
+0x1.f68aep-8
+0x1.b82e64p-7
+-0x1.318992p-8
+-0x1.c17296p-5
+0x1.b82e64p-7
+0x0p+0
+-0x1.c17296p-5
+0x1.4c7b0cp-5
+-0x1.f123aap-8
+-0x1.f123aap-8
+0x1.30310ep-8
+0x1.30310ep-8
+-0x1.b7ebccp-7
+-0x1.b7ebccp-7
+0x1.c16b4cp-5
+0x1.c16b4cp-5
+0x0p+0
+0x1.4a2f16p-11
+0x1.07709p-11
+-0x1.10501cp-14
+0x1.39a514p-10
+0x1.004c3ap-11
+0x1.5641e6p-12
+-0x1.8efc3cp-11
+0x1.9cfcaap-10
+0x1.33bccep-12
+0x1.9b34f2p-13
+-0x1.5e86eep-10
+0x1.deaf5p-10
+0x1.2309a4p-13
+0x1.5a3944p-13
+-0x1.ce060cp-10
+0x1.0ec14cp-9
+0x1.5388cap-14
+0x1.b635bap-13
+-0x1.144ffep-9
+0x1.3a3266p-9
+0x1.a1cf6cp-14
+0x1.a95372p-13
+-0x1.4ba3ccp-9
+0x1.732826p-9
+0x1.3f1074p-14
+-0x1.39fe74p-16
+-0x1.9f98fep-9
+0x1.a7259cp-9
+-0x1.3912b2p-13
+-0x1.074d8ep-11
+-0x1.022b92p-8
+0x1.af6a56p-9
+-0x1.479f76p-11
+-0x1.108bb2p-10
+-0x1.209182p-8
+0x1.68574ep-9
+-0x1.2d1cfcp-10
+0x1.4288e6p-5
+0x1.d3c67cp-10
+-0x1.430144p-5
+0x1.47dfd2p-5
+-0x1.48224cp-5
+-0x1.470a02p-5
+0x1.b0081cp-8
+0x1.b08e5ep-8
+-0x1.29d4fep-8
+-0x1.2991a4p-8
+0x1.f82004p-7
+0x1.f7b7dcp-7
+-0x1.104d04p-4
+-0x1.0f90fcp-4
+0x0p+0
+-0x1.ab7388p-8
+0x1.46892p-5
+0x1.28bb4ap-8
+-0x1.abc61ep-8
+-0x1.f7d8d2p-7
+0x1.286ed2p-8
+0x1.104844p-4
+-0x1.f77354p-7
+0x0p+0
+0x1.0f8cb4p-4
+0x1.500ddp-11
+0x1.0efc0ap-11
+-0x1.651d62p-15
+0x1.3a7d86p-10
+0x1.07d56ep-11
+0x1.68995p-12
+-0x1.7fa652p-11
+0x1.9da9ecp-10
+0x1.46641p-12
+0x1.c0df4cp-13
+-0x1.57570ep-10
+0x1.e0dae8p-10
+0x1.49b45ap-13
+0x1.76494p-13
+-0x1.c960f2p-10
+0x1.1098acp-9
+0x1.8e2c9ap-14
+0x1.b8779p-13
+-0x1.14272ep-9
+0x1.3c0276p-9
+0x1.aaf09cp-14
+0x1.84d65cp-13
+-0x1.4d736cp-9
+0x1.72fbdcp-9
+0x1.fc471p-15
+-0x1.984348p-15
+-0x1.a1134cp-9
+0x1.a2b20ep-9
+-0x1.73541ep-13
+-0x1.128c6cp-11
+-0x1.010744p-8
+0x1.a6b23ap-9
+-0x1.520ddap-11
+-0x1.0d6ddep-10
+-0x1.1d20eep-8
+0x1.605fccp-9
+-0x1.2a243ep-10
+0x1.451936p-5
+0x1.cb48ep-10
+-0x1.45924ep-5
+0x1.4a5c24p-5
+-0x1.4a9fd8p-5
+-0x1.49833ep-5
+0x1.ae231ep-8
+0x1.ae10f6p-8
+-0x1.25973cp-8
+-0x1.2538a2p-8
+0x1.f38842p-7
+0x1.f353e6p-7
+-0x1.0fee7ap-4
+-0x1.0f3394p-4
+0x0p+0
+-0x1.a96a5p-8
+0x1.48fddp-5
+0x1.247216p-8
+-0x1.a92072p-8
+-0x1.f3442p-7
+0x1.240a2p-8
+0x1.0fe9f2p-4
+-0x1.f31034p-7
+0x0p+0
+0x1.0f2f7p-4
+0x1.55f0acp-11
+0x1.165e7p-11
+-0x1.5e838cp-16
+0x1.3b70bep-10
+0x1.0f34a8p-11
+0x1.7ab452p-12
+-0x1.70e7a4p-11
+0x1.9e7ec8p-10
+0x1.58a9bcp-12
+0x1.e60df8p-13
+-0x1.50481cp-10
+0x1.e2ffa4p-10
+0x1.6f72bap-13
+0x1.91068ep-13
+-0x1.c4e37ap-10
+0x1.126002p-9
+0x1.c5f8b6p-14
+0x1.b9095p-13
+-0x1.13fbcap-9
+0x1.3d9e52p-9
+0x1.afe004p-14
+0x1.60ca86p-13
+-0x1.4f1b32p-9
+0x1.728d44p-9
+0x1.7959b2p-15
+-0x1.43335cp-14
+-0x1.a24f92p-9
+0x1.9e305p-9
+-0x1.aacd66p-13
+-0x1.1c6e22p-11
+-0x1.ffb912p-9
+0x1.9e704ep-9
+-0x1.5b3e2p-11
+-0x1.0acaa2p-10
+-0x1.19d704p-8
+0x1.58c8cap-9
+-0x1.2794ap-10
+0x1.479c56p-5
+0x1.c27a7p-10
+-0x1.481968p-5
+0x1.4ccb6ap-5
+-0x1.4d136p-5
+-0x1.4bf17ap-5
+0x1.abc414p-8
+0x1.ab70fap-8
+-0x1.20d392p-8
+-0x1.2081ep-8
+0x1.eef81ap-7
+0x1.eed026p-7
+-0x1.0f90e8p-4
+-0x1.0ed7cap-4
+0x0p+0
+-0x1.a6e32ep-8
+0x1.4b6854p-5
+0x1.1fa762p-8
+-0x1.a65a1ap-8
+-0x1.eeb4dep-7
+0x1.1f4b5cp-8
+0x1.0f8c56p-4
+-0x1.ee8c8ap-7
+0x0p+0
+0x1.0ed366p-4
+0x1.5bd856p-11
+0x1.1da9p-11
+0x1.8ca632p-12
+0x1.0535a4p-12
+0x1.aac7acp-13
+0x1.b8444cp-13
+0x1.3cfad8p-13
+-0x1.b406f2p-14
+-0x1.253896p-11
+-0x1.0871b6p-10
+-0x1.4a8b6p-5
+0x1.a91786p-8
+-0x1.1c0144p-8
+0x1.ea8bdcp-7
+-0x1.0f33dcp-4
+0x0p+0
+0x1.4a0a5ap-5
+-0x1.a411a2p-8
+0x1.1ace92p-8
+-0x1.ea4918p-7
+0x1.0f2f7ep-4
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.4d962ep-11
+0x1.0b1dc2p-11
+0x1.5aaf4cp-12
+0x1.9146dcp-13
+0x1.37e0bep-13
+0x1.8b558ep-13
+0x1.952acep-13
+-0x1.1554a6p-17
+-0x1.f2a92cp-12
+-0x1.07aa0ep-10
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.c16b4cp-5
+-0x1.b7ebccp-7
+0x1.30310ep-8
+-0x1.f123aap-8
+0x1.4c7b0cp-5
+-0x1.4d0488p-5
+0x1.f68aep-8
+-0x1.318992p-8
+0x1.b82e64p-7
+-0x1.c17296p-5
+0x0p+0
+0x1.9143cp+2
+0x0p+0
+0x1.912a92p+2
+0x0p+0
+0x1.b82e64p-7
+0x0p+0
+0x1.ea8bdcp-7
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.5bd856p-11
+0x1.1da9p-11
+0x1.1da9p-11
+0x1.8ca632p-12
+0x1.8ca632p-12
+0x1.0535a4p-12
+0x1.0535a4p-12
+0x1.aac7acp-13
+0x1.aac7acp-13
+0x1.b8444cp-13
+0x1.b8444cp-13
+0x1.3cfad8p-13
+0x1.3cfad8p-13
+-0x1.b406f2p-14
+-0x1.b406f2p-14
+-0x1.253896p-11
+-0x1.253896p-11
+-0x1.0871b6p-10
+-0x1.0871b6p-10
+0x1.4a0a5ap-5
+-0x1.0871b6p-10
+-0x1.4a8b6p-5
+-0x1.4a8b6p-5
+0x1.4a0a5ap-5
+0x1.a91786p-8
+-0x1.4a8b6p-5
+-0x1.1c0144p-8
+0x1.a91786p-8
+0x1.ea8bdcp-7
+-0x1.1c0144p-8
+-0x1.0f33dcp-4
+0x1.ea8bdcp-7
+0x0p+0
+-0x1.0f33dcp-4
+0x1.4a0a5ap-5
+-0x1.a411a2p-8
+-0x1.a411a2p-8
+0x1.1ace92p-8
+0x1.1ace92p-8
+-0x1.ea4918p-7
+-0x1.ea4918p-7
+0x1.0f2f7ep-4
+0x1.0f2f7ep-4
+0x0p+0
+0x1.55d8aap-11
+0x1.1a4d12p-11
+-0x1.ca145ap-17
+0x1.3b74eap-10
+0x1.12f4e6p-11
+0x1.90c696p-12
+-0x1.67f322p-11
+0x1.a16532p-10
+0x1.6d4802p-12
+0x1.14f4b6p-12
+-0x1.4a004ap-10
+0x1.ea550ap-10
+0x1.b05eeep-13
+0x1.d2b218p-13
+-0x1.beb0bp-10
+0x1.176e22p-9
+0x1.241544p-13
+0x1.cfb424p-13
+-0x1.127414p-9
+0x1.4194p-9
+0x1.e374f4p-14
+0x1.30fc44p-13
+-0x1.505128p-9
+0x1.7268eap-9
+0x1.aa0e14p-16
+-0x1.0b6c8p-13
+-0x1.a54af8p-9
+0x1.9806dep-9
+-0x1.066a5ep-12
+-0x1.37ee7ep-11
+-0x1.00dcfep-8
+0x1.9376ap-9
+-0x1.7577c4p-11
+-0x1.1350b2p-10
+-0x1.19bee6p-8
+0x1.4dc154p-9
+-0x1.300f02p-10
+0x1.3a8488p-5
+0x1.b16356p-10
+-0x1.3ae9acp-5
+0x1.3fa30ep-5
+-0x1.3fcfecp-5
+-0x1.3e733p-5
+0x1.342df8p-8
+0x1.32eb66p-8
+-0x1.e2b3ep-9
+-0x1.e24076p-9
+0x1.0a6f5cp-6
+0x1.0a4d06p-6
+-0x1.414c88p-4
+-0x1.403d44p-4
+0x0p+0
+-0x1.3071a2p-8
+0x1.3e03e8p-5
+0x1.e13ecap-9
+-0x1.2ef8c8p-8
+-0x1.0a55bcp-6
+0x1.e0b8cap-9
+0x1.41485p-4
+-0x1.0a3302p-6
+0x0p+0
+0x1.40396ap-4
+0x1.5bec48p-11
+0x1.2218fcp-11
+0x1.00374cp-17
+0x1.3ccf7cp-10
+0x1.1aaa9ap-11
+0x1.a29364p-12
+-0x1.59b74ep-11
+0x1.a29342p-10
+0x1.7f8a0ep-12
+0x1.25c5b4p-12
+-0x1.4345aap-10
+0x1.ec5c04p-10
+0x1.d2d63p-13
+0x1.e88d42p-13
+-0x1.baacdcp-10
+0x1.18fp-9
+0x1.3b2fbp-13
+0x1.cba316p-13
+-0x1.1267b8p-9
+0x1.42b85cp-9
+0x1.e02a92p-14
+0x1.0d4838p-13
+-0x1.51bf72p-9
+0x1.7184ap-9
+0x1.557528p-17
+-0x1.3f666p-13
+-0x1.a6155p-9
+0x1.939854p-9
+-0x1.1e9414p-12
+-0x1.3f5472p-11
+-0x1.ff3452p-9
+0x1.8c147p-9
+-0x1.7c6238p-11
+-0x1.0f4bbp-10
+-0x1.169678p-8
+0x1.47af1p-9
+-0x1.2c3568p-10
+0x1.3c8bap-5
+0x1.ac5b26p-10
+-0x1.3cf2b4p-5
+0x1.419aa6p-5
+-0x1.41ca58p-5
+-0x1.40682ep-5
+0x1.30986cp-8
+0x1.2ea4b6p-8
+-0x1.d72f94p-9
+-0x1.d672fp-9
+0x1.07369p-6
+0x1.073506p-6
+-0x1.40c3c4p-4
+-0x1.3fb74cp-4
+0x0p+0
+-0x1.2cb56ep-8
+0x1.3ff506p-5
+0x1.d5b0fp-9
+-0x1.2a8c6p-8
+-0x1.071deep-6
+0x1.d4de4ep-9
+0x1.40bffep-4
+-0x1.071ba6p-6
+0x0p+0
+0x1.3fb3bap-4
+0x1.62171ap-11
+0x1.2994p-11
+0x1.dc08dap-16
+0x1.3e3222p-10
+0x1.2231eep-11
+0x1.b46002p-12
+-0x1.4bd7ecp-11
+0x1.a3d858p-10
+0x1.918894p-12
+0x1.3649cap-12
+-0x1.3cbbcp-10
+0x1.ee6fbp-10
+0x1.f4f40ep-13
+0x1.fd0f8cp-13
+-0x1.b6be64p-10
+0x1.1a617ap-9
+0x1.5116dcp-13
+0x1.c6604ap-13
+-0x1.12589ep-9
+0x1.43b3c2p-9
+0x1.daf636p-14
+0x1.d555cap-14
+-0x1.530266p-9
+0x1.70770cp-9
+-0x1.433bacp-18
+-0x1.70156cp-13
+-0x1.a6aaep-9
+0x1.8f30e2p-9
+-0x1.35264ap-12
+-0x1.45be78p-11
+-0x1.fca274p-9
+0x1.851772p-9
+-0x1.824dd6p-11
+-0x1.0bf88p-10
+-0x1.138f06p-8
+0x1.41c6ap-9
+-0x1.28f8e4p-10
+0x1.3e8e82p-5
+0x1.a69d9ap-10
+-0x1.3ef98ap-5
+0x1.438ddap-5
+-0x1.43c21p-5
+-0x1.425b2ap-5
+0x1.2c80fap-8
+0x1.2a55fep-8
+-0x1.ca6bf8p-9
+-0x1.c9de5ep-9
+0x1.0402bep-6
+0x1.040a3ap-6
+-0x1.403d2p-4
+-0x1.3f33b4p-4
+0x0p+0
+-0x1.287a1ap-8
+0x1.41e3b2p-5
+0x1.c8e488p-9
+-0x1.261602p-8
+-0x1.03eb04p-6
+0x1.c84024p-9
+0x1.40398ap-4
+-0x1.03f274p-6
+0x0p+0
+0x1.3f3054p-4
+0x1.683688p-11
+0x1.31020ap-11
+0x1.c5c8d4p-12
+0x1.468f6ap-12
+0x1.0814p-12
+0x1.c0cd14p-13
+0x1.913e52p-14
+-0x1.9dbec8p-13
+-0x1.4b5362p-11
+-0x1.0914bap-10
+-0x1.40f008p-5
+0x1.282368p-8
+-0x1.bda15ap-9
+0x1.00e99ep-6
+-0x1.3fb7f2p-4
+0x0p+0
+0x1.408122p-5
+-0x1.23f582p-8
+0x1.bc095ap-9
+-0x1.00d2f4p-6
+0x1.3fb47cp-4
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.5bd856p-11
+0x1.1da9p-11
+0x1.8ca632p-12
+0x1.0535a4p-12
+0x1.aac7acp-13
+0x1.b8444cp-13
+0x1.3cfad8p-13
+-0x1.b406f2p-14
+-0x1.253896p-11
+-0x1.0871b6p-10
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.0f2f7ep-4
+-0x1.ea4918p-7
+0x1.1ace92p-8
+-0x1.a411a2p-8
+0x1.4a0a5ap-5
+-0x1.4a8b6p-5
+0x1.a91786p-8
+-0x1.1c0144p-8
+0x1.ea8bdcp-7
+-0x1.0f33dcp-4
+0x0p+0
+0x1.912a92p+2
+0x0p+0
+0x1.911ee4p+2
+0x0p+0
+0x1.ea8bdcp-7
+0x0p+0
+0x1.00e99ep-6
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.683688p-11
+0x1.31020ap-11
+0x1.31020ap-11
+0x1.c5c8d4p-12
+0x1.c5c8d4p-12
+0x1.468f6ap-12
+0x1.468f6ap-12
+0x1.0814p-12
+0x1.0814p-12
+0x1.c0cd14p-13
+0x1.c0cd14p-13
+0x1.913e52p-14
+0x1.913e52p-14
+-0x1.9dbec8p-13
+-0x1.9dbec8p-13
+-0x1.4b5362p-11
+-0x1.4b5362p-11
+-0x1.0914bap-10
+-0x1.0914bap-10
+0x1.408122p-5
+-0x1.0914bap-10
+-0x1.40f008p-5
+-0x1.40f008p-5
+0x1.408122p-5
+0x1.282368p-8
+-0x1.40f008p-5
+-0x1.bda15ap-9
+0x1.282368p-8
+0x1.00e99ep-6
+-0x1.bda15ap-9
+-0x1.3fb7f2p-4
+0x1.00e99ep-6
+0x0p+0
+-0x1.3fb7f2p-4
+0x1.408122p-5
+-0x1.23f582p-8
+-0x1.23f582p-8
+0x1.bc095ap-9
+0x1.bc095ap-9
+-0x1.00d2f4p-6
+-0x1.00d2f4p-6
+0x1.3fb47cp-4
+0x1.3fb47cp-4
+0x0p+0
+0x1.656c7ap-11
+0x1.31f9b2p-11
+0x1.52a858p-15
+0x1.40e91ap-10
+0x1.2a0e3ap-11
+0x1.d1fe88p-12
+-0x1.3fee6ap-11
+0x1.a935b8p-10
+0x1.ad9d14p-12
+0x1.587208p-12
+-0x1.354cfep-10
+0x1.f68c02p-10
+0x1.1c2f46p-12
+0x1.15bdf2p-12
+-0x1.b09cdap-10
+0x1.1e6d86p-9
+0x1.812442p-13
+0x1.c0f21cp-13
+-0x1.11b6e8p-9
+0x1.45be3ap-9
+0x1.d8c482p-14
+0x1.4c87ccp-14
+-0x1.55687ap-9
+0x1.6e8afp-9
+-0x1.1fac16p-15
+-0x1.ddf1e4p-13
+-0x1.aa8b6cp-9
+0x1.885e4p-9
+-0x1.68ecc2p-12
+-0x1.6062e2p-11
+-0x1.ff7c38p-9
+0x1.7ad31p-9
+-0x1.9c208p-11
+-0x1.150cp-10
+-0x1.14218p-8
+0x1.37e7eap-9
+-0x1.320ad6p-10
+0x1.2a2232p-5
+0x1.9790bcp-10
+-0x1.2a6a3cp-5
+0x1.2f14dp-5
+-0x1.2f22f4p-5
+-0x1.2d862p-5
+0x1.e6b5acp-10
+0x1.dc59bp-10
+-0x1.09b956p-9
+-0x1.0ac2c8p-9
+0x1.0403p-6
+0x1.042378p-6
+-0x1.731024p-4
+-0x1.719dfep-4
+0x0p+0
+-0x1.dd1cc8p-10
+0x1.2d32aep-5
+0x1.098d34p-9
+-0x1.d1c158p-10
+-0x1.040006p-6
+0x1.0a80d6p-9
+0x1.730e6cp-4
+-0x1.042172p-6
+0x0p+0
+0x1.719d06p-4
+0x1.6c111cp-11
+0x1.3998eep-11
+0x1.00d2dp-14
+0x1.429288p-10
+0x1.31be3ep-11
+0x1.e23164p-12
+-0x1.32ba0ep-11
+0x1.aa7e7ap-10
+0x1.be1946p-12
+0x1.6758dcp-12
+-0x1.2f501p-10
+0x1.f8651cp-10
+0x1.2b6c02p-12
+0x1.1deab8p-12
+-0x1.ad1392p-10
+0x1.1f9508p-9
+0x1.92b52cp-13
+0x1.b97bfp-13
+-0x1.11ade8p-9
+0x1.465758p-9
+0x1.cec97ep-14
+0x1.0afecep-14
+-0x1.567794p-9
+0x1.6d40c8p-9
+-0x1.966e6cp-15
+-0x1.03a0fap-12
+-0x1.aabeeep-9
+0x1.8425e2p-9
+-0x1.7c30e6p-12
+-0x1.65085ep-11
+-0x1.fccaf8p-9
+0x1.7490bp-9
+-0x1.a06058p-11
+-0x1.10932ep-10
+-0x1.1134c6p-8
+0x1.33324p-9
+-0x1.2dc4acp-10
+0x1.2bbbd6p-5
+0x1.94f758p-10
+-0x1.2c060ep-5
+0x1.30a278p-5
+-0x1.30b3d6p-5
+-0x1.2f11b6p-5
+0x1.d47896p-10
+0x1.c6dbf8p-10
+-0x1.f88996p-10
+-0x1.f98a6cp-10
+0x1.ff9ae8p-7
+0x1.00113cp-6
+-0x1.72561ap-4
+-0x1.70e8cep-4
+0x0p+0
+-0x1.ca1d58p-10
+0x1.2eba48p-5
+0x1.f7fdaap-10
+-0x1.bba31p-10
+-0x1.ff966ap-7
+0x1.f8dd48p-10
+0x1.725488p-4
+-0x1.000f34p-6
+0x0p+0
+0x1.70e7bcp-4
+0x1.72a578p-11
+0x1.4123dep-11
+0x1.55d9cp-14
+0x1.44512cp-10
+0x1.395892p-11
+0x1.f24e3p-12
+-0x1.25babap-11
+0x1.abd16ep-10
+0x1.ce9d08p-12
+0x1.75e792p-12
+-0x1.2978ecp-10
+0x1.fa4ffp-10
+0x1.3a7018p-12
+0x1.256b88p-12
+-0x1.a9aa4ep-10
+0x1.20b00ep-9
+0x1.a34d3cp-13
+0x1.b1aa36p-13
+-0x1.119db4p-9
+0x1.46d402p-9
+0x1.c45d16p-14
+0x1.97a2ccp-15
+-0x1.575738p-9
+0x1.6bd662p-9
+-0x1.058db2p-14
+-0x1.170fd8p-12
+-0x1.aad0e8p-9
+0x1.7ffb2cp-9
+-0x1.8e374ep-12
+-0x1.68c8ccp-11
+-0x1.fa0ba2p-9
+0x1.6ea0cap-9
+-0x1.a3d01ep-11
+-0x1.0ce558p-10
+-0x1.0e6a68p-8
+0x1.2e90eap-9
+-0x1.2a3074p-10
+0x1.2d5944p-5
+0x1.916ddap-10
+-0x1.2da886p-5
+0x1.323378p-5
+-0x1.324a92p-5
+-0x1.30a352p-5
+0x1.c0542ep-10
+0x1.b1cadep-10
+-0x1.dabf6p-10
+-0x1.dc25eap-10
+0x1.f73776p-7
+0x1.f7d972p-7
+-0x1.719eeep-4
+-0x1.7036ecp-4
+0x0p+0
+-0x1.b54edap-10
+0x1.304856p-5
+0x1.da1556p-10
+-0x1.a5f51cp-10
+-0x1.f7342p-7
+0x1.db5e7ap-10
+0x1.719d9ep-4
+-0x1.f7d5e2p-7
+0x0p+0
+0x1.7035d4p-4
+0x1.792ac8p-11
+0x1.488a52p-11
+0x1.012966p-11
+0x1.840f2p-12
+0x1.2c60ccp-12
+0x1.aa4d16p-13
+0x1.1b25b6p-15
+-0x1.29226ap-12
+-0x1.6bea1ap-11
+-0x1.09b7dcp-10
+-0x1.2f3f3cp-5
+0x1.ab235cp-10
+-0x1.bced24p-10
+0x1.ef1a54p-7
+-0x1.70ea3ap-4
+0x0p+0
+0x1.2eec08p-5
+-0x1.9f7e72p-10
+0x1.bc2d72p-10
+-0x1.ef18a2p-7
+0x1.70e946p-4
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.683688p-11
+0x1.31020ap-11
+0x1.c5c8d4p-12
+0x1.468f6ap-12
+0x1.0814p-12
+0x1.c0cd14p-13
+0x1.913e52p-14
+-0x1.9dbec8p-13
+-0x1.4b5362p-11
+-0x1.0914bap-10
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.3fb47cp-4
+-0x1.00d2f4p-6
+0x1.bc095ap-9
+-0x1.23f582p-8
+0x1.408122p-5
+-0x1.40f008p-5
+0x1.282368p-8
+-0x1.bda15ap-9
+0x1.00e99ep-6
+-0x1.3fb7f2p-4
+0x0p+0
+0x1.911ee4p+2
+0x0p+0
+0x1.91282ap+2
+0x0p+0
+0x1.00e99ep-6
+0x0p+0
+0x1.ef1a54p-7
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.792ac8p-11
+0x1.488a52p-11
+0x1.488a52p-11
+0x1.012966p-11
+0x1.012966p-11
+0x1.840f2p-12
+0x1.840f2p-12
+0x1.2c60ccp-12
+0x1.2c60ccp-12
+0x1.aa4d16p-13
+0x1.aa4d16p-13
+0x1.1b25b6p-15
+0x1.1b25b6p-15
+-0x1.29226ap-12
+-0x1.29226ap-12
+-0x1.6bea1ap-11
+-0x1.6bea1ap-11
+-0x1.09b7dcp-10
+-0x1.09b7dcp-10
+0x1.2eec08p-5
+-0x1.09b7dcp-10
+-0x1.2f3f3cp-5
+-0x1.2f3f3cp-5
+0x1.2eec08p-5
+0x1.ab235cp-10
+-0x1.2f3f3cp-5
+-0x1.bced24p-10
+0x1.ab235cp-10
+0x1.ef1a54p-7
+-0x1.bced24p-10
+-0x1.70ea3ap-4
+0x1.ef1a54p-7
+0x0p+0
+-0x1.70ea3ap-4
+0x1.2eec08p-5
+-0x1.9f7e72p-10
+-0x1.9f7e72p-10
+0x1.bc2d72p-10
+0x1.bc2d72p-10
+-0x1.ef18a2p-7
+-0x1.ef18a2p-7
+0x1.70e946p-4
+0x1.70e946p-4
+0x0p+0
+0x1.7e8f28p-11
+0x1.4f89f6p-11
+0x1.c8038ep-14
+0x1.4a5564p-10
+0x1.4788d4p-11
+0x1.0955bep-11
+-0x1.14b8bep-11
+0x1.b27da2p-10
+0x1.eec72cp-12
+0x1.919e98p-12
+-0x1.2159dep-10
+0x1.00938ep-9
+0x1.56aa26p-12
+0x1.303634p-12
+-0x1.a4e088p-10
+0x1.232c0ep-9
+0x1.bc5dfap-13
+0x1.94c5ep-13
+-0x1.120b1ep-9
+0x1.4706b6p-9
+0x1.946b42p-14
+0x1.4d1c58p-17
+-0x1.5a92b2p-9
+0x1.6885f8p-9
+-0x1.9aa8e6p-14
+-0x1.4c3f48p-12
+-0x1.af1902p-9
+0x1.78fa26p-9
+-0x1.c1449cp-12
+-0x1.80c874p-11
+-0x1.fd2ccep-9
+0x1.65624p-9
+-0x1.bb4a9p-11
+-0x1.155f5ap-10
+-0x1.0f35dep-8
+0x1.260768p-9
+-0x1.32b0fap-10
+0x1.10dd86p-5
+0x1.84d4d2p-10
+-0x1.10ff5cp-5
+0x1.15ad6ap-5
+-0x1.159442p-5
+-0x1.13c67ap-5
+-0x1.0642a8p-9
+-0x1.0cb244p-9
+0x1.151188p-11
+0x1.03646ep-11
+0x1.c140ap-7
+0x1.c2a946p-7
+-0x1.a3fe0ep-4
+-0x1.a22162p-4
+0x0p+0
+0x1.079e7p-9
+0x1.1399f8p-5
+-0x1.0f48acp-11
+0x1.0e7832p-9
+-0x1.c179fcp-7
+-0x1.fc0212p-12
+0x1.a4003ep-4
+-0x1.c2e086p-7
+0x0p+0
+0x1.a2239ep-4
+0x1.854768p-11
+0x1.56ce56p-11
+0x1.0d936ap-13
+0x1.4c20f6p-10
+0x1.4eee9p-11
+0x1.10f51ap-11
+-0x1.088e26p-11
+0x1.b3e942p-10
+0x1.fe54ep-12
+0x1.9e8014p-12
+-0x1.1be53cp-10
+0x1.0165fcp-9
+0x1.642c6cp-12
+0x1.36799ep-12
+-0x1.a1c542p-10
+0x1.241654p-9
+0x1.cad35cp-13
+0x1.8c2b34p-13
+-0x1.11ebep-9
+0x1.4745b4p-9
+0x1.879536p-14
+-0x1.cdf5aep-19
+-0x1.5b358ep-9
+0x1.670408p-9
+-0x1.cda372p-14
+-0x1.5cbe96p-12
+-0x1.aec476p-9
+0x1.750108p-9
+-0x1.d093ccp-12
+-0x1.834448p-11
+-0x1.fa5ceep-9
+0x1.60094ap-9
+-0x1.bd845ap-11
+-0x1.10c088p-10
+-0x1.0c8374p-8
+0x1.225bacp-9
+-0x1.2e3852p-10
+0x1.12387p-5
+0x1.837d2p-10
+-0x1.125dap-5
+0x1.16fe34p-5
+-0x1.16e99ap-5
+-0x1.15166ep-5
+-0x1.0ec1a6p-9
+-0x1.1703f6p-9
+0x1.4a03p-11
+0x1.3ba46ap-11
+0x1.b7071cp-7
+0x1.b8b112p-7
+-0x1.a30e9ap-4
+-0x1.a13996p-4
+0x0p+0
+0x1.106dfap-9
+0x1.14e59cp-5
+-0x1.4487dp-11
+0x1.1926eep-9
+-0x1.b741p-7
+-0x1.3684d2p-11
+0x1.a3110ap-4
+-0x1.b8ea5p-7
+0x0p+0
+0x1.a13c2p-4
+0x1.8bde9p-11
+0x1.5e0bcap-11
+0x1.35a92cp-13
+0x1.4e07fep-10
+0x1.562b98p-11
+0x1.1867a8p-11
+-0x1.f979e6p-12
+0x1.b556e2p-10
+0x1.06d65p-11
+0x1.aafd0cp-12
+-0x1.169e4p-10
+0x1.023bf6p-9
+0x1.714e24p-12
+0x1.3c9828p-12
+-0x1.9eb348p-10
+0x1.24f498p-9
+0x1.d89492p-13
+0x1.837d7ap-13
+-0x1.11b936p-9
+0x1.4764dap-9
+0x1.7addb2p-14
+-0x1.1239a4p-16
+-0x1.5bb02ep-9
+0x1.656a5ep-9
+-0x1.fe93eap-14
+-0x1.6c1044p-12
+-0x1.ae53ep-9
+0x1.7121ap-9
+-0x1.dea75ep-12
+-0x1.85219ep-11
+-0x1.f787dep-9
+0x1.5af9fp-9
+-0x1.bf262cp-11
+-0x1.0cf48ep-10
+-0x1.09ed24p-8
+0x1.1ea5b8p-9
+-0x1.2a8428p-10
+0x1.139fbcp-5
+0x1.8113d6p-10
+-0x1.13c874p-5
+0x1.185ad6p-5
+-0x1.184aaap-5
+-0x1.1673eep-5
+-0x1.18169ep-9
+-0x1.20d41p-9
+0x1.84f6a8p-11
+0x1.7610bp-11
+0x1.acc9d8p-7
+0x1.ae922ep-7
+-0x1.a22356p-4
+-0x1.a05542p-4
+0x0p+0
+0x1.1a218ap-9
+0x1.163ed4p-5
+-0x1.7fd4b4p-11
+0x1.234f88p-9
+-0x1.ad061ap-7
+-0x1.7135b8p-11
+0x1.a22622p-4
+-0x1.aecd66p-7
+0x0p+0
+0x1.a057fcp-4
+0x1.92761p-11
+0x1.650ecp-11
+0x1.1fbd18p-11
+0x1.b74f44p-12
+0x1.424e44p-12
+0x1.7ad876p-13
+-0x1.e3a2f4p-16
+-0x1.7a22c6p-12
+-0x1.868158p-11
+-0x1.09c342p-10
+-0x1.152c14p-5
+-0x1.21dbap-9
+0x1.bfe688p-11
+0x1.a2e0fp-7
+-0x1.a13bfap-4
+0x0p+0
+0x1.14fec2p-5
+0x1.244384p-9
+-0x1.bb034ap-11
+-0x1.a31eb6p-7
+0x1.a13eaap-4
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.792ac8p-11
+0x1.488a52p-11
+0x1.012966p-11
+0x1.840f2p-12
+0x1.2c60ccp-12
+0x1.aa4d16p-13
+0x1.1b25b6p-15
+-0x1.29226ap-12
+-0x1.6bea1ap-11
+-0x1.09b7dcp-10
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.70e946p-4
+-0x1.ef18a2p-7
+0x1.bc2d72p-10
+-0x1.9f7e72p-10
+0x1.2eec08p-5
+-0x1.2f3f3cp-5
+0x1.ab235cp-10
+-0x1.bced24p-10
+0x1.ef1a54p-7
+-0x1.70ea3ap-4
+0x0p+0
+0x1.91282ap+2
+0x0p+0
+0x1.914e26p+2
+0x0p+0
+0x1.ef1a54p-7
+0x0p+0
+0x1.a2e0fp-7
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.92761p-11
+0x1.650ecp-11
+0x1.650ecp-11
+0x1.1fbd18p-11
+0x1.1fbd18p-11
+0x1.b74f44p-12
+0x1.b74f44p-12
+0x1.424e44p-12
+0x1.424e44p-12
+0x1.7ad876p-13
+0x1.7ad876p-13
+-0x1.e3a2f4p-16
+-0x1.e3a2f4p-16
+-0x1.7a22c6p-12
+-0x1.7a22c6p-12
+-0x1.868158p-11
+-0x1.868158p-11
+-0x1.09c342p-10
+-0x1.09c342p-10
+0x1.14fec2p-5
+-0x1.09c342p-10
+-0x1.152c14p-5
+-0x1.152c14p-5
+0x1.14fec2p-5
+-0x1.21dbap-9
+-0x1.152c14p-5
+0x1.bfe688p-11
+-0x1.21dbap-9
+0x1.a2e0fp-7
+0x1.bfe688p-11
+-0x1.a13bfap-4
+0x1.a2e0fp-7
+0x0p+0
+-0x1.a13bfap-4
+0x1.14fec2p-5
+0x1.244384p-9
+0x1.244384p-9
+-0x1.bb034ap-11
+-0x1.bb034ap-11
+-0x1.a31eb6p-7
+-0x1.a31eb6p-7
+0x1.a13eaap-4
+0x1.a13eaap-4
+0x0p+0
+0x1.a00d68p-11
+0x1.715ee8p-11
+0x1.8e21dep-13
+0x1.56b96p-10
+0x1.69c08cp-11
+0x1.29480ep-11
+-0x1.cebd9cp-12
+0x1.bce184p-10
+0x1.17f4b6p-11
+0x1.bcfb3ep-12
+-0x1.0ed6e8p-10
+0x1.04dfep-9
+0x1.852868p-12
+0x1.3086cep-12
+-0x1.9d369p-10
+0x1.253112p-9
+0x1.c7358cp-13
+0x1.4aac34p-13
+-0x1.156bdep-9
+0x1.46755ep-9
+0x1.0f2882p-14
+-0x1.49f888p-15
+-0x1.612b8p-9
+0x1.64847ep-9
+-0x1.31fd7ap-13
+-0x1.6f52eap-12
+-0x1.b1a694p-9
+0x1.70df12p-9
+-0x1.e49024p-12
+-0x1.6d8ac4p-11
+-0x1.f5c8d2p-9
+0x1.5e5b6ap-9
+-0x1.aa65acp-11
+-0x1.e84f6ap-11
+-0x1.059c66p-8
+0x1.279114p-9
+-0x1.133284p-10
+0x1.efb2a8p-6
+0x1.3db9bap-10
+0x1.f7e1e6p-6
+0x1.3db9bap-10
+-0x1.ef1d38p-6
+-0x1.eaf60ep-11
+-0x1.f6e512p-6
+0x1.f7e1e6p-6
+-0x1.f6e512p-6
+-0x1.f333f2p-6
+-0x1.a1e48cp-8
+-0x1.a5594p-8
+0x1.f6b92ep-9
+0x1.ed092ep-9
+0x1.326f9cp-7
+0x1.35d568p-7
+-0x1.d264c2p-4
+-0x1.d01c24p-4
+0x0p+0
+0x1.a0b48cp-8
+0x1.f33176p-6
+-0x1.f3a61p-9
+0x1.a45da8p-8
+-0x1.32deap-7
+-0x1.ea1d0ap-9
+0x1.d269cp-4
+-0x1.363fbep-7
+0x0p+0
+0x1.d0207ap-4
+0x1.a66266p-11
+0x1.78641ap-11
+0x1.b3ee5p-13
+0x1.58ac62p-10
+0x1.70c728p-11
+0x1.2fed9p-11
+-0x1.b8b4dp-12
+0x1.be3402p-10
+0x1.1ee32p-11
+0x1.c7cbap-12
+-0x1.0a22fap-10
+0x1.059a9ap-9
+0x1.906894p-12
+0x1.38018ap-12
+-0x1.9a7172p-10
+0x1.2624fp-9
+0x1.d6f328p-13
+0x1.471432p-13
+-0x1.14defcp-9
+0x1.46ab16p-9
+0x1.0bd4a6p-14
+-0x1.a889bap-15
+-0x1.6125f8p-9
+0x1.62ec32p-9
+-0x1.46864ap-13
+-0x1.7aa50ap-12
+-0x1.b0d304p-9
+0x1.6d5ab8p-9
+-0x1.eef34cp-12
+-0x1.6eeeacp-11
+-0x1.f2bf3p-9
+0x1.59abd2p-9
+-0x1.ab69acp-11
+-0x1.eaf60ep-11
+-0x1.01753cp-8
+0x1.1e53c4p-9
+-0x1.139efp-10
+0x1.f0d126p-6
+0x1.47c2p-10
+0x1.f92588p-6
+0x1.47c2p-10
+-0x1.f0c804p-6
+-0x1.e87a96p-11
+-0x1.f8af5p-6
+0x1.f92588p-6
+-0x1.f8af5p-6
+-0x1.f4b8p-6
+-0x1.a49b06p-8
+-0x1.a9aap-8
+0x1.005536p-8
+0x1.f8a346p-9
+0x1.26e06ap-7
+0x1.2a6a46p-7
+-0x1.d13f5cp-4
+-0x1.cf02p-4
+0x0p+0
+0x1.a39022p-8
+0x1.f4ac46p-6
+-0x1.fdb69cp-9
+0x1.a8d8cap-8
+-0x1.274ad2p-7
+-0x1.f5d51cp-9
+0x1.d14432p-4
+-0x1.2ad01ap-7
+0x0p+0
+0x1.cf0622p-4
+0x1.acb5cp-11
+0x1.7f212cp-11
+0x1.d8eaaap-13
+0x1.5a948ap-10
+0x1.779aaap-11
+0x1.36a088p-11
+-0x1.a36cc8p-12
+0x1.bfa3d8p-10
+0x1.25bba6p-11
+0x1.d2989cp-12
+-0x1.057a08p-10
+0x1.0654ecp-9
+0x1.9c01dep-12
+0x1.3ee638p-12
+-0x1.97a79ap-10
+0x1.270ee6p-9
+0x1.e5defp-13
+0x1.429d86p-13
+-0x1.1448f4p-9
+0x1.46bcaep-9
+0x1.0728e6p-14
+-0x1.ff600ap-15
+-0x1.610308p-9
+0x1.614a7cp-9
+-0x1.59ec68p-13
+-0x1.8559b8p-12
+-0x1.afe29cp-9
+0x1.69df3cp-9
+-0x1.f8a884p-12
+-0x1.717284p-11
+-0x1.ef7ba6p-9
+0x1.54908p-9
+-0x1.ad5f6p-11
+-0x1.e87a96p-11
+-0x1.fc2e42p-9
+0x1.17b36ep-9
+-0x1.120698p-10
+0x1.f2b272p-6
+0x1.4f00d2p-10
+0x1.fb1b04p-6
+0x1.4f00d2p-10
+-0x1.f2b084p-6
+-0x1.e622d8p-11
+-0x1.faad9ep-6
+0x1.fb1b04p-6
+-0x1.faad9ep-6
+-0x1.f6b214p-6
+-0x1.a80704p-8
+-0x1.ad464cp-8
+0x1.062dd8p-8
+0x1.022c16p-8
+0x1.1b2de6p-7
+0x1.1ed7b6p-7
+-0x1.d02002p-4
+-0x1.cdeb7cp-4
+0x0p+0
+0x1.a726fep-8
+0x1.f69cbcp-6
+-0x1.04c2bap-8
+0x1.aca436p-8
+-0x1.1b922ap-7
+-0x1.00d108p-8
+0x1.d024c4p-4
+-0x1.1f39a8p-7
+0x0p+0
+0x1.cdefc2p-4
+0x1.b2f27ap-11
+0x1.85ce0ep-11
+0x1.3d0f86p-11
+0x1.dd9266p-12
+0x1.454b58p-12
+0x1.3e46f4p-13
+-0x1.291d6p-14
+-0x1.8fb2eap-12
+-0x1.73edb8p-11
+-0x1.e622d8p-11
+-0x1.f4b516p-6
+-0x1.ab8daep-8
+0x1.0c0b6cp-8
+0x1.0fd816p-7
+-0x1.cf0568p-4
+0x0p+0
+0x1.f4aebcp-6
+0x1.aadf64p-8
+-0x1.0ab08ap-8
+-0x1.1039e4p-7
+0x1.cf09a2p-4
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.92761p-11
+0x1.650ecp-11
+0x1.1fbd18p-11
+0x1.b74f44p-12
+0x1.424e44p-12
+0x1.7ad876p-13
+-0x1.e3a2f4p-16
+-0x1.7a22c6p-12
+-0x1.868158p-11
+-0x1.09c342p-10
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.a13eaap-4
+-0x1.a31eb6p-7
+-0x1.bb034ap-11
+0x1.244384p-9
+0x1.14fec2p-5
+-0x1.152c14p-5
+-0x1.21dbap-9
+0x1.bfe688p-11
+0x1.a2e0fp-7
+-0x1.a13bfap-4
+0x0p+0
+0x1.914e26p+2
+0x0p+0
+0x1.91979ap+2
+0x0p+0
+0x1.a2e0fp-7
+0x0p+0
+0x1.0fd816p-7
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.b2f27ap-11
+0x1.85ce0ep-11
+0x1.85ce0ep-11
+0x1.3d0f86p-11
+0x1.3d0f86p-11
+0x1.dd9266p-12
+0x1.dd9266p-12
+0x1.454b58p-12
+0x1.454b58p-12
+0x1.3e46f4p-13
+0x1.3e46f4p-13
+-0x1.291d6p-14
+-0x1.291d6p-14
+-0x1.8fb2eap-12
+-0x1.8fb2eap-12
+-0x1.73edb8p-11
+-0x1.73edb8p-11
+-0x1.e622d8p-11
+-0x1.e622d8p-11
+0x1.f4aebcp-6
+-0x1.e622d8p-11
+-0x1.f4b516p-6
+-0x1.f4b516p-6
+0x1.f4aebcp-6
+-0x1.ab8daep-8
+-0x1.f4b516p-6
+0x1.0c0b6cp-8
+-0x1.ab8daep-8
+0x1.0fd816p-7
+0x1.0c0b6cp-8
+-0x1.cf0568p-4
+0x1.0fd816p-7
+0x0p+0
+-0x1.cf0568p-4
+0x1.f4aebcp-6
+0x1.aadf64p-8
+0x1.aadf64p-8
+-0x1.0ab08ap-8
+-0x1.0ab08ap-8
+-0x1.1039e4p-7
+-0x1.1039e4p-7
+0x1.cf09a2p-4
+0x1.cf09a2p-4
+0x0p+0
+0x1.c6598p-11
+0x1.94d816p-11
+0x1.1ebc0cp-12
+0x1.65afdep-10
+0x1.8dbdcep-11
+0x1.42b44cp-11
+-0x1.78d1ccp-12
+0x1.c61968p-10
+0x1.33147ep-11
+0x1.d18542p-12
+-0x1.ff5042p-11
+0x1.06a0cap-9
+0x1.9e02ccp-12
+0x1.2ce82ap-12
+-0x1.987988p-10
+0x1.25786ap-9
+0x1.c649fap-13
+0x1.2741a2p-13
+-0x1.16b226p-9
+0x1.4574e4p-9
+0x1.9e5486p-15
+-0x1.f4be24p-15
+-0x1.624668p-9
+0x1.60f68cp-9
+-0x1.5a8f72p-13
+-0x1.799434p-12
+-0x1.add918p-9
+0x1.69444ep-9
+-0x1.ed8d32p-12
+-0x1.6559c4p-11
+-0x1.ea1724p-9
+0x1.539414p-9
+-0x1.a165ecp-11
+-0x1.cf3746p-11
+-0x1.f3f5b6p-9
+0x1.18c3cap-9
+-0x1.05be68p-10
+0x1.b32cp-6
+0x1.01a5bep-10
+0x1.ba524p-6
+0x1.01a5bep-10
+-0x1.b27e98p-6
+-0x1.ce8e7ep-11
+-0x1.b93a9ep-6
+0x1.ba524p-6
+-0x1.b93a9ep-6
+-0x1.b552e2p-6
+-0x1.6d0914p-7
+-0x1.6eeadap-7
+0x1.f7377p-8
+0x1.ef0bccp-8
+0x1.406d34p-9
+0x1.5a011cp-9
+-0x1.fc912p-4
+-0x1.f9e9f8p-4
+0x0p+0
+0x1.6b8684p-7
+0x1.b5a332p-6
+-0x1.f5165ep-8
+0x1.6d85b4p-7
+-0x1.4223p-9
+-0x1.ecfa92p-8
+0x1.fc948cp-4
+-0x1.5bb018p-9
+0x0p+0
+0x1.f9ecc6p-4
+0x1.cc28a8p-11
+0x1.9aafbp-11
+0x1.2fba6ep-12
+0x1.67434p-10
+0x1.93d34cp-11
+0x1.48e55p-11
+-0x1.658fdep-12
+0x1.c76aecp-10
+0x1.394862p-11
+0x1.dd5ac8p-12
+-0x1.f6aa96p-11
+0x1.077df8p-9
+0x1.a9e8fep-12
+0x1.35aa68p-12
+-0x1.956772p-10
+0x1.268356p-9
+0x1.d89594p-13
+0x1.2567cp-13
+-0x1.15ccbap-9
+0x1.4596b2p-9
+0x1.9f883ep-15
+-0x1.26e4b8p-14
+-0x1.61d742p-9
+0x1.5f2a06p-9
+-0x1.6d9328p-13
+-0x1.840634p-12
+-0x1.accb0cp-9
+0x1.65b98ep-9
+-0x1.f6fc1ep-12
+-0x1.67334cp-11
+-0x1.e6ce28p-9
+0x1.4ea65cp-9
+-0x1.a2c8d8p-11
+-0x1.ce8e7ep-11
+-0x1.eae9aep-9
+0x1.0f8326p-9
+-0x1.04b18ep-10
+0x1.b4264ep-6
+0x1.145a94p-10
+0x1.bb8ae6p-6
+0x1.145a94p-10
+-0x1.b3ca3ap-6
+-0x1.cba83ap-11
+-0x1.bac376p-6
+0x1.bb8ae6p-6
+-0x1.bac376p-6
+-0x1.b6b3a4p-6
+-0x1.6d03dep-7
+-0x1.6f7de8p-7
+0x1.f89e3cp-8
+0x1.f178a8p-8
+0x1.1040e4p-9
+0x1.29b1aep-9
+-0x1.fb3cd8p-4
+-0x1.f8a4aap-4
+0x0p+0
+0x1.6b9be6p-7
+0x1.b6f98p-6
+-0x1.f6904ep-8
+0x1.6e341ap-7
+-0x1.11eadcp-9
+-0x1.ef7d44p-8
+0x1.fb402cp-4
+-0x1.2b4d62p-9
+0x0p+0
+0x1.f8a74p-4
+0x1.d1ba1ep-11
+0x1.a0c152p-11
+0x1.4025a8p-12
+0x1.68f992p-10
+0x1.99dd84p-11
+0x1.4f0c44p-11
+-0x1.52c1dcp-12
+0x1.c8cecp-10
+0x1.3f9e9ap-11
+0x1.e8ccf6p-12
+-0x1.ee22f4p-11
+0x1.085edep-9
+0x1.b5eb08p-12
+0x1.3dbb4ap-12
+-0x1.92495p-10
+0x1.2775a2p-9
+0x1.e93262p-13
+0x1.22cd2p-13
+-0x1.14e804p-9
+0x1.45925p-9
+0x1.9e863ep-15
+-0x1.4f9bcp-14
+-0x1.615452p-9
+0x1.5d5f24p-9
+-0x1.7ecee4p-13
+-0x1.8df21ap-12
+-0x1.aba182p-9
+0x1.624072p-9
+-0x1.ffc85ap-12
+-0x1.69c302p-11
+-0x1.e339fp-9
+0x1.495466p-9
+-0x1.a4acd6p-11
+-0x1.cba83ap-11
+-0x1.e3d4fep-9
+0x1.08a94p-9
+-0x1.02dceep-10
+0x1.b5c66ep-6
+0x1.223ea8p-10
+0x1.bd55bp-6
+0x1.223ea8p-10
+-0x1.b57408p-6
+-0x1.c9429ep-11
+-0x1.bc9a5cp-6
+0x1.bd55bp-6
+-0x1.bc9a5cp-6
+-0x1.b8852ep-6
+-0x1.6d1496p-7
+-0x1.6fa6b6p-7
+0x1.fab95cp-8
+0x1.f3b458p-8
+0x1.bdc62ap-10
+0x1.f1a41cp-10
+-0x1.f9f056p-4
+-0x1.f762ecp-4
+0x0p+0
+0x1.6bc696p-7
+0x1.b8c1bp-6
+-0x1.f8bd52p-8
+0x1.6e760ep-7
+-0x1.c0f4d4p-10
+-0x1.f1cc3ep-8
+0x1.f9f358p-4
+-0x1.f4a7ep-10
+0x0p+0
+0x1.f76538p-4
+0x1.d752dep-11
+0x1.a69b36p-11
+0x1.55161cp-11
+0x1.f4827ep-12
+0x1.44de84p-12
+0x1.1fc382p-13
+-0x1.753eacp-14
+-0x1.979d42p-12
+-0x1.6c3cdep-11
+-0x1.c9429ep-11
+-0x1.b74e2ap-6
+-0x1.6d2c32p-7
+0x1.fcf27ep-8
+0x1.5dfd5ep-10
+-0x1.f8a91ap-4
+0x0p+0
+0x1.b79704p-6
+0x1.6bf676p-7
+-0x1.fb05d6p-8
+-0x1.60ff98p-10
+0x1.f8abecp-4
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.b2f27ap-11
+0x1.85ce0ep-11
+0x1.3d0f86p-11
+0x1.dd9266p-12
+0x1.454b58p-12
+0x1.3e46f4p-13
+-0x1.291d6p-14
+-0x1.8fb2eap-12
+-0x1.73edb8p-11
+-0x1.e622d8p-11
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.cf09a2p-4
+-0x1.1039e4p-7
+-0x1.0ab08ap-8
+0x1.aadf64p-8
+0x1.f4aebcp-6
+-0x1.f4b516p-6
+-0x1.ab8daep-8
+0x1.0c0b6cp-8
+0x1.0fd816p-7
+-0x1.cf0568p-4
+0x0p+0
+0x1.91979ap+2
+0x0p+0
+0x1.9209a6p+2
+0x0p+0
+0x1.0fd816p-7
+0x0p+0
+0x1.5dfd5ep-10
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.d752dep-11
+0x1.a69b36p-11
+0x1.a69b36p-11
+0x1.55161cp-11
+0x1.55161cp-11
+0x1.f4827ep-12
+0x1.f4827ep-12
+0x1.44de84p-12
+0x1.44de84p-12
+0x1.1fc382p-13
+0x1.1fc382p-13
+-0x1.753eacp-14
+-0x1.753eacp-14
+-0x1.979d42p-12
+-0x1.979d42p-12
+-0x1.6c3cdep-11
+-0x1.6c3cdep-11
+-0x1.c9429ep-11
+-0x1.c9429ep-11
+0x1.b79704p-6
+-0x1.c9429ep-11
+-0x1.b74e2ap-6
+-0x1.b74e2ap-6
+0x1.b79704p-6
+-0x1.6d2c32p-7
+-0x1.b74e2ap-6
+0x1.fcf27ep-8
+-0x1.6d2c32p-7
+0x1.5dfd5ep-10
+0x1.fcf27ep-8
+-0x1.f8a91ap-4
+0x1.5dfd5ep-10
+0x0p+0
+-0x1.f8a91ap-4
+0x1.b79704p-6
+0x1.6bf676p-7
+0x1.6bf676p-7
+-0x1.fb05d6p-8
+-0x1.fb05d6p-8
+-0x1.60ff98p-10
+-0x1.60ff98p-10
+0x1.f8abecp-4
+0x1.f8abecp-4
+0x0p+0
+0x1.e887cp-11
+0x1.b0ec56p-11
+0x1.73c6b6p-12
+0x1.6f8e7p-10
+0x1.aafc5ap-11
+0x1.55778p-11
+-0x1.284c0ep-12
+0x1.c9f7ecp-10
+0x1.4766e4p-11
+0x1.e82a3ep-12
+-0x1.e21d58p-11
+0x1.073b54p-9
+0x1.b779b6p-12
+0x1.3ab0ap-12
+-0x1.902ddep-10
+0x1.263722p-9
+0x1.e4eb2ap-13
+0x1.26453cp-13
+-0x1.144b5ap-9
+0x1.44e70cp-9
+0x1.aa3864p-15
+-0x1.42b964p-14
+-0x1.5fae7ap-9
+0x1.5c4f7ep-9
+-0x1.77cd3ap-13
+-0x1.8ce576p-12
+-0x1.a87b0ap-9
+0x1.5fada4p-9
+-0x1.fd66cap-12
+-0x1.66f13ap-11
+-0x1.de51c8p-9
+0x1.456c7ap-9
+-0x1.a1299ep-11
+-0x1.bea40ap-11
+-0x1.dd5cc4p-9
+0x1.064d46p-9
+-0x1.f8e284p-11
+0x1.70932ap-6
+0x1.9b3fc6p-11
+0x1.76dc6ap-6
+0x1.9b3fc6p-11
+-0x1.6fb6b8p-6
+-0x1.babf3p-11
+-0x1.759386p-6
+0x1.76dc6ap-6
+-0x1.759386p-6
+-0x1.71bedp-6
+-0x1.02f75p-6
+-0x1.03aaeep-6
+0x1.79bee6p-7
+0x1.73a14cp-7
+-0x1.d2d2c4p-8
+-0x1.bdca06p-8
+-0x1.108e52p-3
+-0x1.0f18b4p-3
+0x0p+0
+0x1.01d588p-6
+0x1.7259bap-6
+-0x1.7884bcp-7
+0x1.0299c6p-6
+0x1.d2383ap-8
+-0x1.727816p-7
+0x1.108e4cp-3
+0x1.bd4002p-8
+0x0p+0
+0x1.0f1874p-3
+0x1.ed326p-11
+0x1.b6694p-11
+0x1.81d7b6p-12
+0x1.711d98p-10
+0x1.b0701p-11
+0x1.5bcea4p-11
+-0x1.173efcp-12
+0x1.cb98bep-10
+0x1.4dd33ep-11
+0x1.f52438p-12
+-0x1.d992e6p-11
+0x1.0851e4p-9
+0x1.c47498p-12
+0x1.42f66cp-12
+-0x1.8cb9b6p-10
+0x1.27242p-9
+0x1.f6a9fap-13
+0x1.226d28p-13
+-0x1.133eap-9
+0x1.44b906p-9
+0x1.a44604p-15
+-0x1.6af6acp-14
+-0x1.5f0d24p-9
+0x1.5a563ep-9
+-0x1.891a08p-13
+-0x1.962b1cp-12
+-0x1.a72b04p-9
+0x1.5c219p-9
+-0x1.02ddbep-11
+-0x1.6877e8p-11
+-0x1.dab474p-9
+0x1.406224p-9
+-0x1.a2210ep-11
+-0x1.babf3p-11
+-0x1.d416ccp-9
+0x1.fb76eep-10
+-0x1.f3e874p-11
+0x1.71dd46p-6
+0x1.cbaf4cp-11
+0x1.7872fap-6
+0x1.cbaf4cp-11
+-0x1.7136bcp-6
+-0x1.b67a76p-11
+-0x1.77618ap-6
+0x1.7872fap-6
+-0x1.77618ap-6
+-0x1.737126p-6
+-0x1.01c1a8p-6
+-0x1.02bd0cp-6
+0x1.777d2p-7
+0x1.7213aep-7
+-0x1.e96e2cp-8
+-0x1.d50e98p-8
+-0x1.0fd37p-3
+-0x1.0e6728p-3
+0x0p+0
+0x1.00ac92p-6
+0x1.74017p-6
+-0x1.764f7cp-7
+0x1.01b8bep-6
+0x1.e8de2ap-8
+-0x1.70f358p-7
+0x1.0fd344p-3
+0x1.d48b8ap-8
+0x0p+0
+0x1.0e66bap-3
+0x1.f1e61ep-11
+0x1.bbc5eep-11
+0x1.8fd866p-12
+0x1.72a548p-10
+0x1.b5d5cap-11
+0x1.623482p-11
+-0x1.064c1ep-12
+0x1.cd4082p-10
+0x1.542de2p-11
+0x1.00bbbap-11
+-0x1.d14d16p-11
+0x1.096062p-9
+0x1.d11416p-12
+0x1.4aad28p-12
+-0x1.894f2p-10
+0x1.27f8aap-9
+0x1.03bac6p-12
+0x1.1e7c7ep-13
+-0x1.122a2p-9
+0x1.447284p-9
+0x1.9e5eecp-15
+-0x1.900252p-14
+-0x1.5e6284p-9
+0x1.586d42p-9
+-0x1.98f81p-13
+-0x1.9f30dep-12
+-0x1.a5ba1p-9
+0x1.58936p-9
+-0x1.06cad4p-11
+-0x1.6a4efap-11
+-0x1.d6d15cp-9
+0x1.3b0d4ep-9
+-0x1.a3506ap-11
+-0x1.b67a76p-11
+-0x1.cce6e8p-9
+0x1.ee95bap-10
+-0x1.eefc94p-11
+0x1.73c57cp-6
+0x1.efff28p-11
+0x1.7a927ep-6
+0x1.efff28p-11
+-0x1.73291ep-6
+-0x1.b32c2cp-11
+-0x1.798e4cp-6
+0x1.7a927ep-6
+-0x1.798e4cp-6
+-0x1.759798p-6
+-0x1.00823ep-6
+-0x1.018d38p-6
+0x1.758376p-7
+0x1.704454p-7
+-0x1.00985ep-7
+-0x1.ecae44p-8
+-0x1.0f1d54p-3
+-0x1.0db6b8p-3
+0x0p+0
+0x1.fef76ap-7
+0x1.761e42p-6
+-0x1.746092p-7
+0x1.009688p-6
+0x1.005524p-7
+-0x1.6f2d6cp-7
+0x1.0f1ceep-3
+0x1.ec2f9ep-8
+0x0p+0
+0x1.0db66p-3
+0x1.f690c8p-11
+0x1.c134fep-11
+0x1.68633ep-11
+0x1.06adcap-11
+0x1.51de9cp-12
+0x1.1ab4fep-13
+-0x1.b31c66p-14
+-0x1.a7e7e8p-12
+-0x1.6c00b4p-11
+-0x1.b32c2cp-11
+-0x1.755618p-6
+-0x1.fe8bfap-7
+0x1.73ac9p-7
+-0x1.0c245cp-7
+-0x1.0e6a04p-3
+0x0p+0
+0x1.75e832p-6
+0x1.fc9b42p-7
+-0x1.72957ep-7
+0x1.0be636p-7
+0x1.0e698cp-3
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.d752dep-11
+0x1.a69b36p-11
+0x1.55161cp-11
+0x1.f4827ep-12
+0x1.44de84p-12
+0x1.1fc382p-13
+-0x1.753eacp-14
+-0x1.979d42p-12
+-0x1.6c3cdep-11
+-0x1.c9429ep-11
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.f8abecp-4
+-0x1.60ff98p-10
+-0x1.fb05d6p-8
+0x1.6bf676p-7
+0x1.b79704p-6
+-0x1.b74e2ap-6
+-0x1.6d2c32p-7
+0x1.fcf27ep-8
+0x1.5dfd5ep-10
+-0x1.f8a91ap-4
+0x0p+0
+0x1.9209a6p+2
+0x0p+0
+0x1.92a5aap+2
+0x0p+0
+0x1.5dfd5ep-10
+0x0p+0
+-0x1.0c245cp-7
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.f690c8p-11
+0x1.c134fep-11
+0x1.c134fep-11
+0x1.68633ep-11
+0x1.68633ep-11
+0x1.06adcap-11
+0x1.06adcap-11
+0x1.51de9cp-12
+0x1.51de9cp-12
+0x1.1ab4fep-13
+0x1.1ab4fep-13
+-0x1.b31c66p-14
+-0x1.b31c66p-14
+-0x1.a7e7e8p-12
+-0x1.a7e7e8p-12
+-0x1.6c00b4p-11
+-0x1.6c00b4p-11
+-0x1.b32c2cp-11
+-0x1.b32c2cp-11
+0x1.75e832p-6
+-0x1.b32c2cp-11
+-0x1.755618p-6
+-0x1.755618p-6
+0x1.75e832p-6
+-0x1.fe8bfap-7
+-0x1.755618p-6
+0x1.73ac9p-7
+-0x1.fe8bfap-7
+-0x1.0c245cp-7
+0x1.73ac9p-7
+-0x1.0e6a04p-3
+-0x1.0c245cp-7
+0x0p+0
+-0x1.0e6a04p-3
+0x1.75e832p-6
+0x1.fc9b42p-7
+0x1.fc9b42p-7
+-0x1.72957ep-7
+-0x1.72957ep-7
+0x1.0be636p-7
+0x1.0be636p-7
+0x1.0e698cp-3
+0x1.0e698cp-3
+0x0p+0
+0x1.fc58dcp-11
+0x1.c4017cp-11
+0x1.ad4a9cp-12
+0x1.74a05cp-10
+0x1.be8bcap-11
+0x1.686564p-11
+-0x1.d178f8p-13
+0x1.cd4fecp-10
+0x1.5ae888p-11
+0x1.06853p-11
+-0x1.c44b2ap-11
+0x1.094012p-9
+0x1.dd7bd2p-12
+0x1.567f66p-12
+-0x1.835636p-10
+0x1.280228p-9
+0x1.1029ep-12
+0x1.2e21d6p-13
+-0x1.0f284p-9
+0x1.43f8b8p-9
+0x1.e71894p-15
+-0x1.a2b9eap-14
+-0x1.5b40bcp-9
+0x1.55db7ap-9
+-0x1.9d74dcp-13
+-0x1.b6e6aap-12
+-0x1.a2d49ep-9
+0x1.527436p-9
+-0x1.10cdcp-11
+-0x1.7b519cp-11
+-0x1.d4471ap-9
+0x1.31c378p-9
+-0x1.b2826ap-11
+-0x1.c12cc2p-11
+-0x1.cb0d64p-9
+0x1.dde6d6p-10
+-0x1.f935e2p-11
+0x1.2cd822p-6
+0x1.330da4p-11
+0x1.3266bep-6
+0x1.330da4p-11
+-0x1.2bdf8p-6
+-0x1.b7757cp-11
+-0x1.30fb16p-6
+0x1.3266bep-6
+-0x1.30fb16p-6
+-0x1.2d6e58p-6
+-0x1.429b28p-6
+-0x1.42f1cp-6
+0x1.dd82dp-7
+0x1.d58adcp-7
+-0x1.3a1844p-6
+-0x1.325598p-6
+-0x1.1f8d72p-3
+-0x1.1e07a6p-3
+0x0p+0
+0x1.413b28p-6
+0x1.2e4382p-6
+-0x1.dc574p-7
+0x1.41a25ep-6
+0x1.3a0a58p-6
+-0x1.d46eb2p-7
+0x1.1f8b9ap-3
+0x1.324bcp-6
+0x0p+0
+0x1.1e05f6p-3
+0x1.0046eap-10
+0x1.c967f6p-11
+0x1.b9b53cp-12
+0x1.76530ap-10
+0x1.c3c73p-11
+0x1.6eb6d6p-11
+-0x1.b22d04p-13
+0x1.cf2b84p-10
+0x1.615776p-11
+0x1.0c948ap-11
+-0x1.bbe334p-11
+0x1.0a4494p-9
+0x1.e9ef44p-12
+0x1.5d2482p-12
+-0x1.7feb36p-10
+0x1.28aeeep-9
+0x1.17651cp-12
+0x1.28bf96p-13
+-0x1.0e1bacp-9
+0x1.437dd6p-9
+0x1.dc9e94p-15
+-0x1.c851b2p-14
+-0x1.5a7e64p-9
+0x1.53c41cp-9
+-0x1.ad6436p-13
+-0x1.beedfap-12
+-0x1.a1443ep-9
+0x1.4ee50ep-9
+-0x1.144b38p-11
+-0x1.7b936ep-11
+-0x1.d05b56p-9
+0x1.2ce684p-9
+-0x1.b2370ep-11
+-0x1.b7757cp-11
+-0x1.c1a086p-9
+0x1.cffcb4p-10
+-0x1.ef0b96p-11
+0x1.2ee7a6p-6
+0x1.6ba07p-11
+0x1.34c7aap-6
+0x1.6ba07p-11
+-0x1.2e08f8p-6
+-0x1.afca16p-11
+-0x1.337aap-6
+0x1.34c7aap-6
+-0x1.337aap-6
+-0x1.2fdcf2p-6
+-0x1.3febf4p-6
+-0x1.407f48p-6
+0x1.d76eacp-7
+0x1.d04f04p-7
+-0x1.3ebc7p-6
+-0x1.375442p-6
+-0x1.1eca7cp-3
+-0x1.1d4f96p-3
+0x0p+0
+0x1.3e9b78p-6
+0x1.30a754p-6
+-0x1.d64fe2p-7
+0x1.3f3f0ep-6
+0x1.3eb0d6p-6
+-0x1.cf40aap-7
+0x1.1ec8b2p-3
+0x1.374ca8p-6
+0x0p+0
+0x1.1d4dc4p-3
+0x1.0276acp-10
+0x1.ce8374p-11
+0x1.c60fdep-12
+0x1.77f984p-10
+0x1.c8dc56p-11
+0x1.74f60ap-11
+-0x1.9340b4p-13
+0x1.d0f6dcp-10
+0x1.67892ep-11
+0x1.127e52p-11
+-0x1.b3c9fep-11
+0x1.0b441ep-9
+0x1.f5c232p-12
+0x1.630958p-12
+-0x1.7cab1ep-10
+0x1.294526p-9
+0x1.1e34dap-12
+0x1.23a5b2p-13
+-0x1.0d0ce2p-9
+0x1.42f7dp-9
+0x1.d07eacp-15
+-0x1.eb1b5ap-14
+-0x1.59ae32p-9
+0x1.51ae98p-9
+-0x1.bc7ec6p-13
+-0x1.c6a0b2p-12
+-0x1.9f96a8p-9
+0x1.4b506ep-9
+-0x1.179facp-11
+-0x1.7b9bep-11
+-0x1.cc3484p-9
+0x1.27e6fp-9
+-0x1.b1bc8ap-11
+-0x1.afca16p-11
+-0x1.ba4642p-9
+0x1.c54d94p-10
+-0x1.e70a44p-11
+0x1.3177ap-6
+0x1.9624a6p-11
+0x1.379442p-6
+0x1.9624a6p-11
+-0x1.30a3bcp-6
+-0x1.aa1906p-11
+-0x1.36564ap-6
+0x1.379442p-6
+-0x1.36564ap-6
+-0x1.32b07ep-6
+-0x1.3d2128p-6
+-0x1.3dc988p-6
+0x1.d17b88p-7
+0x1.caaa88p-7
+-0x1.43d838p-6
+-0x1.3c70b6p-6
+-0x1.1e0d04p-3
+-0x1.1c9802p-3
+0x0p+0
+0x1.3bdf0cp-6
+0x1.336eacp-6
+-0x1.d069ep-7
+0x1.3c9954p-6
+0x1.43cd54p-6
+-0x1.c9aaacp-7
+0x1.1e0b42p-3
+0x1.3c6b34p-6
+0x0p+0
+0x1.1c9634p-3
+0x1.04a95ep-10
+0x1.d3a3c4p-11
+0x1.7b22b2p-11
+0x1.17ee56p-11
+0x1.68dc22p-12
+0x1.1eb316p-13
+-0x1.061a42p-13
+-0x1.cdec4ap-12
+-0x1.7b607ep-11
+-0x1.aa1906p-11
+-0x1.337a42p-6
+-0x1.3a5a98p-6
+0x1.cbd1fcp-7
+-0x1.48d30ep-6
+-0x1.1d526ep-3
+0x0p+0
+0x1.3443f2p-6
+0x1.39275ep-6
+-0x1.cacbfcp-7
+0x1.48ca9cp-6
+0x1.1d50bcp-3
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.f690c8p-11
+0x1.c134fep-11
+0x1.68633ep-11
+0x1.06adcap-11
+0x1.51de9cp-12
+0x1.1ab4fep-13
+-0x1.b31c66p-14
+-0x1.a7e7e8p-12
+-0x1.6c00b4p-11
+-0x1.b32c2cp-11
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.0e698cp-3
+0x1.0be636p-7
+-0x1.72957ep-7
+0x1.fc9b42p-7
+0x1.75e832p-6
+-0x1.755618p-6
+-0x1.fe8bfap-7
+0x1.73ac9p-7
+-0x1.0c245cp-7
+-0x1.0e6a04p-3
+0x0p+0
+0x1.0be636p-7
+0x0p+0
+0x1.48ca9cp-6
+0x0p+0
+0x1.9199a4p+2
+0x0p+0
+0x1.90d6e2p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.04a95ep-10
+0x1.d3a3c4p-11
+0x1.d3a3c4p-11
+0x1.7b22b2p-11
+0x1.7b22b2p-11
+0x1.17ee56p-11
+0x1.17ee56p-11
+0x1.68dc22p-12
+0x1.68dc22p-12
+0x1.1eb316p-13
+0x1.1eb316p-13
+-0x1.061a42p-13
+-0x1.061a42p-13
+-0x1.cdec4ap-12
+-0x1.cdec4ap-12
+-0x1.7b607ep-11
+-0x1.7b607ep-11
+-0x1.aa1906p-11
+-0x1.aa1906p-11
+0x1.3443f2p-6
+-0x1.aa1906p-11
+-0x1.337a42p-6
+-0x1.337a42p-6
+0x1.3443f2p-6
+-0x1.3a5a98p-6
+-0x1.337a42p-6
+0x1.cbd1fcp-7
+-0x1.3a5a98p-6
+-0x1.48d30ep-6
+0x1.cbd1fcp-7
+-0x1.1d526ep-3
+-0x1.48d30ep-6
+0x0p+0
+-0x1.1d526ep-3
+0x1.3443f2p-6
+0x1.39275ep-6
+0x1.39275ep-6
+-0x1.cacbfcp-7
+-0x1.cacbfcp-7
+0x1.48ca9cp-6
+0x1.48ca9cp-6
+0x1.1d50bcp-3
+0x1.1d50bcp-3
+0x0p+0
+0x1.0257dp-10
+0x1.d12a32p-11
+0x1.cd36c4p-12
+0x1.7764p-10
+0x1.cb6cdap-11
+0x1.7cdb3ep-11
+-0x1.710e26p-13
+0x1.d1e98ap-10
+0x1.6f0608p-11
+0x1.1e177ap-11
+-0x1.a6195p-11
+0x1.0c9bfcp-9
+0x1.063d24p-11
+0x1.7939d8p-12
+-0x1.73dea2p-10
+0x1.2a7b3cp-9
+0x1.34ec0cp-12
+0x1.31f212p-13
+-0x1.0888ap-9
+0x1.423124p-9
+0x1.0f4902p-14
+-0x1.27a858p-13
+-0x1.5647e4p-9
+0x1.4c654p-9
+-0x1.e3b24ep-13
+-0x1.056ff6p-11
+-0x1.9eafap-9
+0x1.3f772cp-9
+-0x1.360bc4p-11
+-0x1.ac3cdp-11
+-0x1.ce99cap-9
+0x1.168d5ep-9
+-0x1.df2898p-11
+-0x1.ddd076p-11
+-0x1.c011e8p-9
+0x1.a322a6p-10
+-0x1.0a009ap-10
+0x1.db4abap-7
+0x1.87e9f8p-12
+0x1.e53a6p-7
+0x1.87e9f8p-12
+-0x1.d95c92p-7
+-0x1.cb694ep-11
+-0x1.e24d2cp-7
+0x1.e53a6p-7
+-0x1.e24d2cp-7
+-0x1.dc13f4p-7
+-0x1.692f3cp-6
+-0x1.69293p-6
+0x1.03052cp-6
+0x1.fd0232p-7
+-0x1.101b4cp-5
+-0x1.0ade46p-5
+-0x1.2b1bf8p-3
+-0x1.299ae2p-3
+0x0p+0
+0x1.67c928p-6
+0x1.ddedc2p-7
+-0x1.029b98p-6
+0x1.67d76cp-6
+0x1.102014p-5
+-0x1.fc448cp-7
+0x1.2b1a2ep-3
+0x1.0ae61cp-5
+0x0p+0
+0x1.299954p-3
+0x1.04960ep-10
+0x1.d69b4ep-11
+0x1.d95a7ap-12
+0x1.79516ep-10
+0x1.d0d92p-11
+0x1.82da46p-11
+-0x1.5207d6p-13
+0x1.d3bd2cp-10
+0x1.74fa5ap-11
+0x1.230dbp-11
+-0x1.9e5b14p-11
+0x1.0d6638p-9
+0x1.0b5e96p-11
+0x1.7d3952p-12
+-0x1.70eacep-10
+0x1.2ac92ap-9
+0x1.399d74p-12
+0x1.288b46p-13
+-0x1.07a2d6p-9
+0x1.414bdap-9
+0x1.00f306p-14
+-0x1.3a47fp-13
+-0x1.559494p-9
+0x1.4a16d6p-9
+-0x1.f47364p-13
+-0x1.08305ap-11
+-0x1.9cf9c2p-9
+0x1.3c0594p-9
+-0x1.3869f2p-11
+-0x1.a9c538p-11
+-0x1.ca52bcp-9
+0x1.124a22p-9
+-0x1.dc68b4p-11
+-0x1.cb694ep-11
+-0x1.b67594p-9
+0x1.9a67b8p-10
+-0x1.00ff66p-10
+0x1.e1685ap-7
+0x1.033ed8p-11
+0x1.ebf67ep-7
+0x1.033ed8p-11
+-0x1.df76fp-7
+-0x1.be093p-11
+-0x1.e916b4p-7
+0x1.ebf67ep-7
+-0x1.e916b4p-7
+-0x1.e2ccf4p-7
+-0x1.65162ap-6
+-0x1.65373p-6
+0x1.fbe154p-7
+0x1.f3c192p-7
+-0x1.11a48ep-5
+-0x1.0cb0e4p-5
+-0x1.2a5b96p-3
+-0x1.28e5c4p-3
+0x0p+0
+0x1.63c13ep-6
+0x1.e49064p-7
+-0x1.fb1ea8p-7
+0x1.63f62cp-6
+0x1.11aa1ap-5
+-0x1.f311c6p-7
+0x1.2a59e4p-3
+0x1.0cb90cp-5
+0x0p+0
+0x1.28e44ap-3
+0x1.06d644p-10
+0x1.dc0fd2p-11
+-0x1.4b5a18p+0
+0x1.1af076p-2
+-0x1.4b5efp+0
+0x1.1af04ap-2
+-0x1.b73246p+5
+-0x1.cf62d4p+4
+-0x1.887e8ap+5
+0x1.9ac152p+3
+0x1.0f627cp-2
+0x1.9ac152p+3
+0x1.0f627cp-2
+0x1.9ac152p+3
+-0x1.cf62d4p+4
+-0x1.887e8ap+5
+-0x1.380ec6p+5
+0x1.3e8ec6p+2
+-0x1.380eb6p+5
+0x1.3e8eecp+2
+0x1.3e8eecp+2
+0x1.0f698p-2
+0x1.3e8eecp+2
+0x1.0f698p-2
+0x1.0bb1dap-2
+0x1.3e8eecp+2
+0x1.0bb1dap-2
+-0x1.380eb6p+5
+0x1.0bb1dap-2
+-0x1.380eb6p+5
+-0x1.f2fdaep+4
+0x1.f79d1p-3
+-0x1.f2fce8p+4
+0x1.fc350cp-3
+-0x1.299104p+4
+0x1.fdc6f6p-3
+-0x1.2991ep+4
+0x1.001cfap-2
+-0x1.f2fce2p+4
+0x1.49fe6p-3
+-0x1.f2fe5p+4
+0x1.419756p-3
+-0x1.1eb808p+4
+0x1.419756p-3
+-0x1.11ca14p+4
+0x1.4aff4cp-3
+-0x1.11cbc8p+4
+0x1.527b46p-3
+-0x1.f87e4ap+2
+0x1.206366p-7
+-0x1.f881bap+2
+0x1.539f9p-7
+-0x1.60c1dap+3
+0x1.a0e44p-8
+-0x1.60bbf6p+3
+0x1.9195e2p-7
+-0x1.1eb952p+4
+0x1.b95c5ap-7
+-0x1.60bc4ap+3
+-0x1.3a454ep-3
+-0x1.60bf1cp+3
+-0x1.462c68p-3
+-0x1.306622p+4
+-0x1.4a0696p-3
+-0x1.3068fcp+4
+-0x1.449feep-3
+-0x1.2793fap+4
+-0x1.16da3ap-2
+-0x1.31b44p+4
+-0x1.1596ap-2
+-0x1.31b568p+4
+-0x1.1241fp-2
+-0x1.d79b0cp+4
+-0x1.1259aap-2
+-0x1.1d2ffep+4
+-0x1.85869cp-2
+-0x1.1d2a0ep+4
+-0x1.75ee8p-2
+-0x1.d00c94p+3
+-0x1.75ee8p-2
+-0x1.d00e6ep+3
+-0x1.758d68p-2
+-0x1.2793fap+4
+-0x1.767c54p-2
+-0x1.1d2a0ep+4
+-0x1.e41a72p-2
+-0x1.1d2a3ap+4
+-0x1.d7efbep+4
+-0x1.1d2cfp+4
+-0x1.18d8ap+5
+-0x1.1d2ffep+4
+-0x1.18d782p+5
+-0x1.d79beap+4
+-0x1.2fcfa4p+3
+-0x1.d79cbcp+4
+-0x1.536f8cp+3
+-0x1.306664p+4
+-0x1.5372f8p+3
+-0x1.3065c8p+4
+-0x1.463d06p+4
+-0x1.14ece8p+4
+-0x1.463dep+4
+-0x1.14ece8p+4
+-0x1.f871d6p+2
+-0x1.14ed36p+4
+-0x1.f872fap+2
+-0x1.14ed74p+4
+-0x1.60bf9p+3
+-0x1.14ee7p+4
+-0x1.60bd9ap+3
+-0x1.936b38p+4
+-0x1.f8742p+2
+-0x1.31b444p+4
+-0x1.2fce58p+3
+-0x1.2793fap+4
+-0x1.09e916p+5
+-0x1.31b4bcp+4
+-0x1.09e93ep+5
+-0x1.31b42p+4
+-0x1.09e928p+5
+-0x1.60c106p+3
+-0x1.f87ebep+2
+-0x1.60c05p+3
+-0x1.f8800ap+2
+-0x1.1eb75cp+4
+-0x1.11c9acp+4
+0x1.48b018p+3
+-0x1.11c9acp+4
+-0x1.1eb75cp+4
+-0x1.67abfap+1
+-0x1.32c5e4p+2
+0x1.48b21ep+3
+0x1.48af3cp+3
+-0x1.f2fe5p+4
+-0x1.32c5e4p+2
+-0x1.f2fe5p+4
+-0x1.71fc64p+1
+-0x1.29914cp+4
+-0x1.71fc8ep+1
+-0x1.29914cp+4
+0x1.1473b2p-2
+0x1.0fa41ap-2
+0x1.0fe8f6p-2
+0x1.fe7e5p-3
+0x1.1aee06p-2
+0x1.1398dep-2
+0x0p+0
+0x1.1a7e1p-2
+0x1.02ffacp-2
+0x1.4f645ep-3
+0x1.6b9da8p-3
+0x1.ae318ap-8
+0x1.fd4b6ap-6
+-0x1.4efec2p-3
+-0x1.1fd946p-3
+-0x1.1d834ap-2
+-0x1.09cf3ap-2
+-0x1.772eaep-2
+-0x1.6acd8p-2
+-0x1.e5561ep-2
+-0x1.e3aa5p-2
+0x0p+0
+-0x1.bf95e2p+1
+-0x1.d00dbp+3
+-0x1.bf901p+1
+-0x1.1d2f08p+4
+-0x1.88502cp-4
+-0x1.18d828p+5
+-0x1.86e83cp-4
+-0x1.d7ef46p+4
+-0x1.7ca714p-3
+-0x1.d79b0ap+4
+-0x1.7c3fcp-3
+-0x1.31b42p+4
+-0x1.84dae4p+1
+-0x1.536f7p+3
+-0x1.84e1f6p+1
+-0x1.463dep+4
+-0x1.91bb1cp+1
+-0x1.14ecbap+4
+-0x1.91c4aap+1
+-0x1.936afcp+4
+-0x1.99f31ap-3
+-0x1.2fcf26p+3
+-0x1.999fe8p-3
+-0x1.09e928p+5
+-0x1.a14efcp+1
+-0x1.30659p+4
+-0x1.a1583ap+1
+-0x1.60c1aep+3
+-0x1.8f2198p+3
+-0x1.f87d0ap+2
+-0x1.8f2372p+3
+-0x1.1eb6f8p+4
+-0x1.4b0456p+3
+-0x1.11c9a8p+4
+-0x1.4b031ep+3
+-0x1.67aadep+1
+-0x1.72c5c2p+1
+-0x1.29914ep+4
+-0x1.72bfdcp+1
+-0x1.f2fe62p+4
+-0x1.5040b8p+0
+0x1.684c78p+3
+0x1.0fc3dap-2
+0x1.14df18p-2
+0x1.1ab1d2p-2
+0x0p+0
+-0x1.4b5c9ap+0
+-0x1.b73246p+5
+0x1.9ac11ap+3
+-0x1.887e8ap+5
+-0x1.cf62d4p+4
+0x1.3e8eecp+2
+-0x1.380ec6p+5
+0x1.0f698p-2
+0x1.0bb446p-2
+0x1.f77412p-3
+0x1.4a22d8p-3
+0x1.1f482ap-7
+-0x1.3a4588p-3
+-0x1.16d88p-2
+-0x1.859d66p-2
+-0x1.e3fb96p-2
+-0x1.d00dbp+3
+-0x1.bf983cp+1
+-0x1.1d2f08p+4
+-0x1.18d828p+5
+-0x1.87ca12p-4
+-0x1.d7ef46p+4
+-0x1.d79b0ap+4
+-0x1.7c8f06p-3
+-0x1.536f7p+3
+-0x1.84dd0ep+1
+-0x1.463dep+4
+-0x1.14ecbap+4
+-0x1.91baf4p+1
+-0x1.936afcp+4
+-0x1.2fcf26p+3
+-0x1.99e264p-3
+-0x1.09e928p+5
+-0x1.31b42p+4
+-0x1.2793fap+4
+-0x1.30659p+4
+-0x1.a14f02p+1
+-0x1.60c1aep+3
+-0x1.f87d0ap+2
+-0x1.8f2162p+3
+-0x1.11c9a8p+4
+-0x1.4b03d6p+3
+-0x1.67aadep+1
+0x1.48af34p+3
+-0x1.32c5e4p+2
+-0x1.1eb6f8p+4
+-0x1.29914ep+4
+-0x1.72c766p+1
+-0x1.f2fe62p+4
+-0x1.71f87ep+1
+-0x1.4ff244p+0
+0x1.685036p+3
+-0x1.71c06ep+1
+0x1.48b48cp+3
+0x1.0cb75ep-2
+-0x1.380d22p+5
+0x1.3e9e42p+2
+0x1.107fcp-2
+0x1.9acb32p+3
+-0x1.4b1a84p+0
+-0x1.b72ae2p+5
+-0x1.cf654p+4
+-0x1.887c0ap+5
+-0x1.27993ep+4
+-0x1.32b382p+2
+-0x1.91e338p+1
+-0x1.14f298p+4
+-0x1.9372fp+4
+-0x1.7f31dap-3
+-0x1.d7a05p+4
+-0x1.31b8e6p+4
+-0x1.bfca2p+1
+-0x1.1d3934p+4
+-0x1.d0187cp+3
+-0x1.914016p-4
+-0x1.18dd36p+5
+-0x1.d7f95ep+4
+-0x1.9c65ap-3
+-0x1.2fda28p+3
+-0x1.09eba2p+5
+-0x1.a179fep+1
+-0x1.306a4cp+4
+-0x1.60cc14p+3
+-0x1.72a22cp+1
+-0x1.f2fb38p+4
+-0x1.298daap+4
+-0x1.850496p+1
+-0x1.5380eap+3
+-0x1.463f4ap+4
+-0x1.8f2e6ep+3
+-0x1.1ec0bap+4
+-0x1.f8963cp+2
+-0x1.4afd7ep+3
+-0x1.67115p+1
+-0x1.11c8eap+4
+0x1.1bc09p-2
+0x1.15f2fep-2
+0x1.10e036p-2
+0x1.f95ecp-3
+0x1.4b2b12p-3
+0x1.0530e8p-7
+-0x1.3d5d28p-3
+-0x1.184418p-2
+-0x1.86d4c2p-2
+-0x1.e4384cp-2
+0x0p+0
+0x1.0530e8p-7
+0x0p+0
+0x1.1f482ap-7
+0x0p+0
+0x1.162e2ap+2
+0x0p+0
+0x1.1643c2p+2
+0x0p+0
+0x1.4b2b12p-3
+0x0p+0
+0x1.4a22d8p-3
+0x0p+0
+0x1.8834ccp+2
+0x0p+0
+0x1.884d8ap+2
+0x0p+0
+0x1.0cb75ep-2
+0x0p+0
+0x1.0bb446p-2
+0x0p+0
+0x1.a71958p+0
+0x0p+0
+0x1.a62cd8p+0
+0x0p+0
+0x1.3f5914p+2
+0x0p+0
+0x1.3f489p+2
+0x0p+0
+0x1.3a131cp+1
+0x0p+0
+0x1.3a267cp+1
+0x0p+0
+0x1.34758p+0
+0x0p+0
+0x1.34258p+0
+0x0p+0
+0x1.7fa2ap-2
+0x0p+0
+0x1.80f3ap-2
+0x0p+0
+0x1.8bdab6p+2
+0x0p+0
+0x1.8c008ep+2
+0x0p+0
+0x1.eae458p+0
+0x0p+0
+0x1.eb85d8p+0
+0x0p+0
+0x1.4ba928p+1
+0x0p+0
+0x1.4bfa08p+1
+0x0p+0
+0x1.862628p+2
+0x0p+0
+0x1.863b3ep+2
+0x0p+0
+0x1.819b4p+2
+0x0p+0
+0x1.81ae58p+2
+0x0p+0
+0x1.10e036p-2
+0x0p+0
+0x1.0fc3dap-2
+0x0p+0
+0x1.05e948p+0
+0x0p+0
+0x1.068c08p+0
+0x0p+0
+0x1.f07538p+0
+0x0p+0
+0x1.f0c998p+0
+0x0p+0
+0x1.64754cp+1
+0x0p+0
+0x1.64a73p+1
+0x0p+0
+0x1.79b26ap+2
+0x0p+0
+0x1.79c5ep+2
+0x0p+0
+0x1.809b74p+2
+0x0p+0
+0x1.80b22ep+2
+0x0p+0
+0x1.15f2fep-2
+0x0p+0
+0x1.14df18p-2
+0x0p+0
+0x1.79b26ap+2
+0x0p+0
+0x1.79c5ep+2
+-0x1.5040b8p+0
+-0x1.71f87ep+1
+-0x1.5040b8p+0
+0x1.f77412p-3
+-0x1.5040b8p+0
+0x1.0bb446p-2
+-0x1.5040b8p+0
+0x1.0fc3dap-2
+-0x1.5040b8p+0
+0x1.684c78p+3
+0x1.684c78p+3
+0x1.0bb446p-2
+0x1.0f698p-2
+0x1.0fc3dap-2
+0x1.3e8eecp+2
+0x1.0fc3dap-2
+0x1.0bb446p-2
+0x1.0fc3dap-2
+-0x1.cf62d4p+4
+0x1.14df18p-2
+-0x1.887e8ap+5
+0x1.14df18p-2
+0x1.9ac11ap+3
+0x1.14df18p-2
+0x1.0f698p-2
+0x1.14df18p-2
+-0x1.b73246p+5
+0x1.1ab1d2p-2
+-0x1.4b5c9ap+0
+0x1.1ab1d2p-2
+-0x1.b73246p+5
+-0x1.cf62d4p+4
+-0x1.887e8ap+5
+0x1.9ac11ap+3
+0x1.0f698p-2
+0x1.9ac11ap+3
+-0x1.cf62d4p+4
+-0x1.887e8ap+5
+-0x1.380ec6p+5
+0x1.3e8eecp+2
+0x1.3e8eecp+2
+0x1.0f698p-2
+0x1.0bb446p-2
+0x1.3e8eecp+2
+0x1.0bb446p-2
+-0x1.380ec6p+5
+-0x1.f2fe62p+4
+0x1.f77412p-3
+-0x1.29914ep+4
+0x1.f77412p-3
+-0x1.f2fe62p+4
+0x1.4a22d8p-3
+-0x1.1eb6f8p+4
+0x1.4a22d8p-3
+-0x1.11c9a8p+4
+0x1.4a22d8p-3
+-0x1.f87d0ap+2
+0x1.1f482ap-7
+-0x1.60c1aep+3
+0x1.1f482ap-7
+-0x1.1eb6f8p+4
+0x1.1f482ap-7
+-0x1.60c1aep+3
+-0x1.3a4588p-3
+-0x1.30659p+4
+-0x1.3a4588p-3
+-0x1.2793fap+4
+-0x1.16d88p-2
+-0x1.31b42p+4
+-0x1.16d88p-2
+-0x1.d79b0ap+4
+-0x1.16d88p-2
+-0x1.1d2f08p+4
+-0x1.859d66p-2
+-0x1.d00dbp+3
+-0x1.859d66p-2
+-0x1.2793fap+4
+-0x1.859d66p-2
+-0x1.1d2f08p+4
+-0x1.e3fb96p-2
+-0x1.1d2f08p+4
+-0x1.d7ef46p+4
+-0x1.1d2f08p+4
+-0x1.18d828p+5
+-0x1.d79b0ap+4
+-0x1.2fcf26p+3
+-0x1.d79b0ap+4
+-0x1.536f7p+3
+-0x1.30659p+4
+-0x1.536f7p+3
+-0x1.30659p+4
+-0x1.463dep+4
+-0x1.14ecbap+4
+-0x1.463dep+4
+-0x1.14ecbap+4
+-0x1.f87d0ap+2
+-0x1.14ecbap+4
+-0x1.60c1aep+3
+-0x1.936afcp+4
+-0x1.f87d0ap+2
+-0x1.31b42p+4
+-0x1.2fcf26p+3
+-0x1.2793fap+4
+-0x1.09e928p+5
+-0x1.31b42p+4
+-0x1.09e928p+5
+-0x1.60c1aep+3
+-0x1.f87d0ap+2
+-0x1.1eb6f8p+4
+-0x1.11c9a8p+4
+0x1.48af34p+3
+-0x1.11c9a8p+4
+-0x1.1eb6f8p+4
+-0x1.67aadep+1
+-0x1.32c5e4p+2
+0x1.48af34p+3
+0x1.48af34p+3
+-0x1.f2fe62p+4
+-0x1.32c5e4p+2
+-0x1.f2fe62p+4
+-0x1.71f87ep+1
+-0x1.29914ep+4
+0x1.0fc3dap-2
+0x1.14df18p-2
+0x1.f77412p-3
+0x1.0fc3dap-2
+0x1.14df18p-2
+0x1.1ab1d2p-2
+0x1.1ab1d2p-2
+0x0p+0
+0x1.4a22d8p-3
+0x1.f77412p-3
+0x1.1f482ap-7
+0x1.4a22d8p-3
+-0x1.3a4588p-3
+0x1.1f482ap-7
+-0x1.16d88p-2
+-0x1.3a4588p-3
+-0x1.859d66p-2
+-0x1.16d88p-2
+-0x1.e3fb96p-2
+-0x1.859d66p-2
+0x0p+0
+-0x1.e3fb96p-2
+-0x1.d00dbp+3
+-0x1.bf983cp+1
+-0x1.1d2f08p+4
+-0x1.bf983cp+1
+-0x1.18d828p+5
+-0x1.87ca12p-4
+-0x1.d7ef46p+4
+-0x1.87ca12p-4
+-0x1.d79b0ap+4
+-0x1.7c8f06p-3
+-0x1.31b42p+4
+-0x1.7c8f06p-3
+-0x1.536f7p+3
+-0x1.84dd0ep+1
+-0x1.463dep+4
+-0x1.84dd0ep+1
+-0x1.14ecbap+4
+-0x1.91baf4p+1
+-0x1.936afcp+4
+-0x1.91baf4p+1
+-0x1.2fcf26p+3
+-0x1.99e264p-3
+-0x1.09e928p+5
+-0x1.99e264p-3
+-0x1.30659p+4
+-0x1.a14f02p+1
+-0x1.60c1aep+3
+-0x1.a14f02p+1
+-0x1.f87d0ap+2
+-0x1.8f2162p+3
+-0x1.1eb6f8p+4
+-0x1.8f2162p+3
+-0x1.11c9a8p+4
+-0x1.4b03d6p+3
+-0x1.67aadep+1
+-0x1.4b03d6p+3
+-0x1.29914ep+4
+-0x1.72c766p+1
+-0x1.f2fe62p+4
+-0x1.72c766p+1
+-0x1.506898p+0
+-0x1.7215b8p+1
+-0x1.50793ap+0
+-0x1.721e2ap+1
+-0x1.50855cp+0
+0x1.f5a1c2p-3
+-0x1.50855cp+0
+0x1.0b1d3ep-2
+-0x1.50855cp+0
+0x1.0b1d3ep-2
+-0x1.507a74p+0
+0x1.0e4e26p-2
+-0x1.507a74p+0
+0x1.0e4e26p-2
+-0x1.507a74p+0
+0x1.68477cp+3
+-0x1.5079b2p+0
+0x1.68473cp+3
+0x1.68473cp+3
+0x1.0af154p-2
+0x1.0de2f8p-2
+0x1.0e4e26p-2
+0x1.0dd5e6p-2
+0x1.0e4c2p-2
+0x1.3e738ap+2
+0x1.0e433cp-2
+0x1.3e738ap+2
+0x1.0e433cp-2
+0x1.0af154p-2
+0x1.0e3fecp-2
+0x1.0af154p-2
+0x1.0e3fecp-2
+-0x1.cf5fd8p+4
+0x1.13a6a6p-2
+-0x1.88812p+5
+0x1.134848p-2
+0x1.9ab74ep+3
+0x1.13341p-2
+0x1.9ab5bep+3
+0x1.13440cp-2
+0x1.0de43ap-2
+0x1.134b08p-2
+0x1.0df1fap-2
+0x1.134f82p-2
+-0x1.b73a1p+5
+0x1.19ca48p-2
+-0x1.4b967cp+0
+0x1.19fb4ap-2
+-0x1.4b9b8cp+0
+0x1.19fb1cp-2
+-0x1.b73a1p+5
+-0x1.cf5fd8p+4
+-0x1.88812p+5
+0x1.9ab84ap+3
+0x1.0df3ap-2
+0x1.9ab84ap+3
+0x1.0df3ap-2
+0x1.9ab84ap+3
+-0x1.cf5fd8p+4
+-0x1.88812p+5
+-0x1.380ff4p+5
+0x1.3e74eap+2
+-0x1.380ff4p+5
+0x1.3e74eap+2
+0x1.3e74eap+2
+0x1.0e0066p-2
+0x1.3e74eap+2
+0x1.0e0066p-2
+0x1.0af154p-2
+0x1.3e74eap+2
+0x1.0af154p-2
+-0x1.380ff4p+5
+0x1.0af154p-2
+-0x1.380ff4p+5
+-0x1.f3005ep+4
+0x1.f5a1c2p-3
+-0x1.f2ff9cp+4
+0x1.fa25a6p-3
+-0x1.2994f6p+4
+0x1.fbb092p-3
+-0x1.2995d2p+4
+0x1.fe25acp-3
+-0x1.f2ff96p+4
+0x1.48d09ap-3
+-0x1.f300fep+4
+0x1.408caep-3
+-0x1.1eaf5cp+4
+0x1.408caep-3
+-0x1.11cc36p+4
+0x1.49c33p-3
+-0x1.11cdeap+4
+0x1.514204p-3
+-0x1.f867a2p+2
+0x1.598278p-7
+-0x1.f86b0cp+2
+0x1.8c4a14p-7
+-0x1.60b6fap+3
+0x1.08668ep-7
+-0x1.60b11cp+3
+0x1.c8b28ap-7
+-0x1.1eb0a2p+4
+0x1.eed514p-7
+-0x1.60b16ep+3
+-0x1.3793dcp-3
+-0x1.60b44p+3
+-0x1.43755ap-3
+-0x1.30606p+4
+-0x1.474d8p-3
+-0x1.30633ap+4
+-0x1.41ea7cp-3
+-0x1.278ee4p+4
+-0x1.15d7b2p-2
+-0x1.31af98p+4
+-0x1.1493acp-2
+-0x1.31b0cp+4
+-0x1.113deep-2
+-0x1.d793eap+4
+-0x1.115512p-2
+-0x1.1d27c2p+4
+-0x1.83ded6p-2
+-0x1.1d21d2p+4
+-0x1.7449fap-2
+-0x1.cfffb6p+3
+-0x1.7449fap-2
+-0x1.d00192p+3
+-0x1.73e862p-2
+-0x1.278ee4p+4
+-0x1.74d99cp-2
+-0x1.1d21d2p+4
+-0x1.e4465cp-2
+-0x1.1d21fep+4
+-0x1.d7e70cp+4
+-0x1.1d24b4p+4
+-0x1.18d486p+5
+-0x1.1d27c4p+4
+-0x1.18d368p+5
+-0x1.d794c8p+4
+-0x1.2fc71cp+3
+-0x1.d795aap+4
+-0x1.535f4cp+3
+-0x1.3060a4p+4
+-0x1.5362cp+3
+-0x1.306008p+4
+-0x1.46393ep+4
+-0x1.14e736p+4
+-0x1.463a12p+4
+-0x1.14e736p+4
+-0x1.f85b16p+2
+-0x1.14e786p+4
+-0x1.f85c42p+2
+-0x1.14e7c6p+4
+-0x1.60b4b4p+3
+-0x1.14e8c6p+4
+-0x1.60b2b6p+3
+-0x1.936446p+4
+-0x1.f85d6ep+2
+-0x1.31afap+4
+-0x1.2fc5b8p+3
+-0x1.278ee4p+4
+-0x1.09e6e4p+5
+-0x1.31b00ep+4
+-0x1.09e70cp+5
+-0x1.31af72p+4
+-0x1.09e6f6p+5
+-0x1.60b61cp+3
+-0x1.f8682p+2
+-0x1.60b56p+3
+-0x1.f86976p+2
+-0x1.1eaebp+4
+-0x1.11cbdp+4
+0x1.48ac92p+3
+-0x1.11cbdp+4
+-0x1.1eaebp+4
+-0x1.68574p+1
+-0x1.32cf26p+2
+0x1.48aeep+3
+0x1.48abfp+3
+-0x1.f300fep+4
+-0x1.32cf26p+2
+-0x1.f300fep+4
+-0x1.7224b8p+1
+-0x1.29953ep+4
+-0x1.7224b8p+1
+-0x1.29953ep+4
+0x1.13502p-2
+0x1.0e3fecp-2
+0x1.0e9b42p-2
+0x1.fc6aeap-3
+0x1.19f8dp-2
+0x1.12801p-2
+0x0p+0
+0x1.198e8cp-2
+0x1.01eb96p-2
+0x1.4e2b88p-3
+0x1.6a4ccep-3
+0x1.0e423cp-7
+0x1.05066ep-5
+-0x1.4c40dap-3
+-0x1.1d23p-3
+-0x1.1c7c7cp-2
+-0x1.088b02p-2
+-0x1.758abp-2
+-0x1.6946fap-2
+-0x1.e58758p-2
+-0x1.e3918ap-2
+0x0p+0
+-0x1.bf60f8p+1
+-0x1.d000d2p+3
+-0x1.bf5b12p+1
+-0x1.1d26cep+4
+-0x1.80172p-4
+-0x1.18d40ep+5
+-0x1.7eb178p-4
+-0x1.d7e692p+4
+-0x1.7a75acp-3
+-0x1.d793f4p+4
+-0x1.7a0acep-3
+-0x1.31af72p+4
+-0x1.84abf2p+1
+-0x1.535f3ap+3
+-0x1.84b2bep+1
+-0x1.463a12p+4
+-0x1.9190fcp+1
+-0x1.14e714p+4
+-0x1.919a84p+1
+-0x1.93640ap+4
+-0x1.979f76p-3
+-0x1.2fc678p+3
+-0x1.974736p-3
+-0x1.09e6f6p+5
+-0x1.a124c4p+1
+-0x1.305fdp+4
+-0x1.a12d68p+1
+-0x1.60b6b8p+3
+-0x1.8f1284p+3
+-0x1.f86682p+2
+-0x1.8f144p+3
+-0x1.1eae4cp+4
+-0x1.4b0a3ep+3
+-0x1.11cbccp+4
+-0x1.4b08ep+3
+-0x1.68563p+1
+-0x1.72e93p+1
+-0x1.299542p+4
+-0x1.72e378p+1
+-0x1.f3011p+4
+-0x1.5079b2p+0
+-0x1.721f36p+1
+-0x1.50864ap+0
+-0x1.72259ap+1
+-0x1.508f4ap+0
+0x1.f5c55p-3
+-0x1.508f4ap+0
+0x1.0af39ep-2
+-0x1.508f4ap+0
+0x1.0af39ep-2
+-0x1.508468p+0
+0x1.0e867p-2
+-0x1.508468p+0
+0x1.0e867p-2
+-0x1.508468p+0
+0x1.68473cp+3
+-0x1.5083aep+0
+0x1.6847p+3
+0x1.6847p+3
+0x1.0ac7dp-2
+0x1.0e0066p-2
+0x1.0e867p-2
+0x1.0de70ep-2
+0x1.0e8284p-2
+0x1.3e74eap+2
+0x1.0e74acp-2
+0x1.3e74eap+2
+0x1.0e74acp-2
+0x1.0ac7dp-2
+0x1.0e702ap-2
+0x1.0ac7dp-2
+0x1.0e702ap-2
+-0x1.cf5fd8p+4
+0x1.13cf78p-2
+-0x1.88812p+5
+0x1.1369bcp-2
+0x1.9ab7e4p+3
+0x1.13555p-2
+0x1.9ab67p+3
+0x1.136422p-2
+0x1.0dfd5cp-2
+0x1.136afp-2
+0x1.0e070ep-2
+0x1.136e18p-2
+-0x1.b73a1p+5
+0x1.19c0dcp-2
+-0x1.4b993p+0
+0x1.19f21p-2
+-0x1.4b9e5p+0
+0x1.19f1ep-2
+-0x1.b73a1p+5
+-0x1.cf5fd8p+4
+-0x1.88812p+5
+0x1.9ab8ecp+3
+0x1.0e070ep-2
+0x1.9ab8ecp+3
+0x1.0e070ep-2
+0x1.9ab8ecp+3
+-0x1.cf5fd8p+4
+-0x1.88812p+5
+-0x1.381004p+5
+0x1.3e76c8p+2
+-0x1.381004p+5
+0x1.3e76c8p+2
+0x1.3e76c8p+2
+0x1.0e12dcp-2
+0x1.3e76c8p+2
+0x1.0e12dcp-2
+0x1.0ac7dp-2
+0x1.3e76c8p+2
+0x1.0ac7dp-2
+-0x1.381004p+5
+0x1.0ac7dp-2
+-0x1.381004p+5
+-0x1.f3011p+4
+0x1.f5c55p-3
+-0x1.f3004ep+4
+0x1.fa3f28p-3
+-0x1.299542p+4
+0x1.fbbd9p-3
+-0x1.29961cp+4
+0x1.fe2b58p-3
+-0x1.f3004ap+4
+0x1.48a91ep-3
+-0x1.f301b2p+4
+0x1.406bdep-3
+-0x1.1eae4cp+4
+0x1.406bdep-3
+-0x1.11cbccp+4
+0x1.49bf46p-3
+-0x1.11cd82p+4
+0x1.514432p-3
+-0x1.f86682p+2
+0x1.4233bcp-7
+-0x1.f869ecp+2
+0x1.750712p-7
+-0x1.60b6b8p+3
+0x1.e619ccp-8
+-0x1.60b0d8p+3
+0x1.b35ca6p-7
+-0x1.1eaf98p+4
+0x1.db4c4cp-7
+-0x1.60b12cp+3
+-0x1.36e3f6p-3
+-0x1.60b4p+3
+-0x1.42d02ap-3
+-0x1.305fdp+4
+-0x1.46b35ep-3
+-0x1.3062a4p+4
+-0x1.415c54p-3
+-0x1.278ee4p+4
+-0x1.159054p-2
+-0x1.31af72p+4
+-0x1.14520cp-2
+-0x1.31b098p+4
+-0x1.11006cp-2
+-0x1.d793f4p+4
+-0x1.111816p-2
+-0x1.1d26cep+4
+-0x1.8432d6p-2
+-0x1.1d20dap+4
+-0x1.749a8p-2
+-0x1.d000d2p+3
+-0x1.749a8p-2
+-0x1.d002bp+3
+-0x1.74387ap-2
+-0x1.278ee4p+4
+-0x1.7525e2p-2
+-0x1.1d20dap+4
+-0x1.e409aep-2
+-0x1.1d2108p+4
+-0x1.d7e692p+4
+-0x1.1d23bcp+4
+-0x1.18d40ep+5
+-0x1.1d26ccp+4
+-0x1.18d2fp+5
+-0x1.d794d2p+4
+-0x1.2fc678p+3
+-0x1.d795b2p+4
+-0x1.535f3ap+3
+-0x1.30601p+4
+-0x1.5362aap+3
+-0x1.305f74p+4
+-0x1.463a12p+4
+-0x1.14e714p+4
+-0x1.463ae8p+4
+-0x1.14e714p+4
+-0x1.f85a32p+2
+-0x1.14e766p+4
+-0x1.f85b64p+2
+-0x1.14e7a8p+4
+-0x1.60b474p+3
+-0x1.14e8a6p+4
+-0x1.60b276p+3
+-0x1.93640ap+4
+-0x1.f85c96p+2
+-0x1.31af76p+4
+-0x1.2fc516p+3
+-0x1.278ee4p+4
+-0x1.09e6f6p+5
+-0x1.31afe6p+4
+-0x1.09e71ep+5
+-0x1.31af4ap+4
+-0x1.09e708p+5
+-0x1.60b5dap+3
+-0x1.f86728p+2
+-0x1.60b50ap+3
+-0x1.f868a2p+2
+-0x1.1eadb2p+4
+-0x1.11cb68p+4
+0x1.48abep+3
+-0x1.11cb68p+4
+-0x1.1eadb2p+4
+-0x1.68563p+1
+-0x1.32cf26p+2
+0x1.48ae14p+3
+0x1.48abp+3
+-0x1.f301b2p+4
+-0x1.32cf26p+2
+-0x1.f301b2p+4
+-0x1.722a76p+1
+-0x1.299588p+4
+-0x1.722a76p+1
+-0x1.299588p+4
+0x1.136e18p-2
+0x1.0e702ap-2
+0x1.0eb13ap-2
+0x1.fc71dp-3
+0x1.19ef78p-2
+0x1.1287d2p-2
+0x0p+0
+0x1.197b5ep-2
+0x1.01eac6p-2
+0x1.4e2d2cp-3
+0x1.6a33eap-3
+0x1.ffd072p-8
+0x1.041a62p-5
+-0x1.4bac7p-3
+-0x1.1ce68ap-3
+-0x1.1c46bap-2
+-0x1.08864cp-2
+-0x1.75cf9ep-2
+-0x1.697378p-2
+-0x1.e5596cp-2
+-0x1.e37ebep-2
+0x0p+0
+-0x1.bf6334p+1
+-0x1.d001f4p+3
+-0x1.bf5d5cp+1
+-0x1.1d25d6p+4
+-0x1.7f923ap-4
+-0x1.18d396p+5
+-0x1.7e29e6p-4
+-0x1.d7e61ap+4
+-0x1.7a5e6ap-3
+-0x1.d793fep+4
+-0x1.79f872p-3
+-0x1.31af4ap+4
+-0x1.84ae1ap+1
+-0x1.535f22p+3
+-0x1.84b516p+1
+-0x1.463ae8p+4
+-0x1.9190f4p+1
+-0x1.14e6f4p+4
+-0x1.919a78p+1
+-0x1.9363cep+4
+-0x1.978b4cp-3
+-0x1.2fc5dap+3
+-0x1.973622p-3
+-0x1.09e708p+5
+-0x1.a1247ep+1
+-0x1.305f3cp+4
+-0x1.a12d94p+1
+-0x1.60b66ep+3
+-0x1.8f125cp+3
+-0x1.f86594p+2
+-0x1.8f141ep+3
+-0x1.1ead4ap+4
+-0x1.4b09b2p+3
+-0x1.11cb64p+4
+-0x1.4b0872p+3
+-0x1.685512p+1
+-0x1.72ea7cp+1
+-0x1.29958cp+4
+-0x1.72e4ccp+1
+-0x1.f301c4p+4
+-0x1.5083aep+0
+-0x1.72244p+1
+-0x1.508dc2p+0
+-0x1.72295ep+1
+-0x1.5094dp+0
+0x1.f5ac4cp-3
+-0x1.5094dp+0
+0x1.0ac9f8p-2
+-0x1.5094dp+0
+0x1.0ac9f8p-2
+-0x1.508a68p+0
+0x1.0e9218p-2
+-0x1.508a68p+0
+0x1.0e9218p-2
+-0x1.508a68p+0
+0x1.6847p+3
+-0x1.5089cp+0
+0x1.6846c8p+3
+0x1.6846c8p+3
+0x1.0aa014p-2
+0x1.0e12dcp-2
+0x1.0e9218p-2
+0x1.0df6cap-2
+0x1.0e8dcp-2
+0x1.3e76c8p+2
+0x1.0e7f68p-2
+0x1.3e767ep+2
+0x1.0e7fccp-2
+0x1.0aa014p-2
+0x1.0e7b28p-2
+0x1.0aa014p-2
+0x1.0e7b28p-2
+-0x1.cf5fd8p+4
+0x1.13c9aap-2
+-0x1.88812p+5
+0x1.136224p-2
+0x1.9ab88cp+3
+0x1.134da8p-2
+0x1.9ab6f2p+3
+0x1.135e0ep-2
+0x1.0e0de8p-2
+0x1.1364f4p-2
+0x1.0e1b86p-2
+0x1.136964p-2
+-0x1.b73a1p+5
+0x1.19b16p-2
+-0x1.4b9bd6p+0
+0x1.19e3bcp-2
+-0x1.4ba138p+0
+0x1.19e38ap-2
+-0x1.b73a1p+5
+-0x1.cf5fd8p+4
+-0x1.88812p+5
+0x1.9ab976p+3
+0x1.0e1d2ep-2
+0x1.9ab976p+3
+0x1.0e1d2ep-2
+0x1.9ab976p+3
+-0x1.cf5fd8p+4
+-0x1.88812p+5
+-0x1.381012p+5
+0x1.3e786ap+2
+-0x1.381012p+5
+0x1.3e786ap+2
+0x1.3e786ap+2
+0x1.0e27cp-2
+0x1.3e786ap+2
+0x1.0e27cp-2
+0x1.0aa6d8p-2
+0x1.3e786ap+2
+0x1.0aa6d8p-2
+-0x1.381012p+5
+0x1.0aa6d8p-2
+-0x1.381012p+5
+-0x1.f301c4p+4
+0x1.f5ac4cp-3
+-0x1.f30102p+4
+0x1.fa26e8p-3
+-0x1.29958cp+4
+0x1.fba2ep-3
+-0x1.299666p+4
+0x1.fe0d7cp-3
+-0x1.f300fep+4
+0x1.4904cp-3
+-0x1.f30264p+4
+0x1.40c92ep-3
+-0x1.1ead4ap+4
+0x1.40c92ep-3
+-0x1.11cb64p+4
+0x1.4a24c6p-3
+-0x1.11cd18p+4
+0x1.519ddp-3
+-0x1.f86594p+2
+0x1.3e3e1ep-7
+-0x1.f868f8p+2
+0x1.70c53cp-7
+-0x1.60b66ep+3
+0x1.ded1d6p-8
+-0x1.60b092p+3
+0x1.af3bb8p-7
+-0x1.1eae96p+4
+0x1.d73bd4p-7
+-0x1.60b0e8p+3
+-0x1.3710d6p-3
+-0x1.60b3b8p+3
+-0x1.42edc2p-3
+-0x1.305f3cp+4
+-0x1.46c47ep-3
+-0x1.30620ep+4
+-0x1.4170cep-3
+-0x1.278ee4p+4
+-0x1.158172p-2
+-0x1.31af4ap+4
+-0x1.144476p-2
+-0x1.31b07p+4
+-0x1.10f45ep-2
+-0x1.d793fep+4
+-0x1.110c26p-2
+-0x1.1d25d6p+4
+-0x1.84530ep-2
+-0x1.1d1fe2p+4
+-0x1.74bb16p-2
+-0x1.d001f4p+3
+-0x1.74bb16p-2
+-0x1.d003d4p+3
+-0x1.74587ep-2
+-0x1.278ee4p+4
+-0x1.7547c6p-2
+-0x1.1d1fe2p+4
+-0x1.e3e00ap-2
+-0x1.1d2012p+4
+-0x1.d7e61ap+4
+-0x1.1d22c4p+4
+-0x1.18d396p+5
+-0x1.1d25d6p+4
+-0x1.18d276p+5
+-0x1.d794dcp+4
+-0x1.2fc5dap+3
+-0x1.d795bap+4
+-0x1.535f22p+3
+-0x1.305f7ep+4
+-0x1.53628ep+3
+-0x1.305ee2p+4
+-0x1.463ae8p+4
+-0x1.14e6f4p+4
+-0x1.463bbep+4
+-0x1.14e6f4p+4
+-0x1.f85952p+2
+-0x1.14e746p+4
+-0x1.f85a84p+2
+-0x1.14e788p+4
+-0x1.60b42ap+3
+-0x1.14e886p+4
+-0x1.60b23p+3
+-0x1.9363cep+4
+-0x1.f85bb6p+2
+-0x1.31af4ep+4
+-0x1.2fc47cp+3
+-0x1.278ee4p+4
+-0x1.09e708p+5
+-0x1.31afcp+4
+-0x1.09e72ep+5
+-0x1.31af26p+4
+-0x1.09e718p+5
+-0x1.60b592p+3
+-0x1.f8662cp+2
+-0x1.60b4b8p+3
+-0x1.f867b6p+2
+-0x1.1eacb4p+4
+-0x1.11cbp+4
+0x1.48aae8p+3
+-0x1.11cbp+4
+-0x1.1eacb4p+4
+-0x1.685512p+1
+-0x1.32cf26p+2
+0x1.48ad0ap+3
+0x1.48a9e2p+3
+-0x1.f30264p+4
+-0x1.32cf26p+2
+-0x1.f30264p+4
+-0x1.722d2ep+1
+-0x1.2995d4p+4
+-0x1.722d2ep+1
+-0x1.2995d4p+4
+0x1.136a02p-2
+0x1.0e7bcp-2
+0x1.0ec0fap-2
+0x1.fc559ep-3
+0x1.19e116p-2
+0x1.128b2ep-2
+0x0p+0
+0x1.196b3cp-2
+0x1.01e198p-2
+0x1.4e8874p-3
+0x1.6a609p-3
+0x1.fb56ap-8
+0x1.0385bep-5
+-0x1.4bb384p-3
+-0x1.1ce82ep-3
+-0x1.1c39ccp-2
+-0x1.0881a2p-2
+-0x1.75f012p-2
+-0x1.69913cp-2
+-0x1.e5384p-2
+-0x1.e36ae8p-2
+0x0p+0
+-0x1.bf658ep+1
+-0x1.d00316p+3
+-0x1.bf5facp+1
+-0x1.1d24ep+4
+-0x1.7f0bd2p-4
+-0x1.18d31cp+5
+-0x1.7da342p-4
+-0x1.d7e5a2p+4
+-0x1.7a480ap-3
+-0x1.d79408p+4
+-0x1.79e302p-3
+-0x1.31af26p+4
+-0x1.84b044p+1
+-0x1.535f0ap+3
+-0x1.84b74ap+1
+-0x1.463bbep+4
+-0x1.9190dp+1
+-0x1.14e6d4p+4
+-0x1.919a56p+1
+-0x1.936394p+4
+-0x1.977904p-3
+-0x1.2fc542p+3
+-0x1.97248p-3
+-0x1.09e718p+5
+-0x1.a1246cp+1
+-0x1.305eaap+4
+-0x1.a12d8ap+1
+-0x1.60b61ep+3
+-0x1.8f1222p+3
+-0x1.f864a4p+2
+-0x1.8f13eep+3
+-0x1.1eac4ap+4
+-0x1.4b093p+3
+-0x1.11cafcp+4
+-0x1.4b07fap+3
+-0x1.6853eep+1
+-0x1.72ec1ep+1
+-0x1.2995d8p+4
+-0x1.72e656p+1
+-0x1.f30276p+4
+-0x1.5089cp+0
+0x1.6846c8p+3
+0x1.0e9f62p-2
+0x1.13c782p-2
+0x1.19a1fp-2
+0x0p+0
+-0x1.4b9eb2p+0
+-0x1.b73a1p+5
+0x1.9ab92p+3
+-0x1.88812p+5
+-0x1.cf5fd8p+4
+0x1.3e786ap+2
+-0x1.38102p+5
+0x1.0e27cp-2
+0x1.0aa8f8p-2
+0x1.f58124p-3
+0x1.492bc8p-3
+0x1.3c5a6ep-7
+-0x1.371b26p-3
+-0x1.157a3ep-2
+-0x1.846bc6p-2
+-0x1.e3c096p-2
+-0x1.d00316p+3
+-0x1.bf67e6p+1
+-0x1.1d24ep+4
+-0x1.18d31cp+5
+-0x1.7e84cap-4
+-0x1.d7e5a2p+4
+-0x1.d79408p+4
+-0x1.7a31ep-3
+-0x1.535f0ap+3
+-0x1.84b27p+1
+-0x1.463bbep+4
+-0x1.14e6d4p+4
+-0x1.9190bcp+1
+-0x1.936394p+4
+-0x1.2fc542p+3
+-0x1.9766e8p-3
+-0x1.09e718p+5
+-0x1.31af26p+4
+-0x1.278ee4p+4
+-0x1.305eaap+4
+-0x1.a12466p+1
+-0x1.60b61ep+3
+-0x1.f864a4p+2
+-0x1.8f11f2p+3
+-0x1.11cafcp+4
+-0x1.4b08b8p+3
+-0x1.6853eep+1
+0x1.48a9c6p+3
+-0x1.32cf26p+2
+-0x1.1eac4ap+4
+-0x1.2995d8p+4
+-0x1.72edb2p+1
+-0x1.f30276p+4
+-0x1.7226bp+1
+-0x1.5040b8p+0
+0x1.684c78p+3
+-0x1.71f87ep+1
+0x1.48af34p+3
+0x1.0bb446p-2
+-0x1.380ec6p+5
+0x1.3e8eecp+2
+0x1.0f698p-2
+0x1.9ac11ap+3
+-0x1.4b5c9ap+0
+-0x1.b73246p+5
+-0x1.cf62d4p+4
+-0x1.887e8ap+5
+-0x1.2793fap+4
+-0x1.32c5e4p+2
+-0x1.91baf4p+1
+-0x1.14ecbap+4
+-0x1.936afcp+4
+-0x1.7c8f06p-3
+-0x1.d79b0ap+4
+-0x1.31b42p+4
+-0x1.bf983cp+1
+-0x1.1d2f08p+4
+-0x1.d00dbp+3
+-0x1.87ca12p-4
+-0x1.18d828p+5
+-0x1.d7ef46p+4
+-0x1.99e264p-3
+-0x1.2fcf26p+3
+-0x1.09e928p+5
+-0x1.a14f02p+1
+-0x1.30659p+4
+-0x1.60c1aep+3
+-0x1.72c766p+1
+-0x1.f2fe62p+4
+-0x1.29914ep+4
+-0x1.84dd0ep+1
+-0x1.536f7p+3
+-0x1.463dep+4
+-0x1.8f2162p+3
+-0x1.1eb6f8p+4
+-0x1.f87d0ap+2
+-0x1.4b03d6p+3
+-0x1.67aadep+1
+-0x1.11c9a8p+4
+0x1.1ab1d2p-2
+0x1.14df18p-2
+0x1.0fc3dap-2
+0x1.f77412p-3
+0x1.4a22d8p-3
+0x1.1f482ap-7
+-0x1.3a4588p-3
+-0x1.16d88p-2
+-0x1.859d66p-2
+-0x1.e3fb96p-2
+0x0p+0
+0x1.1f482ap-7
+0x0p+0
+0x1.3c5a6ep-7
+0x0p+0
+0x1.1643c2p+2
+0x0p+0
+0x1.1658f6p+2
+0x0p+0
+0x1.4a22d8p-3
+0x0p+0
+0x1.492bc8p-3
+0x0p+0
+0x1.884d8ap+2
+0x0p+0
+0x1.8866dcp+2
+0x0p+0
+0x1.0bb446p-2
+0x0p+0
+0x1.0aa8f8p-2
+0x0p+0
+0x1.a62cd8p+0
+0x0p+0
+0x1.a53398p+0
+0x0p+0
+0x1.3f489p+2
+0x0p+0
+0x1.3f380ap+2
+0x0p+0
+0x1.3a267cp+1
+0x0p+0
+0x1.3a3e5cp+1
+0x0p+0
+0x1.34258p+0
+0x0p+0
+0x1.33d2cp+0
+0x0p+0
+0x1.80f3ap-2
+0x0p+0
+0x1.82392p-2
+0x0p+0
+0x1.8c008ep+2
+0x0p+0
+0x1.8c25a2p+2
+0x0p+0
+0x1.eb85d8p+0
+0x0p+0
+0x1.ec2018p+0
+0x0p+0
+0x1.4bfa08p+1
+0x0p+0
+0x1.4c4ac8p+1
+0x0p+0
+0x1.863b3ep+2
+0x0p+0
+0x1.864e28p+2
+0x0p+0
+0x1.81ae58p+2
+0x0p+0
+0x1.81c24p+2
+0x0p+0
+0x1.0fc3dap-2
+0x0p+0
+0x1.0e9f62p-2
+0x0p+0
+0x1.068c08p+0
+0x0p+0
+0x1.072e88p+0
+0x0p+0
+0x1.f0c998p+0
+0x0p+0
+0x1.f139b8p+0
+0x0p+0
+0x1.64a73p+1
+0x0p+0
+0x1.64d786p+1
+0x0p+0
+0x1.79c5ep+2
+0x0p+0
+0x1.79d8fap+2
+0x0p+0
+0x1.80b22ep+2
+0x0p+0
+0x1.80c812p+2
+0x0p+0
+0x1.14df18p-2
+0x0p+0
+0x1.13c782p-2
+0x0p+0
+0x1.79c5ep+2
+0x0p+0
+0x1.79d8fap+2
+-0x1.5089cp+0
+-0x1.7226bp+1
+-0x1.5089cp+0
+0x1.f58124p-3
+-0x1.5089cp+0
+0x1.0aa8f8p-2
+-0x1.5089cp+0
+0x1.0e9f62p-2
+-0x1.5089cp+0
+0x1.6846c8p+3
+0x1.0e27cp-2
+0x1.0e9f62p-2
+0x1.3e786ap+2
+0x1.0e9f62p-2
+0x1.0aa8f8p-2
+0x1.0e9f62p-2
+-0x1.cf5fd8p+4
+0x1.13c782p-2
+-0x1.88812p+5
+0x1.13c782p-2
+0x1.9ab92p+3
+0x1.13c782p-2
+0x1.0e27cp-2
+0x1.13c782p-2
+-0x1.b73a1p+5
+0x1.19a1fp-2
+-0x1.4b9eb2p+0
+0x1.19a1fp-2
+-0x1.b73a1p+5
+-0x1.cf5fd8p+4
+-0x1.88812p+5
+0x1.9ab92p+3
+0x1.0e27cp-2
+0x1.9ab92p+3
+-0x1.cf5fd8p+4
+-0x1.88812p+5
+-0x1.38102p+5
+0x1.3e786ap+2
+0x1.3e786ap+2
+0x1.0e27cp-2
+0x1.0aa8f8p-2
+0x1.3e786ap+2
+0x1.0aa8f8p-2
+-0x1.38102p+5
+-0x1.f30276p+4
+0x1.f58124p-3
+-0x1.2995d8p+4
+0x1.f58124p-3
+-0x1.f30276p+4
+0x1.492bc8p-3
+-0x1.1eac4ap+4
+0x1.492bc8p-3
+-0x1.11cafcp+4
+0x1.492bc8p-3
+-0x1.f864a4p+2
+0x1.3c5a6ep-7
+-0x1.60b61ep+3
+0x1.3c5a6ep-7
+-0x1.1eac4ap+4
+0x1.3c5a6ep-7
+-0x1.60b61ep+3
+-0x1.371b26p-3
+-0x1.305eaap+4
+-0x1.371b26p-3
+-0x1.278ee4p+4
+-0x1.157a3ep-2
+-0x1.31af26p+4
+-0x1.157a3ep-2
+-0x1.d79408p+4
+-0x1.157a3ep-2
+-0x1.1d24ep+4
+-0x1.846bc6p-2
+-0x1.d00316p+3
+-0x1.846bc6p-2
+-0x1.278ee4p+4
+-0x1.846bc6p-2
+-0x1.1d24ep+4
+-0x1.e3c096p-2
+-0x1.1d24ep+4
+-0x1.d7e5a2p+4
+-0x1.1d24ep+4
+-0x1.18d31cp+5
+-0x1.d79408p+4
+-0x1.2fc542p+3
+-0x1.d79408p+4
+-0x1.535f0ap+3
+-0x1.305eaap+4
+-0x1.535f0ap+3
+-0x1.305eaap+4
+-0x1.463bbep+4
+-0x1.14e6d4p+4
+-0x1.463bbep+4
+-0x1.14e6d4p+4
+-0x1.f864a4p+2
+-0x1.14e6d4p+4
+-0x1.60b61ep+3
+-0x1.936394p+4
+-0x1.f864a4p+2
+-0x1.31af26p+4
+-0x1.2fc542p+3
+-0x1.278ee4p+4
+-0x1.09e718p+5
+-0x1.31af26p+4
+-0x1.09e718p+5
+-0x1.60b61ep+3
+-0x1.f864a4p+2
+0x1.48a9c6p+3
+-0x1.11cafcp+4
+-0x1.1eac4ap+4
+-0x1.6853eep+1
+-0x1.32cf26p+2
+0x1.48a9c6p+3
+0x1.48a9c6p+3
+-0x1.f30276p+4
+-0x1.32cf26p+2
+-0x1.f30276p+4
+-0x1.7226bp+1
+-0x1.2995d8p+4
+0x1.0e9f62p-2
+0x1.13c782p-2
+0x1.f58124p-3
+0x1.0e9f62p-2
+0x1.13c782p-2
+0x1.19a1fp-2
+0x1.19a1fp-2
+0x0p+0
+0x1.492bc8p-3
+0x1.f58124p-3
+0x1.3c5a6ep-7
+0x1.492bc8p-3
+-0x1.371b26p-3
+0x1.3c5a6ep-7
+-0x1.157a3ep-2
+-0x1.371b26p-3
+-0x1.846bc6p-2
+-0x1.157a3ep-2
+-0x1.e3c096p-2
+-0x1.846bc6p-2
+0x0p+0
+-0x1.e3c096p-2
+-0x1.d00316p+3
+-0x1.bf67e6p+1
+-0x1.1d24ep+4
+-0x1.bf67e6p+1
+-0x1.18d31cp+5
+-0x1.7e84cap-4
+-0x1.d7e5a2p+4
+-0x1.7e84cap-4
+-0x1.d79408p+4
+-0x1.7a31ep-3
+-0x1.31af26p+4
+-0x1.7a31ep-3
+-0x1.535f0ap+3
+-0x1.84b27p+1
+-0x1.463bbep+4
+-0x1.84b27p+1
+-0x1.14e6d4p+4
+-0x1.9190bcp+1
+-0x1.936394p+4
+-0x1.9190bcp+1
+-0x1.2fc542p+3
+-0x1.9766e8p-3
+-0x1.09e718p+5
+-0x1.9766e8p-3
+-0x1.305eaap+4
+-0x1.a12466p+1
+-0x1.60b61ep+3
+-0x1.a12466p+1
+-0x1.f864a4p+2
+-0x1.8f11f2p+3
+-0x1.1eac4ap+4
+-0x1.8f11f2p+3
+-0x1.11cafcp+4
+-0x1.4b08b8p+3
+-0x1.6853eep+1
+-0x1.4b08b8p+3
+-0x1.2995d8p+4
+-0x1.72edb2p+1
+-0x1.f30276p+4
+-0x1.72edb2p+1
+-0x1.50d57p+0
+-0x1.7248fep+1
+-0x1.50da2p+0
+-0x1.724b5ep+1
+-0x1.50ddp+0
+0x1.f364fap-3
+-0x1.50ddp+0
+0x1.096c6ep-2
+-0x1.50ddp+0
+0x1.096c6ep-2
+-0x1.50d33p+0
+0x1.0d1524p-2
+-0x1.50d33p+0
+0x1.0d1524p-2
+-0x1.50d33p+0
+0x1.683d52p+3
+-0x1.50d2bp+0
+0x1.683d28p+3
+0x1.0c9fbap-2
+0x1.0d1524p-2
+0x1.0c9fbap-2
+0x1.0d1524p-2
+0x1.3e64e6p+2
+0x1.0d0fbcp-2
+0x1.3e64e6p+2
+0x1.0d0fbcp-2
+0x1.0944fcp-2
+0x1.0d0fbcp-2
+0x1.0944fcp-2
+0x1.0d0fbcp-2
+-0x1.cf5c2p+4
+0x1.1285acp-2
+-0x1.8883dp+5
+0x1.12366p-2
+0x1.9aac5cp+3
+0x1.12215ap-2
+0x1.9aaaeep+3
+0x1.122feep-2
+0x1.0ca88p-2
+0x1.1237aap-2
+0x1.0caeb6p-2
+0x1.1239bp-2
+-0x1.b74266p+5
+0x1.18be9p-2
+-0x1.4bd78ap+0
+0x1.18f1fap-2
+-0x1.4bdd2p+0
+0x1.18f1c6p-2
+-0x1.b74266p+5
+-0x1.cf5c2p+4
+-0x1.8883dp+5
+0x1.9aadcp+3
+0x1.0caeb6p-2
+0x1.9aadcp+3
+0x1.0caeb6p-2
+0x1.9aadcp+3
+-0x1.cf5c2p+4
+-0x1.8883dp+5
+-0x1.38129ap+5
+0x1.3e64e6p+2
+-0x1.38129ap+5
+0x1.3e64e6p+2
+0x1.3e64e6p+2
+0x1.0cbd82p-2
+0x1.3e64e6p+2
+0x1.0cbd82p-2
+0x1.0944fcp-2
+0x1.3e64e6p+2
+0x1.0944fcp-2
+0x1.3e64e6p+2
+0x1.0944fcp-2
+-0x1.38129ap+5
+0x1.094666p-2
+-0x1.3812a4p+5
+-0x1.f30506p+4
+0x1.f364fap-3
+-0x1.f30446p+4
+0x1.f7dc2ep-3
+-0x1.299a22p+4
+0x1.f95c4cp-3
+-0x1.299afcp+4
+0x1.fbc628p-3
+-0x1.f30442p+4
+0x1.47697p-3
+-0x1.f305a2p+4
+0x1.3f59p-3
+-0x1.1ea55p+4
+0x1.3f59p-3
+-0x1.11ce66p+4
+0x1.4886ap-3
+-0x1.11d01ap+4
+0x1.50007ep-3
+-0x1.f84e8p+2
+0x1.7c97bap-7
+-0x1.f851dcp+2
+0x1.ae8274p-7
+-0x1.60ab0cp+3
+0x1.2c22dcp-7
+-0x1.60a538p+3
+0x1.eaf1e2p-7
+-0x1.1ea698p+4
+0x1.087bc4p-6
+-0x1.60a58ap+3
+-0x1.341a7ep-3
+-0x1.60a85ap+3
+-0x1.3ff2c4p-3
+-0x1.3058dap+4
+-0x1.43c9f8p-3
+-0x1.305bacp+4
+-0x1.3e786cp-3
+-0x1.278a44p+4
+-0x1.1486d8p-2
+-0x1.31aa98p+4
+-0x1.13486ap-2
+-0x1.31abbep+4
+-0x1.0ff712p-2
+-0x1.d78cd8p+4
+-0x1.100e42p-2
+-0x1.1d1e4ep+4
+-0x1.82bd4ap-2
+-0x1.1d185ap+4
+-0x1.732822p-2
+-0x1.cff5f4p+3
+-0x1.732822p-2
+-0x1.cff7d8p+3
+-0x1.72c508p-2
+-0x1.278a44p+4
+-0x1.73b7e8p-2
+-0x1.1d185ap+4
+-0x1.e43214p-2
+-0x1.1d1888p+4
+-0x1.e5827p-2
+-0x1.1d1888p+4
+-0x1.d7dd1ap+4
+-0x1.1d1b3cp+4
+-0x1.18cfd4p+5
+-0x1.1d1e4ep+4
+-0x1.18ceb4p+5
+-0x1.d78db4p+4
+-0x1.2fbdc6p+3
+-0x1.d78e9ep+4
+-0x1.53505p+3
+-0x1.30591ep+4
+-0x1.5353c2p+3
+-0x1.305882p+4
+-0x1.4635f6p+4
+-0x1.14e13ap+4
+-0x1.4636cap+4
+-0x1.14e13ap+4
+-0x1.f8421ep+2
+-0x1.14e18ep+4
+-0x1.f84356p+2
+-0x1.14e1d2p+4
+-0x1.60a8cep+3
+-0x1.14e2dp+4
+-0x1.60a6d4p+3
+-0x1.935dc2p+4
+-0x1.f8448ep+2
+-0x1.31aaap+4
+-0x1.2fbc56p+3
+-0x1.278a44p+4
+-0x1.09e4dp+5
+-0x1.31ab0ap+4
+-0x1.09e4f6p+5
+-0x1.31aa7p+4
+-0x1.09e4ep+5
+-0x1.60aa34p+3
+-0x1.f84fp+2
+-0x1.60a958p+3
+-0x1.f8508ep+2
+0x1.48a622p+3
+-0x1.11ce04p+4
+-0x1.1ea4bcp+4
+-0x1.690098p+1
+-0x1.32de98p+2
+0x1.48a8a4p+3
+0x1.48a5a4p+3
+-0x1.f305a2p+4
+-0x1.32de98p+2
+-0x1.f305ap+4
+-0x1.724cecp+1
+-0x1.299a6ap+4
+-0x1.724d64p+1
+-0x1.299a6ap+4
+0x1.1239bp-2
+0x1.0d0fbcp-2
+0x1.0d6868p-2
+0x1.fa0e58p-3
+0x1.18ef46p-2
+0x1.116408p-2
+0x0p+0
+0x1.1882dp-2
+0x1.00c136p-2
+0x1.4ceb82p-3
+0x1.68d70ap-3
+0x1.399a26p-7
+0x1.0bcd78p-5
+-0x1.48b364p-3
+-0x1.1a03aap-3
+-0x1.1b3b08p-2
+-0x1.0751fep-2
+-0x1.745e52p-2
+-0x1.68124p-2
+-0x1.e5827p-2
+-0x1.e354f4p-2
+0x0p+0
+-0x1.bf3404p+1
+-0x1.cff716p+3
+-0x1.bf2e1ap+1
+-0x1.1d1d58p+4
+-0x1.771174p-4
+-0x1.18cf5ap+5
+-0x1.75a61ep-4
+-0x1.d7dca2p+4
+-0x1.783582p-3
+-0x1.d78ceap+4
+-0x1.77ccacp-3
+-0x1.31aa7p+4
+-0x1.847f2p+1
+-0x1.53503ep+3
+-0x1.8485eep+1
+-0x1.4636cap+4
+-0x1.9164dp+1
+-0x1.14e12p+4
+-0x1.916e54p+1
+-0x1.935d88p+4
+-0x1.952826p-3
+-0x1.2fbd0ep+3
+-0x1.94d234p-3
+-0x1.09e4ep+5
+-0x1.a0f626p+1
+-0x1.30584ap+4
+-0x1.a0feb4p+1
+-0x1.60aabap+3
+-0x1.8f014cp+3
+-0x1.f84d84p+2
+-0x1.8f030ep+3
+-0x1.1ea452p+4
+-0x1.4b0d1cp+3
+-0x1.11cep+4
+-0x1.4b0bdap+3
+-0x1.68ff82p+1
+-0x1.730e6ep+1
+-0x1.299a6ep+4
+-0x1.7308c6p+1
+-0x1.f305b2p+4
+-0x1.50d2bp+0
+-0x1.724738p+1
+-0x1.50d786p+0
+-0x1.7249acp+1
+-0x1.50da84p+0
+0x1.f3d7a8p-3
+-0x1.50da84p+0
+0x1.094666p-2
+-0x1.50da84p+0
+0x1.094666p-2
+-0x1.50d1e4p+0
+0x1.0d619p-2
+-0x1.50d1e4p+0
+0x1.0d619p-2
+-0x1.50d1e4p+0
+0x1.683d28p+3
+-0x1.50d182p+0
+0x1.683d08p+3
+0x1.0cbd82p-2
+0x1.0d619p-2
+0x1.0cace8p-2
+0x1.0d5fp-2
+0x1.3e64e6p+2
+0x1.0d5268p-2
+0x1.3e64e6p+2
+0x1.0d5268p-2
+0x1.0923bep-2
+0x1.0d50f8p-2
+0x1.0923bep-2
+0x1.0d50f8p-2
+-0x1.cf5c2p+4
+0x1.12b0cap-2
+-0x1.8883dp+5
+0x1.1258b6p-2
+0x1.9aad48p+3
+0x1.12435cp-2
+0x1.9aabeep+3
+0x1.12512ap-2
+0x1.0cc154p-2
+0x1.1258bp-2
+0x1.0cc516p-2
+0x1.1259eap-2
+-0x1.b74266p+5
+0x1.18b6ccp-2
+-0x1.4bda8cp+0
+0x1.18ea1ap-2
+-0x1.4be014p+0
+0x1.18e9e8p-2
+-0x1.b74266p+5
+-0x1.cf5c2p+4
+-0x1.8883dp+5
+0x1.9aaeaep+3
+0x1.0cc516p-2
+0x1.9aaeaep+3
+0x1.0cc516p-2
+0x1.9aaeaep+3
+-0x1.cf5c2p+4
+-0x1.8883dp+5
+-0x1.3812a4p+5
+0x1.3e657ep+2
+-0x1.3812a4p+5
+0x1.3e657ep+2
+0x1.3e657ep+2
+0x1.0cd328p-2
+0x1.3e657ep+2
+0x1.0cd328p-2
+0x1.0923bep-2
+0x1.3e657ep+2
+0x1.0923bep-2
+0x1.3e657ep+2
+0x1.0923bep-2
+-0x1.3812a4p+5
+0x1.09251ap-2
+-0x1.3812aep+5
+-0x1.f305b2p+4
+0x1.f3d7a8p-3
+-0x1.f304f4p+4
+0x1.f83a62p-3
+-0x1.299a6ep+4
+0x1.f9a36p-3
+-0x1.299b44p+4
+0x1.fc0316p-3
+-0x1.f304fp+4
+0x1.47a37p-3
+-0x1.f3065p+4
+0x1.3f9028p-3
+-0x1.1ea452p+4
+0x1.3f9028p-3
+-0x1.11cep+4
+0x1.48db88p-3
+-0x1.11cfb4p+4
+0x1.5051cep-3
+-0x1.f84d84p+2
+0x1.649d8cp-7
+-0x1.f850e4p+2
+0x1.96c88ep-7
+-0x1.60aabap+3
+0x1.163a9ap-7
+-0x1.60a4e2p+3
+0x1.d535d6p-7
+-0x1.1ea5ap+4
+0x1.fd33d2p-7
+-0x1.60a538p+3
+-0x1.33c07ap-3
+-0x1.60a808p+3
+-0x1.3f9b22p-3
+-0x1.30584ap+4
+-0x1.437584p-3
+-0x1.305b18p+4
+-0x1.3e2b8ep-3
+-0x1.278a44p+4
+-0x1.14410ap-2
+-0x1.31aa7p+4
+-0x1.130814p-2
+-0x1.31ab96p+4
+-0x1.0fbb42p-2
+-0x1.d78ceap+4
+-0x1.0fd302p-2
+-0x1.1d1d58p+4
+-0x1.82f814p-2
+-0x1.1d1762p+4
+-0x1.736264p-2
+-0x1.cff716p+3
+-0x1.736264p-2
+-0x1.cff8fap+3
+-0x1.72ff24p-2
+-0x1.278a44p+4
+-0x1.73f018p-2
+-0x1.1d1762p+4
+-0x1.e3dc36p-2
+-0x1.1d1794p+4
+-0x1.e54128p-2
+-0x1.1d1794p+4
+-0x1.d7dca2p+4
+-0x1.1d1a48p+4
+-0x1.18cf5ap+5
+-0x1.1d1d5cp+4
+-0x1.18ce3ap+5
+-0x1.d78dc8p+4
+-0x1.2fbd0ep+3
+-0x1.d78ebp+4
+-0x1.53503ep+3
+-0x1.30588cp+4
+-0x1.5353aep+3
+-0x1.3057fp+4
+-0x1.4636cap+4
+-0x1.14e12p+4
+-0x1.4637ap+4
+-0x1.14e12p+4
+-0x1.f8415ep+2
+-0x1.14e174p+4
+-0x1.f84296p+2
+-0x1.14e1b8p+4
+-0x1.60a87cp+3
+-0x1.14e2b4p+4
+-0x1.60a686p+3
+-0x1.935d88p+4
+-0x1.f843cep+2
+-0x1.31aa76p+4
+-0x1.2fbba2p+3
+-0x1.278a44p+4
+-0x1.09e4ep+5
+-0x1.31aae2p+4
+-0x1.09e506p+5
+-0x1.31aa48p+4
+-0x1.09e4fp+5
+-0x1.60a9e6p+3
+-0x1.f84e24p+2
+-0x1.60a8fep+3
+-0x1.f84fc8p+2
+0x1.48a584p+3
+-0x1.11cd9ep+4
+-0x1.1ea3cep+4
+-0x1.68ff82p+1
+-0x1.32de98p+2
+0x1.48a7e4p+3
+0x1.48a4b8p+3
+-0x1.f3065p+4
+-0x1.32de98p+2
+-0x1.f3064ep+4
+-0x1.724b4ap+1
+-0x1.299ab2p+4
+-0x1.724c6cp+1
+-0x1.299ab2p+4
+0x1.1259eap-2
+0x1.0d50f8p-2
+0x1.0d87e4p-2
+0x1.fa4936p-3
+0x1.18e74ap-2
+0x1.1169ecp-2
+0x0p+0
+0x1.186ed6p-2
+0x1.00c93p-2
+0x1.4d3a9ap-3
+0x1.68e1aap-3
+0x1.2ace08p-7
+0x1.0a59ecp-5
+-0x1.485edp-3
+-0x1.19e1c4p-3
+-0x1.1b0678p-2
+-0x1.07458ap-2
+-0x1.749188p-2
+-0x1.6838fep-2
+-0x1.e54128p-2
+-0x1.e342d4p-2
+0x0p+0
+-0x1.bf364p+1
+-0x1.cff83ap+3
+-0x1.bf305ep+1
+-0x1.1d1c64p+4
+-0x1.768afp-4
+-0x1.18ceep+5
+-0x1.752038p-4
+-0x1.d7dc2ap+4
+-0x1.781e02p-3
+-0x1.d78cfep+4
+-0x1.77b9ecp-3
+-0x1.31aa48p+4
+-0x1.848174p+1
+-0x1.53502ap+3
+-0x1.84885cp+1
+-0x1.4637ap+4
+-0x1.9164ccp+1
+-0x1.14e104p+4
+-0x1.916e42p+1
+-0x1.935d4ep+4
+-0x1.9514d8p-3
+-0x1.2fbc5ep+3
+-0x1.94bf78p-3
+-0x1.09e4fp+5
+-0x1.a0f5ccp+1
+-0x1.3057b8p+4
+-0x1.a0fec8p+1
+-0x1.60aa68p+3
+-0x1.8f013p+3
+-0x1.f84caep+2
+-0x1.8f02fp+3
+-0x1.1ea362p+4
+-0x1.4b0c9ap+3
+-0x1.11cd9ap+4
+-0x1.4b0b64p+3
+-0x1.68fe64p+1
+-0x1.730fa4p+1
+-0x1.299ab6p+4
+-0x1.730a0ep+1
+-0x1.f3065ep+4
+-0x1.50d182p+0
+-0x1.72467cp+1
+-0x1.50d636p+0
+-0x1.7248ep+1
+-0x1.50d91ap+0
+0x1.f3a938p-3
+-0x1.50d91ap+0
+0x1.09251ap-2
+-0x1.50d91ap+0
+0x1.09251ap-2
+-0x1.50d17p+0
+0x1.0d695ep-2
+-0x1.50d17p+0
+0x1.0d695ep-2
+-0x1.50d17p+0
+0x1.683d08p+3
+-0x1.50d12p+0
+0x1.683ceep+3
+0x1.0cd328p-2
+0x1.0d695ep-2
+0x1.0cbea2p-2
+0x1.0d6632p-2
+0x1.3e657ep+2
+0x1.0d5912p-2
+0x1.3e657ep+2
+0x1.0d5912p-2
+0x1.090652p-2
+0x1.0d5714p-2
+0x1.090652p-2
+0x1.0d5714p-2
+-0x1.cf5c2p+4
+0x1.12a7d2p-2
+-0x1.8883dp+5
+0x1.124d4cp-2
+0x1.9aae3cp+3
+0x1.1237ccp-2
+0x1.9aacacp+3
+0x1.1247c8p-2
+0x1.0cd3ecp-2
+0x1.124f66p-2
+0x1.0cdd92p-2
+0x1.12528ap-2
+-0x1.b74266p+5
+0x1.18a6f4p-2
+-0x1.4bdd62p+0
+0x1.18db62p-2
+-0x1.4be32p+0
+0x1.18db2ep-2
+-0x1.b74266p+5
+-0x1.cf5c2p+4
+-0x1.8883dp+5
+0x1.9aaf74p+3
+0x1.0cdd92p-2
+0x1.9aaf74p+3
+0x1.0cdd92p-2
+0x1.9aaf74p+3
+-0x1.cf5c2p+4
+-0x1.8883dp+5
+-0x1.3812aep+5
+0x1.3e6652p+2
+-0x1.3812aep+5
+0x1.3e6652p+2
+0x1.3e6652p+2
+0x1.0cea9p-2
+0x1.3e6652p+2
+0x1.0cea9p-2
+0x1.090652p-2
+0x1.3e6652p+2
+0x1.090652p-2
+0x1.3e6652p+2
+0x1.090652p-2
+-0x1.3812aep+5
+0x1.09079ap-2
+-0x1.3812b8p+5
+-0x1.f3065ep+4
+0x1.f3a938p-3
+-0x1.f305ap+4
+0x1.f80faap-3
+-0x1.299ab6p+4
+0x1.f97968p-3
+-0x1.299b8cp+4
+0x1.fbd6c6p-3
+-0x1.f3059cp+4
+0x1.481092p-3
+-0x1.f306fcp+4
+0x1.3ffec8p-3
+-0x1.1ea362p+4
+0x1.3ffec8p-3
+-0x1.11cd9ap+4
+0x1.495206p-3
+-0x1.11cf4ap+4
+0x1.50b904p-3
+-0x1.f84caep+2
+0x1.5fc7a8p-7
+-0x1.f85008p+2
+0x1.91a61ep-7
+-0x1.60aa68p+3
+0x1.11bb9cp-7
+-0x1.60a492p+3
+0x1.d03d82p-7
+-0x1.1ea4b2p+4
+0x1.f86496p-7
+-0x1.60a4e8p+3
+-0x1.33ed88p-3
+-0x1.60a7b4p+3
+-0x1.3fbc58p-3
+-0x1.3057b8p+4
+-0x1.438ccap-3
+-0x1.305a86p+4
+-0x1.3e441ep-3
+-0x1.278a44p+4
+-0x1.143016p-2
+-0x1.31aa48p+4
+-0x1.12f828p-2
+-0x1.31ab6cp+4
+-0x1.0faccep-2
+-0x1.d78cfep+4
+-0x1.0fc4bcp-2
+-0x1.1d1c64p+4
+-0x1.8320d2p-2
+-0x1.1d166cp+4
+-0x1.738b14p-2
+-0x1.cff83ap+3
+-0x1.738b14p-2
+-0x1.cffa2p+3
+-0x1.732758p-2
+-0x1.278a44p+4
+-0x1.74190cp-2
+-0x1.1d166cp+4
+-0x1.e3ad68p-2
+-0x1.1d16ap+4
+-0x1.e51c4ep-2
+-0x1.1d16ap+4
+-0x1.d7dc2ap+4
+-0x1.1d1954p+4
+-0x1.18ceep+5
+-0x1.1d1c68p+4
+-0x1.18cdcp+5
+-0x1.d78ddcp+4
+-0x1.2fbc5ep+3
+-0x1.d78ecp+4
+-0x1.53502ap+3
+-0x1.3057fcp+4
+-0x1.535396p+3
+-0x1.305762p+4
+-0x1.4637ap+4
+-0x1.14e104p+4
+-0x1.463876p+4
+-0x1.14e104p+4
+-0x1.f84098p+2
+-0x1.14e158p+4
+-0x1.f841cep+2
+-0x1.14e19ap+4
+-0x1.60a826p+3
+-0x1.14e294p+4
+-0x1.60a632p+3
+-0x1.935d4ep+4
+-0x1.f84304p+2
+-0x1.31aa4cp+4
+-0x1.2fbaf6p+3
+-0x1.278a44p+4
+-0x1.09e4fp+5
+-0x1.31aabap+4
+-0x1.09e516p+5
+-0x1.31aa2p+4
+-0x1.09e5p+5
+-0x1.60a992p+3
+-0x1.f84d42p+2
+-0x1.60a8a6p+3
+-0x1.f84eeep+2
+0x1.48a494p+3
+-0x1.11cd36p+4
+-0x1.1ea2e6p+4
+-0x1.68fe64p+1
+-0x1.32de98p+2
+0x1.48a6dcp+3
+0x1.48a398p+3
+-0x1.f306fcp+4
+-0x1.32de98p+2
+-0x1.f306fap+4
+-0x1.724a7p+1
+-0x1.299afap+4
+-0x1.724c1ap+1
+-0x1.299af8p+4
+0x1.12528ap-2
+0x1.0d5714p-2
+0x1.0d969p-2
+0x1.fa1f5p-3
+0x1.18d886p-2
+0x1.116dd2p-2
+0x0p+0
+0x1.185d82p-2
+0x1.00be18p-2
+0x1.4da3dcp-3
+0x1.6918a8p-3
+0x1.282614p-7
+0x1.099cf4p-5
+-0x1.486c96p-3
+-0x1.19ed6p-3
+-0x1.1af7ccp-2
+-0x1.073eaap-2
+-0x1.74b80cp-2
+-0x1.685a9ap-2
+-0x1.e51c4ep-2
+-0x1.e32ee6p-2
+0x0p+0
+-0x1.bf38ap+1
+-0x1.cff96p+3
+-0x1.bf32aep+1
+-0x1.1d1b7p+4
+-0x1.760292p-4
+-0x1.18ce68p+5
+-0x1.749802p-4
+-0x1.d7dbb2p+4
+-0x1.7808f8p-3
+-0x1.d78d1p+4
+-0x1.77a51cp-3
+-0x1.31aa2p+4
+-0x1.84839p+1
+-0x1.535014p+3
+-0x1.848a94p+1
+-0x1.463876p+4
+-0x1.9164c2p+1
+-0x1.14e0e4p+4
+-0x1.916e3p+1
+-0x1.935d14p+4
+-0x1.95021cp-3
+-0x1.2fbbb4p+3
+-0x1.94ad06p-3
+-0x1.09e5p+5
+-0x1.a0f5b2p+1
+-0x1.30572ap+4
+-0x1.a0feb4p+1
+-0x1.60aa1p+3
+-0x1.8f0102p+3
+-0x1.f84bd2p+2
+-0x1.8f02c6p+3
+-0x1.1ea278p+4
+-0x1.4b0c22p+3
+-0x1.11cd32p+4
+-0x1.4b0aecp+3
+-0x1.68fd44p+1
+-0x1.731136p+1
+-0x1.299afcp+4
+-0x1.730b88p+1
+-0x1.f3070ap+4
+-0x1.50d12p+0
+0x1.683ceep+3
+0x1.0d78b8p-2
+0x1.12a558p-2
+0x1.1896dp-2
+0x0p+0
+-0x1.4be064p+0
+-0x1.b74266p+5
+0x1.9aaf0cp+3
+-0x1.8883dp+5
+-0x1.cf5c2p+4
+0x1.3e6652p+2
+-0x1.3812b8p+5
+0x1.0cea9p-2
+0x1.09079ap-2
+0x1.f37c5ep-3
+0x1.4838dp-3
+0x1.5d1fdap-7
+-0x1.33f8ap-3
+-0x1.14243ap-2
+-0x1.833dep-2
+-0x1.e38b0cp-2
+-0x1.cff96p+3
+-0x1.bf3af4p+1
+-0x1.1d1b7p+4
+-0x1.18ce68p+5
+-0x1.757a72p-4
+-0x1.d7dbb2p+4
+-0x1.d78d1p+4
+-0x1.77f3c4p-3
+-0x1.535014p+3
+-0x1.8485bcp+1
+-0x1.463876p+4
+-0x1.14e0e4p+4
+-0x1.9164bep+1
+-0x1.935d14p+4
+-0x1.2fbbb4p+3
+-0x1.94ef38p-3
+-0x1.09e5p+5
+-0x1.31aa2p+4
+-0x1.278a44p+4
+-0x1.30572ap+4
+-0x1.a0f5a2p+1
+-0x1.60aa1p+3
+-0x1.f84bd2p+2
+-0x1.8f00dap+3
+-0x1.11cd32p+4
+-0x1.4b0baap+3
+-0x1.68fd44p+1
+0x1.48a372p+3
+-0x1.32de98p+2
+-0x1.1ea278p+4
+-0x1.299afcp+4
+-0x1.7312bcp+1
+-0x1.f3070ap+4
+-0x1.724654p+1
+-0x1.5089cp+0
+0x1.6846c8p+3
+-0x1.7226bp+1
+0x1.48a9c6p+3
+0x1.0aa8f8p-2
+-0x1.38102p+5
+0x1.3e786ap+2
+0x1.0e27cp-2
+0x1.9ab92p+3
+-0x1.4b9eb2p+0
+-0x1.b73a1p+5
+-0x1.cf5fd8p+4
+-0x1.88812p+5
+-0x1.278ee4p+4
+-0x1.32cf26p+2
+-0x1.9190bcp+1
+-0x1.14e6d4p+4
+-0x1.936394p+4
+-0x1.7a31ep-3
+-0x1.d79408p+4
+-0x1.31af26p+4
+-0x1.bf67e6p+1
+-0x1.1d24ep+4
+-0x1.d00316p+3
+-0x1.7e84cap-4
+-0x1.18d31cp+5
+-0x1.d7e5a2p+4
+-0x1.9766e8p-3
+-0x1.2fc542p+3
+-0x1.09e718p+5
+-0x1.a12466p+1
+-0x1.305eaap+4
+-0x1.60b61ep+3
+-0x1.72edb2p+1
+-0x1.f30276p+4
+-0x1.2995d8p+4
+-0x1.84b27p+1
+-0x1.535f0ap+3
+-0x1.463bbep+4
+-0x1.8f11f2p+3
+-0x1.1eac4ap+4
+-0x1.f864a4p+2
+-0x1.4b08b8p+3
+-0x1.6853eep+1
+-0x1.11cafcp+4
+0x1.19a1fp-2
+0x1.13c782p-2
+0x1.0e9f62p-2
+0x1.f58124p-3
+0x1.492bc8p-3
+0x1.3c5a6ep-7
+-0x1.371b26p-3
+-0x1.157a3ep-2
+-0x1.846bc6p-2
+-0x1.e3c096p-2
+0x0p+0
+0x1.3c5a6ep-7
+0x0p+0
+0x1.5d1fdap-7
+0x0p+0
+0x1.1658f6p+2
+0x0p+0
+0x1.166c62p+2
+0x0p+0
+0x1.492bc8p-3
+0x0p+0
+0x1.4838dp-3
+0x0p+0
+0x1.8866dcp+2
+0x0p+0
+0x1.887ffp+2
+0x0p+0
+0x1.0aa8f8p-2
+0x0p+0
+0x1.09079ap-2
+0x0p+0
+0x1.a53398p+0
+0x0p+0
+0x1.a428d8p+0
+0x0p+0
+0x1.3f380ap+2
+0x0p+0
+0x1.3f279cp+2
+0x0p+0
+0x1.3a3e5cp+1
+0x0p+0
+0x1.3a5c1cp+1
+0x0p+0
+0x1.33d2cp+0
+0x0p+0
+0x1.337ccp+0
+0x0p+0
+0x1.82392p-2
+0x0p+0
+0x1.83612p-2
+0x0p+0
+0x1.8c25a2p+2
+0x0p+0
+0x1.8c49ccp+2
+0x0p+0
+0x1.ec2018p+0
+0x0p+0
+0x1.ecbf18p+0
+0x0p+0
+0x1.4c4ac8p+1
+0x0p+0
+0x1.4c9608p+1
+0x0p+0
+0x1.864e28p+2
+0x0p+0
+0x1.866018p+2
+0x0p+0
+0x1.81c24p+2
+0x0p+0
+0x1.81d658p+2
+0x0p+0
+0x1.0e9f62p-2
+0x0p+0
+0x1.0d78b8p-2
+0x0p+0
+0x1.072e88p+0
+0x0p+0
+0x1.07c588p+0
+0x0p+0
+0x1.f139b8p+0
+0x0p+0
+0x1.f1a938p+0
+0x0p+0
+0x1.64d786p+1
+0x0p+0
+0x1.650478p+1
+0x0p+0
+0x1.79d8fap+2
+0x0p+0
+0x1.79ebd8p+2
+0x0p+0
+0x1.80c812p+2
+0x0p+0
+0x1.80dd72p+2
+0x0p+0
+0x1.13c782p-2
+0x0p+0
+0x1.12a558p-2
+0x0p+0
+0x1.79d8fap+2
+0x0p+0
+0x1.79ebd8p+2
+-0x1.50d12p+0
+-0x1.299afcp+4
+-0x1.50d12p+0
+-0x1.724654p+1
+-0x1.50d12p+0
+0x1.f37c5ep-3
+-0x1.50d12p+0
+0x1.09079ap-2
+-0x1.50d12p+0
+0x1.0d78b8p-2
+-0x1.50d12p+0
+0x1.683ceep+3
+0x1.683ceep+3
+0x1.09079ap-2
+0x1.0cea9p-2
+0x1.0d78b8p-2
+0x1.3e6652p+2
+0x1.0d78b8p-2
+0x1.09079ap-2
+0x1.0d78b8p-2
+-0x1.cf5c2p+4
+0x1.12a558p-2
+-0x1.8883dp+5
+0x1.12a558p-2
+0x1.9aaf0cp+3
+0x1.12a558p-2
+0x1.0cea9p-2
+0x1.12a558p-2
+-0x1.b74266p+5
+0x1.1896dp-2
+-0x1.4be064p+0
+0x1.1896dp-2
+-0x1.b74266p+5
+-0x1.cf5c2p+4
+-0x1.8883dp+5
+0x1.9aaf0cp+3
+0x1.0cea9p-2
+0x1.9aaf0cp+3
+-0x1.cf5c2p+4
+-0x1.8883dp+5
+-0x1.3812b8p+5
+0x1.3e6652p+2
+0x1.3e6652p+2
+0x1.0cea9p-2
+0x1.09079ap-2
+0x1.3e6652p+2
+0x1.09079ap-2
+-0x1.3812b8p+5
+-0x1.f3070ap+4
+0x1.f37c5ep-3
+-0x1.299afcp+4
+0x1.f37c5ep-3
+-0x1.f3070ap+4
+0x1.4838dp-3
+-0x1.1ea278p+4
+0x1.4838dp-3
+-0x1.11cd32p+4
+0x1.4838dp-3
+-0x1.f84bd2p+2
+0x1.5d1fdap-7
+-0x1.60aa1p+3
+0x1.5d1fdap-7
+-0x1.1ea278p+4
+0x1.5d1fdap-7
+-0x1.60aa1p+3
+-0x1.33f8ap-3
+-0x1.30572ap+4
+-0x1.33f8ap-3
+-0x1.278a44p+4
+-0x1.14243ap-2
+-0x1.31aa2p+4
+-0x1.14243ap-2
+-0x1.d78d1p+4
+-0x1.14243ap-2
+-0x1.1d1b7p+4
+-0x1.833dep-2
+-0x1.cff96p+3
+-0x1.833dep-2
+-0x1.278a44p+4
+-0x1.833dep-2
+-0x1.1d1b7p+4
+-0x1.e38b0cp-2
+-0x1.1d1b7p+4
+-0x1.d7dbb2p+4
+-0x1.1d1b7p+4
+-0x1.18ce68p+5
+-0x1.d78d1p+4
+-0x1.2fbbb4p+3
+-0x1.d78d1p+4
+-0x1.535014p+3
+-0x1.30572ap+4
+-0x1.535014p+3
+-0x1.30572ap+4
+-0x1.463876p+4
+-0x1.14e0e4p+4
+-0x1.463876p+4
+-0x1.14e0e4p+4
+-0x1.f84bd2p+2
+-0x1.14e0e4p+4
+-0x1.60aa1p+3
+-0x1.935d14p+4
+-0x1.f84bd2p+2
+-0x1.31aa2p+4
+-0x1.2fbbb4p+3
+-0x1.278a44p+4
+-0x1.09e5p+5
+-0x1.31aa2p+4
+-0x1.09e5p+5
+-0x1.60aa1p+3
+-0x1.f84bd2p+2
+0x1.48a372p+3
+-0x1.11cd32p+4
+-0x1.1ea278p+4
+-0x1.68fd44p+1
+-0x1.32de98p+2
+0x1.48a372p+3
+0x1.48a372p+3
+-0x1.f3070ap+4
+-0x1.32de98p+2
+-0x1.f3070ap+4
+-0x1.724654p+1
+-0x1.299afcp+4
+0x1.0d78b8p-2
+0x1.12a558p-2
+0x1.f37c5ep-3
+0x1.0d78b8p-2
+0x1.12a558p-2
+0x1.1896dp-2
+0x1.1896dp-2
+0x0p+0
+0x1.4838dp-3
+0x1.f37c5ep-3
+0x1.5d1fdap-7
+0x1.4838dp-3
+-0x1.33f8ap-3
+0x1.5d1fdap-7
+-0x1.14243ap-2
+-0x1.33f8ap-3
+-0x1.833dep-2
+-0x1.14243ap-2
+-0x1.e38b0cp-2
+-0x1.833dep-2
+0x0p+0
+-0x1.e38b0cp-2
+-0x1.cff96p+3
+-0x1.bf3af4p+1
+-0x1.1d1b7p+4
+-0x1.bf3af4p+1
+-0x1.18ce68p+5
+-0x1.757a72p-4
+-0x1.d7dbb2p+4
+-0x1.757a72p-4
+-0x1.d78d1p+4
+-0x1.77f3c4p-3
+-0x1.31aa2p+4
+-0x1.77f3c4p-3
+-0x1.535014p+3
+-0x1.8485bcp+1
+-0x1.463876p+4
+-0x1.8485bcp+1
+-0x1.14e0e4p+4
+-0x1.9164bep+1
+-0x1.935d14p+4
+-0x1.9164bep+1
+-0x1.2fbbb4p+3
+-0x1.94ef38p-3
+-0x1.09e5p+5
+-0x1.94ef38p-3
+-0x1.30572ap+4
+-0x1.a0f5a2p+1
+-0x1.60aa1p+3
+-0x1.a0f5a2p+1
+-0x1.f84bd2p+2
+-0x1.8f00dap+3
+-0x1.1ea278p+4
+-0x1.8f00dap+3
+-0x1.11cd32p+4
+-0x1.4b0baap+3
+-0x1.68fd44p+1
+-0x1.4b0baap+3
+-0x1.f3070ap+4
+-0x1.7312bcp+1
+-0x1.299afcp+4
+-0x1.7312bcp+1
+-0x1.5108bap+0
+-0x1.299eaap+4
+-0x1.5108bap+0
+-0x1.7263cap+1
+-0x1.5108bap+0
+-0x1.7263cap+1
+-0x1.5108bap+0
+0x1.f1af5p-3
+-0x1.5108bap+0
+0x1.07dd02p-2
+-0x1.5108bap+0
+0x1.07dd02p-2
+-0x1.510104p+0
+0x1.0c1414p-2
+-0x1.510104p+0
+0x1.0c1414p-2
+-0x1.510104p+0
+0x1.6835fap+3
+-0x1.5100dcp+0
+0x1.6835ecp+3
+0x1.6835ecp+3
+0x1.07be0ep-2
+0x1.0b8538p-2
+0x1.0c1414p-2
+0x1.0b8246p-2
+0x1.0c13ap-2
+0x1.3e53dp+2
+0x1.0c0c22p-2
+0x1.3e53dp+2
+0x1.0c0c22p-2
+0x1.07be0ep-2
+0x1.0c0c22p-2
+0x1.07be0ep-2
+0x1.0c0c22p-2
+-0x1.cf574ep+4
+0x1.112f1ap-2
+-0x1.8886f8p+5
+0x1.10f2bep-2
+0x1.9aa35ep+3
+0x1.10dcdcp-2
+0x1.9aa1d2p+3
+0x1.10ecaep-2
+0x1.0b8e7ep-2
+0x1.10f43ep-2
+0x1.0b962ep-2
+0x1.10f6bep-2
+-0x1.b74be6p+5
+0x1.17beep-2
+-0x1.4c166p+0
+0x1.17f47cp-2
+-0x1.4c1c4ep+0
+0x1.17f446p-2
+-0x1.b74be6p+5
+-0x1.cf574ep+4
+-0x1.8886f8p+5
+0x1.9aa496p+3
+0x1.0b962ep-2
+0x1.9aa496p+3
+0x1.0b962ep-2
+0x1.9aa496p+3
+-0x1.cf574ep+4
+-0x1.8886f8p+5
+-0x1.38150ep+5
+0x1.3e53dp+2
+-0x1.38150ep+5
+0x1.3e53dp+2
+0x1.3e53dp+2
+0x1.0bab92p-2
+0x1.3e53dp+2
+0x1.0bab92p-2
+0x1.07be0ep-2
+0x1.3e53dp+2
+0x1.07be0ep-2
+0x1.3e53dp+2
+0x1.07be0ep-2
+-0x1.38150ep+5
+0x1.07bf42p-2
+-0x1.381516p+5
+-0x1.f30a78p+4
+0x1.f1af5p-3
+-0x1.f309bap+4
+0x1.f618aep-3
+-0x1.299eaap+4
+0x1.f78204p-3
+-0x1.299f7ep+4
+0x1.f9de9p-3
+-0x1.f309b6p+4
+0x1.45e2acp-3
+-0x1.f30b0ep+4
+0x1.3e025p-3
+-0x1.1e9cc8p+4
+0x1.3e025p-3
+-0x1.11d1bep+4
+0x1.473468p-3
+-0x1.11d36ep+4
+0x1.4e9952p-3
+-0x1.f834e4p+2
+0x1.a0f532p-7
+-0x1.f83834p+2
+0x1.d2307p-7
+-0x1.609e98p+3
+0x1.511b8p-7
+-0x1.6098cap+3
+0x1.074874p-6
+-0x1.1e9e14p+4
+0x1.1a4f6ap-6
+-0x1.60991cp+3
+-0x1.30fc72p-3
+-0x1.609be4p+3
+-0x1.3cba42p-3
+-0x1.30515cp+4
+-0x1.408372p-3
+-0x1.30542ap+4
+-0x1.3b3bc2p-3
+-0x1.278556p+4
+-0x1.13292p-2
+-0x1.31a58cp+4
+-0x1.11f002p-2
+-0x1.31a6bp+4
+-0x1.0ea42cp-2
+-0x1.d786b4p+4
+-0x1.0ebbbp-2
+-0x1.1d151ep+4
+-0x1.81a31ap-2
+-0x1.1d0f26p+4
+-0x1.72108cp-2
+-0x1.cfecf6p+3
+-0x1.72108cp-2
+-0x1.cfeeep+3
+-0x1.71ac44p-2
+-0x1.278556p+4
+-0x1.72a19ap-2
+-0x1.1d0f26p+4
+-0x1.e3efep-2
+-0x1.1d0f58p+4
+-0x1.e558a2p-2
+-0x1.1d0f58p+4
+-0x1.d7d338p+4
+-0x1.1d120ep+4
+-0x1.18cb4p+5
+-0x1.1d1524p+4
+-0x1.18ca2p+5
+-0x1.d7879p+4
+-0x1.2fb41ap+3
+-0x1.d7887ap+4
+-0x1.53430ep+3
+-0x1.3051a2p+4
+-0x1.53467cp+3
+-0x1.305108p+4
+-0x1.46319cp+4
+-0x1.14db3p+4
+-0x1.463272p+4
+-0x1.14db3p+4
+-0x1.f828aap+2
+-0x1.14db84p+4
+-0x1.f829e6p+2
+-0x1.14dbc8p+4
+-0x1.609c56p+3
+-0x1.14dccp+4
+-0x1.609a68p+3
+-0x1.9357bp+4
+-0x1.f82b24p+2
+-0x1.31a594p+4
+-0x1.2fb2aap+3
+-0x1.278556p+4
+-0x1.09e2b6p+5
+-0x1.31a5fcp+4
+-0x1.09e2dcp+5
+-0x1.31a562p+4
+-0x1.09e2c6p+5
+-0x1.609dc8p+3
+-0x1.f83556p+2
+-0x1.609cdcp+3
+-0x1.f837p+2
+0x1.489e3ep+3
+-0x1.11d15cp+4
+-0x1.1e9c4ep+4
+-0x1.69a054p+1
+-0x1.32fdaep+2
+0x1.48a0fcp+3
+0x1.489e7p+3
+-0x1.f30b0ep+4
+-0x1.32fdaep+2
+-0x1.f30b0cp+4
+-0x1.7263cap+1
+-0x1.299eecp+4
+-0x1.72665ap+1
+-0x1.299eeap+4
+0x1.10f6bep-2
+0x1.0c0c22p-2
+0x1.0c5852p-2
+0x1.f82756p-3
+0x1.17f198p-2
+0x1.1025e4p-2
+0x0p+0
+0x1.177cb6p-2
+0x1.ff4aa6p-3
+0x1.4b84aap-3
+0x1.67362cp-3
+0x1.66e05ap-7
+0x1.13ac3cp-5
+-0x1.45604ep-3
+-0x1.16ed06p-3
+-0x1.19ee7ep-2
+-0x1.061854p-2
+-0x1.733e0ep-2
+-0x1.66ed46p-2
+-0x1.e558a2p-2
+-0x1.e315cap-2
+0x0p+0
+-0x1.bf0a3p+1
+-0x1.cfee1cp+3
+-0x1.bf042ep+1
+-0x1.1d142cp+4
+-0x1.6e2f54p-4
+-0x1.18cac8p+5
+-0x1.6cc43ap-4
+-0x1.d7d2bep+4
+-0x1.75f1cp-3
+-0x1.d786c8p+4
+-0x1.758b76p-3
+-0x1.31a562p+4
+-0x1.8451d8p+1
+-0x1.5342fcp+3
+-0x1.8458d4p+1
+-0x1.463272p+4
+-0x1.9137p+1
+-0x1.14db1p+4
+-0x1.91406p+1
+-0x1.935776p+4
+-0x1.92b0d2p-3
+-0x1.2fb36p+3
+-0x1.925caap-3
+-0x1.09e2c6p+5
+-0x1.a0c198p+1
+-0x1.3050dp+4
+-0x1.a0ca6ap+1
+-0x1.609e42p+3
+-0x1.8eeef6p+3
+-0x1.f833fp+2
+-0x1.8ef0b6p+3
+-0x1.1e9be2p+4
+-0x1.4b0df8p+3
+-0x1.11d158p+4
+-0x1.4b0cdcp+3
+-0x1.699f4p+1
+-0x1.733066p+1
+-0x1.f30b1cp+4
+-0x1.7334fcp+1
+-0x1.299eeep+4
+-0x1.5100dcp+0
+-0x1.299eeep+4
+-0x1.5100dcp+0
+-0x1.72611cp+1
+-0x1.5100dcp+0
+-0x1.72611cp+1
+-0x1.5100dcp+0
+0x1.f1e8b6p-3
+-0x1.5100dcp+0
+0x1.07bf42p-2
+-0x1.5100dcp+0
+0x1.07bf42p-2
+-0x1.50faaep+0
+0x1.0c38c4p-2
+-0x1.50faaep+0
+0x1.0c38c4p-2
+-0x1.50faaep+0
+0x1.6835ecp+3
+-0x1.50faa2p+0
+0x1.6835e8p+3
+0x1.6835e8p+3
+0x1.07a674p-2
+0x1.0bab92p-2
+0x1.0c38c4p-2
+0x1.0b9b8cp-2
+0x1.0c364cp-2
+0x1.3e53dp+2
+0x1.0c2af2p-2
+0x1.3e53dp+2
+0x1.0c2af2p-2
+0x1.07a674p-2
+0x1.0c2a94p-2
+0x1.07a674p-2
+0x1.0c2a94p-2
+-0x1.cf574ep+4
+0x1.1173e2p-2
+-0x1.8886f8p+5
+0x1.112abap-2
+0x1.9aa3eap+3
+0x1.11145cp-2
+0x1.9aa296p+3
+0x1.1121eap-2
+0x1.0bae1p-2
+0x1.112946p-2
+0x1.0baf98p-2
+0x1.1129c6p-2
+-0x1.b74be6p+5
+0x1.17b67ap-2
+-0x1.4c198cp+0
+0x1.17ec4ap-2
+-0x1.4c1f8cp+0
+0x1.17ec12p-2
+-0x1.b74be6p+5
+-0x1.cf574ep+4
+-0x1.8886f8p+5
+0x1.9aa548p+3
+0x1.0baf98p-2
+0x1.9aa548p+3
+0x1.0baf98p-2
+0x1.9aa548p+3
+-0x1.cf574ep+4
+-0x1.8886f8p+5
+-0x1.381516p+5
+0x1.3e53f8p+2
+-0x1.381516p+5
+0x1.3e53f8p+2
+0x1.3e53f8p+2
+0x1.0bc32p-2
+0x1.3e53f8p+2
+0x1.0bc32p-2
+0x1.07a674p-2
+0x1.3e53f8p+2
+0x1.07a674p-2
+0x1.3e53f8p+2
+0x1.07a674p-2
+-0x1.381516p+5
+0x1.07a798p-2
+-0x1.38151ep+5
+-0x1.f30b1cp+4
+0x1.f1e8b6p-3
+-0x1.f30a6p+4
+0x1.f640ep-3
+-0x1.299eeep+4
+0x1.f7981ap-3
+-0x1.299fcp+4
+0x1.f9ea5ap-3
+-0x1.f30a5cp+4
+0x1.469e36p-3
+-0x1.f30bb6p+4
+0x1.3eb064p-3
+-0x1.1e9be2p+4
+0x1.3eb064p-3
+-0x1.11d158p+4
+0x1.47f9a8p-3
+-0x1.11d304p+4
+0x1.4f4d9ep-3
+-0x1.f833fp+2
+0x1.8b6286p-7
+-0x1.f83744p+2
+0x1.bce1cap-7
+-0x1.609e42p+3
+0x1.3d6822p-7
+-0x1.609872p+3
+0x1.fb0688p-7
+-0x1.1e9d34p+4
+0x1.116ff6p-6
+-0x1.6098c8p+3
+-0x1.30c33ap-3
+-0x1.609b92p+3
+-0x1.3c84e4p-3
+-0x1.3050dp+4
+-0x1.4051cp-3
+-0x1.30539ep+4
+-0x1.3b0d2ep-3
+-0x1.278556p+4
+-0x1.12efe6p-2
+-0x1.31a562p+4
+-0x1.11bbeep-2
+-0x1.31a686p+4
+-0x1.0e743cp-2
+-0x1.d786c8p+4
+-0x1.0e8c1cp-2
+-0x1.1d142cp+4
+-0x1.81dcb8p-2
+-0x1.1d0e32p+4
+-0x1.724966p-2
+-0x1.cfee1cp+3
+-0x1.724966p-2
+-0x1.cff008p+3
+-0x1.71e4eap-2
+-0x1.278556p+4
+-0x1.72d8bep-2
+-0x1.1d0e32p+4
+-0x1.e39ca8p-2
+-0x1.1d0e68p+4
+-0x1.e5190ep-2
+-0x1.1d0e68p+4
+-0x1.d7d2bep+4
+-0x1.1d112p+4
+-0x1.18cac8p+5
+-0x1.1d1436p+4
+-0x1.18c9a8p+5
+-0x1.d787a6p+4
+-0x1.2fb36p+3
+-0x1.d7888cp+4
+-0x1.5342fcp+3
+-0x1.305118p+4
+-0x1.53466ap+3
+-0x1.30507ep+4
+-0x1.463272p+4
+-0x1.14db1p+4
+-0x1.463348p+4
+-0x1.14db1p+4
+-0x1.f827ecp+2
+-0x1.14db64p+4
+-0x1.f82926p+2
+-0x1.14dba8p+4
+-0x1.609c04p+3
+-0x1.14dc9ep+4
+-0x1.609a18p+3
+-0x1.935776p+4
+-0x1.f82a64p+2
+-0x1.31a568p+4
+-0x1.2fb1f6p+3
+-0x1.278556p+4
+-0x1.09e2c6p+5
+-0x1.31a5d4p+4
+-0x1.09e2ecp+5
+-0x1.31a53ap+4
+-0x1.09e2d6p+5
+-0x1.609d78p+3
+-0x1.f83482p+2
+-0x1.609c8ap+3
+-0x1.f83634p+2
+0x1.489e48p+3
+-0x1.11d0fp+4
+-0x1.1e9b78p+4
+-0x1.699f4p+1
+-0x1.32fdaep+2
+0x1.48a0dp+3
+0x1.489df6p+3
+-0x1.f30bb6p+4
+-0x1.32fdaep+2
+-0x1.f30bb4p+4
+-0x1.72611cp+1
+-0x1.299f3p+4
+-0x1.72644cp+1
+-0x1.299f2ep+4
+0x1.1129c6p-2
+0x1.0c2a94p-2
+0x1.0c602cp-2
+0x1.f83664p-3
+0x1.17e92ap-2
+0x1.103db4p-2
+0x0p+0
+0x1.176368p-2
+0x1.ff5eccp-3
+0x1.4c35bp-3
+0x1.6773d8p-3
+0x1.599dbp-7
+0x1.11cdaap-5
+-0x1.452d12p-3
+-0x1.16dd64p-3
+-0x1.19c378p-2
+-0x1.060bfap-2
+-0x1.73709ap-2
+-0x1.671496p-2
+-0x1.e5190ep-2
+-0x1.e3026cp-2
+0x0p+0
+-0x1.bf0c5cp+1
+-0x1.cfef46p+3
+-0x1.bf067p+1
+-0x1.1d133ep+4
+-0x1.6da9e2p-4
+-0x1.18ca5p+5
+-0x1.6c3ddp-4
+-0x1.d7d244p+4
+-0x1.75da58p-3
+-0x1.d786dap+4
+-0x1.75771p-3
+-0x1.31a53ap+4
+-0x1.845422p+1
+-0x1.5342ecp+3
+-0x1.845b18p+1
+-0x1.463348p+4
+-0x1.9136f2p+1
+-0x1.14daeep+4
+-0x1.914052p+1
+-0x1.93573ep+4
+-0x1.929e1cp-3
+-0x1.2fb2bp+3
+-0x1.924992p-3
+-0x1.09e2d6p+5
+-0x1.a0c184p+1
+-0x1.305046p+4
+-0x1.a0ca74p+1
+-0x1.609dfp+3
+-0x1.8eeedcp+3
+-0x1.f83322p+2
+-0x1.8ef09ap+3
+-0x1.1e9b0ap+4
+-0x1.4b0d86p+3
+-0x1.11d0ecp+4
+-0x1.4b0c5ap+3
+-0x1.699e2cp+1
+-0x1.732db8p+1
+-0x1.f30bc4p+4
+-0x1.73356p+1
+-0x1.299f32p+4
+-0x1.50faa2p+0
+-0x1.299f32p+4
+-0x1.50faa2p+0
+-0x1.725f8ap+1
+-0x1.50faa2p+0
+-0x1.725f8ap+1
+-0x1.50faa2p+0
+0x1.f19f76p-3
+-0x1.50faa2p+0
+0x1.07a798p-2
+-0x1.50faa2p+0
+0x1.07a798p-2
+-0x1.50f5aep+0
+0x1.0c40e2p-2
+-0x1.50f5aep+0
+0x1.0c40e2p-2
+-0x1.50f5aep+0
+0x1.6835e8p+3
+-0x1.50f5aep+0
+0x1.6835e8p+3
+0x1.6835e8p+3
+0x1.0793b8p-2
+0x1.0bc32p-2
+0x1.0c40e2p-2
+0x1.0bae44p-2
+0x1.0c3daap-2
+0x1.3e53f8p+2
+0x1.0c3194p-2
+0x1.3e53f8p+2
+0x1.0c3194p-2
+0x1.0793b8p-2
+0x1.0c3074p-2
+0x1.0793b8p-2
+0x1.0c3074p-2
+-0x1.cf574ep+4
+0x1.117404p-2
+-0x1.8886f8p+5
+0x1.1126e8p-2
+0x1.9aa4aap+3
+0x1.11107p-2
+0x1.9aa32ep+3
+0x1.111f94p-2
+0x1.0bc1f8p-2
+0x1.11270cp-2
+0x1.0bc82ep-2
+0x1.112912p-2
+-0x1.b74be6p+5
+0x1.17a288p-2
+-0x1.4c1c8ep+0
+0x1.17da38p-2
+-0x1.4c22f4p+0
+0x1.17d9fep-2
+-0x1.b74be6p+5
+-0x1.cf574ep+4
+-0x1.8886f8p+5
+0x1.9aa5eap+3
+0x1.0bc82ep-2
+0x1.9aa5eap+3
+0x1.0bc82ep-2
+0x1.9aa5eap+3
+-0x1.cf574ep+4
+-0x1.8886f8p+5
+-0x1.38151ep+5
+0x1.3e547p+2
+-0x1.38151ep+5
+0x1.3e547p+2
+0x1.3e547p+2
+0x1.0bd9eep-2
+0x1.3e547p+2
+0x1.0bd9eep-2
+0x1.079684p-2
+0x1.3e547p+2
+0x1.079684p-2
+0x1.3e547p+2
+0x1.079684p-2
+-0x1.38151ep+5
+0x1.079794p-2
+-0x1.381526p+5
+-0x1.f30bc4p+4
+0x1.f19f76p-3
+-0x1.f30b06p+4
+0x1.f5ffb4p-3
+-0x1.299f32p+4
+0x1.f75bf4p-3
+-0x1.29a004p+4
+0x1.f9ad5p-3
+-0x1.f30b02p+4
+0x1.471496p-3
+-0x1.f30c5cp+4
+0x1.3f28eep-3
+-0x1.1e9b0ap+4
+0x1.3f28eep-3
+-0x1.11d0ecp+4
+0x1.487b3cp-3
+-0x1.11d294p+4
+0x1.4fbd36p-3
+-0x1.f83322p+2
+0x1.852c2ep-7
+-0x1.f83674p+2
+0x1.b6737ap-7
+-0x1.609dfp+3
+0x1.37a0c6p-7
+-0x1.60982p+3
+0x1.f4dbeep-7
+-0x1.1e9c5ep+4
+0x1.0e84aap-6
+-0x1.609876p+3
+-0x1.30d994p-3
+-0x1.609b3ep+3
+-0x1.3c959p-3
+-0x1.305046p+4
+-0x1.405d7ep-3
+-0x1.305314p+4
+-0x1.3b18f2p-3
+-0x1.278556p+4
+-0x1.12e08cp-2
+-0x1.31a53ap+4
+-0x1.11ad78p-2
+-0x1.31a65ep+4
+-0x1.0e673cp-2
+-0x1.d786dap+4
+-0x1.0e7f48p-2
+-0x1.1d133ep+4
+-0x1.82054cp-2
+-0x1.1d0d42p+4
+-0x1.7271d6p-2
+-0x1.cfef46p+3
+-0x1.7271d6p-2
+-0x1.cff134p+3
+-0x1.720ce6p-2
+-0x1.278556p+4
+-0x1.730196p-2
+-0x1.1d0d42p+4
+-0x1.e36ebp-2
+-0x1.1d0d78p+4
+-0x1.e4f4b4p-2
+-0x1.1d0d78p+4
+-0x1.d7d244p+4
+-0x1.1d102ep+4
+-0x1.18ca5p+5
+-0x1.1d1346p+4
+-0x1.18c92ep+5
+-0x1.d787b8p+4
+-0x1.2fb2bp+3
+-0x1.d7889cp+4
+-0x1.5342ecp+3
+-0x1.30509p+4
+-0x1.53465ap+3
+-0x1.304ff6p+4
+-0x1.463348p+4
+-0x1.14daeep+4
+-0x1.46341ep+4
+-0x1.14daeep+4
+-0x1.f82734p+2
+-0x1.14db42p+4
+-0x1.f8286cp+2
+-0x1.14db86p+4
+-0x1.609bbp+3
+-0x1.14dc7ap+4
+-0x1.6099c6p+3
+-0x1.93573ep+4
+-0x1.f829a6p+2
+-0x1.31a542p+4
+-0x1.2fb14ap+3
+-0x1.278556p+4
+-0x1.09e2d6p+5
+-0x1.31a5aep+4
+-0x1.09e2fap+5
+-0x1.31a514p+4
+-0x1.09e2e4p+5
+-0x1.609d26p+3
+-0x1.f833bp+2
+-0x1.609c38p+3
+-0x1.f8356p+2
+0x1.489dccp+3
+-0x1.11d084p+4
+-0x1.1e9aa8p+4
+-0x1.699e2cp+1
+-0x1.32fdaep+2
+0x1.48a02ep+3
+0x1.489d24p+3
+-0x1.f30c5cp+4
+-0x1.32fdaep+2
+-0x1.f30c5ap+4
+-0x1.725f8ap+1
+-0x1.299f74p+4
+-0x1.72633cp+1
+-0x1.299f72p+4
+0x1.112912p-2
+0x1.0c30b4p-2
+0x1.0c6cd6p-2
+0x1.f7fc5p-3
+0x1.17d702p-2
+0x1.104498p-2
+0x0p+0
+0x1.17507ap-2
+0x1.ff411ap-3
+0x1.4ca7fp-3
+0x1.67b434p-3
+0x1.564daap-7
+0x1.10ddb8p-5
+-0x1.45317p-3
+-0x1.16edbap-3
+-0x1.19b5eap-2
+-0x1.0604a6p-2
+-0x1.73972p-2
+-0x1.6736d4p-2
+-0x1.e4f4b4p-2
+-0x1.e2efp-2
+0x0p+0
+-0x1.bf0eb2p+1
+-0x1.cff072p+3
+-0x1.bf08bap+1
+-0x1.1d124cp+4
+-0x1.6d20b8p-4
+-0x1.18c9d6p+5
+-0x1.6bb4fep-4
+-0x1.d7d1ccp+4
+-0x1.75c55ep-3
+-0x1.d786eap+4
+-0x1.7561b4p-3
+-0x1.31a514p+4
+-0x1.845648p+1
+-0x1.5342dep+3
+-0x1.845d44p+1
+-0x1.46341ep+4
+-0x1.9136fcp+1
+-0x1.14dacap+4
+-0x1.91404cp+1
+-0x1.935706p+4
+-0x1.928b4cp-3
+-0x1.2fb206p+3
+-0x1.9236ecp-3
+-0x1.09e2e4p+5
+-0x1.a0c17p+1
+-0x1.304fbep+4
+-0x1.a0ca68p+1
+-0x1.609d9ap+3
+-0x1.8eeeb6p+3
+-0x1.f83256p+2
+-0x1.8ef076p+3
+-0x1.1e9a3ap+4
+-0x1.4b0d16p+3
+-0x1.11d08p+4
+-0x1.4b0be6p+3
+-0x1.699d16p+1
+-0x1.732f9p+1
+-0x1.f30c6ap+4
+-0x1.7336bap+1
+-0x1.299f74p+4
+-0x1.50f5aep+0
+0x1.6835e8p+3
+0x1.0c50d2p-2
+0x1.11751ap-2
+0x1.178fc4p-2
+0x0p+0
+-0x1.4c1fe2p+0
+-0x1.b74be6p+5
+0x1.9aa55cp+3
+-0x1.8886f8p+5
+-0x1.cf574ep+4
+0x1.3e547p+2
+-0x1.381526p+5
+0x1.0bd9eep-2
+0x1.079794p-2
+0x1.f170c4p-3
+0x1.473dfap-3
+0x1.81fd9ep-7
+-0x1.30e164p-3
+-0x1.12d4fap-2
+-0x1.8221acp-2
+-0x1.e34cfep-2
+-0x1.cff072p+3
+-0x1.bf1102p+1
+-0x1.1d124cp+4
+-0x1.18c9d6p+5
+-0x1.6c97fcp-4
+-0x1.d7d1ccp+4
+-0x1.d786eap+4
+-0x1.75afd2p-3
+-0x1.5342dep+3
+-0x1.84587p+1
+-0x1.46341ep+4
+-0x1.14dacap+4
+-0x1.913708p+1
+-0x1.935706p+4
+-0x1.2fb206p+3
+-0x1.927884p-3
+-0x1.09e2e4p+5
+-0x1.31a514p+4
+-0x1.278556p+4
+-0x1.304fbep+4
+-0x1.a0c15ep+1
+-0x1.609d9ap+3
+-0x1.f83256p+2
+-0x1.8eee94p+3
+-0x1.11d08p+4
+-0x1.4b0ca2p+3
+-0x1.699d16p+1
+0x1.489cf8p+3
+-0x1.32fdaep+2
+-0x1.1e9a3ap+4
+-0x1.f30c6ap+4
+-0x1.73311cp+1
+-0x1.725edp+1
+-0x1.299f74p+4
+-0x1.50d12p+0
+0x1.683ceep+3
+-0x1.724654p+1
+0x1.48a372p+3
+0x1.09079ap-2
+-0x1.3812b8p+5
+0x1.3e6652p+2
+0x1.0cea9p-2
+0x1.9aaf0cp+3
+-0x1.4be064p+0
+-0x1.b74266p+5
+-0x1.cf5c2p+4
+-0x1.8883dp+5
+-0x1.278a44p+4
+-0x1.32de98p+2
+-0x1.9164bep+1
+-0x1.14e0e4p+4
+-0x1.935d14p+4
+-0x1.77f3c4p-3
+-0x1.d78d1p+4
+-0x1.31aa2p+4
+-0x1.bf3af4p+1
+-0x1.1d1b7p+4
+-0x1.cff96p+3
+-0x1.757a72p-4
+-0x1.18ce68p+5
+-0x1.d7dbb2p+4
+-0x1.94ef38p-3
+-0x1.2fbbb4p+3
+-0x1.09e5p+5
+-0x1.a0f5a2p+1
+-0x1.30572ap+4
+-0x1.60aa1p+3
+-0x1.7312bcp+1
+-0x1.f3070ap+4
+-0x1.299afcp+4
+-0x1.8485bcp+1
+-0x1.535014p+3
+-0x1.463876p+4
+-0x1.8f00dap+3
+-0x1.1ea278p+4
+-0x1.f84bd2p+2
+-0x1.4b0baap+3
+-0x1.68fd44p+1
+-0x1.11cd32p+4
+0x1.1896dp-2
+0x1.12a558p-2
+0x1.0d78b8p-2
+0x1.f37c5ep-3
+0x1.4838dp-3
+0x1.5d1fdap-7
+-0x1.33f8ap-3
+-0x1.14243ap-2
+-0x1.833dep-2
+-0x1.e38b0cp-2
+0x0p+0
+0x1.5d1fdap-7
+0x0p+0
+0x1.81fd9ep-7
+0x0p+0
+0x1.166c62p+2
+0x0p+0
+0x1.167e3ep+2
+0x0p+0
+0x1.887ffp+2
+0x0p+0
+0x1.8898aap+2
+0x0p+0
+0x1.09079ap-2
+0x0p+0
+0x1.079794p-2
+0x0p+0
+0x1.a428d8p+0
+0x0p+0
+0x1.a2f8d8p+0
+0x0p+0
+0x1.3f279cp+2
+0x0p+0
+0x1.3f17bep+2
+0x0p+0
+0x1.3a5c1cp+1
+0x0p+0
+0x1.3a82acp+1
+0x0p+0
+0x1.337ccp+0
+0x0p+0
+0x1.3317cp+0
+0x0p+0
+0x1.83612p-2
+0x0p+0
+0x1.849cap-2
+0x0p+0
+0x1.8c49ccp+2
+0x0p+0
+0x1.8c6d56p+2
+0x0p+0
+0x1.ecbf18p+0
+0x0p+0
+0x1.ed5d78p+0
+0x0p+0
+0x1.4c9608p+1
+0x0p+0
+0x1.4cdf28p+1
+0x0p+0
+0x1.866018p+2
+0x0p+0
+0x1.867238p+2
+0x0p+0
+0x1.81d658p+2
+0x0p+0
+0x1.81ea88p+2
+0x0p+0
+0x1.0d78b8p-2
+0x0p+0
+0x1.0c50d2p-2
+0x0p+0
+0x1.07c588p+0
+0x0p+0
+0x1.0857c8p+0
+0x0p+0
+0x1.f1a938p+0
+0x0p+0
+0x1.f20b98p+0
+0x0p+0
+0x1.650478p+1
+0x0p+0
+0x1.652e6ap+1
+0x0p+0
+0x1.79ebd8p+2
+0x0p+0
+0x1.79fd9cp+2
+0x0p+0
+0x1.80dd72p+2
+0x0p+0
+0x1.80f266p+2
+0x0p+0
+0x1.12a558p-2
+0x0p+0
+0x1.11751ap-2
+0x0p+0
+0x1.79ebd8p+2
+0x0p+0
+0x1.79fd9cp+2
+-0x1.50f5aep+0
+-0x1.299f74p+4
+-0x1.50f5aep+0
+-0x1.725edp+1
+-0x1.50f5aep+0
+0x1.f170c4p-3
+-0x1.50f5aep+0
+0x1.079794p-2
+-0x1.50f5aep+0
+0x1.0c50d2p-2
+-0x1.50f5aep+0
+0x1.6835e8p+3
+0x1.6835e8p+3
+0x1.079794p-2
+0x1.0bd9eep-2
+0x1.0c50d2p-2
+0x1.3e547p+2
+0x1.0c50d2p-2
+0x1.079794p-2
+0x1.0c50d2p-2
+-0x1.cf574ep+4
+0x1.11751ap-2
+-0x1.8886f8p+5
+0x1.11751ap-2
+0x1.9aa55cp+3
+0x1.11751ap-2
+0x1.0bd9eep-2
+0x1.11751ap-2
+-0x1.b74be6p+5
+0x1.178fc4p-2
+-0x1.4c1fe2p+0
+0x1.178fc4p-2
+-0x1.b74be6p+5
+-0x1.cf574ep+4
+-0x1.8886f8p+5
+0x1.9aa55cp+3
+0x1.0bd9eep-2
+0x1.9aa55cp+3
+-0x1.cf574ep+4
+-0x1.8886f8p+5
+-0x1.381526p+5
+0x1.3e547p+2
+0x1.3e547p+2
+0x1.0bd9eep-2
+0x1.079794p-2
+0x1.3e547p+2
+0x1.079794p-2
+-0x1.381526p+5
+-0x1.f30c6ap+4
+0x1.f170c4p-3
+-0x1.299f74p+4
+0x1.f170c4p-3
+-0x1.f30c6ap+4
+0x1.473dfap-3
+-0x1.1e9a3ap+4
+0x1.473dfap-3
+-0x1.11d08p+4
+0x1.473dfap-3
+-0x1.f83256p+2
+0x1.81fd9ep-7
+-0x1.609d9ap+3
+0x1.81fd9ep-7
+-0x1.1e9a3ap+4
+0x1.81fd9ep-7
+-0x1.609d9ap+3
+-0x1.30e164p-3
+-0x1.304fbep+4
+-0x1.30e164p-3
+-0x1.278556p+4
+-0x1.12d4fap-2
+-0x1.31a514p+4
+-0x1.12d4fap-2
+-0x1.d786eap+4
+-0x1.12d4fap-2
+-0x1.1d124cp+4
+-0x1.8221acp-2
+-0x1.cff072p+3
+-0x1.8221acp-2
+-0x1.278556p+4
+-0x1.8221acp-2
+-0x1.1d124cp+4
+-0x1.e34cfep-2
+-0x1.1d124cp+4
+-0x1.d7d1ccp+4
+-0x1.1d124cp+4
+-0x1.18c9d6p+5
+-0x1.d786eap+4
+-0x1.2fb206p+3
+-0x1.d786eap+4
+-0x1.5342dep+3
+-0x1.304fbep+4
+-0x1.5342dep+3
+-0x1.304fbep+4
+-0x1.46341ep+4
+-0x1.14dacap+4
+-0x1.46341ep+4
+-0x1.14dacap+4
+-0x1.f83256p+2
+-0x1.14dacap+4
+-0x1.609d9ap+3
+-0x1.935706p+4
+-0x1.f83256p+2
+-0x1.31a514p+4
+-0x1.2fb206p+3
+-0x1.278556p+4
+-0x1.09e2e4p+5
+-0x1.31a514p+4
+-0x1.09e2e4p+5
+-0x1.609d9ap+3
+-0x1.f83256p+2
+0x1.489cf8p+3
+-0x1.11d08p+4
+-0x1.1e9a3ap+4
+-0x1.699d16p+1
+-0x1.32fdaep+2
+0x1.489cf8p+3
+0x1.489cf8p+3
+-0x1.f30c6ap+4
+-0x1.32fdaep+2
+-0x1.f30c6ap+4
+-0x1.725edp+1
+-0x1.299f74p+4
+0x1.0c50d2p-2
+0x1.11751ap-2
+0x1.f170c4p-3
+0x1.0c50d2p-2
+0x1.11751ap-2
+0x1.178fc4p-2
+0x1.178fc4p-2
+0x0p+0
+0x1.473dfap-3
+0x1.f170c4p-3
+0x1.81fd9ep-7
+0x1.473dfap-3
+-0x1.30e164p-3
+0x1.81fd9ep-7
+-0x1.12d4fap-2
+-0x1.30e164p-3
+-0x1.8221acp-2
+-0x1.12d4fap-2
+-0x1.e34cfep-2
+-0x1.8221acp-2
+0x0p+0
+-0x1.e34cfep-2
+-0x1.cff072p+3
+-0x1.bf1102p+1
+-0x1.1d124cp+4
+-0x1.bf1102p+1
+-0x1.18c9d6p+5
+-0x1.6c97fcp-4
+-0x1.d7d1ccp+4
+-0x1.6c97fcp-4
+-0x1.d786eap+4
+-0x1.75afd2p-3
+-0x1.31a514p+4
+-0x1.75afd2p-3
+-0x1.5342dep+3
+-0x1.84587p+1
+-0x1.46341ep+4
+-0x1.84587p+1
+-0x1.14dacap+4
+-0x1.913708p+1
+-0x1.935706p+4
+-0x1.913708p+1
+-0x1.2fb206p+3
+-0x1.927884p-3
+-0x1.09e2e4p+5
+-0x1.927884p-3
+-0x1.304fbep+4
+-0x1.a0c15ep+1
+-0x1.609d9ap+3
+-0x1.a0c15ep+1
+-0x1.f83256p+2
+-0x1.8eee94p+3
+-0x1.1e9a3ap+4
+-0x1.8eee94p+3
+-0x1.11d08p+4
+-0x1.4b0ca2p+3
+-0x1.699d16p+1
+-0x1.4b0ca2p+3
+-0x1.f30c6ap+4
+-0x1.73311cp+1
+-0x1.299f74p+4
+-0x1.73311cp+1
+-0x1.514ab2p+0
+-0x1.29a1eep+4
+-0x1.514e52p+0
+-0x1.7233a4p+1
+-0x1.515262p+0
+-0x1.7235b4p+1
+-0x1.515518p+0
+0x1.f03256p-3
+-0x1.515518p+0
+0x1.065782p-2
+-0x1.515518p+0
+0x1.065782p-2
+-0x1.514bf6p+0
+0x1.0ad006p-2
+-0x1.514bf6p+0
+0x1.682b48p+3
+-0x1.514bf6p+0
+0x1.682b48p+3
+0x1.682b48p+3
+0x1.0632d2p-2
+0x1.0a9576p-2
+0x1.0ad006p-2
+0x1.0a8faep-2
+0x1.0acf22p-2
+0x1.3e3ff8p+2
+0x1.0acabp-2
+0x1.3e3ff8p+2
+0x1.0acabp-2
+0x1.0632d2p-2
+0x1.0acabp-2
+0x1.0632d2p-2
+0x1.0acabp-2
+-0x1.cf50cap+4
+0x1.0ff8e6p-2
+-0x1.888a94p+5
+0x1.0fcb3p-2
+0x1.9a99f4p+3
+0x1.0fb40ep-2
+0x1.9a9888p+3
+0x1.0fc294p-2
+0x1.0a96f4p-2
+0x1.0fc9b8p-2
+0x1.0a9b7ap-2
+0x1.0fcb3p-2
+-0x1.b756ep+5
+0x1.16c284p-2
+-0x1.4c5332p+0
+0x1.16fbbp-2
+-0x1.4c59dcp+0
+0x1.16fb72p-2
+-0x1.b756ep+5
+-0x1.cf50cap+4
+-0x1.888a94p+5
+0x1.9a9b26p+3
+0x1.0a9b7ap-2
+0x1.9a9b26p+3
+0x1.0a9b7ap-2
+0x1.9a9b26p+3
+-0x1.cf50cap+4
+-0x1.888a94p+5
+-0x1.3817a6p+5
+0x1.3e3ff8p+2
+-0x1.3817a6p+5
+0x1.3e3ff8p+2
+0x1.3e3ff8p+2
+0x1.0ab832p-2
+0x1.3e3ff8p+2
+0x1.0ab832p-2
+0x1.063598p-2
+0x1.3e3ff8p+2
+0x1.063598p-2
+0x1.3e3ff8p+2
+0x1.063598p-2
+-0x1.3817a6p+5
+0x1.0636b4p-2
+-0x1.3817aep+5
+-0x1.f31074p+4
+0x1.f03256p-3
+-0x1.f30fb6p+4
+0x1.f49328p-3
+-0x1.29a1ecp+4
+0x1.f5e314p-3
+-0x1.29a2bep+4
+0x1.f83688p-3
+-0x1.f30fb2p+4
+0x1.445e24p-3
+-0x1.f31104p+4
+0x1.3ca2dep-3
+-0x1.1e95bp+4
+0x1.3ca2dep-3
+-0x1.11d61ep+4
+0x1.45e8dap-3
+-0x1.11d7c6p+4
+0x1.4d24d4p-3
+-0x1.f81a7ap+2
+0x1.c87fe8p-7
+-0x1.f81dc2p+2
+0x1.f92138p-7
+-0x1.6091acp+3
+0x1.7913ccp-7
+-0x1.608be4p+3
+0x1.1aa154p-6
+-0x1.1e9702p+4
+0x1.2da454p-6
+-0x1.608c36p+3
+-0x1.2dc49ep-3
+-0x1.608ef8p+3
+-0x1.396bc8p-3
+-0x1.30499ap+4
+-0x1.3d2baap-3
+-0x1.304c68p+4
+-0x1.37e79p-3
+-0x1.277fc4p+4
+-0x1.11c9ap-2
+-0x1.31a078p+4
+-0x1.1095ap-2
+-0x1.31a19ap+4
+-0x1.0d4fccp-2
+-0x1.d7818p+4
+-0x1.0d67a6p-2
+-0x1.1d0c1ap+4
+-0x1.809f1cp-2
+-0x1.1d061ep+4
+-0x1.710f9cp-2
+-0x1.cfe494p+3
+-0x1.710f9cp-2
+-0x1.cfe684p+3
+-0x1.70aa38p-2
+-0x1.277fc4p+4
+-0x1.71a196p-2
+-0x1.1d061ep+4
+-0x1.e3a62p-2
+-0x1.1d0654p+4
+-0x1.e526ap-2
+-0x1.1d0654p+4
+-0x1.d7c982p+4
+-0x1.1d090ep+4
+-0x1.18c6bcp+5
+-0x1.1d0c24p+4
+-0x1.18c59ap+5
+-0x1.d7825ep+4
+-0x1.2fa9fcp+3
+-0x1.d78342p+4
+-0x1.533784p+3
+-0x1.3049e4p+4
+-0x1.533af2p+3
+-0x1.30494ap+4
+-0x1.462c9p+4
+-0x1.14d4d6p+4
+-0x1.462d68p+4
+-0x1.14d4d6p+4
+-0x1.f80e66p+2
+-0x1.14d52ap+4
+-0x1.f80fcap+2
+-0x1.14d56ap+4
+-0x1.608f6ap+3
+-0x1.14d65ep+4
+-0x1.608d84p+3
+-0x1.935142p+4
+-0x1.f810a6p+2
+-0x1.31a08p+4
+-0x1.2fa896p+3
+-0x1.277fc4p+4
+-0x1.09e096p+5
+-0x1.31a0eap+4
+-0x1.09e0bap+5
+-0x1.31a05p+4
+-0x1.09e0a4p+5
+-0x1.6090e2p+3
+-0x1.f81aa8p+2
+-0x1.608ff4p+3
+-0x1.f81c58p+2
+0x1.489556p+3
+-0x1.11d5b8p+4
+-0x1.1e9552p+4
+-0x1.6a313p+1
+-0x1.33304p+2
+0x1.489844p+3
+0x1.4896aap+3
+-0x1.f31104p+4
+-0x1.33304p+2
+-0x1.f31102p+4
+-0x1.72372ap+1
+-0x1.29a22ep+4
+-0x1.723ad6p+1
+-0x1.29a22cp+4
+0x1.0fcb3p-2
+0x1.0acafp-2
+0x1.0b20dcp-2
+0x1.f685fep-3
+0x1.16f86ap-2
+0x1.0f023ap-2
+0x0p+0
+0x1.166ed2p-2
+0x1.fd5748p-3
+0x1.4a10a8p-3
+0x1.656b9ep-3
+0x1.972eaap-7
+0x1.1c8398p-5
+-0x1.41fd12p-3
+-0x1.13cbdap-3
+-0x1.189ddap-2
+-0x1.04e33ap-2
+-0x1.7234f6p-2
+-0x1.65dec6p-2
+-0x1.e526ap-2
+-0x1.e2d16ep-2
+0x0p+0
+-0x1.bee2c6p+1
+-0x1.cfe5cp+3
+-0x1.bedcaep+1
+-0x1.1d0b2ap+4
+-0x1.65754p-4
+-0x1.18c642p+5
+-0x1.640b5ep-4
+-0x1.d7c908p+4
+-0x1.7397cap-3
+-0x1.d7819p+4
+-0x1.7333b4p-3
+-0x1.31a05p+4
+-0x1.84243ap+1
+-0x1.533776p+3
+-0x1.842b6p+1
+-0x1.462d68p+4
+-0x1.910796p+1
+-0x1.14d4bp+4
+-0x1.9110bep+1
+-0x1.93510ap+4
+-0x1.903512p-3
+-0x1.2fa94ep+3
+-0x1.8fe2ecp-3
+-0x1.09e0a4p+5
+-0x1.a08946p+1
+-0x1.304912p+4
+-0x1.a0924ep+1
+-0x1.60915p+3
+-0x1.8edbbep+3
+-0x1.f8195ep+2
+-0x1.8edd88p+3
+-0x1.1e94e4p+4
+-0x1.4b0d1ep+3
+-0x1.11d5b4p+4
+-0x1.4b0c2p+3
+-0x1.6a3026p+1
+-0x1.734b56p+1
+-0x1.f31112p+4
+-0x1.735202p+1
+-0x1.29a22cp+4
+-0x1.514bf6p+0
+-0x1.29a22cp+4
+-0x1.51501p+0
+-0x1.723ad6p+1
+-0x1.5152dp+0
+-0x1.723c3cp+1
+-0x1.51547cp+0
+0x1.f00582p-3
+-0x1.51547cp+0
+0x1.0636b4p-2
+-0x1.51547cp+0
+0x1.0636b4p-2
+-0x1.514c46p+0
+0x1.0af824p-2
+-0x1.514c46p+0
+0x1.682b48p+3
+-0x1.514c46p+0
+0x1.682b48p+3
+0x1.682b48p+3
+0x1.0615b6p-2
+0x1.0ab832p-2
+0x1.0af824p-2
+0x1.0aa31ap-2
+0x1.0af4e6p-2
+0x1.3e3ff8p+2
+0x1.0aeb9ep-2
+0x1.3e3ff8p+2
+0x1.0aeb9ep-2
+0x1.0615b6p-2
+0x1.0aea4p-2
+0x1.0615b6p-2
+0x1.0aea4p-2
+-0x1.cf50cap+4
+0x1.103fe2p-2
+-0x1.888a94p+5
+0x1.10052ep-2
+0x1.9a9a3ep+3
+0x1.0fedc2p-2
+0x1.9a9914p+3
+0x1.0ff9a6p-2
+0x1.0ab24cp-2
+0x1.1000ap-2
+0x1.0ab24cp-2
+0x1.1000ap-2
+-0x1.b756ep+5
+0x1.16b2e2p-2
+-0x1.4c56bcp+0
+0x1.16ed8p-2
+-0x1.4c5dbcp+0
+0x1.16ed4p-2
+-0x1.b756ep+5
+-0x1.cf50cap+4
+-0x1.888a94p+5
+0x1.9a9ba4p+3
+0x1.0ab24cp-2
+0x1.9a9ba4p+3
+0x1.0ab24cp-2
+0x1.9a9ba4p+3
+-0x1.cf50cap+4
+-0x1.888a94p+5
+-0x1.3817aep+5
+0x1.3e408ap+2
+-0x1.3817aep+5
+0x1.3e408ap+2
+0x1.3e408ap+2
+0x1.0acc64p-2
+0x1.3e408ap+2
+0x1.0acc64p-2
+0x1.06212ap-2
+0x1.3e408ap+2
+0x1.06212ap-2
+0x1.3e408ap+2
+0x1.06212ap-2
+-0x1.3817aep+5
+0x1.062262p-2
+-0x1.3817b6p+5
+-0x1.f31112p+4
+0x1.f00582p-3
+-0x1.f31056p+4
+0x1.f4614cp-3
+-0x1.29a22ap+4
+0x1.f5ac36p-3
+-0x1.29a2fap+4
+0x1.f7f766p-3
+-0x1.f31052p+4
+0x1.45905ep-3
+-0x1.f311a6p+4
+0x1.3dbfa8p-3
+-0x1.1e94e4p+4
+0x1.3dbfa8p-3
+-0x1.11d5b4p+4
+0x1.47108ap-3
+-0x1.11d756p+4
+0x1.4e2dbcp-3
+-0x1.f8195ep+2
+0x1.b54914p-7
+-0x1.f81cacp+2
+0x1.e63d52p-7
+-0x1.60915p+3
+0x1.6796b2p-7
+-0x1.608b86p+3
+0x1.11f684p-6
+-0x1.1e963ap+4
+0x1.25c982p-6
+-0x1.608bdcp+3
+-0x1.2dd23ap-3
+-0x1.608e9ep+3
+-0x1.39779ep-3
+-0x1.304912p+4
+-0x1.3d35bp-3
+-0x1.304be2p+4
+-0x1.37f0acp-3
+-0x1.277fc4p+4
+-0x1.11a43ep-2
+-0x1.31a05p+4
+-0x1.107474p-2
+-0x1.31a172p+4
+-0x1.0d31b2p-2
+-0x1.d7819p+4
+-0x1.0d49a2p-2
+-0x1.1d0b2ap+4
+-0x1.80d248p-2
+-0x1.1d052ep+4
+-0x1.714286p-2
+-0x1.cfe5cp+3
+-0x1.714286p-2
+-0x1.cfe7b2p+3
+-0x1.70dcfap-2
+-0x1.277fc4p+4
+-0x1.71d392p-2
+-0x1.1d052ep+4
+-0x1.e354eep-2
+-0x1.1d0566p+4
+-0x1.e4e7e4p-2
+-0x1.1d0566p+4
+-0x1.d7c908p+4
+-0x1.1d081ep+4
+-0x1.18c642p+5
+-0x1.1d0b36p+4
+-0x1.18c52p+5
+-0x1.d7826ep+4
+-0x1.2fa94ep+3
+-0x1.d7835p+4
+-0x1.533776p+3
+-0x1.30496p+4
+-0x1.533ae8p+3
+-0x1.3048c6p+4
+-0x1.462d68p+4
+-0x1.14d4bp+4
+-0x1.462e4p+4
+-0x1.14d4bp+4
+-0x1.f80d7ep+2
+-0x1.14d502p+4
+-0x1.f80edcp+2
+-0x1.14d542p+4
+-0x1.608f1p+3
+-0x1.14d634p+4
+-0x1.608d2cp+3
+-0x1.93510ap+4
+-0x1.f80fb4p+2
+-0x1.31a058p+4
+-0x1.2fa7ecp+3
+-0x1.277fc4p+4
+-0x1.09e0a4p+5
+-0x1.31a0c4p+4
+-0x1.09e0c8p+5
+-0x1.31a02ap+4
+-0x1.09e0b2p+5
+-0x1.609088p+3
+-0x1.f819aap+2
+-0x1.608f9ep+3
+-0x1.f81b54p+2
+0x1.48967cp+3
+-0x1.11d548p+4
+-0x1.1e9492p+4
+-0x1.6a3026p+1
+-0x1.33304p+2
+0x1.489918p+3
+0x1.4896fcp+3
+-0x1.f311a6p+4
+-0x1.33304p+2
+-0x1.f311a4p+4
+-0x1.723d22p+1
+-0x1.29a26ep+4
+-0x1.7240c4p+1
+-0x1.29a26cp+4
+0x1.1000ap-2
+0x1.0aeb44p-2
+0x1.0b2658p-2
+0x1.f65044p-3
+0x1.16e9f4p-2
+0x1.0f180cp-2
+0x0p+0
+0x1.1655aep-2
+0x1.fd4fd2p-3
+0x1.4b16cap-3
+0x1.65e196p-3
+0x1.8b6d74p-7
+0x1.1a33f6p-5
+-0x1.420162p-3
+-0x1.13d32ep-3
+-0x1.18817cp-2
+-0x1.04da4ap-2
+-0x1.72631ap-2
+-0x1.66028p-2
+-0x1.e4e7e4p-2
+-0x1.e2bd26p-2
+0x0p+0
+-0x1.bee4ecp+1
+-0x1.cfe6eep+3
+-0x1.bedeeep+1
+-0x1.1d0a3cp+4
+-0x1.64f10ap-4
+-0x1.18c5cap+5
+-0x1.63838ap-4
+-0x1.d7c88ep+4
+-0x1.73809ep-3
+-0x1.d7819cp+4
+-0x1.731d02p-3
+-0x1.31a02ap+4
+-0x1.842688p+1
+-0x1.53377p+3
+-0x1.842d88p+1
+-0x1.462e4p+4
+-0x1.910756p+1
+-0x1.14d486p+4
+-0x1.9110a6p+1
+-0x1.9350d2p+4
+-0x1.9022a6p-3
+-0x1.2fa8a6p+3
+-0x1.8fcf8ap-3
+-0x1.09e0b2p+5
+-0x1.a0896ep+1
+-0x1.30488ep+4
+-0x1.a09258p+1
+-0x1.6090f2p+3
+-0x1.8edbaep+3
+-0x1.f8186ap+2
+-0x1.8edd6cp+3
+-0x1.1e9426p+4
+-0x1.4b0cb4p+3
+-0x1.11d544p+4
+-0x1.4b0b96p+3
+-0x1.6a2f2p+1
+-0x1.734ccp+1
+-0x1.f311b4p+4
+-0x1.7353a2p+1
+-0x1.29a26cp+4
+-0x1.514c46p+0
+-0x1.29a26cp+4
+-0x1.5150f6p+0
+-0x1.7240c4p+1
+-0x1.5152b8p+0
+-0x1.7241aap+1
+-0x1.51539ap+0
+0x1.ef9eacp-3
+-0x1.51539ap+0
+0x1.062262p-2
+-0x1.51539ap+0
+0x1.062262p-2
+-0x1.514c1ap+0
+0x1.0b0acap-2
+-0x1.514c1ap+0
+0x1.682b48p+3
+-0x1.514c1ap+0
+0x1.682b48p+3
+0x1.682b48p+3
+0x1.060446p-2
+0x1.0acc64p-2
+0x1.0b0acap-2
+0x1.0ab1c8p-2
+0x1.0b06bp-2
+0x1.3e408ap+2
+0x1.0afbd2p-2
+0x1.3e408ap+2
+0x1.0afbd2p-2
+0x1.060446p-2
+0x1.0af9c2p-2
+0x1.060446p-2
+0x1.0af9c2p-2
+-0x1.cf50cap+4
+0x1.1043a6p-2
+-0x1.888a94p+5
+0x1.100428p-2
+0x1.9a9ad2p+3
+0x1.0fecbp-2
+0x1.9a9984p+3
+0x1.0ff9fep-2
+0x1.0ac39p-2
+0x1.100128p-2
+0x1.0ac5bep-2
+0x1.1001dep-2
+-0x1.b756ep+5
+0x1.169c3p-2
+-0x1.4c5a56p+0
+0x1.16d908p-2
+-0x1.4c61c2p+0
+0x1.16d8c4p-2
+-0x1.b756ep+5
+-0x1.cf50cap+4
+-0x1.888a94p+5
+0x1.9a9c26p+3
+0x1.0ac5bep-2
+0x1.9a9c26p+3
+0x1.0ac5bep-2
+0x1.9a9c26p+3
+-0x1.cf50cap+4
+-0x1.888a94p+5
+-0x1.3817b6p+5
+0x1.3e4166p+2
+-0x1.3817b6p+5
+0x1.3e4166p+2
+0x1.3e4166p+2
+0x1.0addcep-2
+0x1.3e4166p+2
+0x1.0addcep-2
+0x1.061408p-2
+0x1.3e4166p+2
+0x1.061408p-2
+0x1.3e4166p+2
+0x1.061408p-2
+-0x1.3817b6p+5
+0x1.06155ap-2
+-0x1.3817cp+5
+-0x1.f311b4p+4
+0x1.ef9eacp-3
+-0x1.f310f6p+4
+0x1.f4067cp-3
+-0x1.29a26ap+4
+0x1.f55aap-3
+-0x1.29a33ap+4
+0x1.f7a61cp-3
+-0x1.f310f2p+4
+0x1.46108ap-3
+-0x1.f31246p+4
+0x1.3e433ap-3
+-0x1.1e9426p+4
+0x1.3e433ap-3
+-0x1.11d544p+4
+0x1.479cbep-3
+-0x1.11d6e2p+4
+0x1.4ea4eep-3
+-0x1.f8186ap+2
+0x1.ade252p-7
+-0x1.f81bb6p+2
+0x1.deb24ep-7
+-0x1.6090f2p+3
+0x1.60b9d4p-7
+-0x1.608b28p+3
+0x1.0e5c14p-6
+-0x1.1e957ep+4
+0x1.226b46p-6
+-0x1.608b7ep+3
+-0x1.2dccecp-3
+-0x1.608e4p+3
+-0x1.397312p-3
+-0x1.30488ep+4
+-0x1.3d317ep-3
+-0x1.304b6p+4
+-0x1.37eba6p-3
+-0x1.277fc4p+4
+-0x1.119992p-2
+-0x1.31a02ap+4
+-0x1.106a26p-2
+-0x1.31a14cp+4
+-0x1.0d2888p-2
+-0x1.d7819cp+4
+-0x1.0d40ap-2
+-0x1.1d0a3cp+4
+-0x1.80f92p-2
+-0x1.1d043ep+4
+-0x1.716966p-2
+-0x1.cfe6eep+3
+-0x1.716966p-2
+-0x1.cfe8e2p+3
+-0x1.710372p-2
+-0x1.277fc4p+4
+-0x1.71fb1p-2
+-0x1.1d043ep+4
+-0x1.e32928p-2
+-0x1.1d0478p+4
+-0x1.e4c518p-2
+-0x1.1d0478p+4
+-0x1.d7c88ep+4
+-0x1.1d072ep+4
+-0x1.18c5cap+5
+-0x1.1d0a46p+4
+-0x1.18c4a8p+5
+-0x1.d7827ap+4
+-0x1.2fa8a6p+3
+-0x1.d7835ap+4
+-0x1.53377p+3
+-0x1.3048ep+4
+-0x1.533ae2p+3
+-0x1.304846p+4
+-0x1.462e4p+4
+-0x1.14d486p+4
+-0x1.462f18p+4
+-0x1.14d486p+4
+-0x1.f80ca2p+2
+-0x1.14d4d8p+4
+-0x1.f80dfep+2
+-0x1.14d516p+4
+-0x1.608eb2p+3
+-0x1.14d608p+4
+-0x1.608cdp+3
+-0x1.9350d2p+4
+-0x1.f80ed4p+2
+-0x1.31a034p+4
+-0x1.2fa746p+3
+-0x1.277fc4p+4
+-0x1.09e0b2p+5
+-0x1.31a0ap+4
+-0x1.09e0d6p+5
+-0x1.31a006p+4
+-0x1.09e0cp+5
+-0x1.60902cp+3
+-0x1.f818bcp+2
+-0x1.608f46p+3
+-0x1.f81a6p+2
+0x1.4896cap+3
+-0x1.11d4d8p+4
+-0x1.1e93dcp+4
+-0x1.6a2f2p+1
+-0x1.33304p+2
+0x1.48992ep+3
+0x1.4896bep+3
+-0x1.f31246p+4
+-0x1.33304p+2
+-0x1.f31244p+4
+-0x1.724224p+1
+-0x1.29a2bp+4
+-0x1.7245d8p+1
+-0x1.29a2aep+4
+0x1.1001dep-2
+0x1.0afb28p-2
+0x1.0b380ap-2
+0x1.f60312p-3
+0x1.16d56p-2
+0x1.0f1db8p-2
+0x0p+0
+0x1.164252p-2
+0x1.fd2302p-3
+0x1.4b9178p-3
+0x1.662c74p-3
+0x1.879a46p-7
+0x1.19196ep-5
+-0x1.41f82ep-3
+-0x1.13e72ep-3
+-0x1.187714p-2
+-0x1.04d3e2p-2
+-0x1.72887cp-2
+-0x1.66240ep-2
+-0x1.e4c518p-2
+-0x1.e2aaap-2
+0x0p+0
+-0x1.bee738p+1
+-0x1.cfe81ep+3
+-0x1.bee134p+1
+-0x1.1d094ap+4
+-0x1.64678p-4
+-0x1.18c552p+5
+-0x1.62f9f6p-4
+-0x1.d7c814p+4
+-0x1.736aacp-3
+-0x1.d781a6p+4
+-0x1.730694p-3
+-0x1.31a006p+4
+-0x1.8428bp+1
+-0x1.53376cp+3
+-0x1.842facp+1
+-0x1.462f18p+4
+-0x1.91076ap+1
+-0x1.14d45ap+4
+-0x1.9110a8p+1
+-0x1.93509ap+4
+-0x1.901078p-3
+-0x1.2fa802p+3
+-0x1.8fbd4ap-3
+-0x1.09e0cp+5
+-0x1.a08958p+1
+-0x1.30480ep+4
+-0x1.a0925p+1
+-0x1.609094p+3
+-0x1.8edb9p+3
+-0x1.f81784p+2
+-0x1.8edd4cp+3
+-0x1.1e937p+4
+-0x1.4b0c4ap+3
+-0x1.11d4d4p+4
+-0x1.4b0b2p+3
+-0x1.6a2e1cp+1
+-0x1.734e2p+1
+-0x1.f31254p+4
+-0x1.73551cp+1
+-0x1.29a2aep+4
+-0x1.514c1ap+0
+0x1.682b48p+3
+0x1.0b1e5ep-2
+0x1.10458ep-2
+0x1.1687b8p-2
+0x0p+0
+-0x1.4c5e46p+0
+-0x1.b756ep+5
+0x1.9a9b64p+3
+-0x1.888a94p+5
+-0x1.cf50cap+4
+0x1.3e4166p+2
+-0x1.3817cp+5
+0x1.0addcep-2
+0x1.06155ap-2
+0x1.ef6a7ep-3
+0x1.4639b8p-3
+0x1.aa5654p-7
+-0x1.2dd16cp-3
+-0x1.118f74p-2
+-0x1.81137cp-2
+-0x1.e30946p-2
+-0x1.cfe81ep+3
+-0x1.bee98cp+1
+-0x1.1d094ap+4
+-0x1.18c552p+5
+-0x1.63dde4p-4
+-0x1.d7c814p+4
+-0x1.d781a6p+4
+-0x1.735446p-3
+-0x1.53376cp+3
+-0x1.842ad6p+1
+-0x1.462f18p+4
+-0x1.14d45ap+4
+-0x1.91077cp+1
+-0x1.93509ap+4
+-0x1.2fa802p+3
+-0x1.8ffdfp-3
+-0x1.09e0cp+5
+-0x1.31a006p+4
+-0x1.277fc4p+4
+-0x1.30480ep+4
+-0x1.a0894ap+1
+-0x1.609094p+3
+-0x1.f81784p+2
+-0x1.8edb74p+3
+-0x1.11d4d4p+4
+-0x1.4b0bdap+3
+-0x1.6a2e1cp+1
+0x1.48968cp+3
+-0x1.33304p+2
+-0x1.1e937p+4
+-0x1.f31254p+4
+-0x1.734f96p+1
+-0x1.7245d8p+1
+-0x1.29a2aep+4
+-0x1.50f5aep+0
+0x1.6835e8p+3
+-0x1.725edp+1
+0x1.489cf8p+3
+0x1.079794p-2
+-0x1.381526p+5
+0x1.3e547p+2
+0x1.0bd9eep-2
+0x1.9aa55cp+3
+-0x1.4c1fe2p+0
+-0x1.b74be6p+5
+-0x1.cf574ep+4
+-0x1.8886f8p+5
+-0x1.278556p+4
+-0x1.32fdaep+2
+-0x1.913708p+1
+-0x1.14dacap+4
+-0x1.935706p+4
+-0x1.75afd2p-3
+-0x1.d786eap+4
+-0x1.31a514p+4
+-0x1.bf1102p+1
+-0x1.1d124cp+4
+-0x1.cff072p+3
+-0x1.6c97fcp-4
+-0x1.18c9d6p+5
+-0x1.d7d1ccp+4
+-0x1.927884p-3
+-0x1.2fb206p+3
+-0x1.09e2e4p+5
+-0x1.a0c15ep+1
+-0x1.304fbep+4
+-0x1.609d9ap+3
+-0x1.73311cp+1
+-0x1.f30c6ap+4
+-0x1.299f74p+4
+-0x1.84587p+1
+-0x1.5342dep+3
+-0x1.46341ep+4
+-0x1.8eee94p+3
+-0x1.1e9a3ap+4
+-0x1.f83256p+2
+-0x1.4b0ca2p+3
+-0x1.699d16p+1
+-0x1.11d08p+4
+0x1.178fc4p-2
+0x1.11751ap-2
+0x1.0c50d2p-2
+0x1.f170c4p-3
+0x1.473dfap-3
+0x1.81fd9ep-7
+-0x1.30e164p-3
+-0x1.12d4fap-2
+-0x1.8221acp-2
+-0x1.e34cfep-2
+0x0p+0
+0x1.81fd9ep-7
+0x0p+0
+0x1.aa5654p-7
+0x0p+0
+0x1.167e3ep+2
+0x0p+0
+0x1.168ee6p+2
+0x0p+0
+0x1.079794p-2
+0x0p+0
+0x1.06155ap-2
+0x0p+0
+0x1.a2f8d8p+0
+0x0p+0
+0x1.a19998p+0
+0x0p+0
+0x1.3f17bep+2
+0x0p+0
+0x1.3f0824p+2
+0x0p+0
+0x1.3a82acp+1
+0x0p+0
+0x1.3ab6ccp+1
+0x0p+0
+0x1.3317cp+0
+0x0p+0
+0x1.32a44p+0
+0x0p+0
+0x1.849cap-2
+0x0p+0
+0x1.86012p-2
+0x0p+0
+0x1.8c6d56p+2
+0x0p+0
+0x1.8c903ep+2
+0x0p+0
+0x1.ed5d78p+0
+0x0p+0
+0x1.edf8f8p+0
+0x0p+0
+0x1.4cdf28p+1
+0x0p+0
+0x1.4d2768p+1
+0x0p+0
+0x1.867238p+2
+0x0p+0
+0x1.868514p+2
+0x0p+0
+0x1.81ea88p+2
+0x0p+0
+0x1.81fecp+2
+0x0p+0
+0x1.0c50d2p-2
+0x0p+0
+0x1.0b1e5ep-2
+0x0p+0
+0x1.0857c8p+0
+0x0p+0
+0x1.08e7e8p+0
+0x0p+0
+0x1.f20b98p+0
+0x0p+0
+0x1.f25fd8p+0
+0x0p+0
+0x1.652e6ap+1
+0x0p+0
+0x1.6555ep+1
+0x0p+0
+0x1.79fd9cp+2
+0x0p+0
+0x1.7a0e7ep+2
+0x0p+0
+0x1.80f266p+2
+0x0p+0
+0x1.8106bep+2
+0x0p+0
+0x1.11751ap-2
+0x0p+0
+0x1.10458ep-2
+0x0p+0
+0x1.79fd9cp+2
+0x0p+0
+0x1.7a0e7ep+2
+-0x1.514c1ap+0
+-0x1.29a2aep+4
+-0x1.514c1ap+0
+-0x1.7245d8p+1
+-0x1.514c1ap+0
+0x1.ef6a7ep-3
+-0x1.514c1ap+0
+0x1.06155ap-2
+-0x1.514c1ap+0
+0x1.682b48p+3
+0x1.06155ap-2
+-0x1.3817cp+5
+0x1.06155ap-2
+0x1.3e4166p+2
+0x1.06155ap-2
+0x1.0b1e5ep-2
+0x1.0addcep-2
+0x1.0b1e5ep-2
+0x1.3e4166p+2
+0x1.0b1e5ep-2
+-0x1.cf50cap+4
+0x1.10458ep-2
+-0x1.888a94p+5
+0x1.10458ep-2
+0x1.9a9b64p+3
+0x1.10458ep-2
+0x1.0addcep-2
+0x1.10458ep-2
+-0x1.b756ep+5
+0x1.1687b8p-2
+-0x1.4c5e46p+0
+0x1.1687b8p-2
+-0x1.b756ep+5
+-0x1.cf50cap+4
+-0x1.888a94p+5
+0x1.9a9b64p+3
+0x1.0addcep-2
+0x1.9a9b64p+3
+-0x1.cf50cap+4
+-0x1.888a94p+5
+0x1.3e4166p+2
+0x1.0addcep-2
+-0x1.3817cp+5
+0x1.3e4166p+2
+-0x1.f31254p+4
+0x1.ef6a7ep-3
+-0x1.29a2aep+4
+0x1.ef6a7ep-3
+-0x1.f31254p+4
+0x1.4639b8p-3
+-0x1.1e937p+4
+0x1.4639b8p-3
+-0x1.11d4d4p+4
+0x1.4639b8p-3
+-0x1.f81784p+2
+0x1.aa5654p-7
+-0x1.609094p+3
+0x1.aa5654p-7
+-0x1.1e937p+4
+0x1.aa5654p-7
+-0x1.609094p+3
+-0x1.2dd16cp-3
+-0x1.30480ep+4
+-0x1.2dd16cp-3
+-0x1.277fc4p+4
+-0x1.118f74p-2
+-0x1.31a006p+4
+-0x1.118f74p-2
+-0x1.d781a6p+4
+-0x1.118f74p-2
+-0x1.1d094ap+4
+-0x1.81137cp-2
+-0x1.cfe81ep+3
+-0x1.81137cp-2
+-0x1.277fc4p+4
+-0x1.81137cp-2
+-0x1.1d094ap+4
+-0x1.e30946p-2
+-0x1.1d094ap+4
+-0x1.d7c814p+4
+-0x1.1d094ap+4
+-0x1.18c552p+5
+-0x1.d781a6p+4
+-0x1.2fa802p+3
+-0x1.d781a6p+4
+-0x1.53376cp+3
+-0x1.30480ep+4
+-0x1.53376cp+3
+-0x1.30480ep+4
+-0x1.462f18p+4
+-0x1.14d45ap+4
+-0x1.462f18p+4
+-0x1.14d45ap+4
+-0x1.f81784p+2
+-0x1.14d45ap+4
+-0x1.609094p+3
+-0x1.93509ap+4
+-0x1.f81784p+2
+-0x1.31a006p+4
+-0x1.2fa802p+3
+-0x1.277fc4p+4
+-0x1.09e0cp+5
+-0x1.31a006p+4
+-0x1.09e0cp+5
+-0x1.609094p+3
+-0x1.f81784p+2
+0x1.48968cp+3
+-0x1.11d4d4p+4
+-0x1.1e937p+4
+-0x1.6a2e1cp+1
+-0x1.33304p+2
+0x1.48968cp+3
+0x1.48968cp+3
+-0x1.f31254p+4
+-0x1.33304p+2
+-0x1.f31254p+4
+-0x1.7245d8p+1
+-0x1.29a2aep+4
+0x1.0b1e5ep-2
+0x1.10458ep-2
+0x1.ef6a7ep-3
+0x1.0b1e5ep-2
+0x1.10458ep-2
+0x1.1687b8p-2
+0x1.1687b8p-2
+0x0p+0
+0x1.4639b8p-3
+0x1.ef6a7ep-3
+0x1.aa5654p-7
+0x1.4639b8p-3
+-0x1.2dd16cp-3
+0x1.aa5654p-7
+-0x1.118f74p-2
+-0x1.2dd16cp-3
+-0x1.81137cp-2
+-0x1.118f74p-2
+-0x1.e30946p-2
+-0x1.81137cp-2
+0x0p+0
+-0x1.e30946p-2
+-0x1.cfe81ep+3
+-0x1.bee98cp+1
+-0x1.1d094ap+4
+-0x1.bee98cp+1
+-0x1.18c552p+5
+-0x1.63dde4p-4
+-0x1.d7c814p+4
+-0x1.63dde4p-4
+-0x1.d781a6p+4
+-0x1.735446p-3
+-0x1.31a006p+4
+-0x1.735446p-3
+-0x1.53376cp+3
+-0x1.842ad6p+1
+-0x1.462f18p+4
+-0x1.842ad6p+1
+-0x1.14d45ap+4
+-0x1.91077cp+1
+-0x1.93509ap+4
+-0x1.91077cp+1
+-0x1.2fa802p+3
+-0x1.8ffdfp-3
+-0x1.09e0cp+5
+-0x1.8ffdfp-3
+-0x1.30480ep+4
+-0x1.a0894ap+1
+-0x1.609094p+3
+-0x1.a0894ap+1
+-0x1.f81784p+2
+-0x1.8edb74p+3
+-0x1.1e937p+4
+-0x1.8edb74p+3
+-0x1.11d4d4p+4
+-0x1.4b0bdap+3
+-0x1.6a2e1cp+1
+-0x1.4b0bdap+3
+-0x1.f31254p+4
+-0x1.734f96p+1
+-0x1.29a2aep+4
+-0x1.734f96p+1
+-0x1.51b546p+0
+-0x1.29a458p+4
+-0x1.51c86cp+0
+-0x1.7243b8p+1
+-0x1.51cf64p+0
+-0x1.72474p+1
+-0x1.51d48ap+0
+0x1.ee972cp-3
+-0x1.51d48ap+0
+0x1.04a154p-2
+-0x1.51d48ap+0
+0x1.04a154p-2
+-0x1.51c698p+0
+0x1.681e22p+3
+-0x1.51c662p+0
+0x1.681e1p+3
+0x1.046958p-2
+-0x1.381a3ep+5
+0x1.046d14p-2
+-0x1.381a58p+5
+0x1.046d14p-2
+0x1.3e2fd2p+2
+0x1.046d14p-2
+0x1.3e2fd2p+2
+0x1.04823p-2
+0x1.09abdap-2
+0x1.04823p-2
+0x1.09abdap-2
+0x1.09b5fap-2
+0x1.09ada4p-2
+0x1.09a4e6p-2
+0x1.09ab02p-2
+0x1.3e2e7ep+2
+0x1.09a644p-2
+0x1.3e2e7ep+2
+0x1.09a644p-2
+-0x1.cf47c4p+4
+0x1.0eab82p-2
+-0x1.888f22p+5
+0x1.0e91b8p-2
+0x1.9a9042p+3
+0x1.0e7a12p-2
+0x1.9a8f26p+3
+0x1.0e856ap-2
+0x1.09acacp-2
+0x1.0e8b4ep-2
+0x1.09acacp-2
+0x1.0e8b4ep-2
+-0x1.b7636ep+5
+0x1.15c126p-2
+-0x1.4c8feap+0
+0x1.15ff82p-2
+-0x1.4c978ep+0
+0x1.15ff3cp-2
+-0x1.b7636ep+5
+-0x1.cf47c4p+4
+-0x1.888f22p+5
+0x1.9a915p+3
+0x1.09acacp-2
+0x1.9a9146p+3
+0x1.09acacp-2
+0x1.9a9146p+3
+-0x1.cf47c4p+4
+-0x1.888f22p+5
+0x1.3e2f0ap+2
+0x1.09d7c6p-2
+0x1.3e2f0ap+2
+0x1.09d7c6p-2
+-0x1.381a58p+5
+0x1.3e2f0ap+2
+-0x1.381a58p+5
+0x1.3e2f0ap+2
+-0x1.f316e2p+4
+0x1.ee972cp-3
+-0x1.f31622p+4
+0x1.f3001p-3
+-0x1.29a452p+4
+0x1.f4402cp-3
+-0x1.29a524p+4
+0x1.f68da6p-3
+-0x1.f3161ep+4
+0x1.42f6f6p-3
+-0x1.f3176ap+4
+0x1.3b55c8p-3
+-0x1.1e8fc8p+4
+0x1.3b55c8p-3
+-0x1.11db36p+4
+0x1.44b7acp-3
+-0x1.11dcd2p+4
+0x1.4bb62cp-3
+-0x1.f7fdf2p+2
+0x1.f23d1ep-7
+-0x1.f80134p+2
+0x1.113812p-6
+-0x1.6083ccp+3
+0x1.a36432p-7
+-0x1.607e0ap+3
+0x1.2f315p-6
+-0x1.1e9122p+4
+0x1.42442ep-6
+-0x1.607e5cp+3
+-0x1.2a8f36p-3
+-0x1.60811ap+3
+-0x1.3624dap-3
+-0x1.30418ap+4
+-0x1.39dff6p-3
+-0x1.30445cp+4
+-0x1.349a7p-3
+-0x1.2779b8p+4
+-0x1.1073a2p-2
+-0x1.319b56p+4
+-0x1.0f436ep-2
+-0x1.319c78p+4
+-0x1.0c02bp-2
+-0x1.d77ceep+4
+-0x1.0c1ac6p-2
+-0x1.1d034cp+4
+-0x1.7fb03cp-2
+-0x1.1cfd4ep+4
+-0x1.702462p-2
+-0x1.cfdcbep+3
+-0x1.702462p-2
+-0x1.cfdeb2p+3
+-0x1.6fbe4p-2
+-0x1.2779b8p+4
+-0x1.70b656p-2
+-0x1.1cfd4ep+4
+-0x1.e3551ap-2
+-0x1.1cfd86p+4
+-0x1.e4ebeep-2
+-0x1.1cfd86p+4
+-0x1.d7c002p+4
+-0x1.1d0042p+4
+-0x1.18c254p+5
+-0x1.1d035cp+4
+-0x1.18c132p+5
+-0x1.d77dccp+4
+-0x1.2f9f76p+3
+-0x1.d77ea8p+4
+-0x1.532d3cp+3
+-0x1.3041dcp+4
+-0x1.5330acp+3
+-0x1.304142p+4
+-0x1.462778p+4
+-0x1.14ce04p+4
+-0x1.462852p+4
+-0x1.14ce04p+4
+-0x1.f7f20ap+2
+-0x1.14ce56p+4
+-0x1.f7f366p+2
+-0x1.14ce94p+4
+-0x1.60818cp+3
+-0x1.14cf84p+4
+-0x1.607facp+3
+-0x1.934a68p+4
+-0x1.f7f43cp+2
+-0x1.319b62p+4
+-0x1.2f9e1cp+3
+-0x1.2779b8p+4
+-0x1.09de68p+5
+-0x1.319bcep+4
+-0x1.09de8cp+5
+-0x1.319b34p+4
+-0x1.09de76p+5
+-0x1.608308p+3
+-0x1.f7fe1ap+2
+-0x1.608224p+3
+-0x1.f7ffb8p+2
+0x1.488ccp+3
+-0x1.11daccp+4
+-0x1.1e8f86p+4
+-0x1.6ab298p+1
+-0x1.3372e8p+2
+0x1.488fbap+3
+0x1.488f42p+3
+-0x1.f3176ap+4
+-0x1.3372e8p+2
+-0x1.f31768p+4
+-0x1.724a04p+1
+-0x1.29a49ap+4
+-0x1.724d32p+1
+-0x1.29a498p+4
+0x1.0e8b4ep-2
+0x1.09a4f4p-2
+0x1.09ee38p-2
+0x1.f4eafep-3
+0x1.15fbcep-2
+0x1.0dbd22p-2
+0x0p+0
+0x1.156d16p-2
+0x1.fb749cp-3
+0x1.48a4a2p-3
+0x1.6382e6p-3
+0x1.c9ebcep-7
+0x1.25bc9ap-5
+-0x1.3ea2ep-3
+-0x1.10b766p-3
+-0x1.175068p-2
+-0x1.03b35ep-2
+-0x1.7142bp-2
+-0x1.64e6bep-2
+-0x1.e4ebeep-2
+-0x1.e28642p-2
+0x0p+0
+-0x1.bebd36p+1
+-0x1.cfddecp+3
+-0x1.beb712p+1
+-0x1.1d026p+4
+-0x1.5cf18cp-4
+-0x1.18c1dcp+5
+-0x1.5b87a2p-4
+-0x1.d7bf88p+4
+-0x1.7122bcp-3
+-0x1.d77cf6p+4
+-0x1.70bf0ap-3
+-0x1.319b34p+4
+-0x1.83f77ap+1
+-0x1.532d36p+3
+-0x1.83feb2p+1
+-0x1.462852p+4
+-0x1.90d452p+1
+-0x1.14cdd6p+4
+-0x1.90dd88p+1
+-0x1.934a3p+4
+-0x1.8dafe6p-3
+-0x1.2f9ed8p+3
+-0x1.8d5f98p-3
+-0x1.09de76p+5
+-0x1.a04fd8p+1
+-0x1.30410ap+4
+-0x1.a0590ep+1
+-0x1.60836ap+3
+-0x1.8ec81ap+3
+-0x1.f7fcecp+2
+-0x1.8ec9dcp+3
+-0x1.1e8f1cp+4
+-0x1.4b0af6p+3
+-0x1.11dac8p+4
+-0x1.4b0a1p+3
+-0x1.6ab19cp+1
+-0x1.73663p+1
+-0x1.f3177ap+4
+-0x1.736d1cp+1
+-0x1.29a498p+4
+-0x1.51c662p+0
+-0x1.29a498p+4
+-0x1.51d676p+0
+-0x1.724d32p+1
+-0x1.51da64p+0
+-0x1.724f3p+1
+-0x1.51dd2cp+0
+0x1.ee26p-3
+-0x1.51dd2cp+0
+0x1.049662p-2
+-0x1.51dd2cp+0
+0x1.049662p-2
+-0x1.51cedcp+0
+0x1.681e1p+3
+-0x1.51ce98p+0
+0x1.681dfap+3
+0x1.045cecp-2
+-0x1.381a58p+5
+0x1.046058p-2
+-0x1.381a7p+5
+0x1.046058p-2
+0x1.3e2f0ap+2
+0x1.046058p-2
+0x1.3e2f0ap+2
+0x1.04761p-2
+0x1.09bd24p-2
+0x1.04761p-2
+0x1.09bd24p-2
+0x1.09d7c6p-2
+0x1.09bf96p-2
+0x1.09bc0ep-2
+0x1.09bb5p-2
+0x1.3e2daep+2
+0x1.09b41ap-2
+0x1.3e2d8ap+2
+0x1.09b448p-2
+-0x1.cf47c4p+4
+0x1.0f0148p-2
+-0x1.888f22p+5
+0x1.0ed64cp-2
+0x1.9a8fecp+3
+0x1.0ebdcap-2
+0x1.9a8f12p+3
+0x1.0ec67ap-2
+0x1.09c7dep-2
+0x1.0eccbp-2
+0x1.09c7dep-2
+0x1.0eccbp-2
+-0x1.b7636ep+5
+0x1.15b3b6p-2
+-0x1.4c9406p+0
+0x1.15f2ep-2
+-0x1.4c9bc6p+0
+0x1.15f29ap-2
+-0x1.b7636ep+5
+-0x1.cf47c4p+4
+-0x1.888f22p+5
+0x1.9a915cp+3
+0x1.09c7dep-2
+0x1.9a9154p+3
+0x1.09c7dep-2
+0x1.9a9154p+3
+-0x1.cf47c4p+4
+-0x1.888f22p+5
+0x1.3e2ea8p+2
+0x1.09f006p-2
+0x1.3e2ea8p+2
+0x1.09f006p-2
+-0x1.381a7p+5
+0x1.3e2ea8p+2
+-0x1.381a7p+5
+0x1.3e2ea8p+2
+-0x1.f3177ap+4
+0x1.ee26p-3
+-0x1.f316bap+4
+0x1.f2915p-3
+-0x1.29a492p+4
+0x1.f3d4dp-3
+-0x1.29a562p+4
+0x1.f61bc2p-3
+-0x1.f316b6p+4
+0x1.448606p-3
+-0x1.f31806p+4
+0x1.3ccc7p-3
+-0x1.1e8f1cp+4
+0x1.3ccc7p-3
+-0x1.11dac8p+4
+0x1.4631dap-3
+-0x1.11dc5ap+4
+0x1.4d039p-3
+-0x1.f7fcecp+2
+0x1.e124ccp-7
+-0x1.f80034p+2
+0x1.08cf36p-6
+-0x1.60836ap+3
+0x1.93cafep-7
+-0x1.607da4p+3
+0x1.277104p-6
+-0x1.1e9078p+4
+0x1.3b3e4p-6
+-0x1.607dfap+3
+-0x1.2ae23p-3
+-0x1.6080b4p+3
+-0x1.366e16p-3
+-0x1.30410ap+4
+-0x1.3a202ep-3
+-0x1.3043ep+4
+-0x1.34d7b8p-3
+-0x1.2779b8p+4
+-0x1.10613p-2
+-0x1.319b34p+4
+-0x1.0f33ccp-2
+-0x1.319c54p+4
+-0x1.0bf4ecp-2
+-0x1.d77cf6p+4
+-0x1.0c0ceap-2
+-0x1.1d026p+4
+-0x1.7fd80cp-2
+-0x1.1cfc6p+4
+-0x1.704d02p-2
+-0x1.cfddecp+3
+-0x1.704d02p-2
+-0x1.cfdfe2p+3
+-0x1.6fe6cep-2
+-0x1.2779b8p+4
+-0x1.70df2cp-2
+-0x1.1cfc6p+4
+-0x1.e30502p-2
+-0x1.1cfc9cp+4
+-0x1.e4ad4ap-2
+-0x1.1cfc9cp+4
+-0x1.d7bf88p+4
+-0x1.1cff54p+4
+-0x1.18c1dcp+5
+-0x1.1d026ep+4
+-0x1.18c0bap+5
+-0x1.d77dd4p+4
+-0x1.2f9ed8p+3
+-0x1.d77eaep+4
+-0x1.532d36p+3
+-0x1.304164p+4
+-0x1.5330a8p+3
+-0x1.3040cap+4
+-0x1.462852p+4
+-0x1.14cdd6p+4
+-0x1.46292cp+4
+-0x1.14cdd6p+4
+-0x1.f7f132p+2
+-0x1.14ce26p+4
+-0x1.f7f284p+2
+-0x1.14ce62p+4
+-0x1.608124p+3
+-0x1.14cf52p+4
+-0x1.607f46p+3
+-0x1.934a3p+4
+-0x1.f7f352p+2
+-0x1.319b3ep+4
+-0x1.2f9d8p+3
+-0x1.2779b8p+4
+-0x1.09de76p+5
+-0x1.319bacp+4
+-0x1.09de98p+5
+-0x1.319b12p+4
+-0x1.09de82p+5
+-0x1.6082a2p+3
+-0x1.f7fd26p+2
+-0x1.6081c8p+3
+-0x1.f7feb4p+2
+0x1.488f0cp+3
+-0x1.11da56p+4
+-0x1.1e8ee4p+4
+-0x1.6ab19cp+1
+-0x1.3372e8p+2
+0x1.48919ap+3
+0x1.48906ep+3
+-0x1.f31806p+4
+-0x1.3372e8p+2
+-0x1.f31804p+4
+-0x1.7250aep+1
+-0x1.29a4dcp+4
+-0x1.7253c6p+1
+-0x1.29a4dap+4
+0x1.0eccbp-2
+0x1.09b198p-2
+0x1.09eb2ep-2
+0x1.f486aap-3
+0x1.15eef2p-2
+0x1.0de388p-2
+0x0p+0
+0x1.154c76p-2
+0x1.fb59dcp-3
+0x1.49f0c6p-3
+0x1.6433a2p-3
+0x1.bfab26p-7
+0x1.23231p-5
+-0x1.3ed97ep-3
+-0x1.10d264p-3
+-0x1.1741b2p-2
+-0x1.03af24p-2
+-0x1.7168cep-2
+-0x1.65052p-2
+-0x1.e4ad4ap-2
+-0x1.e271dap-2
+0x0p+0
+-0x1.bebf5ap+1
+-0x1.cfdf1cp+3
+-0x1.beb954p+1
+-0x1.1d0172p+4
+-0x1.5c6d5ep-4
+-0x1.18c164p+5
+-0x1.5afeccp-4
+-0x1.d7bf0ep+4
+-0x1.710abcp-3
+-0x1.d77cfap+4
+-0x1.70a6a2p-3
+-0x1.319b12p+4
+-0x1.83f9aep+1
+-0x1.532d36p+3
+-0x1.8400b4p+1
+-0x1.46292cp+4
+-0x1.90d43ep+1
+-0x1.14cda4p+4
+-0x1.90dd7ap+1
+-0x1.9349f8p+4
+-0x1.8d9e4ep-3
+-0x1.2f9e3ep+3
+-0x1.8d4caep-3
+-0x1.09de82p+5
+-0x1.a05014p+1
+-0x1.304092p+4
+-0x1.a0590ap+1
+-0x1.608304p+3
+-0x1.8ec808p+3
+-0x1.f7fc02p+2
+-0x1.8ec9c2p+3
+-0x1.1e8e7cp+4
+-0x1.4b0a96p+3
+-0x1.11da52p+4
+-0x1.4b0982p+3
+-0x1.6ab0a6p+1
+-0x1.73680cp+1
+-0x1.f31816p+4
+-0x1.736ed6p+1
+-0x1.29a4dap+4
+-0x1.51ce98p+0
+-0x1.29a4dap+4
+-0x1.51dd76p+0
+-0x1.7253c6p+1
+-0x1.51df9ep+0
+-0x1.7254dep+1
+-0x1.51e106p+0
+0x1.eda3e4p-3
+-0x1.51e106p+0
+0x1.0491a6p-2
+-0x1.51e106p+0
+0x1.0491a6p-2
+-0x1.51d2bcp+0
+0x1.681dfap+3
+-0x1.51d278p+0
+0x1.681de4p+3
+0x1.04584ep-2
+-0x1.381a7p+5
+0x1.045b88p-2
+-0x1.381a86p+5
+0x1.045b88p-2
+0x1.3e2ea8p+2
+0x1.045b88p-2
+0x1.3e2ea8p+2
+0x1.0471b6p-2
+0x1.09d4b8p-2
+0x1.0471b6p-2
+0x1.09d4b8p-2
+0x1.09f006p-2
+0x1.09d73ep-2
+0x1.09cf3p-2
+0x1.09d22cp-2
+0x1.3e2d44p+2
+0x1.09c976p-2
+0x1.3e2d28p+2
+0x1.09c99ap-2
+-0x1.cf47c4p+4
+0x1.0f09d8p-2
+-0x1.888f22p+5
+0x1.0ed86ep-2
+0x1.9a901p+3
+0x1.0ebfc2p-2
+0x1.9a8f12p+3
+0x1.0ec9dap-2
+0x1.09dd76p-2
+0x1.0ed088p-2
+0x1.09dd76p-2
+0x1.0ed088p-2
+-0x1.b7636ep+5
+0x1.159a32p-2
+-0x1.4c9802p+0
+0x1.15dbf8p-2
+-0x1.4ca03ep+0
+0x1.15dbacp-2
+-0x1.b7636ep+5
+-0x1.cf47c4p+4
+-0x1.888f22p+5
+0x1.9a918ap+3
+0x1.09dd76p-2
+0x1.9a9182p+3
+0x1.09dd76p-2
+0x1.9a9182p+3
+-0x1.cf47c4p+4
+-0x1.888f22p+5
+0x1.3e2e9p+2
+0x1.0a035cp-2
+0x1.3e2e9p+2
+0x1.0a035cp-2
+-0x1.381a86p+5
+0x1.3e2e9p+2
+-0x1.381a86p+5
+0x1.3e2e9p+2
+-0x1.f31816p+4
+0x1.eda3e4p-3
+-0x1.f31754p+4
+0x1.f21ee6p-3
+-0x1.29a4d6p+4
+0x1.f36f8p-3
+-0x1.29a5a6p+4
+0x1.f5b7cep-3
+-0x1.f3175p+4
+0x1.45084ap-3
+-0x1.f318ap+4
+0x1.3d5428p-3
+-0x1.1e8e7cp+4
+0x1.3d5428p-3
+-0x1.11da52p+4
+0x1.46c28ap-3
+-0x1.11dbep+4
+0x1.4d7cf8p-3
+-0x1.f7fc02p+2
+0x1.d8fe18p-7
+-0x1.f7ff48p+2
+0x1.04aaf8p-6
+-0x1.608304p+3
+0x1.8c336ep-7
+-0x1.607d4p+3
+0x1.237b04p-6
+-0x1.1e8fdap+4
+0x1.378faep-6
+-0x1.607d96p+3
+-0x1.2ac9d6p-3
+-0x1.608052p+3
+-0x1.365a78p-3
+-0x1.304092p+4
+-0x1.3a102ep-3
+-0x1.304368p+4
+-0x1.34c6fp-3
+-0x1.2779b8p+4
+-0x1.105bd4p-2
+-0x1.319b12p+4
+-0x1.0f2e24p-2
+-0x1.319c32p+4
+-0x1.0bf002p-2
+-0x1.d77cfap+4
+-0x1.0c082ap-2
+-0x1.1d0172p+4
+-0x1.7ffc3p-2
+-0x1.1cfb72p+4
+-0x1.70719p-2
+-0x1.cfdf1cp+3
+-0x1.70719p-2
+-0x1.cfe114p+3
+-0x1.700b08p-2
+-0x1.2779b8p+4
+-0x1.71049ap-2
+-0x1.1cfb72p+4
+-0x1.e2dca8p-2
+-0x1.1cfbaep+4
+-0x1.e48ce8p-2
+-0x1.1cfbaep+4
+-0x1.d7bf0ep+4
+-0x1.1cfe64p+4
+-0x1.18c164p+5
+-0x1.1d017ep+4
+-0x1.18c042p+5
+-0x1.d77dd6p+4
+-0x1.2f9e3ep+3
+-0x1.d77ebp+4
+-0x1.532d36p+3
+-0x1.3040ecp+4
+-0x1.5330a8p+3
+-0x1.304054p+4
+-0x1.46292cp+4
+-0x1.14cda4p+4
+-0x1.462a06p+4
+-0x1.14cda4p+4
+-0x1.f7f062p+2
+-0x1.14cdf2p+4
+-0x1.f7f1bp+2
+-0x1.14ce2ep+4
+-0x1.6080c2p+3
+-0x1.14cf1cp+4
+-0x1.607ee4p+3
+-0x1.9349f8p+4
+-0x1.f7f27cp+2
+-0x1.319b1cp+4
+-0x1.2f9ce8p+3
+-0x1.2779b8p+4
+-0x1.09de82p+5
+-0x1.319b8ap+4
+-0x1.09dea4p+5
+-0x1.319af2p+4
+-0x1.09de8ep+5
+-0x1.60823ep+3
+-0x1.f7fc44p+2
+-0x1.60816ap+3
+-0x1.f7fdc6p+2
+0x1.489036p+3
+-0x1.11d9ep+4
+-0x1.1e8e4ep+4
+-0x1.6ab0a6p+1
+-0x1.3372e8p+2
+0x1.48927ep+3
+0x1.4890dep+3
+-0x1.f318ap+4
+-0x1.3372e8p+2
+-0x1.f3189ep+4
+-0x1.72559ep+1
+-0x1.29a522p+4
+-0x1.7258d4p+1
+-0x1.29a52p+4
+0x1.0ed088p-2
+0x1.09c636p-2
+0x1.0a0136p-2
+0x1.f427aap-3
+0x1.15d7e8p-2
+0x1.0dec3p-2
+0x0p+0
+0x1.1536d8p-2
+0x1.fb1e6p-3
+0x1.4a6eap-3
+0x1.648944p-3
+0x1.bb9392p-7
+0x1.21f526p-5
+-0x1.3ec68cp-3
+-0x1.10e836p-3
+-0x1.173ae8p-2
+-0x1.03aabep-2
+-0x1.718c48p-2
+-0x1.65255p-2
+-0x1.e48ce8p-2
+-0x1.e260d4p-2
+0x0p+0
+-0x1.bec1a8p+1
+-0x1.cfe04ep+3
+-0x1.bebb96p+1
+-0x1.1d0082p+4
+-0x1.5be31cp-4
+-0x1.18c0ecp+5
+-0x1.5a745cp-4
+-0x1.d7be94p+4
+-0x1.70f3aep-3
+-0x1.d77cfcp+4
+-0x1.708f0ep-3
+-0x1.319af2p+4
+-0x1.83fbd6p+1
+-0x1.532d3ap+3
+-0x1.8402cep+1
+-0x1.462a06p+4
+-0x1.90d45ap+1
+-0x1.14cd7p+4
+-0x1.90dd88p+1
+-0x1.9349c2p+4
+-0x1.8d8c84p-3
+-0x1.2f9da6p+3
+-0x1.8d3aacp-3
+-0x1.09de8ep+5
+-0x1.a0500ep+1
+-0x1.30401cp+4
+-0x1.a05906p+1
+-0x1.60829ep+3
+-0x1.8ec7eep+3
+-0x1.f7fb24p+2
+-0x1.8ec9a6p+3
+-0x1.1e8de6p+4
+-0x1.4b0a3p+3
+-0x1.11d9dcp+4
+-0x1.4b090ep+3
+-0x1.6aafbp+1
+-0x1.73696ep+1
+-0x1.f318bp+4
+-0x1.73705ap+1
+-0x1.29a52p+4
+-0x1.51d278p+0
+0x1.681de4p+3
+0x1.048e36p-2
+0x1.09eb28p-2
+0x1.0f0dcap-2
+0x1.15834ep-2
+0x0p+0
+-0x1.4c9c5ep+0
+-0x1.b7636ep+5
+0x1.9a9052p+3
+-0x1.888f22p+5
+-0x1.cf47c4p+4
+0x1.0a035cp-2
+0x1.3e2e9p+2
+-0x1.381a86p+5
+0x1.ed6978p-3
+0x1.452f42p-3
+0x1.d5309cp-7
+-0x1.2acbeep-3
+-0x1.105386p-2
+-0x1.8013a4p-2
+-0x1.e2bef6p-2
+-0x1.cfe04ep+3
+-0x1.bec3f2p+1
+-0x1.1d0082p+4
+-0x1.18c0ecp+5
+-0x1.5b57d2p-4
+-0x1.d7be94p+4
+-0x1.d77cfcp+4
+-0x1.70dc0cp-3
+-0x1.532d3ap+3
+-0x1.83fdfp+1
+-0x1.462a06p+4
+-0x1.14cd7p+4
+-0x1.90d474p+1
+-0x1.9349c2p+4
+-0x1.2f9da6p+3
+-0x1.8d7a96p-3
+-0x1.09de8ep+5
+-0x1.319af2p+4
+-0x1.2779b8p+4
+-0x1.30401cp+4
+-0x1.a05002p+1
+-0x1.60829ep+3
+-0x1.f7fb24p+2
+-0x1.8ec7d6p+3
+-0x1.11d9dcp+4
+-0x1.4b09c2p+3
+-0x1.6aafbp+1
+0x1.4890a6p+3
+-0x1.3372e8p+2
+-0x1.1e8de6p+4
+-0x1.f318bp+4
+-0x1.736ae8p+1
+-0x1.7258d4p+1
+-0x1.29a52p+4
+-0x1.514c1ap+0
+0x1.682b48p+3
+-0x1.7245d8p+1
+0x1.48968cp+3
+0x1.06155ap-2
+-0x1.3817cp+5
+0x1.3e4166p+2
+0x1.0addcep-2
+0x1.9a9b64p+3
+-0x1.4c5e46p+0
+-0x1.b756ep+5
+-0x1.cf50cap+4
+-0x1.888a94p+5
+-0x1.277fc4p+4
+-0x1.33304p+2
+-0x1.91077cp+1
+-0x1.14d45ap+4
+-0x1.93509ap+4
+-0x1.735446p-3
+-0x1.d781a6p+4
+-0x1.31a006p+4
+-0x1.bee98cp+1
+-0x1.1d094ap+4
+-0x1.cfe81ep+3
+-0x1.63dde4p-4
+-0x1.18c552p+5
+-0x1.d7c814p+4
+-0x1.8ffdfp-3
+-0x1.2fa802p+3
+-0x1.09e0cp+5
+-0x1.a0894ap+1
+-0x1.30480ep+4
+-0x1.609094p+3
+-0x1.734f96p+1
+-0x1.f31254p+4
+-0x1.29a2aep+4
+-0x1.842ad6p+1
+-0x1.53376cp+3
+-0x1.462f18p+4
+-0x1.8edb74p+3
+-0x1.1e937p+4
+-0x1.f81784p+2
+-0x1.4b0bdap+3
+-0x1.6a2e1cp+1
+-0x1.11d4d4p+4
+0x1.1687b8p-2
+0x1.10458ep-2
+0x1.0b1e5ep-2
+0x1.ef6a7ep-3
+0x1.4639b8p-3
+0x1.aa5654p-7
+-0x1.2dd16cp-3
+-0x1.118f74p-2
+-0x1.81137cp-2
+-0x1.e30946p-2
+0x0p+0
+0x1.aa5654p-7
+0x0p+0
+0x1.d5309cp-7
+0x0p+0
+0x1.168ee6p+2
+0x0p+0
+0x1.169e86p+2
+0x0p+0
+0x1.06155ap-2
+0x0p+0
+0x1.048e36p-2
+0x0p+0
+0x1.a19998p+0
+0x0p+0
+0x1.a007d8p+0
+0x0p+0
+0x1.3f0824p+2
+0x0p+0
+0x1.3ef89ep+2
+0x0p+0
+0x1.3ab6ccp+1
+0x0p+0
+0x1.3afefcp+1
+0x0p+0
+0x1.32a44p+0
+0x0p+0
+0x1.32128p+0
+0x0p+0
+0x1.86012p-2
+0x0p+0
+0x1.87842p-2
+0x0p+0
+0x1.8c903ep+2
+0x0p+0
+0x1.8cb256p+2
+0x0p+0
+0x1.edf8f8p+0
+0x0p+0
+0x1.ee90f8p+0
+0x0p+0
+0x1.4d2768p+1
+0x0p+0
+0x1.4d6dc8p+1
+0x0p+0
+0x1.868514p+2
+0x0p+0
+0x1.8698d6p+2
+0x0p+0
+0x1.81fecp+2
+0x0p+0
+0x1.82131p+2
+0x0p+0
+0x1.0b1e5ep-2
+0x0p+0
+0x1.09eb28p-2
+0x0p+0
+0x1.08e7e8p+0
+0x0p+0
+0x1.097468p+0
+0x0p+0
+0x1.f25fd8p+0
+0x0p+0
+0x1.f2aa78p+0
+0x0p+0
+0x1.6555ep+1
+0x0p+0
+0x1.657b7ap+1
+0x0p+0
+0x1.7a0e7ep+2
+0x0p+0
+0x1.7a1e7cp+2
+0x0p+0
+0x1.8106bep+2
+0x0p+0
+0x1.811a7ep+2
+0x0p+0
+0x1.10458ep-2
+0x0p+0
+0x1.0f0dcap-2
+0x0p+0
+0x1.7a0e7ep+2
+0x0p+0
+0x1.7a1e7cp+2
+-0x1.51d278p+0
+-0x1.29a52p+4
+-0x1.51d278p+0
+-0x1.7258d4p+1
+-0x1.51d278p+0
+0x1.ed6978p-3
+-0x1.51d278p+0
+0x1.048e36p-2
+-0x1.51d278p+0
+0x1.09eb28p-2
+-0x1.51d278p+0
+0x1.681de4p+3
+0x1.681de4p+3
+0x1.048e36p-2
+0x1.0a035cp-2
+0x1.09eb28p-2
+0x1.3e2e9p+2
+0x1.09eb28p-2
+0x1.048e36p-2
+0x1.09eb28p-2
+-0x1.cf47c4p+4
+0x1.0f0dcap-2
+-0x1.888f22p+5
+0x1.0f0dcap-2
+0x1.9a9052p+3
+0x1.0f0dcap-2
+0x1.0a035cp-2
+0x1.0f0dcap-2
+-0x1.b7636ep+5
+0x1.15834ep-2
+-0x1.4c9c5ep+0
+0x1.15834ep-2
+-0x1.b7636ep+5
+-0x1.cf47c4p+4
+-0x1.888f22p+5
+0x1.9a9052p+3
+0x1.0a035cp-2
+0x1.9a9052p+3
+-0x1.cf47c4p+4
+-0x1.888f22p+5
+-0x1.381a86p+5
+0x1.3e2e9p+2
+0x1.3e2e9p+2
+0x1.0a035cp-2
+0x1.048e36p-2
+0x1.3e2e9p+2
+0x1.048e36p-2
+-0x1.381a86p+5
+-0x1.f318bp+4
+0x1.ed6978p-3
+-0x1.29a52p+4
+0x1.ed6978p-3
+-0x1.f318bp+4
+0x1.452f42p-3
+-0x1.1e8de6p+4
+0x1.452f42p-3
+-0x1.11d9dcp+4
+0x1.452f42p-3
+-0x1.f7fb24p+2
+0x1.d5309cp-7
+-0x1.60829ep+3
+0x1.d5309cp-7
+-0x1.1e8de6p+4
+0x1.d5309cp-7
+-0x1.60829ep+3
+-0x1.2acbeep-3
+-0x1.30401cp+4
+-0x1.2acbeep-3
+-0x1.2779b8p+4
+-0x1.105386p-2
+-0x1.319af2p+4
+-0x1.105386p-2
+-0x1.d77cfcp+4
+-0x1.105386p-2
+-0x1.1d0082p+4
+-0x1.8013a4p-2
+-0x1.cfe04ep+3
+-0x1.8013a4p-2
+-0x1.2779b8p+4
+-0x1.8013a4p-2
+-0x1.1d0082p+4
+-0x1.e2bef6p-2
+-0x1.1d0082p+4
+-0x1.d7be94p+4
+-0x1.1d0082p+4
+-0x1.18c0ecp+5
+-0x1.d77cfcp+4
+-0x1.2f9da6p+3
+-0x1.d77cfcp+4
+-0x1.532d3ap+3
+-0x1.30401cp+4
+-0x1.532d3ap+3
+-0x1.30401cp+4
+-0x1.462a06p+4
+-0x1.14cd7p+4
+-0x1.462a06p+4
+-0x1.14cd7p+4
+-0x1.f7fb24p+2
+-0x1.14cd7p+4
+-0x1.60829ep+3
+-0x1.9349c2p+4
+-0x1.f7fb24p+2
+-0x1.319af2p+4
+-0x1.2f9da6p+3
+-0x1.2779b8p+4
+-0x1.09de8ep+5
+-0x1.319af2p+4
+-0x1.09de8ep+5
+-0x1.60829ep+3
+-0x1.f7fb24p+2
+0x1.4890a6p+3
+-0x1.11d9dcp+4
+-0x1.1e8de6p+4
+-0x1.6aafbp+1
+-0x1.3372e8p+2
+0x1.4890a6p+3
+0x1.4890a6p+3
+-0x1.f318bp+4
+-0x1.3372e8p+2
+-0x1.f318bp+4
+-0x1.7258d4p+1
+-0x1.29a52p+4
+0x1.09eb28p-2
+0x1.0f0dcap-2
+0x1.ed6978p-3
+0x1.09eb28p-2
+0x1.0f0dcap-2
+0x1.15834ep-2
+0x1.15834ep-2
+0x0p+0
+0x1.452f42p-3
+0x1.ed6978p-3
+0x1.d5309cp-7
+0x1.452f42p-3
+-0x1.2acbeep-3
+0x1.d5309cp-7
+-0x1.105386p-2
+-0x1.2acbeep-3
+-0x1.8013a4p-2
+-0x1.105386p-2
+-0x1.e2bef6p-2
+-0x1.8013a4p-2
+0x0p+0
+-0x1.e2bef6p-2
+-0x1.cfe04ep+3
+-0x1.bec3f2p+1
+-0x1.1d0082p+4
+-0x1.bec3f2p+1
+-0x1.18c0ecp+5
+-0x1.5b57d2p-4
+-0x1.d7be94p+4
+-0x1.5b57d2p-4
+-0x1.d77cfcp+4
+-0x1.70dc0cp-3
+-0x1.319af2p+4
+-0x1.70dc0cp-3
+-0x1.532d3ap+3
+-0x1.83fdfp+1
+-0x1.462a06p+4
+-0x1.83fdfp+1
+-0x1.14cd7p+4
+-0x1.90d474p+1
+-0x1.9349c2p+4
+-0x1.90d474p+1
+-0x1.2f9da6p+3
+-0x1.8d7a96p-3
+-0x1.09de8ep+5
+-0x1.8d7a96p-3
+-0x1.30401cp+4
+-0x1.a05002p+1
+-0x1.60829ep+3
+-0x1.a05002p+1
+-0x1.f7fb24p+2
+-0x1.8ec7d6p+3
+-0x1.1e8de6p+4
+-0x1.8ec7d6p+3
+-0x1.11d9dcp+4
+-0x1.4b09c2p+3
+-0x1.6aafbp+1
+-0x1.4b09c2p+3
+-0x1.f318bp+4
+-0x1.736ae8p+1
+-0x1.29a52p+4
+-0x1.736ae8p+1
+-0x1.520d5ap+0
+-0x1.29a67cp+4
+-0x1.52271ap+0
+-0x1.29a674p+4
+-0x1.52271ap+0
+-0x1.7263bap+1
+-0x1.522d44p+0
+-0x1.7266dap+1
+-0x1.5231d6p+0
+0x1.ecbd0ep-3
+-0x1.5231d6p+0
+0x1.030ad8p-2
+-0x1.5231d6p+0
+0x1.030ad8p-2
+-0x1.521d14p+0
+0x1.083df8p-2
+-0x1.521d14p+0
+0x1.681688p+3
+-0x1.521cacp+0
+0x1.681668p+3
+0x1.681668p+3
+0x1.02b79ap-2
+0x1.08aaeep-2
+0x1.083df8p-2
+0x1.0893a2p-2
+0x1.083a6p-2
+0x1.3e15ep+2
+0x1.08386ap-2
+0x1.3e15c4p+2
+0x1.08388ep-2
+0x1.02b79ap-2
+0x1.0835e8p-2
+0x1.02b79ap-2
+0x1.0835e8p-2
+-0x1.cf3b28p+4
+0x1.0d925ap-2
+-0x1.889556p+5
+0x1.0d7da2p-2
+0x1.9a8768p+3
+0x1.0d630ep-2
+0x1.9a868ep+3
+0x1.0d6bb6p-2
+0x1.0896d6p-2
+0x1.0d70a6p-2
+0x1.0896d6p-2
+0x1.0d70a6p-2
+-0x1.b771acp+5
+0x1.14c03ap-2
+-0x1.4ccd24p+0
+0x1.1503cep-2
+-0x1.4cd5a2p+0
+0x1.15038p-2
+-0x1.b771acp+5
+-0x1.cf3b28p+4
+-0x1.889556p+5
+0x1.9a8864p+3
+0x1.0896d6p-2
+0x1.9a884ep+3
+0x1.0896d6p-2
+0x1.9a884ep+3
+-0x1.cf3b28p+4
+-0x1.889556p+5
+-0x1.381d8cp+5
+0x1.3e16dep+2
+-0x1.381d8cp+5
+0x1.3e16dep+2
+0x1.3e16dep+2
+0x1.08d146p-2
+0x1.3e16dep+2
+0x1.08d146p-2
+0x1.02d4fp-2
+0x1.3e16dep+2
+0x1.02d4fp-2
+0x1.3e16dep+2
+0x1.02ece8p-2
+-0x1.381d8cp+5
+0x1.02f04ap-2
+-0x1.381da4p+5
+-0x1.f31d92p+4
+0x1.ecbd0ep-3
+-0x1.f31cdp+4
+0x1.f13462p-3
+-0x1.29a674p+4
+0x1.f26998p-3
+-0x1.29a746p+4
+0x1.f4b51cp-3
+-0x1.f31cccp+4
+0x1.41cdaap-3
+-0x1.f31e16p+4
+0x1.3a3e3p-3
+-0x1.1e8a8ap+4
+0x1.3a3e3p-3
+-0x1.11e082p+4
+0x1.43c646p-3
+-0x1.11e20cp+4
+0x1.4a744cp-3
+-0x1.f7dffep+2
+0x1.0f4a98p-6
+-0x1.f7e33ap+2
+0x1.27274ep-6
+-0x1.60750ap+3
+0x1.d03b56p-7
+-0x1.606f4cp+3
+0x1.450054p-6
+-0x1.1e8becp+4
+0x1.58273ap-6
+-0x1.606fap+3
+-0x1.276078p-3
+-0x1.60725ap+3
+-0x1.32e9dcp-3
+-0x1.303912p+4
+-0x1.36a57ep-3
+-0x1.303beap+4
+-0x1.315c7cp-3
+-0x1.27739p+4
+-0x1.0f291ep-2
+-0x1.31962cp+4
+-0x1.0dfad4p-2
+-0x1.31974cp+4
+-0x1.0abdcep-2
+-0x1.d7789cp+4
+-0x1.0ad616p-2
+-0x1.1cfadep+4
+-0x1.7ed5bp-2
+-0x1.1cf4dcp+4
+-0x1.6f4dd8p-2
+-0x1.cfd578p+3
+-0x1.6f4dd8p-2
+-0x1.cfd76ep+3
+-0x1.6ee784p-2
+-0x1.27739p+4
+-0x1.6fdebap-2
+-0x1.1cf4dcp+4
+-0x1.e2fb0cp-2
+-0x1.1cf518p+4
+-0x1.e4a696p-2
+-0x1.1cf518p+4
+-0x1.d7b6b6p+4
+-0x1.1cf7d4p+4
+-0x1.18be1ap+5
+-0x1.1cfaeep+4
+-0x1.18bcf8p+5
+-0x1.d77978p+4
+-0x1.2f949ep+3
+-0x1.d77a4ep+4
+-0x1.5323a4p+3
+-0x1.30397p+4
+-0x1.53271p+3
+-0x1.3038d6p+4
+-0x1.4622c8p+4
+-0x1.14c6a2p+4
+-0x1.4623a4p+4
+-0x1.14c6a2p+4
+-0x1.f7d444p+2
+-0x1.14c6fp+4
+-0x1.f7d59p+2
+-0x1.14c72ap+4
+-0x1.6072ccp+3
+-0x1.14c818p+4
+-0x1.6070fp+3
+-0x1.93430ep+4
+-0x1.f7d65ap+2
+-0x1.319638p+4
+-0x1.2f934ep+3
+-0x1.27739p+4
+-0x1.09dc2ap+5
+-0x1.3196a6p+4
+-0x1.09dc4cp+5
+-0x1.31960ep+4
+-0x1.09dc36p+5
+-0x1.607446p+3
+-0x1.f7e012p+2
+-0x1.607376p+3
+-0x1.f7e18ep+2
+0x1.4885aap+3
+-0x1.11e01p+4
+-0x1.1e8a66p+4
+-0x1.6b26c8p+1
+-0x1.33ba3ap+2
+0x1.488868p+3
+0x1.488868p+3
+-0x1.f31e16p+4
+-0x1.33ba3ap+2
+-0x1.f31e14p+4
+-0x1.72694ep+1
+-0x1.29a6c4p+4
+-0x1.726c2ep+1
+-0x1.29a6c2p+4
+0x1.0d70a6p-2
+0x1.08388p-2
+0x1.08960cp-2
+0x1.f325b4p-3
+0x1.14ffaep-2
+0x1.0ca814p-2
+0x0p+0
+0x1.14547ep-2
+0x1.f9b26p-3
+0x1.4768b2p-3
+0x1.61a056p-3
+0x1.ff649cp-7
+0x1.2f733ep-5
+-0x1.3b543cp-3
+-0x1.0db0ccp-3
+-0x1.160794p-2
+-0x1.02867cp-2
+-0x1.7066b8p-2
+-0x1.64058p-2
+-0x1.e4a696p-2
+-0x1.e2331p-2
+0x0p+0
+-0x1.be9936p+1
+-0x1.cfd6aap+3
+-0x1.be9326p+1
+-0x1.1cf9f2p+4
+-0x1.54b5fap-4
+-0x1.18bda2p+5
+-0x1.534c3ap-4
+-0x1.d7b63cp+4
+-0x1.6e90eep-3
+-0x1.d7789cp+4
+-0x1.6e2cb4p-3
+-0x1.31960ep+4
+-0x1.83cb82p+1
+-0x1.5323a2p+3
+-0x1.83d2c6p+1
+-0x1.4623a4p+4
+-0x1.909f1cp+1
+-0x1.14c66ep+4
+-0x1.90a726p+1
+-0x1.9342d8p+4
+-0x1.8b1f5p-3
+-0x1.2f940cp+3
+-0x1.8ad038p-3
+-0x1.09dc36p+5
+-0x1.a0173p+1
+-0x1.30389ep+4
+-0x1.a02098p+1
+-0x1.6074a4p+3
+-0x1.8eb3f8p+3
+-0x1.f7defap+2
+-0x1.8eb5eep+3
+-0x1.1e89fcp+4
+-0x1.4b080ep+3
+-0x1.11e00cp+4
+-0x1.4b072ep+3
+-0x1.6b25d6p+1
+-0x1.738272p+1
+-0x1.f31e26p+4
+-0x1.738972p+1
+-0x1.29a6c2p+4
+-0x1.521cacp+0
+-0x1.29a6c2p+4
+-0x1.523396p+0
+-0x1.29a6bap+4
+-0x1.523396p+0
+-0x1.726c2ep+1
+-0x1.52370ap+0
+-0x1.726deep+1
+-0x1.52398p+0
+0x1.ec2de6p-3
+-0x1.52398p+0
+0x1.02f04ap-2
+-0x1.52398p+0
+0x1.02f04ap-2
+-0x1.5224fp+0
+0x1.08888ap-2
+-0x1.5224fp+0
+0x1.681668p+3
+-0x1.522484p+0
+0x1.681646p+3
+0x1.681646p+3
+0x1.029dd8p-2
+0x1.08d146p-2
+0x1.08888ap-2
+0x1.08a9fap-2
+0x1.088278p-2
+0x1.3e155cp+2
+0x1.087a06p-2
+0x1.3e155cp+2
+0x1.087a06p-2
+0x1.029dd8p-2
+0x1.0875ap-2
+0x1.029dd8p-2
+0x1.0875ap-2
+-0x1.cf3b28p+4
+0x1.0dd192p-2
+-0x1.889556p+5
+0x1.0daffp-2
+0x1.9a8678p+3
+0x1.0d954ap-2
+0x1.9a85dap+3
+0x1.0d9b96p-2
+0x1.08b7c4p-2
+0x1.0da0fep-2
+0x1.08b7c4p-2
+0x1.0da0fep-2
+-0x1.b771acp+5
+0x1.14a7f8p-2
+-0x1.4cd1b2p+0
+0x1.14ee06p-2
+-0x1.4cdaa8p+0
+0x1.14edb4p-2
+-0x1.b771acp+5
+-0x1.cf3b28p+4
+-0x1.889556p+5
+0x1.9a87dcp+3
+0x1.08b7c4p-2
+0x1.9a87c8p+3
+0x1.08b7c4p-2
+0x1.9a87c8p+3
+-0x1.cf3b28p+4
+-0x1.889556p+5
+-0x1.381da4p+5
+0x1.3e172ep+2
+-0x1.381da4p+5
+0x1.3e172ep+2
+0x1.3e172ep+2
+0x1.08eeap-2
+0x1.3e172ep+2
+0x1.08eeap-2
+0x1.02bc1ep-2
+0x1.3e172ep+2
+0x1.02bc1ep-2
+0x1.3e172ep+2
+0x1.02d73cp-2
+-0x1.381da4p+5
+0x1.02da96p-2
+-0x1.381dbcp+5
+-0x1.f31e26p+4
+0x1.ec2de6p-3
+-0x1.f31d62p+4
+0x1.f0b06ap-3
+-0x1.29a6bap+4
+0x1.f1f06ep-3
+-0x1.29a78cp+4
+0x1.f4399p-3
+-0x1.f31d5ep+4
+0x1.4376a6p-3
+-0x1.f31eaap+4
+0x1.3bd23ep-3
+-0x1.1e89fcp+4
+0x1.3bd23ep-3
+-0x1.11e00cp+4
+0x1.45565cp-3
+-0x1.11e18cp+4
+0x1.4bd05ap-3
+-0x1.f7defap+2
+0x1.072124p-6
+-0x1.f7e23ep+2
+0x1.1f2da8p-6
+-0x1.6074a4p+3
+0x1.c15b7ap-7
+-0x1.606ee2p+3
+0x1.3da214p-6
+-0x1.1e8b6p+4
+0x1.518154p-6
+-0x1.606f38p+3
+-0x1.27ef6cp-3
+-0x1.6071ecp+3
+-0x1.336698p-3
+-0x1.30389ep+4
+-0x1.3711c8p-3
+-0x1.303b7ap+4
+-0x1.31c52p-3
+-0x1.27739p+4
+-0x1.0f2708p-2
+-0x1.31960ep+4
+-0x1.0df9c4p-2
+-0x1.31972ep+4
+-0x1.0abd3ep-2
+-0x1.d7789cp+4
+-0x1.0ad55ep-2
+-0x1.1cf9f2p+4
+-0x1.7eee66p-2
+-0x1.1cf3fp+4
+-0x1.6f68e2p-2
+-0x1.cfd6aap+3
+-0x1.6f68e2p-2
+-0x1.cfd8a2p+3
+-0x1.6f0298p-2
+-0x1.27739p+4
+-0x1.6ffb72p-2
+-0x1.1cf3fp+4
+-0x1.e2acb6p-2
+-0x1.1cf42ep+4
+-0x1.e46898p-2
+-0x1.1cf42ep+4
+-0x1.d7b63cp+4
+-0x1.1cf6e6p+4
+-0x1.18bda2p+5
+-0x1.1cfap+4
+-0x1.18bc8p+5
+-0x1.d77978p+4
+-0x1.2f940cp+3
+-0x1.d77a4ep+4
+-0x1.5323a2p+3
+-0x1.303904p+4
+-0x1.532712p+3
+-0x1.30386cp+4
+-0x1.4623a4p+4
+-0x1.14c66ep+4
+-0x1.46248p+4
+-0x1.14c66ep+4
+-0x1.f7d36ep+2
+-0x1.14c6b8p+4
+-0x1.f7d4aap+2
+-0x1.14c6fp+4
+-0x1.60725cp+3
+-0x1.14c7dep+4
+-0x1.607082p+3
+-0x1.9342d8p+4
+-0x1.f7d56ap+2
+-0x1.31961cp+4
+-0x1.2f92bep+3
+-0x1.27739p+4
+-0x1.09dc36p+5
+-0x1.31968ap+4
+-0x1.09dc58p+5
+-0x1.3195fp+4
+-0x1.09dc42p+5
+-0x1.6073d6p+3
+-0x1.f7df1ap+2
+-0x1.607312p+3
+-0x1.f7e07ep+2
+0x1.48882cp+3
+-0x1.11df92p+4
+-0x1.1e89e2p+4
+-0x1.6b25d6p+1
+-0x1.33ba3ap+2
+0x1.488a82p+3
+0x1.488a38p+3
+-0x1.f31eaap+4
+-0x1.33ba3ap+2
+-0x1.f31ea8p+4
+-0x1.726f4p+1
+-0x1.29a70ep+4
+-0x1.72722ap+1
+-0x1.29a70cp+4
+0x1.0da0fep-2
+0x1.08784cp-2
+0x1.08b138p-2
+0x1.f2b4dap-3
+0x1.14e9a8p-2
+0x1.0cb69ep-2
+0x0p+0
+0x1.143b8p-2
+0x1.f96f8ap-3
+0x1.48c622p-3
+0x1.6272b2p-3
+0x1.f5c98cp-7
+0x1.2ca1ap-5
+-0x1.3bb39ep-3
+-0x1.0dd8b8p-3
+-0x1.160432p-2
+-0x1.0286aap-2
+-0x1.70821cp-2
+-0x1.641d62p-2
+-0x1.e46898p-2
+-0x1.e21fb6p-2
+0x0p+0
+-0x1.be9b7p+1
+-0x1.cfd7dcp+3
+-0x1.be9566p+1
+-0x1.1cf902p+4
+-0x1.543214p-4
+-0x1.18bd2cp+5
+-0x1.52c244p-4
+-0x1.d7b5c2p+4
+-0x1.6e7828p-3
+-0x1.d7789cp+4
+-0x1.6e134ep-3
+-0x1.3195fp+4
+-0x1.83cdc2p+1
+-0x1.5323a8p+3
+-0x1.83d4bcp+1
+-0x1.46248p+4
+-0x1.909e38p+1
+-0x1.14c634p+4
+-0x1.90a746p+1
+-0x1.9342a2p+4
+-0x1.8b0e5cp-3
+-0x1.2f937ep+3
+-0x1.8abe0ap-3
+-0x1.09dc42p+5
+-0x1.a0178ap+1
+-0x1.303834p+4
+-0x1.a0208ep+1
+-0x1.607432p+3
+-0x1.8eb40ep+3
+-0x1.f7de08p+2
+-0x1.8eb5cep+3
+-0x1.1e897cp+4
+-0x1.4b07aep+3
+-0x1.11df8ep+4
+-0x1.4b06a2p+3
+-0x1.6b24ecp+1
+-0x1.73847cp+1
+-0x1.f31ebap+4
+-0x1.738b36p+1
+-0x1.29a70cp+4
+-0x1.522484p+0
+-0x1.29a70cp+4
+-0x1.523a4p+0
+-0x1.29a704p+4
+-0x1.523a4p+0
+-0x1.72722ap+1
+-0x1.523c0ep+0
+-0x1.727314p+1
+-0x1.523d3ap+0
+0x1.eb9f4p-3
+-0x1.523d3ap+0
+0x1.02da96p-2
+-0x1.523d3ap+0
+0x1.02da96p-2
+-0x1.522926p+0
+0x1.08a7dep-2
+-0x1.522926p+0
+0x1.681646p+3
+-0x1.5228c2p+0
+0x1.681626p+3
+0x1.681626p+3
+0x1.028a1ap-2
+0x1.08eeap-2
+0x1.08a7dep-2
+0x1.08c3b2p-2
+0x1.08a13ap-2
+0x1.3e157ap+2
+0x1.089798p-2
+0x1.3e157ap+2
+0x1.089798p-2
+0x1.028a1ap-2
+0x1.0892d2p-2
+0x1.028a1ap-2
+0x1.0892d2p-2
+-0x1.cf3b28p+4
+0x1.0dd63ep-2
+-0x1.889556p+5
+0x1.0dae96p-2
+0x1.9a860ep+3
+0x1.0d93f8p-2
+0x1.9a854cp+3
+0x1.0d9ba8p-2
+0x1.08d36ep-2
+0x1.0da1c2p-2
+0x1.08d36ep-2
+0x1.0da1c2p-2
+-0x1.b771acp+5
+0x1.148e78p-2
+-0x1.4cd67ep+0
+0x1.14d6dp-2
+-0x1.4cdfc2p+0
+0x1.14d67cp-2
+-0x1.b771acp+5
+-0x1.cf3b28p+4
+-0x1.889556p+5
+0x1.9a879p+3
+0x1.08d36ep-2
+0x1.9a878p+3
+0x1.08d36ep-2
+0x1.9a878p+3
+-0x1.cf3b28p+4
+-0x1.889556p+5
+-0x1.381dbcp+5
+0x1.3e1774p+2
+-0x1.381dbcp+5
+0x1.3e1774p+2
+0x1.3e1774p+2
+0x1.090756p-2
+0x1.3e1774p+2
+0x1.090756p-2
+0x1.02a7d4p-2
+0x1.3e1788p+2
+0x1.02a7d4p-2
+0x1.3e1788p+2
+0x1.02c59ap-2
+-0x1.381dbcp+5
+0x1.02c8e4p-2
+-0x1.381dd2p+5
+-0x1.f31ebap+4
+0x1.eb9f4p-3
+-0x1.f31df4p+4
+0x1.f0331ap-3
+-0x1.29a704p+4
+0x1.f1822p-3
+-0x1.29a7d6p+4
+0x1.f3cd0ep-3
+-0x1.f31dfp+4
+0x1.43f7cp-3
+-0x1.f31f3cp+4
+0x1.3c5a56p-3
+-0x1.1e897cp+4
+0x1.3c5a56p-3
+-0x1.11df8ep+4
+0x1.45e794p-3
+-0x1.11e108p+4
+0x1.4c491ep-3
+-0x1.f7de08p+2
+0x1.02ee1p-6
+-0x1.f7e14ap+2
+0x1.1aec1p-6
+-0x1.607432p+3
+0x1.b98668p-7
+-0x1.606e7p+3
+0x1.398d3ap-6
+-0x1.1e8ae2p+4
+0x1.4db97ep-6
+-0x1.606ec8p+3
+-0x1.27cccep-3
+-0x1.60717ep+3
+-0x1.334ad2p-3
+-0x1.303834p+4
+-0x1.36fb6p-3
+-0x1.303b1p+4
+-0x1.31ae3ep-3
+-0x1.27739p+4
+-0x1.0f25fcp-2
+-0x1.3195fp+4
+-0x1.0df7c6p-2
+-0x1.31971p+4
+-0x1.0abb7ap-2
+-0x1.d7789cp+4
+-0x1.0ad3cap-2
+-0x1.1cf902p+4
+-0x1.7f0ecep-2
+-0x1.1cf2fep+4
+-0x1.6f8a56p-2
+-0x1.cfd7dcp+3
+-0x1.6f8a56p-2
+-0x1.cfd9d4p+3
+-0x1.6f23dp-2
+-0x1.27739p+4
+-0x1.701e1p-2
+-0x1.1cf2fep+4
+-0x1.e287fcp-2
+-0x1.1cf33ep+4
+-0x1.e44acp-2
+-0x1.1cf33ep+4
+-0x1.d7b5c2p+4
+-0x1.1cf5f2p+4
+-0x1.18bd2cp+5
+-0x1.1cf90ep+4
+-0x1.18bc0ap+5
+-0x1.d77978p+4
+-0x1.2f937ep+3
+-0x1.d77a4ep+4
+-0x1.5323a8p+3
+-0x1.30389ap+4
+-0x1.532716p+3
+-0x1.303802p+4
+-0x1.46248p+4
+-0x1.14c634p+4
+-0x1.46255cp+4
+-0x1.14c634p+4
+-0x1.f7d296p+2
+-0x1.14c67ep+4
+-0x1.f7d3dp+2
+-0x1.14c6b6p+4
+-0x1.6071eep+3
+-0x1.14c7a2p+4
+-0x1.607014p+3
+-0x1.9342a2p+4
+-0x1.f7d48ep+2
+-0x1.3195fep+4
+-0x1.2f923p+3
+-0x1.27739p+4
+-0x1.09dc42p+5
+-0x1.31966cp+4
+-0x1.09dc64p+5
+-0x1.3195d2p+4
+-0x1.09dc4ep+5
+-0x1.607366p+3
+-0x1.f7de34p+2
+-0x1.6072aap+3
+-0x1.f7df8ap+2
+0x1.4889fap+3
+-0x1.11df14p+4
+-0x1.1e896cp+4
+-0x1.6b24ecp+1
+-0x1.33ba3ap+2
+0x1.488c02p+3
+0x1.488b3p+3
+-0x1.f31f3cp+4
+-0x1.33ba3ap+2
+-0x1.f31f3ap+4
+-0x1.7273b6p+1
+-0x1.29a758p+4
+-0x1.7276d4p+1
+-0x1.29a756p+4
+0x1.0da1c2p-2
+0x1.08957p-2
+0x1.08ce7ep-2
+0x1.f24d76p-3
+0x1.14d25cp-2
+0x1.0cbd6p-2
+0x0p+0
+0x1.1426fp-2
+0x1.f92632p-3
+0x1.49442cp-3
+0x1.62cf6ep-3
+0x1.f1ace8p-7
+0x1.2b6a5cp-5
+-0x1.3b9be8p-3
+-0x1.0def38p-3
+-0x1.160038p-2
+-0x1.028482p-2
+-0x1.70a2eep-2
+-0x1.643b6cp-2
+-0x1.e44acp-2
+-0x1.e2103ap-2
+0x0p+0
+-0x1.be9dbep+1
+-0x1.cfd90ep+3
+-0x1.be97aap+1
+-0x1.1cf81p+4
+-0x1.53a702p-4
+-0x1.18bcb6p+5
+-0x1.5237eap-4
+-0x1.d7b548p+4
+-0x1.6e5ff8p-3
+-0x1.d7789cp+4
+-0x1.6dfaaap-3
+-0x1.3195d2p+4
+-0x1.83cfdcp+1
+-0x1.5323bp+3
+-0x1.83d6c8p+1
+-0x1.46255cp+4
+-0x1.909e4cp+1
+-0x1.14c5f8p+4
+-0x1.90a75ap+1
+-0x1.93426cp+4
+-0x1.8afce2p-3
+-0x1.2f92fp+3
+-0x1.8aac2ap-3
+-0x1.09dc4ep+5
+-0x1.a01786p+1
+-0x1.3037cap+4
+-0x1.a02086p+1
+-0x1.6073c2p+3
+-0x1.8eb3fep+3
+-0x1.f7dd24p+2
+-0x1.8eb5b4p+3
+-0x1.1e8906p+4
+-0x1.4b074cp+3
+-0x1.11df1p+4
+-0x1.4b0632p+3
+-0x1.6b24p+1
+-0x1.7385dap+1
+-0x1.f31f4cp+4
+-0x1.738cc2p+1
+-0x1.29a756p+4
+-0x1.5228c2p+0
+0x1.681626p+3
+0x1.08c04cp-2
+0x1.0dda04p-2
+0x1.1477f8p-2
+0x0p+0
+-0x1.4cdb82p+0
+-0x1.b771acp+5
+0x1.9a85dep+3
+-0x1.889556p+5
+-0x1.cf3b28p+4
+0x1.3e15aap+2
+-0x1.381dd2p+5
+0x1.090606p-2
+0x1.02c8e4p-2
+0x1.eb5e7ap-3
+0x1.441becp-3
+0x1.00f19p-6
+-0x1.27cd0ep-3
+-0x1.0f1f3p-2
+-0x1.7f2328p-2
+-0x1.e26d0ap-2
+-0x1.cfd90ep+3
+-0x1.bea012p+1
+-0x1.1cf81p+4
+-0x1.18bcb6p+5
+-0x1.531bcep-4
+-0x1.d7b548p+4
+-0x1.d7789cp+4
+-0x1.6e475cp-3
+-0x1.5323bp+3
+-0x1.83d1ecp+1
+-0x1.46255cp+4
+-0x1.14c5f8p+4
+-0x1.909e68p+1
+-0x1.93426cp+4
+-0x1.2f92fp+3
+-0x1.8aeb4p-3
+-0x1.09dc4ep+5
+-0x1.3195d2p+4
+-0x1.27739p+4
+-0x1.3037cap+4
+-0x1.a0177cp+1
+-0x1.6073c2p+3
+-0x1.f7dd24p+2
+-0x1.8eb3ecp+3
+-0x1.11df1p+4
+-0x1.4b06e2p+3
+-0x1.6b24p+1
+0x1.488af2p+3
+-0x1.33ba3ap+2
+-0x1.1e8906p+4
+-0x1.f31f4cp+4
+-0x1.73875ap+1
+-0x1.7276d4p+1
+-0x1.29a756p+4
+-0x1.51d278p+0
+0x1.681de4p+3
+-0x1.7258d4p+1
+0x1.4890a6p+3
+0x1.048e36p-2
+-0x1.381a86p+5
+0x1.3e2e9p+2
+0x1.0a035cp-2
+0x1.9a9052p+3
+-0x1.4c9c5ep+0
+-0x1.b7636ep+5
+-0x1.cf47c4p+4
+-0x1.888f22p+5
+-0x1.2779b8p+4
+-0x1.3372e8p+2
+-0x1.90d474p+1
+-0x1.14cd7p+4
+-0x1.9349c2p+4
+-0x1.70dc0cp-3
+-0x1.d77cfcp+4
+-0x1.319af2p+4
+-0x1.bec3f2p+1
+-0x1.1d0082p+4
+-0x1.cfe04ep+3
+-0x1.5b57d2p-4
+-0x1.18c0ecp+5
+-0x1.d7be94p+4
+-0x1.8d7a96p-3
+-0x1.2f9da6p+3
+-0x1.09de8ep+5
+-0x1.a05002p+1
+-0x1.30401cp+4
+-0x1.60829ep+3
+-0x1.736ae8p+1
+-0x1.f318bp+4
+-0x1.29a52p+4
+-0x1.83fdfp+1
+-0x1.532d3ap+3
+-0x1.462a06p+4
+-0x1.8ec7d6p+3
+-0x1.1e8de6p+4
+-0x1.f7fb24p+2
+-0x1.4b09c2p+3
+-0x1.6aafbp+1
+-0x1.11d9dcp+4
+0x1.15834ep-2
+0x1.0f0dcap-2
+0x1.09eb28p-2
+0x1.ed6978p-3
+0x1.452f42p-3
+0x1.d5309cp-7
+-0x1.2acbeep-3
+-0x1.105386p-2
+-0x1.8013a4p-2
+-0x1.e2bef6p-2
+0x0p+0
+0x1.169e86p+2
+0x0p+0
+0x1.16ad06p+2
+0x0p+0
+0x1.048e36p-2
+0x0p+0
+0x1.02c8e4p-2
+0x0p+0
+0x1.a007d8p+0
+0x0p+0
+0x1.9e4018p+0
+0x0p+0
+0x1.3ef89ep+2
+0x0p+0
+0x1.3ee8d6p+2
+0x0p+0
+0x1.3afefcp+1
+0x0p+0
+0x1.3b63dcp+1
+0x0p+0
+0x1.32128p+0
+0x0p+0
+0x1.314cp+0
+0x0p+0
+0x1.87842p-2
+0x0p+0
+0x1.890e2p-2
+0x0p+0
+0x1.8cb256p+2
+0x0p+0
+0x1.8cd346p+2
+0x0p+0
+0x1.ee90f8p+0
+0x0p+0
+0x1.ef25b8p+0
+0x0p+0
+0x1.4d6dc8p+1
+0x0p+0
+0x1.4db128p+1
+0x0p+0
+0x1.8698d6p+2
+0x0p+0
+0x1.86ad7cp+2
+0x0p+0
+0x1.82131p+2
+0x0p+0
+0x1.82279p+2
+0x0p+0
+0x1.09eb28p-2
+0x0p+0
+0x1.08c04cp-2
+0x0p+0
+0x1.097468p+0
+0x0p+0
+0x1.09fb88p+0
+0x0p+0
+0x1.f2aa78p+0
+0x0p+0
+0x1.f2f078p+0
+0x0p+0
+0x1.657b7ap+1
+0x0p+0
+0x1.659f5ap+1
+0x0p+0
+0x1.7a1e7cp+2
+0x0p+0
+0x1.7a2d84p+2
+0x0p+0
+0x1.811a7ep+2
+0x0p+0
+0x1.812dc4p+2
+0x0p+0
+0x1.0f0dcap-2
+0x0p+0
+0x1.0dda04p-2
+0x0p+0
+0x1.7a1e7cp+2
+0x0p+0
+0x1.7a2d84p+2
+-0x1.5228c2p+0
+-0x1.29a756p+4
+-0x1.5228c2p+0
+-0x1.7276d4p+1
+-0x1.5228c2p+0
+0x1.eb5e7ap-3
+-0x1.5228c2p+0
+0x1.02c8e4p-2
+-0x1.5228c2p+0
+0x1.681626p+3
+0x1.681626p+3
+0x1.02c8e4p-2
+0x1.02c8e4p-2
+-0x1.381dd2p+5
+0x1.02c8e4p-2
+0x1.3e15aap+2
+0x1.02c8e4p-2
+0x1.08c04cp-2
+0x1.090606p-2
+0x1.08c04cp-2
+0x1.3e15aap+2
+0x1.08c04cp-2
+-0x1.cf3b28p+4
+0x1.0dda04p-2
+-0x1.889556p+5
+0x1.0dda04p-2
+0x1.9a85dep+3
+0x1.0dda04p-2
+0x1.090606p-2
+0x1.0dda04p-2
+-0x1.b771acp+5
+0x1.1477f8p-2
+-0x1.4cdb82p+0
+0x1.1477f8p-2
+-0x1.b771acp+5
+-0x1.cf3b28p+4
+-0x1.889556p+5
+0x1.9a85dep+3
+0x1.090606p-2
+0x1.9a85dep+3
+-0x1.cf3b28p+4
+-0x1.889556p+5
+0x1.3e15aap+2
+0x1.090606p-2
+-0x1.381dd2p+5
+0x1.3e15aap+2
+-0x1.f31f4cp+4
+0x1.eb5e7ap-3
+-0x1.29a756p+4
+0x1.eb5e7ap-3
+-0x1.f31f4cp+4
+0x1.441becp-3
+-0x1.1e8906p+4
+0x1.441becp-3
+-0x1.11df1p+4
+0x1.441becp-3
+-0x1.f7dd24p+2
+0x1.00f19p-6
+-0x1.6073c2p+3
+0x1.00f19p-6
+-0x1.1e8906p+4
+0x1.00f19p-6
+-0x1.6073c2p+3
+-0x1.27cd0ep-3
+-0x1.3037cap+4
+-0x1.27cd0ep-3
+-0x1.27739p+4
+-0x1.0f1f3p-2
+-0x1.3195d2p+4
+-0x1.0f1f3p-2
+-0x1.d7789cp+4
+-0x1.0f1f3p-2
+-0x1.1cf81p+4
+-0x1.7f2328p-2
+-0x1.cfd90ep+3
+-0x1.7f2328p-2
+-0x1.27739p+4
+-0x1.7f2328p-2
+-0x1.1cf81p+4
+-0x1.e26d0ap-2
+-0x1.1cf81p+4
+-0x1.d7b548p+4
+-0x1.1cf81p+4
+-0x1.18bcb6p+5
+-0x1.d7789cp+4
+-0x1.2f92fp+3
+-0x1.d7789cp+4
+-0x1.5323bp+3
+-0x1.3037cap+4
+-0x1.5323bp+3
+-0x1.3037cap+4
+-0x1.46255cp+4
+-0x1.14c5f8p+4
+-0x1.46255cp+4
+-0x1.14c5f8p+4
+-0x1.f7dd24p+2
+-0x1.14c5f8p+4
+-0x1.6073c2p+3
+-0x1.93426cp+4
+-0x1.f7dd24p+2
+-0x1.3195d2p+4
+-0x1.2f92fp+3
+-0x1.27739p+4
+-0x1.09dc4ep+5
+-0x1.3195d2p+4
+-0x1.09dc4ep+5
+-0x1.6073c2p+3
+-0x1.f7dd24p+2
+0x1.488af2p+3
+-0x1.11df1p+4
+-0x1.1e8906p+4
+-0x1.6b24p+1
+-0x1.33ba3ap+2
+0x1.488af2p+3
+0x1.488af2p+3
+-0x1.f31f4cp+4
+-0x1.33ba3ap+2
+-0x1.f31f4cp+4
+-0x1.7276d4p+1
+-0x1.29a756p+4
+0x1.08c04cp-2
+0x1.0dda04p-2
+0x1.eb5e7ap-3
+0x1.08c04cp-2
+0x1.0dda04p-2
+0x1.1477f8p-2
+0x1.1477f8p-2
+0x0p+0
+0x1.441becp-3
+0x1.eb5e7ap-3
+0x1.00f19p-6
+0x1.441becp-3
+-0x1.27cd0ep-3
+0x1.00f19p-6
+-0x1.0f1f3p-2
+-0x1.27cd0ep-3
+-0x1.7f2328p-2
+-0x1.0f1f3p-2
+-0x1.e26d0ap-2
+-0x1.7f2328p-2
+0x0p+0
+-0x1.e26d0ap-2
+-0x1.cfd90ep+3
+-0x1.bea012p+1
+-0x1.1cf81p+4
+-0x1.bea012p+1
+-0x1.18bcb6p+5
+-0x1.531bcep-4
+-0x1.d7b548p+4
+-0x1.531bcep-4
+-0x1.d7789cp+4
+-0x1.6e475cp-3
+-0x1.3195d2p+4
+-0x1.6e475cp-3
+-0x1.5323bp+3
+-0x1.83d1ecp+1
+-0x1.46255cp+4
+-0x1.83d1ecp+1
+-0x1.14c5f8p+4
+-0x1.909e68p+1
+-0x1.93426cp+4
+-0x1.909e68p+1
+-0x1.2f92fp+3
+-0x1.8aeb4p-3
+-0x1.09dc4ep+5
+-0x1.8aeb4p-3
+-0x1.3037cap+4
+-0x1.a0177cp+1
+-0x1.6073c2p+3
+-0x1.a0177cp+1
+-0x1.f7dd24p+2
+-0x1.8eb3ecp+3
+-0x1.1e8906p+4
+-0x1.8eb3ecp+3
+-0x1.11df1p+4
+-0x1.4b06e2p+3
+-0x1.6b24p+1
+-0x1.4b06e2p+3
+-0x1.f31f4cp+4
+-0x1.73875ap+1
+-0x1.29a756p+4
+-0x1.73875ap+1
+-0x1.526982p+0
+-0x1.29adaap+4
+-0x1.528c38p+0
+-0x1.29ad9ep+4
+-0x1.528c38p+0
+-0x1.72a978p+1
+-0x1.528ffcp+0
+-0x1.72ab6p+1
+-0x1.52929ep+0
+0x1.e82bc8p-3
+-0x1.52929ep+0
+0x1.00fbeap-2
+-0x1.52943ep+0
+0x1.010268p-2
+-0x1.527d34p+0
+0x1.680ed6p+3
+0x1.680ea8p+3
+0x1.00a63ap-2
+0x1.00a63ap-2
+-0x1.38202cp+5
+0x1.00aa96p-2
+-0x1.38204ap+5
+0x1.00aa96p-2
+0x1.3dfdbap+2
+0x1.00aa96p-2
+0x1.3dfdbap+2
+0x1.00e21p-2
+0x1.0777aap-2
+0x1.07f852p-2
+0x1.077a76p-2
+0x1.07d31p-2
+0x1.0774b2p-2
+0x1.3dfa4p+2
+0x1.076f5p-2
+0x1.3dfa4p+2
+0x1.076f5p-2
+-0x1.cf27c8p+4
+0x1.0c591cp-2
+-0x1.889e7ep+5
+0x1.0c56d4p-2
+0x1.9a7e8p+3
+0x1.0c3bd2p-2
+0x1.9a7e52p+3
+0x1.0c3dap-2
+0x1.07dbdp-2
+0x1.0c3fe4p-2
+0x1.07dbdp-2
+0x1.0c3fe4p-2
+-0x1.b782a4p+5
+0x1.13a226p-2
+-0x1.4d10f6p+0
+0x1.13ec0cp-2
+-0x1.4d1a4cp+0
+0x1.13ebb6p-2
+-0x1.b782a4p+5
+-0x1.cf27c8p+4
+-0x1.889e7ep+5
+0x1.9a7f2ap+3
+0x1.07dbdp-2
+0x1.9a7f18p+3
+0x1.07dbdp-2
+0x1.9a7f18p+3
+-0x1.cf27c8p+4
+-0x1.889e7ep+5
+0x1.3dfcbp+2
+0x1.08234p-2
+0x1.3dfcbp+2
+0x1.08234p-2
+-0x1.38204ap+5
+0x1.3dfe06p+2
+-0x1.38204ap+5
+0x1.3dfe06p+2
+-0x1.f32428p+4
+0x1.e82bc8p-3
+-0x1.f32356p+4
+0x1.ed0166p-3
+-0x1.29ad9ep+4
+0x1.ee8276p-3
+-0x1.29ae6ep+4
+0x1.f0c286p-3
+-0x1.f32352p+4
+0x1.412d14p-3
+-0x1.f3249ap+4
+0x1.399e9p-3
+-0x1.1e847ap+4
+0x1.399e9p-3
+-0x1.11e4d8p+4
+0x1.434c84p-3
+-0x1.11e65p+4
+0x1.49a0ep-3
+-0x1.f7c044p+2
+0x1.261b2ep-6
+-0x1.f7c38p+2
+0x1.3ddc12p-6
+-0x1.606552p+3
+0x1.fe9d5cp-7
+-0x1.605f96p+3
+0x1.5bab4cp-6
+-0x1.1e85e6p+4
+0x1.6f098cp-6
+-0x1.605feap+3
+-0x1.242d6p-3
+-0x1.6062a2p+3
+-0x1.2fb1cep-3
+-0x1.303072p+4
+-0x1.33745ap-3
+-0x1.30334ep+4
+-0x1.2e288cp-3
+-0x1.276dacp+4
+-0x1.0de95p-2
+-0x1.3190f4p+4
+-0x1.0cbadp-2
+-0x1.319214p+4
+-0x1.097f8ap-2
+-0x1.d77428p+4
+-0x1.09980ap-2
+-0x1.1cf2dcp+4
+-0x1.7e0bb6p-2
+-0x1.1cecd8p+4
+-0x1.6e88d6p-2
+-0x1.cfced6p+3
+-0x1.6e88d6p-2
+-0x1.cfd0ccp+3
+-0x1.6e22ecp-2
+-0x1.276dacp+4
+-0x1.6f181p-2
+-0x1.1cecd8p+4
+-0x1.e29736p-2
+-0x1.1ced16p+4
+-0x1.e4558ap-2
+-0x1.1ced16p+4
+-0x1.d7adaep+4
+-0x1.1cefd2p+4
+-0x1.18ba1cp+5
+-0x1.1cf2eep+4
+-0x1.18b8fap+5
+-0x1.d77504p+4
+-0x1.2f8976p+3
+-0x1.d775d6p+4
+-0x1.531a5p+3
+-0x1.3030dap+4
+-0x1.531db8p+3
+-0x1.303042p+4
+-0x1.461ebp+4
+-0x1.14bee2p+4
+-0x1.461f8ep+4
+-0x1.14bee2p+4
+-0x1.f7b4bep+2
+-0x1.14bf2cp+4
+-0x1.f7b5fap+2
+-0x1.14bf64p+4
+-0x1.606316p+3
+-0x1.14c05p+4
+-0x1.60614p+3
+-0x1.933b22p+4
+-0x1.f7b6b8p+2
+-0x1.319102p+4
+-0x1.2f882cp+3
+-0x1.276dacp+4
+-0x1.09d9dep+5
+-0x1.31917p+4
+-0x1.09dap+5
+-0x1.3190d8p+4
+-0x1.09d9eap+5
+-0x1.606496p+3
+-0x1.f7c04ap+2
+-0x1.6063dcp+3
+-0x1.f7c19ep+2
+0x1.487ad6p+3
+-0x1.11e46p+4
+-0x1.1e8476p+4
+-0x1.6b93e6p+1
+-0x1.33fab8p+2
+0x1.487d04p+3
+0x1.487d04p+3
+-0x1.f3249ap+4
+-0x1.33fab8p+2
+-0x1.f32498p+4
+-0x1.72accap+1
+-0x1.29adf2p+4
+-0x1.72afd2p+1
+-0x1.29adfp+4
+0x1.0c3fe4p-2
+0x1.07696ep-2
+0x1.079a0ep-2
+0x1.ef44cep-3
+0x1.13e79p-2
+0x1.0b61d6p-2
+0x0p+0
+0x1.1359b4p-2
+0x1.f682aap-3
+0x1.46a022p-3
+0x1.6059a4p-3
+0x1.1b73bcp-6
+0x1.3933d2p-5
+-0x1.380c7ap-3
+-0x1.0a9beap-3
+-0x1.14c2eap-2
+-0x1.015b7ap-2
+-0x1.6f9ec8p-2
+-0x1.63384cp-2
+-0x1.e4558ap-2
+-0x1.e1d74p-2
+0x0p+0
+-0x1.be771ep+1
+-0x1.cfd00ap+3
+-0x1.be7118p+1
+-0x1.1cf1fp+4
+-0x1.4cd672p-4
+-0x1.18b9a6p+5
+-0x1.4b6a66p-4
+-0x1.d7ad34p+4
+-0x1.6be49ep-3
+-0x1.d77426p+4
+-0x1.6b8p-3
+-0x1.3190d8p+4
+-0x1.83a0eap+1
+-0x1.531a52p+3
+-0x1.83a808p+1
+-0x1.461f8ep+4
+-0x1.906436p+1
+-0x1.14bea6p+4
+-0x1.906d66p+1
+-0x1.933aecp+4
+-0x1.88804p-3
+-0x1.2f88ecp+3
+-0x1.883178p-3
+-0x1.09d9eap+5
+-0x1.9fe0b4p+1
+-0x1.303008p+4
+-0x1.9fe9e4p+1
+-0x1.6064eep+3
+-0x1.8ea076p+3
+-0x1.f7bf46p+2
+-0x1.8ea232p+3
+-0x1.1e840ep+4
+-0x1.4b03eap+3
+-0x1.11e45cp+4
+-0x1.4b02e8p+3
+-0x1.6b92fep+1
+-0x1.73a0f2p+1
+-0x1.f324aap+4
+-0x1.73a844p+1
+-0x1.29adfp+4
+-0x1.527ca2p+0
+-0x1.29adfp+4
+-0x1.529d28p+0
+-0x1.29ade6p+4
+-0x1.529d28p+0
+-0x1.72afd2p+1
+-0x1.529e54p+0
+-0x1.72b06ap+1
+-0x1.529ef4p+0
+0x1.e948f2p-3
+-0x1.529ef4p+0
+0x1.0101d2p-2
+-0x1.529fb4p+0
+0x1.0104d2p-2
+-0x1.5287eap+0
+0x1.680ea8p+3
+0x1.680e78p+3
+0x1.00a5ap-2
+0x1.00a5ap-2
+-0x1.38204ap+5
+0x1.00a9a6p-2
+-0x1.382066p+5
+0x1.00a9a6p-2
+0x1.3dfe06p+2
+0x1.00a9a6p-2
+0x1.3dfe06p+2
+0x1.00e1ccp-2
+0x1.07b64p-2
+0x1.080dcap-2
+0x1.07b848p-2
+0x1.07e4cep-2
+0x1.07b1fp-2
+0x1.3dfa8p+2
+0x1.07a99p-2
+0x1.3dfa8p+2
+0x1.07a99p-2
+-0x1.cf27c8p+4
+0x1.0cadecp-2
+-0x1.889e7ep+5
+0x1.0c9778p-2
+0x1.9a7cdap+3
+0x1.0c7b28p-2
+0x1.9a7ccep+3
+0x1.0c7b9ep-2
+0x1.07f26ap-2
+0x1.0c7f4cp-2
+0x1.07f26ap-2
+0x1.0c7f4cp-2
+-0x1.b782a4p+5
+0x1.13a0e8p-2
+-0x1.4d1606p+0
+0x1.13e916p-2
+-0x1.4d1ec2p+0
+0x1.13e8c6p-2
+-0x1.b782a4p+5
+-0x1.cf27c8p+4
+-0x1.889e7ep+5
+0x1.9a7e2ep+3
+0x1.07f26ap-2
+0x1.9a7e1ep+3
+0x1.07f26ap-2
+0x1.9a7e1ep+3
+-0x1.cf27c8p+4
+-0x1.889e7ep+5
+0x1.3dfd04p+2
+0x1.083546p-2
+0x1.3dfd04p+2
+0x1.083546p-2
+-0x1.382066p+5
+0x1.3dfe9ap+2
+-0x1.382066p+5
+0x1.3dfe9ap+2
+-0x1.f324aap+4
+0x1.e948f2p-3
+-0x1.f323dep+4
+0x1.edf47p-3
+-0x1.29ade6p+4
+0x1.ef487cp-3
+-0x1.29aebp+4
+0x1.f17a24p-3
+-0x1.f323dap+4
+0x1.42b39cp-3
+-0x1.f32526p+4
+0x1.3b12b4p-3
+-0x1.1e840ep+4
+0x1.3b12b4p-3
+-0x1.11e45cp+4
+0x1.44bc6ep-3
+-0x1.11e5cap+4
+0x1.4ae076p-3
+-0x1.f7bf46p+2
+0x1.1d7d9p-6
+-0x1.f7c28ap+2
+0x1.3577a8p-6
+-0x1.6064eep+3
+0x1.eee756p-7
+-0x1.605f2ep+3
+0x1.53ebc2p-6
+-0x1.1e857cp+4
+0x1.68129ap-6
+-0x1.605f86p+3
+-0x1.24ea64p-3
+-0x1.606236p+3
+-0x1.30562cp-3
+-0x1.303008p+4
+-0x1.3402bp-3
+-0x1.3032e8p+4
+-0x1.2eb24cp-3
+-0x1.276dacp+4
+-0x1.0df61ap-2
+-0x1.3190d8p+4
+-0x1.0cc676p-2
+-0x1.3191f8p+4
+-0x1.098a3p-2
+-0x1.d77426p+4
+-0x1.09a28ep-2
+-0x1.1cf1fp+4
+-0x1.7e14aep-2
+-0x1.1cebecp+4
+-0x1.6e9592p-2
+-0x1.cfd00ap+3
+-0x1.6e9592p-2
+-0x1.cfd2p+3
+-0x1.6e2fbcp-2
+-0x1.276dacp+4
+-0x1.6f280ep-2
+-0x1.1cebecp+4
+-0x1.e24b72p-2
+-0x1.1cec2cp+4
+-0x1.e418f2p-2
+-0x1.1cec3p+4
+-0x1.d7ad34p+4
+-0x1.1ceee8p+4
+-0x1.18b9a6p+5
+-0x1.1cf206p+4
+-0x1.18b882p+5
+-0x1.d77502p+4
+-0x1.2f88ecp+3
+-0x1.d775d4p+4
+-0x1.531a52p+3
+-0x1.303078p+4
+-0x1.531dbap+3
+-0x1.302fep+4
+-0x1.461f8ep+4
+-0x1.14bea6p+4
+-0x1.46206cp+4
+-0x1.14bea6p+4
+-0x1.f7b3eep+2
+-0x1.14beecp+4
+-0x1.f7b516p+2
+-0x1.14bf2p+4
+-0x1.6062a6p+3
+-0x1.14c00cp+4
+-0x1.6060cep+3
+-0x1.933aecp+4
+-0x1.f7b5c6p+2
+-0x1.3190e8p+4
+-0x1.2f87a2p+3
+-0x1.276dacp+4
+-0x1.09d9eap+5
+-0x1.319156p+4
+-0x1.09da0cp+5
+-0x1.3190bcp+4
+-0x1.09d9f6p+5
+-0x1.606422p+3
+-0x1.f7bf56p+2
+-0x1.606378p+3
+-0x1.f7c08ap+2
+0x1.487cc4p+3
+-0x1.11e3dep+4
+-0x1.1e8414p+4
+-0x1.6b92fep+1
+-0x1.33fab8p+2
+0x1.487ea6p+3
+0x1.487ea6p+3
+-0x1.f32526p+4
+-0x1.33fab8p+2
+-0x1.f32524p+4
+-0x1.72b0cp+1
+-0x1.29ae3p+4
+-0x1.72b3f8p+1
+-0x1.29ae2ep+4
+0x1.0c7f4cp-2
+0x1.07a37ap-2
+0x1.07c004p-2
+0x1.eff16cp-3
+0x1.13e46cp-2
+0x1.0b8bfep-2
+0x0p+0
+0x1.133648p-2
+0x1.f6afeap-3
+0x1.47e1dp-3
+0x1.60eefcp-3
+0x1.166d5cp-6
+0x1.368f4ap-5
+-0x1.388afcp-3
+-0x1.0ad8eep-3
+-0x1.14c976p-2
+-0x1.015cf2p-2
+-0x1.6faef6p-2
+-0x1.634a7ep-2
+-0x1.e4253p-2
+-0x1.e1c8bp-2
+0x0p+0
+-0x1.be7966p+1
+-0x1.cfd13ap+3
+-0x1.be7358p+1
+-0x1.1cf108p+4
+-0x1.4c5184p-4
+-0x1.18b92ep+5
+-0x1.4ae088p-4
+-0x1.d7acbap+4
+-0x1.6bcb12p-3
+-0x1.d77424p+4
+-0x1.6b65cap-3
+-0x1.3190bcp+4
+-0x1.83a2f8p+1
+-0x1.531a58p+3
+-0x1.83a9eep+1
+-0x1.46206cp+4
+-0x1.906454p+1
+-0x1.14be62p+4
+-0x1.906d6cp+1
+-0x1.933ab6p+4
+-0x1.886fcp-3
+-0x1.2f8862p+3
+-0x1.881fdap-3
+-0x1.09d9f6p+5
+-0x1.9fe0b8p+1
+-0x1.302fa6p+4
+-0x1.9fe9c2p+1
+-0x1.60647ap+3
+-0x1.8ea06cp+3
+-0x1.f7be56p+2
+-0x1.8ea22p+3
+-0x1.1e83bp+4
+-0x1.4b0368p+3
+-0x1.11e3dcp+4
+-0x1.4b0262p+3
+-0x1.6b921ep+1
+-0x1.73a2fp+1
+-0x1.f32538p+4
+-0x1.73a9dap+1
+-0x1.29ae2ep+4
+-0x1.528752p+0
+-0x1.29ae2ep+4
+-0x1.52a6c8p+0
+-0x1.29ae24p+4
+-0x1.52a6c8p+0
+-0x1.72b3f8p+1
+-0x1.52a6c8p+0
+-0x1.72b3f8p+1
+-0x1.52a6c8p+0
+0x1.e8f29ep-3
+-0x1.52a6c8p+0
+0x1.00f8f8p-2
+-0x1.52a70cp+0
+0x1.00fa0ap-2
+-0x1.528f14p+0
+0x1.680e78p+3
+0x1.680e4ap+3
+0x1.009a28p-2
+0x1.009a28p-2
+-0x1.382066p+5
+0x1.009ddap-2
+-0x1.38208p+5
+0x1.009ddap-2
+0x1.3dfe9ap+2
+0x1.009ddap-2
+0x1.3dfe9ap+2
+0x1.00d79cp-2
+0x1.07a688p-2
+0x1.081bccp-2
+0x1.07a8bcp-2
+0x1.07f71p-2
+0x1.07a30ap-2
+0x1.3dfafap+2
+0x1.079d4ep-2
+0x1.3dfafap+2
+0x1.079d4ep-2
+-0x1.cf27c8p+4
+0x1.0caf48p-2
+-0x1.889e7ep+5
+0x1.0c9196p-2
+0x1.9a7c04p+3
+0x1.0c751p-2
+0x1.9a7bbap+3
+0x1.0c77f6p-2
+0x1.08006p-2
+0x1.0c7cdcp-2
+0x1.08006p-2
+0x1.0c7cdcp-2
+-0x1.b782a4p+5
+0x1.1388dap-2
+-0x1.4d1a46p+0
+0x1.13d2e2p-2
+-0x1.4d2348p+0
+0x1.13d29p-2
+-0x1.b782a4p+5
+-0x1.cf27c8p+4
+-0x1.889e7ep+5
+0x1.9a7d9p+3
+0x1.08006p-2
+0x1.9a7d8p+3
+0x1.08006p-2
+0x1.9a7d8p+3
+-0x1.cf27c8p+4
+-0x1.889e7ep+5
+0x1.3dfd4p+2
+0x1.084014p-2
+0x1.3dfd4p+2
+0x1.084014p-2
+-0x1.38208p+5
+0x1.3dff0cp+2
+-0x1.38208p+5
+0x1.3dff0cp+2
+-0x1.f32538p+4
+0x1.e8f29ep-3
+-0x1.f3246cp+4
+0x1.eda684p-3
+-0x1.29ae24p+4
+0x1.ef0104p-3
+-0x1.29aeeep+4
+0x1.f1321cp-3
+-0x1.f32468p+4
+0x1.4310b4p-3
+-0x1.f325b2p+4
+0x1.3b7c96p-3
+-0x1.1e83bp+4
+0x1.3b7c96p-3
+-0x1.11e3dcp+4
+0x1.4532f6p-3
+-0x1.11e544p+4
+0x1.4b3ee2p-3
+-0x1.f7be56p+2
+0x1.19dcbap-6
+-0x1.f7c198p+2
+0x1.31c2fp-6
+-0x1.60647ap+3
+0x1.e819d8p-7
+-0x1.605ebap+3
+0x1.505478p-6
+-0x1.1e852p+4
+0x1.64bac6p-6
+-0x1.605f14p+3
+-0x1.24cb5cp-3
+-0x1.6061c6p+3
+-0x1.303d9ap-3
+-0x1.302fa6p+4
+-0x1.33ef1ep-3
+-0x1.303288p+4
+-0x1.2e9e68p-3
+-0x1.276dacp+4
+-0x1.0df662p-2
+-0x1.3190bcp+4
+-0x1.0cc56ap-2
+-0x1.3191dcp+4
+-0x1.0988d6p-2
+-0x1.d77424p+4
+-0x1.09a16ap-2
+-0x1.1cf108p+4
+-0x1.7e2c1ap-2
+-0x1.1ceb04p+4
+-0x1.6eaf52p-2
+-0x1.cfd13ap+3
+-0x1.6eaf52p-2
+-0x1.cfd332p+3
+-0x1.6e497p-2
+-0x1.276dacp+4
+-0x1.6f438ep-2
+-0x1.1ceb04p+4
+-0x1.e22d88p-2
+-0x1.1ceb46p+4
+-0x1.e3ffd6p-2
+-0x1.1ceb4cp+4
+-0x1.d7acbap+4
+-0x1.1ceep+4
+-0x1.18b92ep+5
+-0x1.1cf11ep+4
+-0x1.18b80ap+5
+-0x1.d775p+4
+-0x1.2f8862p+3
+-0x1.d775d2p+4
+-0x1.531a58p+3
+-0x1.303018p+4
+-0x1.531dbep+3
+-0x1.302f8p+4
+-0x1.46206cp+4
+-0x1.14be62p+4
+-0x1.46214ap+4
+-0x1.14be62p+4
+-0x1.f7b318p+2
+-0x1.14bea6p+4
+-0x1.f7b43ep+2
+-0x1.14bed8p+4
+-0x1.606238p+3
+-0x1.14bfc4p+4
+-0x1.60605ep+3
+-0x1.933ab6p+4
+-0x1.f7b4eep+2
+-0x1.3190ccp+4
+-0x1.2f8718p+3
+-0x1.276dacp+4
+-0x1.09d9f6p+5
+-0x1.31913ap+4
+-0x1.09da18p+5
+-0x1.3190ap+4
+-0x1.09da02p+5
+-0x1.6063bp+3
+-0x1.f7be76p+2
+-0x1.60631p+3
+-0x1.f7bf9ap+2
+0x1.487e6p+3
+-0x1.11e35ep+4
+-0x1.1e83cp+4
+-0x1.6b921ep+1
+-0x1.33fab8p+2
+0x1.488004p+3
+0x1.487fd6p+3
+-0x1.f325b2p+4
+-0x1.33fab8p+2
+-0x1.f325bp+4
+-0x1.72b3f8p+1
+-0x1.29ae7p+4
+-0x1.72b774p+1
+-0x1.29ae6ep+4
+0x1.0c7cdcp-2
+0x1.0797cep-2
+0x1.07ccc8p-2
+0x1.efad48p-3
+0x1.13ce34p-2
+0x1.0b9f7ep-2
+0x0p+0
+0x1.131d58p-2
+0x1.f686bep-3
+0x1.48472cp-3
+0x1.6137c2p-3
+-0x1.7ab8b4p+2
+-0x1.dae87ep+2
+-0x1.c6536p+3
+0x0p+0
+-0x1.940296p+3
+0x0p+0
+-0x1.be9d74p-1
+-0x1.940296p+3
+-0x1.bbbf34p-1
+-0x1.7a1d02p+2
+-0x1.a8ce58p-1
+-0x1.db9db8p+2
+-0x1.9f889ep-1
+-0x1.c6536p+3
+-0x1.7a1d02p+2
+-0x1.db9db8p+2
+-0x1.c6536p+3
+0x0p+0
+-0x1.940296p+3
+0x0p+0
+-0x1.bc381ap-1
+-0x1.940296p+3
+-0x1.bc0ca4p-1
+-0x1.79a376p+2
+-0x1.a2df9ap-1
+-0x1.dc2d1p+2
+-0x1.a12ea6p-1
+-0x1.c6536p+3
+-0x1.bbaf2p-1
+-0x1.79a376p+2
+-0x1.dc2d1p+2
+-0x1.a1c9bap-1
+-0x1.c6536p+3
+0x0p+0
+-0x1.940296p+3
+-0x1.47c066p+1
+-0x1.f1c8bp+1
+-0x1.677a5p-2
+-0x1.f1c8bp+1
+-0x1.f29abcp+1
+-0x1.4ba1b8p+1
+-0x1.f29ab8p+1
+-0x1.4c3b8ep-2
+-0x1.f29ab8p+1
+-0x1.4c3b8ep-2
+-0x1.4ba1b8p+1
+-0x1.56232cp+2
+-0x1.f55b0cp-1
+-0x1.3c216cp+3
+-0x1.f55b0cp-1
+-0x1.002fccp+0
+-0x1.64324cp+2
+-0x1.002c52p+0
+-0x1.3fe928p+3
+-0x1.002d72p+0
+-0x1.3fe928p+3
+-0x1.64324cp+2
+-0x1.9ec7c6p+2
+-0x1.356612p+3
+-0x1.09fcacp+0
+-0x1.356612p+3
+-0x1.38c556p+3
+-0x1.a15ff8p+2
+-0x1.38c1d6p+3
+-0x1.118b2ap+0
+-0x1.38c118p+3
+-0x1.a15ff8p+2
+-0x1.38c15cp+3
+-0x1.118b2ap+0
+-0x1.38c144p+3
+-0x1.a15ff8p+2
+-0x1.38c14cp+3
+-0x1.118b2ap+0
+-0x1.38c14ap+3
+-0x1.118b2ap+0
+-0x1.a15ff8p+2
+-0x1.bf323ap-11
+0x1.93e3p-10
+0x1.edcf54p-9
+0x1.e4912ep-8
+0x1.c906d2p-7
+0x1.8206f8p-6
+0x1.257304p-5
+0x1.802988p-4
+0x1.cd5c8cp-3
+0x1.be6b0ap+0
+0x1.889c7cp+0
+-0x1.784d72p+1
+0x1.045cbp+4
+-0x1.18a858p+2
+-0x1.6321d4p+0
+-0x1.6aad42p-1
+-0x1.cd8362p+2
+-0x1.7aff5ap+3
+-0x1.1a1d8ap-3
+-0x1.7934d6p+3
+-0x1.25d52ep+1
+-0x1.d5ea3cp+1
+-0x1.3b1d06p+2
+-0x1.a4ca4cp+1
+-0x1.c8f42ap-1
+-0x1.8f8772p+3
+-0x1.7cd8dap+2
+-0x1.8d3da2p-1
+-0x1.d94f76p+2
+-0x1.c0fed6p+3
+-0x1.ead0aap+1
+-0x1.1d2676p+2
+-0x1.6a04eep+1
+-0x1.f1c8bp+1
+-0x1.47c066p+1
+-0x1.677a5p-2
+-0x1.f55b0cp-1
+-0x1.56232cp+2
+-0x1.3c216cp+3
+-0x1.356612p+3
+-0x1.9ec7c6p+2
+-0x1.09fcacp+0
+-0x1.280d96p+2
+0x1.211a5ap+1
+-0x1.1452acp+3
+0x1.eff00ap-5
+0x1.d68454p-5
+0x1.3d4f26p-3
+0x1.b93bfep-3
+0x1.5e25c4p-3
+0x1.653c04p-6
+-0x1.cc14dep-5
+-0x1.bd2826p-9
+-0x1.871af4p-3
+-0x1.1d6bbap-1
+0x0p+0
+0x1.ba3a7ep+1
+0x0p+0
+0x1.89c6bep+1
+0x0p+0
+0x1.8e878cp+2
+0x0p+0
+0x1.9169ep+2
+0x0p+0
+0x1.91e81p+2
+0x0p+0
+0x1.956d16p+2
+0x0p+0
+0x1.537454p+2
+0x0p+0
+0x1.52145ap+2
+0x0p+0
+0x1.85e6dep+2
+0x0p+0
+0x1.84b74cp+2
+0x0p+0
+0x1.abf1fap+1
+0x0p+0
+0x1.a739bp+1
+0x0p+0
+0x1.72e69p+1
+0x0p+0
+0x1.6579bp+1
+0x0p+0
+0x1.4fa08cp+2
+0x0p+0
+0x1.4dbcecp+2
+0x0p+0
+0x1.dfe45p-1
+0x0p+0
+0x1.6f6b5p-1
+0x0p+0
+0x1.a7a7dp-1
+0x0p+0
+0x1.7772b8p-1
+0x0p+0
+0x1.6f6b5p-1
+0x0p+0
+0x1.8577a6p+2
+0x0p+0
+0x1.82df74p+2
+0x0p+0
+0x1.546dcp-2
+0x0p+0
+0x1.87c4p-2
+0x0p+0
+0x1.211a5ap+1
+0x0p+0
+0x1.203da6p+1
+0x0p+0
+0x1.396ec2p+1
+0x0p+0
+0x1.44761ap+1
+0x0p+0
+0x1.59013p+2
+0x0p+0
+0x1.5aa9d2p+2
+0x0p+0
+0x1.ba3a7ep+1
+0x0p+0
+0x1.89c6bep+1
+0x0p+0
+0x1.a8488p+0
+0x0p+0
+0x1.9872b8p+0
+0x0p+0
+0x1.d3e5p+0
+0x0p+0
+0x1.8d7d8p+0
+0x0p+0
+0x1.7205cp-1
+0x0p+0
+0x1.092cp-1
+0x0p+0
+0x1.f73428p+1
+0x0p+0
+0x1.f4f5p+1
+0x0p+0
+0x1.4e553p+1
+0x0p+0
+0x1.49aaf8p+1
+0x0p+0
+0x1.4c22p-4
+0x0p+0
+-0x1.e2ep-5
+0x0p+0
+0x1.e5dd78p+0
+0x0p+0
+0x1.b7605p+0
+0x0p+0
+0x1.5c0acp+0
+0x0p+0
+0x1.445e28p+0
+0x0p+0
+0x1.7f752p+1
+0x0p+0
+0x1.87c6fap+1
+0x0p+0
+0x1.fe6a3ep+1
+0x0p+0
+0x1.f86be8p+1
+0x0p+0
+0x1.64ca0ep+2
+0x0p+0
+0x1.65d946p+2
+0x0p+0
+0x1.56bc0ap+2
+0x0p+0
+0x1.4f966cp+2
+0x0p+0
+0x1.537454p+2
+0x0p+0
+0x1.52145ap+2
+0x0p+0
+0x1.346176p+2
+0x0p+0
+0x1.29b862p+2
+0x0p+0
+0x1.894ecap+2
+0x0p+0
+0x1.89f056p+2
+0x0p+0
+0x1.8eaep-1
+0x0p+0
+0x1.39884p-1
+0x0p+0
+0x1.57f928p+1
+0x0p+0
+0x1.48da38p+1
+0x0p+0
+0x1.607802p+2
+0x0p+0
+0x1.5de67ep+2
+0x0p+0
+0x1.4aeff6p+2
+0x0p+0
+0x1.48125cp+2
+0x0p+0
+0x1.dfe45p-1
+0x0p+0
+0x1.6f6b5p-1
+0x0p+0
+0x1.546dcp-2
+0x0p+0
+0x1.87c4p-2
+0x0p+0
+0x1.59013p+2
+0x0p+0
+0x1.5aa9d2p+2
+0x0p+0
+0x1.d68454p-5
+0x0p+0
+0x1.99b3cap-4
+0x0p+0
+0x1.85e6dep+2
+0x0p+0
+0x1.84b74cp+2
+0x0p+0
+0x1.854f14p+2
+0x0p+0
+0x1.85aa5ap+2
+0x0p+0
+-0x1.8eab72p-3
+0x0p+0
+-0x1.8eab72p-3
+0x0p+0
+-0x1.97339p-3
+0x0p+0
+-0x1.9953fp-3
+0x0p+0
+0x0p+0
+-0x1.2666f4p-2
+-0x1.9953fp-3
+0x0p+0
+0x1.855516p+2
+0x0p+0
+0x1.7fb946p+2
+0x0p+0
+0x1.855516p+2
+0x0p+0
+0x1.7fb946p+2
+-0x1.7b8502p-8
+-0x1.cef40ap-10
+-0x1.cef40ap-10
+0x1.ec421ep-10
+0x1.ec421ep-10
+0x1.77972p-8
+0x1.77972p-8
+0x1.cee5dp-7
+0x1.cee5dp-7
+0x1.8e5f8p-6
+0x1.8e5f8p-6
+0x1.19b8a6p-5
+0x1.19b8a6p-5
+0x1.a037dep-4
+0x1.a037dep-4
+0x1.04f4fcp-2
+-0x1.658062p-7
+-0x1.76711ep-8
+-0x1.658062p-7
+-0x1.76711ep-8
+-0x1.77b7c6p-8
+-0x1.9b198cp-11
+-0x1.77b7c6p-8
+-0x1.9b198cp-11
+-0x1.018004p-10
+0x1.ec989cp-9
+-0x1.074fbcp-10
+0x1.ef7f06p-9
+0x1.a1c7b4p-9
+0x1.b2f986p-7
+0x1.a1c7b4p-9
+0x1.b2f986p-7
+0x1.a5cb72p-7
+0x1.89ac9ep-6
+0x1.a5cb72p-7
+0x1.89ac9ep-6
+0x1.7e73c4p-6
+0x1.105cfap-5
+0x1.7e73c4p-6
+0x1.105cfap-5
+0x1.0741c2p-5
+0x1.cb8dfap-4
+0x1.c77f0cp-4
+0x1.24a31ep-2
+-0x1.64dccep-7
+-0x1.6aa8b4p-8
+-0x1.b0c2cp-12
+0x1.d54802p-9
+0x1.bb634p-7
+0x1.8fa2b6p-6
+0x1.0fc5a4p-5
+0x1.c77f0cp-4
+0x1.24a31ep-2
+0x1.10b4ccp+1
+0x1.16ae0ap+0
+0x1.119ff2p-3
+-0x1.9a78aep+1
+-0x1.2666f4p-2
+-0x1.9a78aep+1
+-0x1.102bb6p-1
+-0x1.2ec056p+2
+-0x1.102bb6p-1
+0x1.119ff2p-3
+0x1.a8386cp-3
+-0x1.f88a4ep-7
+0x1.119ff2p-3
+-0x1.6babfp-7
+-0x1.f88a4ep-7
+0x1.a6af88p-5
+-0x1.6babfp-7
+-0x1.2666f4p-2
+0x1.a6af88p-5
+-0x1.102bb6p-1
+-0x1.2666f4p-2
+0x0p+0
+-0x1.102bb6p-1
+-0x1.2ec056p+2
+-0x1.dfc952p+1
+-0x1.9a78aep+1
+-0x1.dfc952p+1
+0x1.a8386cp-3
+0x1.661ddcp-3
+0x1.661ddcp-3
+0x1.99b3cap-4
+0x1.99b3cap-4
+0x1.a04db4p-5
+0x1.a04db4p-5
+0x0p+0
+0x1.42c444p-1
+0x1.7be57p-4
+-0x1.c68dd4p+1
+-0x1.9a19eep-2
+-0x1.c68dd4p+1
+-0x1.9a19eep-2
+-0x1.c68dd4p+1
+-0x1.2293dap-1
+-0x1.4052ap+2
+-0x1.22ed0cp-1
+0x1.808acp-3
+0x1.8227aap-4
+0x1.bfd3aep-4
+-0x1.54001ep-5
+-0x1.1576d2p-5
+0x1.9d1524p-6
+0x1.da10f2p-7
+0x1.71ed16p-3
+0x1.5f4712p-3
+-0x1.9a19eep-2
+-0x1.3c670cp-2
+-0x1.22ed0cp-1
+-0x1.1833e8p-1
+0x0p+0
+-0x1.e160a8p+1
+-0x1.4052ap+2
+-0x1.e17f8ep+1
+-0x1.c676p+1
+0x1.81bc6p-3
+0x1.7ec44cp-3
+0x1.303248p-3
+0x1.84d7d2p-3
+0x1.96cf64p-5
+0x1.37e15ap-3
+0x0p+0
+0x1.dc372ap-5
+0x1.42c444p-1
+0x1.786e8cp-4
+-0x1.c676p+1
+-0x1.51288ap-2
+-0x1.c676p+1
+-0x1.51288ap-2
+-0x1.c67488p+1
+-0x1.1dde76p-1
+-0x1.4052ap+2
+-0x1.1e2e7p-1
+0x1.8262bcp-3
+0x1.80027p-4
+0x1.b534a6p-4
+-0x1.20fe96p-5
+-0x1.da2c66p-6
+0x1.04892ep-5
+0x1.5101bp-6
+0x1.799886p-3
+0x1.5ed6a8p-3
+-0x1.50eeap-2
+-0x1.26981ep-2
+-0x1.1e2e7p-1
+-0x1.18888ap-1
+0x0p+0
+-0x1.e16e26p+1
+-0x1.4052ap+2
+-0x1.e17454p+1
+-0x1.c65d48p+1
+0x1.7dad9cp-3
+0x1.7c2e0ap-3
+0x1.245bcap-3
+0x1.8129aap-3
+0x1.b6a76p-5
+0x1.30bcccp-3
+0x0p+0
+0x1.f716e4p-5
+0x1.42c444p-1
+0x1.70dcb2p-4
+-0x1.c65d48p+1
+-0x1.42ce98p-2
+-0x1.c65d48p+1
+-0x1.42ce98p-2
+-0x1.c64e06p+1
+-0x1.1b7c86p-1
+-0x1.4052ap+2
+-0x1.1bc7f8p-1
+0x1.7fec2p-3
+0x1.797232p-4
+0x1.adcef6p-4
+-0x1.f2e09cp-6
+-0x1.971e9p-6
+0x1.0ad4dap-5
+0x1.7dc58cp-6
+0x1.2ba5fcp-3
+0x1.2c0edp-3
+-0x1.406758p-2
+-0x1.1b8ffap-2
+-0x1.1bc7f8p-1
+-0x1.17868ep-1
+0x0p+0
+-0x1.e17094p+1
+-0x1.4052ap+2
+-0x1.e171eep+1
+-0x1.c6375p+1
+0x1.7d6d6ep-3
+0x1.7994b2p-3
+0x1.1ef9d2p-3
+0x1.7fd218p-3
+0x1.d43f82p-5
+0x1.2b6d66p-3
+0x0p+0
+0x1.076b7p-4
+0x1.42c444p-1
+0x1.6ac1c4p-4
+-0x1.9afd3ep-6
+0x1.4f36b8p-5
+0x1.ff986p-4
+-0x1.37f0bcp-2
+-0x1.19bc64p-1
+0x0p+0
+-0x1.4052ap+2
+-0x1.e16c3cp+1
+-0x1.c6375p+1
+0x1.7ca0f2p-3
+0x1.7ba3c8p-3
+0x1.1ab8d6p-3
+0x1.ef2eb4p-5
+-0x1.81be06p+1
+0x1.fb683p+3
+-0x1.2447a2p+2
+-0x1.14e276p+3
+-0x1.14e276p+3
+-0x1.2c0308p+2
+0x1.203da6p+1
+-0x1.2c0308p+2
+-0x1.2fe6ecp+2
+-0x1.1594cp+3
+-0x1.300e48p+2
+-0x1.1594cp+3
+-0x1.300b82p+2
+0x1.1f60f2p+1
+-0x1.2fe6ecp+2
+-0x1.1594cp+3
+-0x1.300bap+2
+0x1.1f60f2p+1
+-0x1.4198cp+0
+-0x1.d4a9p+2
+-0x1.62337ap-1
+-0x1.818cf6p+3
+-0x1.62337ap-1
+-0x1.59b94p-1
+-0x1.dbce9ep+2
+-0x1.59b9cep-1
+-0x1.881a92p+3
+-0x1.59b9d2p-1
+-0x1.881a92p+3
+-0x1.dbce9ep+2
+-0x1.2bd384p+1
+0x0p+0
+-0x1.7e8732p+3
+-0x1.05ecp-3
+-0x1.2bd384p+1
+-0x1.05ecp-3
+-0x1.354328p+1
+0x0p+0
+-0x1.f080c4p-4
+-0x1.83d98ep+3
+-0x1.f12b68p-4
+-0x1.354328p+1
+-0x1.f2d50cp-4
+-0x1.354328p+1
+0x0p+0
+-0x1.83d98ep+3
+-0x1.41082cp+2
+-0x1.da9474p+1
+-0x1.9c7872p+1
+-0x1.da9474p+1
+-0x1.df3fb6p+1
+-0x1.46f352p+2
+-0x1.df3e6ep+1
+-0x1.942698p+1
+-0x1.df3e9ap+1
+-0x1.942698p+1
+-0x1.46f352p+2
+-0x1.79a376p+2
+-0x1.dc2d1p+2
+-0x1.940296p+3
+0x0p+0
+-0x1.940296p+3
+-0x1.bbaf2p-1
+-0x1.79a376p+2
+-0x1.bbaf2p-1
+-0x1.dc2d1p+2
+-0x1.a1c9bap-1
+-0x1.c6536p+3
+-0x1.a1c9bap-1
+-0x1.79b6c8p+2
+-0x1.dc4062p+2
+-0x1.7955b8p+2
+-0x1.dcb474p+2
+-0x1.987dbap+3
+0x0p+0
+-0x1.ba133cp-1
+-0x1.987dbap+3
+-0x1.ba30e8p-1
+-0x1.798da2p+2
+-0x1.a4b692p-1
+-0x1.dc85b4p+2
+-0x1.a3fb72p-1
+-0x1.cba7eap+3
+-0x1.798da2p+2
+-0x1.dc85b4p+2
+-0x1.793c94p+2
+-0x1.dce724p+2
+-0x1.987dbap+3
+0x0p+0
+-0x1.b9b016p-1
+-0x1.987dbap+3
+-0x1.b9de14p-1
+-0x1.796eeap+2
+-0x1.a43e26p-1
+-0x1.dcbd3ap+2
+-0x1.a3af6ep-1
+-0x1.cba7eap+3
+-0x1.796eeap+2
+-0x1.dcbd3ap+2
+-0x1.792964p+2
+-0x1.dd1136p+2
+-0x1.987dbap+3
+0x0p+0
+-0x1.b963e2p-1
+-0x1.987dbap+3
+-0x1.b98f46p-1
+-0x1.79588p+2
+-0x1.a3e212p-1
+-0x1.dcea26p+2
+-0x1.a36746p-1
+-0x1.cba7eap+3
+-0x1.b922c6p-1
+-0x1.79588p+2
+-0x1.dcea26p+2
+-0x1.a392d6p-1
+-0x1.cba7eap+3
+-0x1.987dbap+3
+0x0p+0
+-0x1.4ba1b8p+1
+-0x1.f29ab8p+1
+-0x1.4c3b8ep-2
+-0x1.f29ab8p+1
+-0x1.f36cc2p+1
+-0x1.4f830ap+1
+-0x1.f36cbep+1
+-0x1.30fcccp-2
+-0x1.f36ccp+1
+-0x1.30fcccp-2
+-0x1.4f830ap+1
+-0x1.64324cp+2
+-0x1.002d72p+0
+-0x1.3fe928p+3
+-0x1.002d72p+0
+-0x1.05af64p+0
+-0x1.72416cp+2
+-0x1.05aeap+0
+-0x1.43b0e4p+3
+-0x1.05aeccp+0
+-0x1.43b0e4p+3
+-0x1.72416cp+2
+-0x1.a15ff8p+2
+-0x1.38c14ap+3
+-0x1.118b2ap+0
+-0x1.38c14ap+3
+-0x1.3c1c22p+3
+-0x1.a3f82ap+2
+-0x1.3c18aep+3
+-0x1.1919a8p+0
+-0x1.3c17f4p+3
+-0x1.a3f82ap+2
+-0x1.3c1838p+3
+-0x1.1919a8p+0
+-0x1.3c181ep+3
+-0x1.a3f82ap+2
+-0x1.3c1828p+3
+-0x1.1919a8p+0
+-0x1.3c1826p+3
+-0x1.1919a8p+0
+-0x1.a3f82ap+2
+-0x1.7b8502p-8
+-0x1.cef40ap-10
+0x1.ec421ep-10
+0x1.77972p-8
+0x1.cee5dp-7
+0x1.8e5f8p-6
+0x1.19b8a6p-5
+0x1.a037dep-4
+0x1.04f4fcp-2
+0x1.efea52p+0
+0x1.16ae0ap+0
+-0x1.7d05bcp+1
+0x1.010864p+4
+-0x1.2447a2p+2
+-0x1.525d4ap+0
+-0x1.62337ap-1
+-0x1.d4a9p+2
+-0x1.818cf6p+3
+-0x1.05ecp-3
+-0x1.7e8732p+3
+-0x1.2bd384p+1
+-0x1.da9474p+1
+-0x1.41082cp+2
+-0x1.9c7872p+1
+-0x1.bbaf2p-1
+-0x1.940296p+3
+-0x1.79a376p+2
+-0x1.a1c9bap-1
+-0x1.dc2d1p+2
+-0x1.c6536p+3
+-0x1.dfc952p+1
+-0x1.2ec056p+2
+-0x1.9a78aep+1
+-0x1.f29ab8p+1
+-0x1.4ba1b8p+1
+-0x1.4c3b8ep-2
+-0x1.002d72p+0
+-0x1.64324cp+2
+-0x1.3fe928p+3
+-0x1.38c14ap+3
+-0x1.a15ff8p+2
+-0x1.118b2ap+0
+-0x1.2c0308p+2
+0x1.203da6p+1
+-0x1.14e276p+3
+0x1.a04db4p-5
+0x1.99b3cap-4
+0x1.661ddcp-3
+0x1.a8386cp-3
+0x1.119ff2p-3
+-0x1.f88a4ep-7
+-0x1.6babfp-7
+0x1.a6af88p-5
+-0x1.2666f4p-2
+-0x1.102bb6p-1
+0x0p+0
+0x1.89c6bep+1
+0x0p+0
+0x1.5e081cp+1
+0x0p+0
+0x1.9169ep+2
+0x0p+0
+0x1.94be24p+2
+0x0p+0
+0x1.a6af88p-5
+0x0p+0
+0x1.ff986p-4
+0x0p+0
+0x1.52145ap+2
+0x0p+0
+0x1.50b404p+2
+0x0p+0
+0x1.7fb946p+2
+0x0p+0
+0x1.7ea0aap+2
+0x0p+0
+0x1.a739bp+1
+0x0p+0
+0x1.a28166p+1
+0x0p+0
+0x1.6579bp+1
+0x0p+0
+0x1.581e4p+1
+0x0p+0
+0x1.4dbcecp+2
+0x0p+0
+0x1.4bd94cp+2
+0x0p+0
+0x1.6f6b5p-1
+0x0p+0
+0x1.fde4ap-2
+0x0p+0
+0x1.82df74p+2
+0x0p+0
+0x1.804742p+2
+0x0p+0
+0x1.87c4p-2
+0x0p+0
+0x1.8c736p-2
+0x0p+0
+0x1.203da6p+1
+0x0p+0
+0x1.1f60f2p+1
+0x0p+0
+0x1.44761ap+1
+0x0p+0
+0x1.42d33p+1
+0x0p+0
+0x1.5aa9d2p+2
+0x0p+0
+0x1.5afb5ep+2
+0x0p+0
+0x1.89c6bep+1
+0x0p+0
+0x1.5e081cp+1
+0x0p+0
+0x1.9872b8p+0
+0x0p+0
+0x1.885058p+0
+0x0p+0
+0x1.8d7d8p+0
+0x0p+0
+0x1.473458p+0
+0x0p+0
+0x1.092cp-1
+0x0p+0
+0x1.40a48p-2
+0x0p+0
+0x1.f4f5p+1
+0x0p+0
+0x1.f22bd8p+1
+0x0p+0
+0x1.49aaf8p+1
+0x0p+0
+0x1.4500d2p+1
+0x0p+0
+0x1.8e59f6p+2
+0x0p+0
+0x1.8563aep+2
+0x0p+0
+0x1.b7605p+0
+0x0p+0
+0x1.88e328p+0
+0x0p+0
+0x1.445e28p+0
+0x0p+0
+0x1.2cb19p+0
+0x0p+0
+0x1.87c6fap+1
+0x0p+0
+0x1.9018d4p+1
+0x0p+0
+0x1.f86be8p+1
+0x0p+0
+0x1.eefc44p+1
+0x0p+0
+0x1.f3b416p+1
+0x0p+0
+0x1.f1685p+1
+0x0p+0
+0x1.65d946p+2
+0x0p+0
+0x1.66e87cp+2
+0x0p+0
+0x1.4f966cp+2
+0x0p+0
+0x1.4870cep+2
+0x0p+0
+0x1.52145ap+2
+0x0p+0
+0x1.50b404p+2
+0x0p+0
+0x1.29b862p+2
+0x0p+0
+0x1.1f0f4ep+2
+0x0p+0
+0x1.89f056p+2
+0x0p+0
+0x1.8a5462p+2
+0x0p+0
+0x1.39884p-1
+0x0p+0
+0x1.c8c5p-2
+0x0p+0
+0x1.48da38p+1
+0x0p+0
+0x1.39bb48p+1
+0x0p+0
+0x1.5de67ep+2
+0x0p+0
+0x1.5dad5cp+2
+0x0p+0
+0x1.48125cp+2
+0x0p+0
+0x1.475546p+2
+0x0p+0
+0x1.6f6b5p-1
+0x0p+0
+0x1.fde4ap-2
+0x0p+0
+0x1.87c4p-2
+0x0p+0
+0x1.8c736p-2
+0x0p+0
+0x1.5aa9d2p+2
+0x0p+0
+0x1.5afb5ep+2
+0x0p+0
+0x1.99b3cap-4
+0x0p+0
+0x1.1ab8d6p-3
+0x0p+0
+0x1.7fb946p+2
+0x0p+0
+0x1.7ea0aap+2
+0x0p+0
+0x1.7f2cf8p+2
+0x0p+0
+0x1.7f94aap+2
+0x0p+0
+-0x1.28b0b2p-2
+0x0p+0
+-0x1.28b0b2p-2
+0x0p+0
+-0x1.2ce13p-2
+0x0p+0
+-0x1.2decacp-2
+0x0p+0
+0x0p+0
+-0x1.c87364p-2
+-0x1.2decacp-2
+0x0p+0
+0x1.7f40ecp+2
+0x0p+0
+0x1.75988p+2
+0x0p+0
+0x1.7a6cb6p+2
+0x0p+0
+0x1.76143cp+2
+0x0p+0
+0x1.75988p+2
+0x0p+0
+0x1.7f40ecp+2
+0x0p+0
+0x1.75988p+2
+0x0p+0
+-0x1.32d71cp+1
+-0x1.32d71cp+1
+0x0p+0
+-0x1.31acc8p+1
+0x0p+0
+-0x1.3162f6p+1
+0x0p+0
+0x0p+0
+-0x1.34f674p+1
+-0x1.3162f6p+1
+0x0p+0
+0x1.f2dc76p+1
+0x0p+0
+0x1.ef48f8p+1
+-0x1.64dccep-7
+-0x1.6aa8b4p-8
+-0x1.6aa8b4p-8
+-0x1.b0c2cp-12
+-0x1.b0c2cp-12
+0x1.d54802p-9
+0x1.d54802p-9
+0x1.bb634p-7
+0x1.bb634p-7
+0x1.8fa2b6p-6
+0x1.8fa2b6p-6
+0x1.0fc5a4p-5
+0x1.0fc5a4p-5
+0x1.c77f0cp-4
+0x1.c77f0cp-4
+0x1.24a31ep-2
+-0x1.064d58p-6
+-0x1.36ae68p-7
+-0x1.36ae68p-7
+-0x1.92ffcap-9
+-0x1.36ae68p-7
+-0x1.92ffcap-9
+-0x1.a29e5ap-9
+0x1.a564bcp-10
+-0x1.a29e5ap-9
+0x1.a564bcp-10
+0x1.1c40bap-10
+0x1.9f76f6p-7
+0x1.9b1e9ep-7
+0x1.8aefd4p-6
+0x1.856cb6p-6
+0x1.0669f8p-5
+0x1.856cb6p-6
+0x1.0669f8p-5
+0x1.001ap-5
+0x1.f2d528p-4
+0x1.efedecp-4
+0x1.44514p-2
+-0x1.064d58p-6
+-0x1.32c27ap-7
+-0x1.5e1dbp-9
+0x1.3e4242p-10
+0x1.a5be3ap-7
+0x1.915feap-6
+0x1.0646f2p-5
+0x1.efedecp-4
+0x1.44514p-2
+0x1.29747p+1
+0x1.42c444p-1
+0x1.6ac1c4p-4
+-0x1.c6375p+1
+-0x1.c87364p-2
+0x1.6ac1c4p-4
+0x1.7ca0f2p-3
+-0x1.9afd3ep-6
+0x1.6ac1c4p-4
+0x1.4f36b8p-5
+-0x1.9afd3ep-6
+0x1.ff986p-4
+0x1.4f36b8p-5
+-0x1.c87364p-2
+0x1.ff986p-4
+-0x1.19bc64p-1
+-0x1.c87364p-2
+0x0p+0
+-0x1.19bc64p-1
+-0x1.c6375p+1
+-0x1.e16c3cp+1
+-0x1.4052ap+2
+-0x1.e16c3cp+1
+0x1.7ca0f2p-3
+0x1.7ba3c8p-3
+0x1.7ba3c8p-3
+0x1.1ab8d6p-3
+0x1.1ab8d6p-3
+0x1.ef2eb4p-5
+0x1.ef2eb4p-5
+0x0p+0
+0x1.7dbd24p-3
+0x1.76b20ep-5
+-0x1.f878f2p+1
+-0x1.930b96p-2
+-0x1.f878f2p+1
+-0x1.930b96p-2
+0x1.305e7ap-3
+0x1.79d9a4p-5
+0x1.050feap-4
+-0x1.0dd8d2p-6
+-0x1.095f14p-6
+0x1.d81cc2p-4
+0x1.8ef74p-4
+0x1.390f2ep-4
+0x1.753a7ep-4
+-0x1.91257p-2
+-0x1.239a9p-2
+-0x1.46f0a4p-1
+-0x1.3415bep-1
+0x0p+0
+-0x1.e239d6p+1
+-0x1.f86d8ap+1
+-0x1.e239dep+1
+-0x1.51e4eap+2
+0x1.842e3cp-3
+0x1.2c35e2p-3
+0x1.5c563cp-3
+0x1.7dd8bcp-3
+0x1.650a68p-4
+0x1.64e1aap-3
+0x0p+0
+0x1.8631b4p-4
+0x1.7dbd24p-3
+0x1.96a892p-5
+-0x1.f86d8ap+1
+-0x1.2c99f8p-2
+-0x1.f86d8ap+1
+-0x1.2c99f8p-2
+0x1.373662p-3
+0x1.9a6564p-5
+0x1.0499d2p-4
+-0x1.940258p-7
+-0x1.8ce0a8p-7
+0x1.bdfc04p-4
+0x1.87f05p-4
+0x1.09562p-3
+0x1.ebc456p-4
+-0x1.2ba7d2p-2
+-0x1.0a37b8p-2
+-0x1.3e045ap-1
+-0x1.3456b4p-1
+0x0p+0
+-0x1.e23c04p+1
+-0x1.f867ep+1
+-0x1.e239c6p+1
+-0x1.51e4eap+2
+0x1.7faf76p-3
+0x1.2bc382p-3
+0x1.519c5p-3
+0x1.7a3b3ep-3
+0x1.7402aep-4
+0x1.5c5d32p-3
+0x0p+0
+0x1.9352d8p-4
+0x1.7dbd24p-3
+0x1.9d644ep-5
+-0x1.f867ep+1
+-0x1.266122p-2
+-0x1.f867ep+1
+-0x1.266122p-2
+0x1.3692a2p-3
+0x1.a1a68ap-5
+0x1.064b3ap-4
+-0x1.69f276p-8
+-0x1.b3ee78p-8
+0x1.7751e6p-4
+0x1.5b57fcp-4
+0x1.8ef00ep-4
+0x1.ab2556p-4
+-0x1.236caap-2
+-0x1.03d538p-2
+-0x1.39760ep-1
+-0x1.324084p-1
+0x0p+0
+-0x1.e23a92p+1
+-0x1.f8568p+1
+-0x1.e235aep+1
+-0x1.51e4eap+2
+0x1.7cf874p-3
+0x1.2b45e8p-3
+0x1.4bb734p-3
+0x1.77904p-3
+0x1.823138p-4
+0x1.55fe04p-3
+0x0p+0
+0x1.9e6c1p-4
+0x1.7dbd24p-3
+0x1.a07412p-5
+0x1.7069ap-9
+0x1.7f406ep-4
+0x1.5ad766p-4
+-0x1.21be96p-2
+-0x1.360e08p-1
+0x0p+0
+-0x1.f8568p+1
+-0x1.e2376ep+1
+-0x1.51e4eap+2
+0x1.357468p-3
+0x1.794c4p-3
+0x1.46e01p-3
+0x1.8eff2p-4
+-0x1.86765p+1
+0x1.f4bf98p+3
+-0x1.3b8636p+2
+-0x1.30d436p+0
+-0x1.dbce9ep+2
+-0x1.59b9d2p-1
+-0x1.881a92p+3
+-0x1.59b9d2p-1
+-0x1.513fdep-1
+-0x1.e2f43cp+2
+-0x1.51405cp-1
+-0x1.8ea82ep+3
+-0x1.514074p-1
+-0x1.8ea82ep+3
+-0x1.e2f43cp+2
+-0x1.34f674p+1
+0x0p+0
+-0x1.34f674p+1
+-0x1.942698p+1
+-0x1.83d98ep+3
+-0x1.f2d50cp-4
+-0x1.34f674p+1
+-0x1.f2d50cp-4
+-0x1.942698p+1
+-0x1.df3e9ap+1
+-0x1.46f352p+2
+-0x1.df3e9ap+1
+-0x1.45057ap+1
+0x0p+0
+-0x1.45057ap+1
+-0x1.79635ep+1
+-0x1.a62374p-3
+-0x1.892beap+3
+-0x1.a36d52p-3
+-0x1.45057ap+1
+-0x1.e08956p+1
+-0x1.79635ep+1
+-0x1.e07452p+1
+-0x1.4cde78p+2
+-0x1.45057ap+1
+0x0p+0
+-0x1.45057ap+1
+-0x1.79635ep+1
+-0x1.e5ef2cp-3
+-0x1.892beap+3
+-0x1.cda272p-3
+-0x1.45057ap+1
+-0x1.e07b54p+1
+-0x1.79635ep+1
+-0x1.e078d8p+1
+-0x1.4cde78p+2
+-0x1.45057ap+1
+0x0p+0
+-0x1.45057ap+1
+-0x1.79635ep+1
+-0x1.d6753ap-3
+-0x1.892beap+3
+-0x1.d34302p-3
+-0x1.45057ap+1
+-0x1.e079bcp+1
+-0x1.79635ep+1
+-0x1.e0796ep+1
+-0x1.4cde78p+2
+-0x1.d46a72p-3
+-0x1.45057ap+1
+-0x1.79635ep+1
+-0x1.e07984p+1
+-0x1.4cde78p+2
+0x0p+0
+-0x1.892beap+3
+-0x1.79588p+2
+-0x1.dcea26p+2
+-0x1.987dbap+3
+-0x1.b922c6p-1
+-0x1.79588p+2
+-0x1.b922c6p-1
+-0x1.dcea26p+2
+-0x1.a392d6p-1
+-0x1.cba7eap+3
+-0x1.a392d6p-1
+-0x1.79747ep+2
+-0x1.dd0624p+2
+-0x1.7937c2p+2
+-0x1.dd4fd2p+2
+-0x1.b76ae6p-1
+-0x1.9cf8dep+3
+-0x1.b7883ep-1
+-0x1.79648cp+2
+-0x1.a658d2p-1
+-0x1.dd2adp+2
+-0x1.a602a4p-1
+-0x1.d0fc74p+3
+-0x1.79648cp+2
+-0x1.dd2adp+2
+-0x1.793066p+2
+-0x1.dd6a4p+2
+-0x1.b73908p-1
+-0x1.9cf8dep+3
+-0x1.b754fep-1
+-0x1.795932p+2
+-0x1.a62136p-1
+-0x1.dd489cp+2
+-0x1.a5c4bap-1
+-0x1.d0fc74p+3
+-0x1.795932p+2
+-0x1.dd489cp+2
+-0x1.792b78p+2
+-0x1.dd805ep+2
+-0x1.b700c2p-1
+-0x1.9cf8dep+3
+-0x1.b71ebp-1
+-0x1.795178p+2
+-0x1.a5e596p-1
+-0x1.dd6116p+2
+-0x1.a59098p-1
+-0x1.d0fc74p+3
+-0x1.b6d18p-1
+-0x1.795178p+2
+-0x1.dd6116p+2
+-0x1.a5aec2p-1
+-0x1.d0fc74p+3
+-0x1.9cf8dep+3
+-0x1.4f830ap+1
+-0x1.f36ccp+1
+-0x1.30fcccp-2
+-0x1.f36ccp+1
+-0x1.f43ec8p+1
+-0x1.53645cp+1
+-0x1.f43ec6p+1
+-0x1.15be0ap-2
+-0x1.f43ec8p+1
+-0x1.15be0ap-2
+-0x1.53645cp+1
+-0x1.72416cp+2
+0x0p+0
+-0x1.72416cp+2
+-0x1.05aeccp+0
+-0x1.43b0e4p+3
+-0x1.05aeccp+0
+-0x1.7ff3e6p+2
+0x0p+0
+-0x1.f3146p-1
+-0x1.7ff3e6p+2
+-0x1.f1e878p-1
+-0x1.4778ap+3
+-0x1.7ff3e6p+2
+0x0p+0
+-0x1.f2550ep-1
+-0x1.7ff3e6p+2
+-0x1.f22e94p-1
+-0x1.4778ap+3
+-0x1.f23c5ep-1
+-0x1.4778ap+3
+-0x1.7ff3e6p+2
+0x0p+0
+-0x1.a3f82ap+2
+-0x1.3c1826p+3
+-0x1.1919a8p+0
+-0x1.3c1826p+3
+-0x1.3f6ea6p+3
+-0x1.a6905cp+2
+-0x1.3f6b3ep+3
+-0x1.20a826p+0
+-0x1.3f6a86p+3
+-0x1.a6905cp+2
+-0x1.3f6ac8p+3
+-0x1.20a826p+0
+-0x1.3f6abp+3
+-0x1.a6905cp+2
+-0x1.3f6ab8p+3
+-0x1.20a826p+0
+-0x1.3f6ab6p+3
+-0x1.20a826p+0
+-0x1.a6905cp+2
+0x1.1f60f2p+1
+-0x1.300bap+2
+-0x1.1594cp+3
+-0x1.300bap+2
+-0x1.3414aep+2
+0x1.1e843ep+1
+-0x1.3413c6p+2
+-0x1.16470ap+3
+-0x1.34111ap+2
+0x1.1e843ep+1
+-0x1.341214p+2
+-0x1.16470ap+3
+-0x1.3411bap+2
+-0x1.16470ap+3
+0x1.1e843ep+1
+-0x1.64dccep-7
+-0x1.6aa8b4p-8
+-0x1.b0c2cp-12
+0x1.d54802p-9
+0x1.bb634p-7
+0x1.8fa2b6p-6
+0x1.0fc5a4p-5
+0x1.c77f0cp-4
+0x1.24a31ep-2
+0x1.10b4ccp+1
+0x1.42c444p-1
+-0x1.81be06p+1
+0x1.fb683p+3
+-0x1.2fe6ecp+2
+-0x1.4198cp+0
+-0x1.59b9d2p-1
+-0x1.dbce9ep+2
+-0x1.881a92p+3
+-0x1.f2d50cp-4
+-0x1.83d98ep+3
+-0x1.34f674p+1
+-0x1.df3e9ap+1
+-0x1.46f352p+2
+-0x1.942698p+1
+-0x1.b922c6p-1
+-0x1.987dbap+3
+-0x1.79588p+2
+-0x1.a392d6p-1
+-0x1.dcea26p+2
+-0x1.cba7eap+3
+-0x1.e16c3cp+1
+-0x1.4052ap+2
+-0x1.c6375p+1
+-0x1.f36ccp+1
+-0x1.4f830ap+1
+-0x1.30fcccp-2
+-0x1.05aeccp+0
+-0x1.72416cp+2
+-0x1.43b0e4p+3
+-0x1.3c1826p+3
+-0x1.a3f82ap+2
+-0x1.1919a8p+0
+-0x1.300bap+2
+0x1.1f60f2p+1
+-0x1.1594cp+3
+0x1.ef2eb4p-5
+0x1.1ab8d6p-3
+0x1.7ba3c8p-3
+0x1.7ca0f2p-3
+0x1.6ac1c4p-4
+-0x1.9afd3ep-6
+0x1.4f36b8p-5
+0x1.ff986p-4
+-0x1.c87364p-2
+-0x1.19bc64p-1
+0x0p+0
+0x1.7f0feap+2
+0x0p+0
+0x1.80c3d6p+2
+0x0p+0
+0x1.4f36b8p-5
+0x0p+0
+0x1.7f406ep-4
+0x0p+0
+0x1.ff986p-4
+0x0p+0
+0x1.5ad766p-4
+0x0p+0
+0x1.50b404p+2
+0x0p+0
+0x1.53d82ap+2
+0x0p+0
+0x1.75988p+2
+0x0p+0
+0x1.8003ccp+2
+0x0p+0
+0x1.7ace26p+2
+0x0p+0
+0x1.7dca5p+2
+0x0p+0
+0x1.8003ccp+2
+0x0p+0
+0x1.a28166p+1
+0x0p+0
+0x1.9dc91cp+1
+0x0p+0
+0x1.581e4p+1
+0x0p+0
+0x1.4ad4p+1
+0x0p+0
+0x1.4bd94cp+2
+0x0p+0
+0x1.49f5acp+2
+0x0p+0
+0x1.fde4ap-2
+0x0p+0
+0x1.22bdp-2
+0x0p+0
+0x1.804742p+2
+0x0p+0
+0x1.7daf1p+2
+0x0p+0
+0x1.8c736p-2
+0x0p+0
+0x1.8ce3ep-2
+0x0p+0
+0x1.1f60f2p+1
+0x0p+0
+0x1.1e843ep+1
+0x0p+0
+0x1.42d33p+1
+0x0p+0
+0x1.4207fep+1
+0x0p+0
+0x1.5afb5ep+2
+0x0p+0
+0x1.5b4586p+2
+0x0p+0
+0x1.5e081cp+1
+0x0p+0
+0x1.2be8ecp+1
+0x0p+0
+0x1.885058p+0
+0x0p+0
+0x1.7837fp+0
+0x0p+0
+0x1.473458p+0
+0x0p+0
+0x1.00eb3p+0
+0x0p+0
+0x1.40a48p-2
+0x0p+0
+0x1.bbc4p-4
+0x0p+0
+0x1.f22bd8p+1
+0x0p+0
+0x1.ef62bp+1
+0x0p+0
+0x1.4500d2p+1
+0x0p+0
+0x1.43c5e8p+1
+0x0p+0
+0x1.8563aep+2
+0x0p+0
+0x1.7c6d66p+2
+0x0p+0
+0x1.88e328p+0
+0x0p+0
+0x1.5a66p+0
+0x0p+0
+0x1.2cb19p+0
+0x0p+0
+0x1.1504f8p+0
+0x0p+0
+0x1.9018d4p+1
+0x0p+0
+0x1.aadc0ep+1
+0x0p+0
+0x1.ef48f8p+1
+0x0p+0
+0x1.df39f2p+1
+0x0p+0
+0x1.66e87cp+2
+0x0p+0
+0x1.67f7a8p+2
+0x0p+0
+0x1.4870cep+2
+0x0p+0
+0x1.414b3p+2
+0x0p+0
+0x1.50b404p+2
+0x0p+0
+0x1.53d82ap+2
+0x0p+0
+0x1.1f0f4ep+2
+0x0p+0
+0x1.14663ap+2
+0x0p+0
+0x1.8a5462p+2
+0x0p+0
+0x1.837c62p+2
+0x0p+0
+0x1.c8c5p-2
+0x0p+0
+0x1.1e798p-2
+0x0p+0
+0x1.39bb48p+1
+0x0p+0
+0x1.2a9c58p+1
+0x0p+0
+0x1.5dad5cp+2
+0x0p+0
+0x1.5d69dep+2
+0x0p+0
+0x1.475546p+2
+0x0p+0
+0x1.46de56p+2
+0x0p+0
+0x1.fde4ap-2
+0x0p+0
+0x1.22bdp-2
+0x0p+0
+0x1.8c736p-2
+0x0p+0
+0x1.8ce3ep-2
+0x0p+0
+0x1.1ab8d6p-3
+0x0p+0
+0x1.46e01p-3
+0x0p+0
+0x1.75988p+2
+0x0p+0
+0x1.8003ccp+2
+0x0p+0
+0x1.7ace26p+2
+0x0p+0
+0x1.761eb4p+2
+0x0p+0
+-0x1.c01032p-2
+0x0p+0
+-0x1.c01032p-2
+0x0p+0
+-0x1.c4350ap-2
+0x0p+0
+-0x1.c53de4p-2
+0x0p+0
+-0x1.c58014p-2
+0x0p+0
+0x0p+0
+-0x1.08311p-1
+-0x1.c58014p-2
+0x0p+0
+0x1.75c7b4p+2
+0x0p+0
+0x1.711994p+2
+0x0p+0
+0x1.7370a4p+2
+0x0p+0
+0x1.73552cp+2
+0x0p+0
+0x1.75c7b4p+2
+0x0p+0
+0x1.711994p+2
+0x0p+0
+-0x1.eca8a2p-2
+-0x1.eca8a2p-2
+0x0p+0
+-0x1.e891acp-2
+0x0p+0
+-0x1.e9911cp-2
+0x0p+0
+-0x1.e82d42p-2
+0x0p+0
+-0x1.e8f074p-2
+0x0p+0
+-0x1.e84f5ap-2
+0x0p+0
+-0x1.e8bbb4p-2
+0x0p+0
+-0x1.e8bbb4p-2
+0x0p+0
+0x0p+0
+-0x1.e86cbap-2
+-0x1.e8bbb4p-2
+0x0p+0
+0x1.7393fap+2
+0x0p+0
+0x1.7398eap+2
+0x0p+0
+0x1.7393fap+2
+0x0p+0
+0x1.7398eap+2
+-0x1.064d58p-6
+-0x1.32c27ap-7
+-0x1.32c27ap-7
+-0x1.5e1dbp-9
+-0x1.5e1dbp-9
+0x1.3e4242p-10
+0x1.3e4242p-10
+0x1.a5be3ap-7
+0x1.a5be3ap-7
+0x1.915feap-6
+0x1.915feap-6
+0x1.0646f2p-5
+0x1.0646f2p-5
+0x1.efedecp-4
+0x1.efedecp-4
+0x1.44514p-2
+-0x1.5a2c48p-6
+-0x1.b41c88p-7
+-0x1.b41c88p-7
+-0x1.5d829p-8
+-0x1.60af42p-8
+-0x1.8dd20cp-11
+-0x1.60af42p-8
+-0x1.8dd20cp-11
+-0x1.3891eap-10
+0x1.89d1fp-7
+0x1.89d1fp-7
+0x1.8cad08p-6
+0x1.8c7fdap-6
+0x1.f9d68cp-6
+0x1.8c7fdap-6
+0x1.f9d68cp-6
+0x1.f2b324p-6
+0x1.0da204p-3
+0x1.0cb77ap-3
+0x1.63ff62p-2
+-0x1.5a2c48p-6
+-0x1.b284f4p-7
+-0x1.4441fp-8
+-0x1.3891eap-10
+0x1.8a2924p-7
+0x1.934702p-6
+0x1.fa9a5ep-6
+0x1.0cb77ap-3
+0x1.63ff62p-2
+0x1.423414p+1
+0x1.7dbd24p-3
+0x1.a07412p-5
+-0x1.e86cbap-2
+0x0p+0
+-0x1.f8568p+1
+-0x1.e86cbap-2
+-0x1.e86cbap-2
+0x0p+0
+0x1.a07412p-5
+0x1.357468p-3
+0x1.7069ap-9
+0x1.a07412p-5
+0x1.7f406ep-4
+0x1.7069ap-9
+0x1.5ad766p-4
+0x1.7f406ep-4
+-0x1.e86cbap-2
+0x1.5ad766p-4
+-0x1.360e08p-1
+-0x1.e86cbap-2
+0x0p+0
+-0x1.360e08p-1
+-0x1.f8568p+1
+-0x1.e2376ep+1
+-0x1.51e4eap+2
+-0x1.e2376ep+1
+0x1.357468p-3
+0x1.794c4p-3
+0x1.794c4p-3
+0x1.46e01p-3
+0x1.46e01p-3
+0x1.8eff2p-4
+0x1.8eff2p-4
+0x0p+0
+-0x1.9deaccp-3
+0x1.eae95cp-6
+-0x1.e6af1p-2
+0x0p+0
+-0x1.157ebcp+2
+-0x1.e6af1p-2
+-0x1.cfb076p-2
+0x0p+0
+0x1.972508p-4
+0x1.d97b3cp-6
+0x1.55266p-5
+0x1.64d19ap-5
+0x1.1e264cp-5
+0x1.23697p-3
+0x1.10dbf6p-3
+-0x1.fa416p-7
+0x1.90bd94p-9
+-0x1.d5b5f6p-2
+-0x1.5fd3bap-2
+-0x1.3e7072p-1
+-0x1.1e283p-1
+0x0p+0
+-0x1.e0f4a6p+1
+-0x1.157a1cp+2
+-0x1.e092aap+1
+-0x1.637734p+2
+0x1.630646p-3
+0x1.95375p-4
+0x1.6272f8p-3
+0x1.547b62p-3
+0x1.326d8p-3
+0x1.68a30cp-3
+0x0p+0
+0x1.35b5c6p-3
+-0x1.9deaccp-3
+0x1.1134eap-5
+-0x1.336c2cp-2
+0x0p+0
+-0x1.157a1cp+2
+-0x1.336c2cp-2
+-0x1.28e08ep-2
+0x0p+0
+0x1.b48132p-4
+0x1.08d8dap-5
+0x1.5446f8p-5
+0x1.6495fcp-5
+0x1.31692ep-5
+0x1.06ea58p-3
+0x1.fadbb8p-4
+0x1.fb886ap-5
+0x1.abf7aep-5
+-0x1.452bfep-2
+-0x1.332058p-2
+-0x1.2eb75cp-1
+-0x1.22467ep-1
+0x0p+0
+-0x1.e0b602p+1
+-0x1.157d7ep+2
+-0x1.e09d78p+1
+-0x1.637734p+2
+0x1.5d84c2p-3
+0x1.a1a62p-4
+0x1.6098bcp-3
+0x1.50136ap-3
+0x1.33d44p-3
+0x1.64d322p-3
+0x0p+0
+0x1.383b5p-3
+-0x1.9deaccp-3
+0x1.23f54p-5
+-0x1.340538p-2
+0x0p+0
+-0x1.157d7ep+2
+-0x1.340538p-2
+-0x1.282964p-2
+0x0p+0
+0x1.bd82dep-4
+0x1.1c5ad6p-5
+0x1.6295ecp-5
+0x1.86b48p-5
+0x1.4fb39ap-5
+0x1.ad4a08p-4
+0x1.b40362p-4
+0x1.038ccap-5
+0x1.56975cp-5
+-0x1.43335p-2
+-0x1.2cace6p-2
+-0x1.28b91ap-1
+-0x1.20248ep-1
+0x0p+0
+-0x1.e0a64ap+1
+-0x1.158136p+2
+-0x1.e09614p+1
+-0x1.637734p+2
+0x1.57a2bcp-3
+0x1.a8993p-4
+0x1.5f129cp-3
+0x1.4be2ap-3
+0x1.35d05ap-3
+0x1.61f4c4p-3
+0x0p+0
+0x1.3a295cp-3
+-0x1.9deaccp-3
+0x1.31e448p-5
+0x1.b12f0ap-5
+0x1.b52fa4p-4
+0x1.c9dfd4p-6
+-0x1.363338p-2
+-0x1.249a34p-1
+-0x1.158136p+2
+-0x1.e09be2p+1
+-0x1.637734p+2
+0x0p+0
+0x1.c3be5ap-4
+0x1.529b2ep-3
+0x1.5d5134p-3
+0x1.37c71ep-3
+-0x1.8b2e9ap+1
+0x1.ee17p+3
+-0x1.47258p+2
+-0x1.200facp+0
+-0x1.e2f43cp+2
+-0x1.514074p-1
+-0x1.8ea82ep+3
+-0x1.514074p-1
+-0x1.48c6c8p-1
+-0x1.ea19dap+2
+-0x1.48c75ep-1
+-0x1.9535cap+3
+-0x1.48c75ap-1
+-0x1.9535cap+3
+-0x1.ea19dap+2
+-0x1.45057ap+1
+0x0p+0
+-0x1.892beap+3
+-0x1.d46a72p-3
+-0x1.45057ap+1
+-0x1.d46a72p-3
+-0x1.55148p+1
+0x0p+0
+-0x1.4064b2p-2
+-0x1.8e7e46p+3
+-0x1.3fea9ap-2
+-0x1.55148p+1
+-0x1.55148p+1
+0x0p+0
+-0x1.3ff618p-2
+-0x1.8e7e46p+3
+-0x1.3ff216p-2
+-0x1.55148p+1
+-0x1.3ff364p-2
+-0x1.55148p+1
+0x0p+0
+-0x1.8e7e46p+3
+-0x1.4cde78p+2
+-0x1.e07984p+1
+-0x1.79635ep+1
+-0x1.e07984p+1
+-0x1.e1b4bep+1
+-0x1.52c99ep+2
+-0x1.e1b4aap+1
+-0x1.5ea024p+1
+-0x1.e1b4c2p+1
+-0x1.5ea024p+1
+-0x1.52c99ep+2
+-0x1.795178p+2
+-0x1.dd6116p+2
+-0x1.9cf8dep+3
+-0x1.b6d18p-1
+-0x1.795178p+2
+-0x1.b6d18p-1
+-0x1.dd6116p+2
+-0x1.a5aec2p-1
+-0x1.d0fc74p+3
+-0x1.a5aec2p-1
+-0x1.796d76p+2
+-0x1.dd7d14p+2
+-0x1.794856p+2
+-0x1.ddaa62p+2
+-0x1.b51fc2p-1
+-0x1.a17402p+3
+-0x1.b53a46p-1
+-0x1.7967a8p+2
+-0x1.a88424p-1
+-0x1.dd909ap+2
+-0x1.a83f84p-1
+-0x1.d650fep+3
+-0x1.7967a8p+2
+-0x1.dd909ap+2
+-0x1.79464ep+2
+-0x1.ddb95ep+2
+-0x1.b4f96ep-1
+-0x1.a17402p+3
+-0x1.b51078p-1
+-0x1.79641cp+2
+-0x1.a857eap-1
+-0x1.dda0dep+2
+-0x1.a818f8p-1
+-0x1.d650fep+3
+-0x1.79641cp+2
+-0x1.dda0dep+2
+-0x1.7946p+2
+-0x1.ddc5bap+2
+-0x1.b4d59p-1
+-0x1.a17402p+3
+-0x1.b4eaaep-1
+-0x1.79624p+2
+-0x1.a82f36p-1
+-0x1.ddae88p+2
+-0x1.a7f542p-1
+-0x1.d650fep+3
+-0x1.b4b46ap-1
+-0x1.79624p+2
+-0x1.ddae88p+2
+-0x1.a809fp-1
+-0x1.d650fep+3
+-0x1.a17402p+3
+-0x1.53645cp+1
+-0x1.f43ec8p+1
+-0x1.15be0ap-2
+-0x1.f43ec8p+1
+-0x1.f510dp+1
+-0x1.5745aep+1
+-0x1.f510ccp+1
+-0x1.f4fe8ep-3
+-0x1.f510d2p+1
+-0x1.f4fe8ep-3
+-0x1.5745aep+1
+-0x1.7ff3e6p+2
+-0x1.f23c5ep-1
+-0x1.4778ap+3
+-0x1.f23c5ep-1
+-0x1.d9183p-1
+-0x1.8da66p+2
+-0x1.d90c16p-1
+-0x1.4b405cp+3
+-0x1.d913c8p-1
+-0x1.4b405cp+3
+-0x1.8da66p+2
+-0x1.a6905cp+2
+-0x1.3f6ab6p+3
+-0x1.20a826p+0
+-0x1.3f6ab6p+3
+-0x1.42bcecp+3
+-0x1.a9288ep+2
+-0x1.42b994p+3
+-0x1.2836a4p+0
+-0x1.42b8dep+3
+-0x1.a9288ep+2
+-0x1.42b92p+3
+-0x1.2836a4p+0
+-0x1.42b908p+3
+-0x1.a9288ep+2
+-0x1.42b91p+3
+-0x1.2836a4p+0
+-0x1.42b90cp+3
+-0x1.2836a4p+0
+-0x1.a9288ep+2
+0x1.1e843ep+1
+-0x1.3411bap+2
+-0x1.16470ap+3
+-0x1.3411bap+2
+-0x1.3818dep+2
+0x1.1da78ap+1
+-0x1.381656p+2
+-0x1.16f954p+3
+-0x1.381668p+2
+-0x1.16f954p+3
+0x1.1da78ap+1
+-0x1.064d58p-6
+-0x1.32c27ap-7
+-0x1.5e1dbp-9
+0x1.3e4242p-10
+0x1.a5be3ap-7
+0x1.915feap-6
+0x1.0646f2p-5
+0x1.efedecp-4
+0x1.44514p-2
+0x1.29747p+1
+0x1.7dbd24p-3
+-0x1.86765p+1
+0x1.f4bf98p+3
+-0x1.3b8636p+2
+-0x1.30d436p+0
+-0x1.514074p-1
+-0x1.e2f43cp+2
+-0x1.8ea82ep+3
+-0x1.d46a72p-3
+-0x1.892beap+3
+-0x1.45057ap+1
+-0x1.e07984p+1
+-0x1.4cde78p+2
+-0x1.79635ep+1
+-0x1.b6d18p-1
+-0x1.9cf8dep+3
+-0x1.795178p+2
+-0x1.a5aec2p-1
+-0x1.dd6116p+2
+-0x1.d0fc74p+3
+-0x1.e2376ep+1
+-0x1.51e4eap+2
+-0x1.f8568p+1
+-0x1.f43ec8p+1
+-0x1.53645cp+1
+-0x1.15be0ap-2
+-0x1.f23c5ep-1
+-0x1.7ff3e6p+2
+-0x1.4778ap+3
+-0x1.3f6ab6p+3
+-0x1.a6905cp+2
+-0x1.20a826p+0
+-0x1.3411bap+2
+0x1.1e843ep+1
+-0x1.16470ap+3
+0x1.8eff2p-4
+0x1.46e01p-3
+0x1.794c4p-3
+0x1.357468p-3
+0x1.a07412p-5
+0x1.7069ap-9
+0x1.7f406ep-4
+0x1.5ad766p-4
+-0x1.e86cbap-2
+-0x1.360e08p-1
+0x0p+0
+0x1.3000a4p+1
+0x0p+0
+0x1.2f2e9ap+1
+0x0p+0
+0x1.45eaa8p+2
+0x0p+0
+0x1.4a1bccp+2
+0x0p+0
+0x1.80c3d6p+2
+0x0p+0
+0x1.8277c2p+2
+0x0p+0
+0x1.7f406ep-4
+0x0p+0
+0x1.b52fa4p-4
+0x0p+0
+0x1.5ad766p-4
+0x0p+0
+0x1.c9dfd4p-6
+0x0p+0
+0x1.53d82ap+2
+0x0p+0
+0x1.56fd3cp+2
+0x0p+0
+0x1.7398eap+2
+0x0p+0
+0x1.7ebc82p+2
+0x0p+0
+0x1.9dc91cp+1
+0x0p+0
+0x1.9910d2p+1
+0x0p+0
+0x1.4ad4p+1
+0x0p+0
+0x1.3d9aa8p+1
+0x0p+0
+0x1.49f5acp+2
+0x0p+0
+0x1.48120cp+2
+0x0p+0
+0x1.22bdp-2
+0x0p+0
+0x1.1e558p-4
+0x0p+0
+0x1.7daf1p+2
+0x0p+0
+0x1.7b16dep+2
+0x0p+0
+0x1.8ce3ep-2
+0x0p+0
+0x1.8bd76p-2
+0x0p+0
+0x1.1e843ep+1
+0x0p+0
+0x1.1da78ap+1
+0x0p+0
+0x1.4207fep+1
+0x0p+0
+0x1.43a38ap+1
+0x0p+0
+0x1.5b4586p+2
+0x0p+0
+0x1.5b8928p+2
+0x0p+0
+0x1.2be8ecp+1
+0x0p+0
+0x1.f27ap+0
+0x0p+0
+0x1.7837fp+0
+0x0p+0
+0x1.682538p+0
+0x0p+0
+0x1.00eb3p+0
+0x0p+0
+0x1.75441p-1
+0x0p+0
+0x1.bbc4p-4
+0x0p+0
+-0x1.8b0ap-4
+0x0p+0
+0x1.ef62bp+1
+0x0p+0
+0x1.ec9988p+1
+0x0p+0
+0x1.43c5e8p+1
+0x0p+0
+0x1.428aaap+1
+0x0p+0
+0x1.7c6d66p+2
+0x0p+0
+0x1.73771ep+2
+0x0p+0
+0x1.5a66p+0
+0x0p+0
+0x1.2be8d8p+0
+0x0p+0
+0x1.1504f8p+0
+0x0p+0
+0x1.fab0cp-1
+0x0p+0
+0x1.aadc0ep+1
+0x0p+0
+0x1.c59f48p+1
+0x0p+0
+0x1.df39f2p+1
+0x0p+0
+0x1.cf2aecp+1
+0x0p+0
+0x1.67f7a8p+2
+0x0p+0
+0x1.6906cap+2
+0x0p+0
+0x1.414b3p+2
+0x0p+0
+0x1.3a2592p+2
+0x0p+0
+0x1.53d82ap+2
+0x0p+0
+0x1.56fd3cp+2
+0x0p+0
+0x1.14663ap+2
+0x0p+0
+0x1.09bd26p+2
+0x0p+0
+0x1.837c62p+2
+0x0p+0
+0x1.7e208p+2
+0x0p+0
+0x1.1e798p-2
+0x0p+0
+0x1.d0b8p-4
+0x0p+0
+0x1.2a9c58p+1
+0x0p+0
+0x1.1b7d68p+1
+0x0p+0
+0x1.5d69dep+2
+0x0p+0
+0x1.5d1e78p+2
+0x0p+0
+0x1.46de56p+2
+0x0p+0
+0x1.4690e4p+2
+0x0p+0
+0x1.22bdp-2
+0x0p+0
+0x1.1e558p-4
+0x0p+0
+0x1.8ce3ep-2
+0x0p+0
+0x1.8bd76p-2
+0x0p+0
+0x1.46e01p-3
+0x0p+0
+0x1.5d5134p-3
+0x0p+0
+0x1.7398eap+2
+0x0p+0
+0x1.7ebc82p+2
+0x0p+0
+0x1.792ab6p+2
+0x0p+0
+0x1.7424bep+2
+0x0p+0
+-0x1.dfaf7ap-2
+0x0p+0
+-0x1.dfaf7ap-2
+0x0p+0
+-0x1.e3d106p-2
+0x0p+0
+-0x1.e4d914p-2
+0x0p+0
+-0x1.e51b24p-2
+0x0p+0
+0x0p+0
+-0x1.e37354p-2
+-0x1.e51b24p-2
+0x0p+0
+0x1.73ce04p+2
+0x0p+0
+0x1.73e88p+2
+0x0p+0
+0x1.73ce04p+2
+0x0p+0
+0x1.73e88p+2
+-0x1.5a2c48p-6
+-0x1.b284f4p-7
+-0x1.b284f4p-7
+-0x1.4441fp-8
+-0x1.4441fp-8
+-0x1.3891eap-10
+-0x1.3891eap-10
+0x1.8a2924p-7
+0x1.8a2924p-7
+0x1.934702p-6
+0x1.934702p-6
+0x1.fa9a5ep-6
+0x1.fa9a5ep-6
+0x1.0cb77ap-3
+-0x1.ae0b38p-6
+-0x1.19ef8p-6
+-0x1.19ef8p-6
+-0x1.f2b5a8p-8
+-0x1.f2b5a8p-8
+-0x1.9ede98p-9
+-0x1.f2b5a8p-8
+-0x1.9ede98p-9
+-0x1.cbf1c6p-9
+0x1.6e3cdap-7
+0x1.6e3cdap-7
+0x1.8e942p-6
+0x1.8e942p-6
+0x1.e7e306p-6
+0x1.8e942p-6
+0x1.e7e306p-6
+0x1.e59e3cp-6
+0x1.226288p-3
+-0x1.ae0b38p-6
+-0x1.19ef8p-6
+-0x1.dc20ecp-8
+-0x1.cbf1c6p-9
+0x1.6e3cdap-7
+0x1.90bd3ep-6
+0x1.e94d9ep-6
+0x1.21f6bp-3
+0x1.83ad84p-2
+0x1.5af3b8p+1
+-0x1.9deaccp-3
+0x1.31e448p-5
+-0x1.158136p+2
+-0x1.e37354p-2
+-0x1.e37354p-2
+0x0p+0
+0x1.31e448p-5
+0x1.c3be5ap-4
+0x1.b12f0ap-5
+0x1.31e448p-5
+0x1.b52fa4p-4
+0x1.b12f0ap-5
+0x1.c9dfd4p-6
+0x1.b52fa4p-4
+-0x1.e37354p-2
+0x1.c9dfd4p-6
+-0x1.249a34p-1
+-0x1.e37354p-2
+0x0p+0
+-0x1.249a34p-1
+-0x1.158136p+2
+-0x1.e09be2p+1
+-0x1.637734p+2
+-0x1.e09be2p+1
+0x1.c3be5ap-4
+0x1.529b2ep-3
+0x1.529b2ep-3
+0x1.5d5134p-3
+0x1.5d5134p-3
+0x1.37c71ep-3
+0x1.37c71ep-3
+0x0p+0
+-0x1.202beep-1
+0x1.8763ecp-5
+-0x1.2de902p+2
+-0x1.9d80bcp-2
+-0x1.8bebf8p-2
+0x0p+0
+0x1.c8debp-5
+0x1.75430cp-5
+0x1.97c6fap-5
+0x1.a959bp-4
+0x1.7c3f56p-4
+0x1.d33cc2p-4
+0x1.d73aa8p-4
+-0x1.a6cf78p-4
+-0x1.5423ap-4
+-0x1.904e3ep-2
+-0x1.2f51d4p-2
+-0x1.27454cp-1
+-0x1.16e60ep-1
+0x0p+0
+-0x1.dceb1ep+1
+-0x1.2dfbep+2
+-0x1.dcd716p+1
+-0x1.75097ep+2
+0x1.1ad15p-3
+0x1.db610ap-5
+0x1.68ebcp-3
+0x1.09083p-3
+0x1.b45e6p-3
+0x1.652e84p-3
+0x0p+0
+0x1.aac4fep-3
+-0x1.202beep-1
+0x1.8d5eb6p-5
+-0x1.2dfbep+2
+-0x1.1062d8p-2
+-0x1.094cf4p-2
+0x0p+0
+0x1.0ae0ecp-4
+0x1.7ddd64p-5
+0x1.8f88a4p-5
+0x1.8e0a54p-4
+0x1.731deap-4
+0x1.b2ef46p-4
+0x1.beca74p-4
+-0x1.60f766p-5
+-0x1.5cfbf4p-5
+-0x1.1ca3f2p-2
+-0x1.1440f8p-2
+-0x1.1f0b7cp-1
+-0x1.17370ap-1
+0x0p+0
+-0x1.dcde8p+1
+-0x1.2e0502p+2
+-0x1.dcd4fp+1
+-0x1.75097ep+2
+0x1.18816p-3
+0x1.055d5ep-4
+0x1.6bbdfep-3
+0x1.06970ap-3
+0x1.afee7ap-3
+0x1.64d65ep-3
+0x0p+0
+0x1.a8c9d8p-3
+-0x1.202beep-1
+0x1.9e7bcep-5
+-0x1.2e0502p+2
+-0x1.1202f6p-2
+-0x1.0a2cdp-2
+0x0p+0
+0x1.1bb04p-4
+0x1.91e9aep-5
+0x1.9e7dd4p-5
+0x1.88c016p-4
+0x1.6f6fa6p-4
+0x1.5ae96p-4
+0x1.7e4d28p-4
+-0x1.bfdedep-5
+-0x1.678554p-5
+-0x1.1c1fep-2
+-0x1.11584cp-2
+-0x1.1b315ap-1
+-0x1.149536p-1
+0x0p+0
+-0x1.dcd862p+1
+-0x1.2e0ecap+2
+-0x1.dccfc6p+1
+-0x1.75097ep+2
+0x1.13cdbep-3
+0x1.12c55ap-4
+0x1.6d0538p-3
+0x1.04521p-3
+0x1.acb4bep-3
+0x1.64c13ap-3
+0x0p+0
+0x1.a6b4c6p-3
+-0x1.202beep-1
+0x1.aa4932p-5
+0x1.8f7006p-4
+0x1.5ed81ap-4
+-0x1.ac6decp-5
+-0x1.15f2dcp-2
+-0x1.17f7d4p-1
+0x0p+0
+-0x1.2e0ecap+2
+-0x1.dcd2dep+1
+-0x1.75097ep+2
+0x1.28a6cp-4
+0x1.10b62ep-3
+0x1.6d2fd2p-3
+0x1.a9fdb6p-3
+-0x1.8fe6e4p+1
+0x1.e76e68p+3
+-0x1.52c4cap+2
+-0x1.0f4b22p+0
+-0x1.ea19dap+2
+-0x1.48c75ap-1
+-0x1.9535cap+3
+-0x1.48c75ap-1
+-0x1.404df4p-1
+-0x1.f13f78p+2
+-0x1.404e8cp-1
+-0x1.9bc366p+3
+-0x1.404e88p-1
+-0x1.9bc366p+3
+-0x1.f13f78p+2
+-0x1.8e7e46p+3
+-0x1.3ff364p-2
+-0x1.55148p+1
+-0x1.3ff364p-2
+-0x1.95e88ep-2
+-0x1.93d0a2p+3
+-0x1.95999ap-2
+-0x1.652386p+1
+-0x1.9595ep-2
+-0x1.93d0a2p+3
+-0x1.959718p-2
+-0x1.652386p+1
+-0x1.9596a8p-2
+-0x1.652386p+1
+-0x1.93d0a2p+3
+-0x1.52c99ep+2
+-0x1.e1b4c2p+1
+-0x1.5ea024p+1
+-0x1.e1b4c2p+1
+-0x1.e2efecp+1
+-0x1.58b4c4p+2
+-0x1.e2efdp+1
+-0x1.43dceap+1
+-0x1.e2efd6p+1
+-0x1.43dceap+1
+-0x1.58b4c4p+2
+-0x1.79624p+2
+-0x1.ddae88p+2
+-0x1.a17402p+3
+-0x1.b4b46ap-1
+-0x1.79624p+2
+-0x1.b4b46ap-1
+-0x1.ddae88p+2
+-0x1.a809fp-1
+-0x1.d650fep+3
+-0x1.a809fp-1
+-0x1.797e3ep+2
+-0x1.ddca86p+2
+-0x1.7993f2p+2
+-0x1.ddb8ecp+2
+-0x1.b302b2p-1
+-0x1.a5ef26p+3
+-0x1.b31526p-1
+-0x1.797bf6p+2
+-0x1.aadf4cp-1
+-0x1.ddd654p+2
+-0x1.aab2b4p-1
+-0x1.dba588p+3
+-0x1.797bf6p+2
+-0x1.ddd654p+2
+-0x1.7990dep+2
+-0x1.ddc55cp+2
+-0x1.b2ea28p-1
+-0x1.a5ef26p+3
+-0x1.b2f962p-1
+-0x1.797af2p+2
+-0x1.aac2a6p-1
+-0x1.dde038p+2
+-0x1.aa991ep-1
+-0x1.dba588p+3
+-0x1.797af2p+2
+-0x1.dde038p+2
+-0x1.798ed6p+2
+-0x1.ddd012p+2
+-0x1.b2d1d8p-1
+-0x1.a5ef26p+3
+-0x1.b2dffp-1
+-0x1.797ad8p+2
+-0x1.aaa7dcp-1
+-0x1.dde88cp+2
+-0x1.aa8138p-1
+-0x1.dba588p+3
+-0x1.b2bb0ap-1
+-0x1.797ad8p+2
+-0x1.dde88cp+2
+-0x1.aa8edp-1
+-0x1.dba588p+3
+-0x1.a5ef26p+3
+-0x1.5745aep+1
+-0x1.f510d2p+1
+-0x1.f4fe8ep-3
+-0x1.f510d2p+1
+-0x1.f5e2d8p+1
+-0x1.5b27p+1
+-0x1.f5e2dap+1
+-0x1.be8108p-3
+-0x1.f5e2d8p+1
+-0x1.be8108p-3
+-0x1.5b27p+1
+-0x1.8da66p+2
+-0x1.d913c8p-1
+-0x1.4b405cp+3
+-0x1.d913c8p-1
+-0x1.bff9d6p-1
+-0x1.9b58dap+2
+-0x1.bffb7ep-1
+-0x1.4f0818p+3
+-0x1.bffe5cp-1
+-0x1.4f0818p+3
+-0x1.9b58dap+2
+-0x1.a9288ep+2
+-0x1.42b90cp+3
+-0x1.2836a4p+0
+-0x1.42b90cp+3
+-0x1.46070ap+3
+-0x1.abc0cp+2
+-0x1.4603cp+3
+-0x1.2fc522p+0
+-0x1.46030cp+3
+-0x1.abc0cp+2
+-0x1.46034ep+3
+-0x1.2fc522p+0
+-0x1.460336p+3
+-0x1.abc0cp+2
+-0x1.46034p+3
+-0x1.2fc522p+0
+-0x1.46033cp+3
+-0x1.2fc522p+0
+-0x1.abc0cp+2
+0x1.1da78ap+1
+-0x1.381668p+2
+-0x1.16f954p+3
+-0x1.381668p+2
+-0x1.3c1ba8p+2
+0x1.1ccad6p+1
+-0x1.3c1816p+2
+-0x1.17ab9ep+3
+-0x1.3c188cp+2
+-0x1.17ab9ep+3
+0x1.1ccad6p+1
+-0x1.5a2c48p-6
+-0x1.b284f4p-7
+-0x1.4441fp-8
+-0x1.3891eap-10
+0x1.8a2924p-7
+0x1.934702p-6
+0x1.fa9a5ep-6
+0x1.0cb77ap-3
+0x1.63ff62p-2
+0x1.423414p+1
+-0x1.9deaccp-3
+-0x1.8b2e9ap+1
+0x1.ee17p+3
+-0x1.47258p+2
+-0x1.200facp+0
+-0x1.48c75ap-1
+-0x1.ea19dap+2
+-0x1.9535cap+3
+-0x1.3ff364p-2
+-0x1.8e7e46p+3
+-0x1.55148p+1
+-0x1.e1b4c2p+1
+-0x1.52c99ep+2
+-0x1.5ea024p+1
+-0x1.b4b46ap-1
+-0x1.a17402p+3
+-0x1.79624p+2
+-0x1.a809fp-1
+-0x1.ddae88p+2
+-0x1.d650fep+3
+-0x1.e09be2p+1
+-0x1.637734p+2
+-0x1.158136p+2
+-0x1.f510d2p+1
+-0x1.5745aep+1
+-0x1.f4fe8ep-3
+-0x1.d913c8p-1
+-0x1.8da66p+2
+-0x1.4b405cp+3
+-0x1.42b90cp+3
+-0x1.a9288ep+2
+-0x1.2836a4p+0
+-0x1.381668p+2
+0x1.1da78ap+1
+-0x1.16f954p+3
+0x1.37c71ep-3
+0x1.5d5134p-3
+0x1.529b2ep-3
+0x1.c3be5ap-4
+0x1.31e448p-5
+0x1.b12f0ap-5
+0x1.b52fa4p-4
+0x1.c9dfd4p-6
+-0x1.e37354p-2
+-0x1.249a34p-1
+0x0p+0
+0x1.d0b8p-4
+0x0p+0
+-0x1.b0ecp-5
+0x0p+0
+0x1.2f2e9ap+1
+0x0p+0
+0x1.2e5c94p+1
+0x0p+0
+0x1.4a1bccp+2
+0x0p+0
+0x1.4e4ceep+2
+0x0p+0
+0x1.8277c2p+2
+0x0p+0
+0x1.842baep+2
+0x0p+0
+0x1.b52fa4p-4
+0x0p+0
+0x1.5ed81ap-4
+0x0p+0
+0x1.c9dfd4p-6
+0x0p+0
+-0x1.ac6decp-5
+0x0p+0
+0x1.56fd3cp+2
+0x0p+0
+0x1.5a1feap+2
+0x0p+0
+0x1.73e88p+2
+0x0p+0
+0x1.80c088p+2
+0x0p+0
+0x1.9910d2p+1
+0x0p+0
+0x1.945888p+1
+0x0p+0
+0x1.3d9aa8p+1
+0x0p+0
+0x1.3071e8p+1
+0x0p+0
+0x1.48120cp+2
+0x0p+0
+0x1.462e6ep+2
+0x0p+0
+0x1.1e558p-4
+0x0p+0
+-0x1.27248p-3
+0x0p+0
+0x1.7b16dep+2
+0x0p+0
+0x1.787eacp+2
+0x0p+0
+0x1.8bd76p-2
+0x0p+0
+0x1.8a4dep-2
+0x0p+0
+0x1.1da78ap+1
+0x0p+0
+0x1.1ccad6p+1
+0x0p+0
+0x1.43a38ap+1
+0x0p+0
+0x1.476c8ep+1
+0x0p+0
+0x1.5b8928p+2
+0x0p+0
+0x1.5bc854p+2
+0x0p+0
+0x1.f27ap+0
+0x0p+0
+0x1.9043bp+0
+0x0p+0
+0x1.682538p+0
+0x0p+0
+0x1.581ca8p+0
+0x0p+0
+0x1.75441p-1
+0x0p+0
+0x1.d1638p-2
+0x0p+0
+0x1.8bf38ep+2
+0x0p+0
+0x1.7ed856p+2
+0x0p+0
+0x1.ec9988p+1
+0x0p+0
+0x1.e9d06p+1
+0x0p+0
+0x1.428aaap+1
+0x0p+0
+0x1.414f96p+1
+0x0p+0
+0x1.73771ep+2
+0x0p+0
+0x1.6a80d6p+2
+0x0p+0
+0x1.2be8d8p+0
+0x0p+0
+0x1.fad76p-1
+0x0p+0
+0x1.14aa44p+0
+0x0p+0
+0x1.24957p+0
+0x0p+0
+0x1.fab0cp-1
+0x0p+0
+0x1.cb579p-1
+0x0p+0
+0x1.c59f48p+1
+0x0p+0
+0x1.e06282p+1
+0x0p+0
+0x1.cf2aecp+1
+0x0p+0
+0x1.bf1be6p+1
+0x0p+0
+0x1.6906cap+2
+0x0p+0
+0x1.6a15e4p+2
+0x0p+0
+0x1.3a2592p+2
+0x0p+0
+0x1.32fff4p+2
+0x0p+0
+0x1.56fd3cp+2
+0x0p+0
+0x1.5a1feap+2
+0x0p+0
+0x1.09bd26p+2
+0x0p+0
+0x1.fe2824p+1
+0x0p+0
+0x1.7e208p+2
+0x0p+0
+0x1.78c64cp+2
+0x0p+0
+0x1.d0b8p-4
+0x0p+0
+-0x1.b0ecp-5
+0x0p+0
+0x1.1b7d68p+1
+0x0p+0
+0x1.0c5e78p+1
+0x0p+0
+0x1.5d1e78p+2
+0x0p+0
+0x1.5ccddcp+2
+0x0p+0
+0x1.4690e4p+2
+0x0p+0
+0x1.4656ep+2
+0x0p+0
+0x1.1e558p-4
+0x0p+0
+-0x1.27248p-3
+0x0p+0
+0x1.8bd76p-2
+0x0p+0
+0x1.8a4dep-2
+0x0p+0
+0x1.5d5134p-3
+0x0p+0
+0x1.6d2fd2p-3
+0x0p+0
+0x1.73e88p+2
+0x0p+0
+0x1.80c088p+2
+0x0p+0
+0x1.7a5484p+2
+0x0p+0
+0x1.74e0bap+2
+0x0p+0
+-0x1.d3efc4p-2
+0x0p+0
+-0x1.d3efc4p-2
+0x0p+0
+-0x1.d81cfp-2
+0x0p+0
+-0x1.d927d6p-2
+0x0p+0
+-0x1.d96a94p-2
+0x0p+0
+0x0p+0
+-0x1.98bfcep-2
+-0x1.d96a94p-2
+0x0p+0
+0x1.74890cp+2
+0x0p+0
+0x1.7893bap+2
+0x0p+0
+0x1.74890cp+2
+0x0p+0
+0x1.7893bap+2
+0x0p+0
+-0x1.48fa5ap+2
+-0x1.48fa5ap+2
+0x0p+0
+-0x1.48fa5ap+2
+0x0p+0
+-0x1.48fa5ap+2
+0x0p+0
+0x0p+0
+-0x1.58cc0ep+2
+-0x1.48fa5ap+2
+0x0p+0
+0x1.24957p+0
+0x0p+0
+0x1.ca9d4p-1
+-0x1.ae0b38p-6
+-0x1.19ef8p-6
+-0x1.19ef8p-6
+-0x1.dc20ecp-8
+-0x1.dc20ecp-8
+-0x1.cbf1c6p-9
+-0x1.cbf1c6p-9
+0x1.6e3cdap-7
+0x1.6e3cdap-7
+0x1.90bd3ep-6
+0x1.90bd3ep-6
+0x1.e94d9ep-6
+0x1.e94d9ep-6
+0x1.21f6bp-3
+-0x1.00f514p-5
+-0x1.5a9c88p-6
+-0x1.5a9c88p-6
+-0x1.454a52p-7
+-0x1.454a52p-7
+-0x1.6743b4p-8
+-0x1.454a52p-7
+-0x1.6743b4p-8
+-0x1.791484p-8
+0x1.52509p-7
+0x1.52509p-7
+0x1.8c0a5cp-6
+0x1.8c0a5cp-6
+0x1.d69646p-6
+0x1.8c0a5cp-6
+0x1.d69646p-6
+0x1.d69646p-6
+0x1.37a1bep-3
+-0x1.00f514p-5
+-0x1.5a9c88p-6
+-0x1.3c5a7ap-7
+-0x1.791484p-8
+0x1.52509p-7
+0x1.8c0a5cp-6
+0x1.d69646p-6
+0x1.37a1bep-3
+0x1.a35ba6p-2
+0x1.73b35cp+1
+-0x1.202beep-1
+0x1.aa4932p-5
+-0x1.2e0ecap+2
+-0x1.98bfcep-2
+-0x1.98bfcep-2
+0x0p+0
+0x1.aa4932p-5
+0x1.28a6cp-4
+0x1.8f7006p-4
+0x1.aa4932p-5
+0x1.5ed81ap-4
+0x1.8f7006p-4
+-0x1.ac6decp-5
+0x1.5ed81ap-4
+-0x1.98bfcep-2
+-0x1.ac6decp-5
+-0x1.17f7d4p-1
+-0x1.98bfcep-2
+0x0p+0
+-0x1.17f7d4p-1
+-0x1.2e0ecap+2
+-0x1.dcd2dep+1
+-0x1.75097ep+2
+-0x1.dcd2dep+1
+0x1.28a6cp-4
+0x1.10b62ep-3
+0x1.10b62ep-3
+0x1.6d2fd2p-3
+0x1.6d2fd2p-3
+0x1.a9fdb6p-3
+0x1.a9fdb6p-3
+0x0p+0
+-0x1.d8dd28p-1
+0x1.6b18a8p-4
+-0x1.44e35ap+2
+-0x1.0520fcp-2
+-0x1.fd9a34p-3
+0x0p+0
+0x1.e3e1c8p-6
+0x1.632fdcp-4
+0x1.4d637ap-4
+0x1.072d0ep-3
+0x1.f8abcap-4
+0x1.06071ap-4
+0x1.248546p-4
+-0x1.b2ac98p-3
+-0x1.8a0f08p-3
+-0x1.ff9b48p-3
+-0x1.a64426p-3
+-0x1.18ede4p-1
+-0x1.0889ap-1
+0x0p+0
+-0x1.d7e5d4p+1
+-0x1.44f14ep+2
+-0x1.d81322p+1
+-0x1.869bc8p+2
+0x1.91a804p-4
+0x1.1af612p-5
+0x1.75198cp-3
+0x1.7092d4p-4
+0x1.0b1756p-2
+0x1.64ff02p-3
+0x0p+0
+0x1.02d73ap-2
+-0x1.d8dd28p-1
+0x1.58f10cp-4
+-0x1.44f14ep+2
+-0x1.594c4ep-3
+-0x1.594c4ep-3
+0x0p+0
+0x1.3b3ab6p-5
+0x1.53f4dap-4
+0x1.3fe59ep-4
+0x1.f49b76p-4
+0x1.ebe3f6p-4
+0x1.eaaff4p-5
+0x1.15920cp-4
+-0x1.4b347p-3
+-0x1.3b980ep-3
+-0x1.6a2a7ap-3
+-0x1.7afb02p-3
+-0x1.10983ap-1
+-0x1.07cd56p-1
+0x0p+0
+-0x1.d8032ap+1
+-0x1.44f14ep+2
+-0x1.d808eap+1
+-0x1.869bc8p+2
+0x1.99427ep-4
+0x1.54dbf4p-5
+0x1.773f32p-3
+0x1.74a38ap-4
+0x1.0751d8p-2
+0x1.655c4p-3
+0x0p+0
+0x1.00576cp-2
+-0x1.d8dd28p-1
+0x1.544eap-4
+-0x1.44f14ep+2
+-0x1.6b54e8p-3
+-0x1.6b54e8p-3
+0x0p+0
+0x1.649282p-5
+0x1.5194c6p-4
+0x1.3e2572p-4
+0x1.eaadbep-4
+0x1.e25bc4p-4
+0x1.2a3e64p-5
+0x1.a91c5cp-5
+-0x1.5024bp-3
+-0x1.36c11ap-3
+-0x1.781eap-3
+-0x1.7cd61ap-3
+-0x1.0c3a6ep-1
+-0x1.04cd76p-1
+0x0p+0
+-0x1.d806dap+1
+-0x1.44f14ep+2
+-0x1.d80798p+1
+-0x1.869bc8p+2
+0x1.98dae2p-4
+0x1.74fa82p-5
+0x1.785dbap-3
+0x1.78ce7ep-4
+0x1.0426e6p-2
+0x1.660db2p-3
+0x0p+0
+0x1.fbd1e4p-3
+-0x1.d8dd28p-1
+0x1.5078e8p-4
+0x1.ec1598p-4
+0x1.3c375ep-5
+-0x1.403b46p-3
+-0x1.7e1b76p-3
+-0x1.089306p-1
+0x0p+0
+-0x1.44f14ep+2
+-0x1.d80754p+1
+-0x1.869bc8p+2
+0x1.85b03ep-5
+0x1.9aaf96p-4
+0x1.787cccp-3
+0x1.014fccp-2
+-0x1.949f2ep+1
+0x1.e0c5dp+3
+-0x1.6b934ap+2
+-0x1.fd0d3p-1
+-0x1.f13f78p+2
+-0x1.404e88p-1
+-0x1.9bc366p+3
+-0x1.404e88p-1
+-0x1.37d568p-1
+-0x1.f86516p+2
+-0x1.37d604p-1
+-0x1.a25102p+3
+-0x1.37d6p-1
+-0x1.a25102p+3
+-0x1.f86516p+2
+-0x1.652386p+1
+-0x1.43dceap+1
+-0x1.93d0a2p+3
+-0x1.9596a8p-2
+-0x1.652386p+1
+-0x1.9596a8p-2
+-0x1.43dceap+1
+-0x1.e2efd6p+1
+-0x1.58b4c4p+2
+-0x1.e2efd6p+1
+-0x1.60147p+1
+-0x1.3d889ap+1
+-0x1.d12426p-2
+-0x1.9922fep+3
+-0x1.d123e6p-2
+-0x1.5f1fc2p+1
+-0x1.e1e26cp+1
+-0x1.3ee14cp+1
+-0x1.e1c5cep+1
+-0x1.5e9feap+2
+-0x1.5f1fc2p+1
+-0x1.3ee14cp+1
+-0x1.cfadap-2
+-0x1.9922fep+3
+-0x1.d03332p-2
+-0x1.5e526p+1
+-0x1.e1cff4p+1
+-0x1.3ff9dap+1
+-0x1.e1b4d2p+1
+-0x1.5e9feap+2
+-0x1.5e526p+1
+-0x1.3ff9dap+1
+-0x1.cee262p-2
+-0x1.9922fep+3
+-0x1.cf5a4ep-2
+-0x1.5da418p+1
+-0x1.e1be6cp+1
+-0x1.40e254p+1
+-0x1.e1a6f6p+1
+-0x1.5e9feap+2
+-0x1.ce3bd2p-2
+-0x1.5da418p+1
+-0x1.40e254p+1
+-0x1.e1af4p+1
+-0x1.5e9feap+2
+-0x1.9922fep+3
+-0x1.797ad8p+2
+-0x1.dde88cp+2
+-0x1.a5ef26p+3
+-0x1.b2bb0ap-1
+-0x1.797ad8p+2
+-0x1.b2bb0ap-1
+-0x1.dde88cp+2
+-0x1.aa8edp-1
+-0x1.dba588p+3
+-0x1.aa8edp-1
+-0x1.7996d6p+2
+-0x1.de048ap+2
+-0x1.79a506p+2
+-0x1.ddf8fep+2
+-0x1.b10952p-1
+-0x1.aa6a4ap+3
+-0x1.b115e2p-1
+-0x1.799692p+2
+-0x1.ad642cp-1
+-0x1.de0aa4p+2
+-0x1.ad4862p-1
+-0x1.e0fa12p+3
+-0x1.b0fa24p-1
+-0x1.799692p+2
+-0x1.de0aa4p+2
+-0x1.ad5238p-1
+-0x1.e0fa12p+3
+-0x1.aa6a4ap+3
+-0x1.5b27p+1
+-0x1.f5e2d8p+1
+-0x1.be8108p-3
+-0x1.f5e2d8p+1
+-0x1.f6b4dep+1
+-0x1.5f0852p+1
+-0x1.f6b4dep+1
+-0x1.880382p-3
+-0x1.f6b4dep+1
+-0x1.880382p-3
+-0x1.5f0852p+1
+-0x1.9b58dap+2
+-0x1.bffe5cp-1
+-0x1.4f0818p+3
+-0x1.bffe5cp-1
+-0x1.a6ec1p-1
+-0x1.a90b54p+2
+-0x1.a6f528p-1
+-0x1.52cfd4p+3
+-0x1.a6f526p-1
+-0x1.52cfd4p+3
+-0x1.a90b54p+2
+-0x1.abc0cp+2
+-0x1.46033cp+3
+-0x1.2fc522p+0
+-0x1.46033cp+3
+-0x1.494d1p+3
+-0x1.ae58f2p+2
+-0x1.4949dp+3
+-0x1.3753ap+0
+-0x1.49491ep+3
+-0x1.ae58f2p+2
+-0x1.49496p+3
+-0x1.3753ap+0
+-0x1.494946p+3
+-0x1.ae58f2p+2
+-0x1.49495p+3
+-0x1.3753ap+0
+-0x1.49494ep+3
+-0x1.3753ap+0
+-0x1.ae58f2p+2
+0x1.1ccad6p+1
+-0x1.3c188cp+2
+-0x1.17ab9ep+3
+-0x1.3c188cp+2
+-0x1.401becp+2
+0x1.1bee22p+1
+-0x1.4017c4p+2
+-0x1.185de8p+3
+-0x1.401872p+2
+0x1.1bee22p+1
+-0x1.40183p+2
+-0x1.185de8p+3
+-0x1.401844p+2
+-0x1.185de8p+3
+0x1.1bee22p+1
+-0x1.ae0b38p-6
+-0x1.19ef8p-6
+-0x1.dc20ecp-8
+-0x1.cbf1c6p-9
+0x1.6e3cdap-7
+0x1.90bd3ep-6
+0x1.e94d9ep-6
+0x1.21f6bp-3
+0x1.83ad84p-2
+0x1.5af3b8p+1
+-0x1.202beep-1
+-0x1.8fe6e4p+1
+0x1.e76e68p+3
+-0x1.58cc0ep+2
+-0x1.0f4b22p+0
+-0x1.404e88p-1
+-0x1.f13f78p+2
+-0x1.9bc366p+3
+-0x1.9596a8p-2
+-0x1.93d0a2p+3
+-0x1.652386p+1
+-0x1.e2efd6p+1
+-0x1.58b4c4p+2
+-0x1.43dceap+1
+-0x1.b2bb0ap-1
+-0x1.a5ef26p+3
+-0x1.797ad8p+2
+-0x1.aa8edp-1
+-0x1.dde88cp+2
+-0x1.dba588p+3
+-0x1.dcd2dep+1
+-0x1.75097ep+2
+-0x1.2e0ecap+2
+-0x1.f5e2d8p+1
+-0x1.5b27p+1
+-0x1.be8108p-3
+-0x1.bffe5cp-1
+-0x1.9b58dap+2
+-0x1.4f0818p+3
+-0x1.46033cp+3
+-0x1.abc0cp+2
+-0x1.2fc522p+0
+-0x1.3c188cp+2
+0x1.1ccad6p+1
+-0x1.17ab9ep+3
+0x1.a9fdb6p-3
+0x1.6d2fd2p-3
+0x1.10b62ep-3
+0x1.28a6cp-4
+0x1.aa4932p-5
+0x1.8f7006p-4
+0x1.5ed81ap-4
+-0x1.ac6decp-5
+-0x1.98bfcep-2
+-0x1.17f7d4p-1
+0x0p+0
+0x1.4656ep+2
+0x0p+0
+0x1.4634c8p+2
+0x0p+0
+0x1.8ebddep+2
+0x0p+0
+0x1.841926p+2
+0x0p+0
+0x1.2e5c94p+1
+0x0p+0
+0x1.2d8a8ep+1
+0x0p+0
+0x1.4e4ceep+2
+0x0p+0
+0x1.527e1p+2
+0x0p+0
+0x1.842baep+2
+0x0p+0
+0x1.85df9ap+2
+0x0p+0
+0x1.5ed81ap-4
+0x0p+0
+0x1.3c375ep-5
+0x0p+0
+0x1.8ec6dap+2
+0x0p+0
+0x1.881ddcp+2
+0x0p+0
+0x1.5a1feap+2
+0x0p+0
+0x1.5d4112p+2
+0x0p+0
+0x1.7893bap+2
+0x0p+0
+0x1.862edap+2
+0x0p+0
+0x1.945888p+1
+0x0p+0
+0x1.8fa03ep+1
+0x0p+0
+0x1.3071e8p+1
+0x0p+0
+0x1.2359ap+1
+0x0p+0
+0x1.462e6ep+2
+0x0p+0
+0x1.444acep+2
+0x0p+0
+0x1.88e692p+2
+0x0p+0
+0x1.7b3418p+2
+0x0p+0
+0x1.787eacp+2
+0x0p+0
+0x1.75e67ap+2
+0x0p+0
+0x1.8a4dep-2
+0x0p+0
+0x1.88924p-2
+0x0p+0
+0x1.1ccad6p+1
+0x0p+0
+0x1.1bee22p+1
+0x0p+0
+0x1.476c8ep+1
+0x0p+0
+0x1.4c3818p+1
+0x0p+0
+0x1.5bc854p+2
+0x0p+0
+0x1.5c0072p+2
+0x0p+0
+0x1.9043bp+0
+0x0p+0
+0x1.34b9ap+0
+0x0p+0
+0x1.581ca8p+0
+0x0p+0
+0x1.481dc8p+0
+0x0p+0
+0x1.d1638p-2
+0x0p+0
+0x1.707dcp-3
+0x0p+0
+0x1.7ed856p+2
+0x0p+0
+0x1.71bd1ep+2
+0x0p+0
+0x1.e9d06p+1
+0x0p+0
+0x1.e70738p+1
+0x0p+0
+0x1.414f96p+1
+0x0p+0
+0x1.42902cp+1
+0x0p+0
+0x1.6a80d6p+2
+0x0p+0
+0x1.618a8ep+2
+0x0p+0
+0x1.ca9d4p-1
+0x0p+0
+0x1.34636p-1
+0x0p+0
+0x1.cb579p-1
+0x0p+0
+0x1.9bfe6p-1
+0x0p+0
+0x1.e06282p+1
+0x0p+0
+0x1.e35d18p+1
+0x0p+0
+0x1.bf1be6p+1
+0x0p+0
+0x1.c69b54p+1
+0x0p+0
+0x1.6a15e4p+2
+0x0p+0
+0x1.6b24f6p+2
+0x0p+0
+0x1.32fff4p+2
+0x0p+0
+0x1.2bda56p+2
+0x0p+0
+0x1.5a1feap+2
+0x0p+0
+0x1.5d4112p+2
+0x0p+0
+0x1.fe2824p+1
+0x0p+0
+0x1.e8d5fcp+1
+0x0p+0
+0x1.78c64cp+2
+0x0p+0
+0x1.753bf8p+2
+0x0p+0
+0x1.0c5e78p+1
+0x0p+0
+0x1.fa7f1p+0
+0x0p+0
+0x1.5ccddcp+2
+0x0p+0
+0x1.5c757p+2
+0x0p+0
+0x1.4656ep+2
+0x0p+0
+0x1.4634c8p+2
+0x0p+0
+0x1.8a4dep-2
+0x0p+0
+0x1.88924p-2
+0x0p+0
+0x1.6d2fd2p-3
+0x0p+0
+0x1.787cccp-3
+0x0p+0
+0x1.7893bap+2
+0x0p+0
+0x1.862edap+2
+0x0p+0
+0x1.7f614ap+2
+0x0p+0
+0x1.7be99ep+2
+0x0p+0
+-0x1.63618p-2
+0x0p+0
+-0x1.63618p-2
+0x0p+0
+-0x1.67c7e4p-2
+0x0p+0
+-0x1.68e0e6p-2
+0x0p+0
+-0x1.692728p-2
+0x0p+0
+0x0p+0
+-0x1.f371ap-3
+-0x1.692728p-2
+0x0p+0
+0x1.7b8d44p+2
+0x0p+0
+0x1.828428p+2
+0x0p+0
+0x1.7b8d44p+2
+0x0p+0
+0x1.828428p+2
+-0x1.00f514p-5
+-0x1.5a9c88p-6
+-0x1.5a9c88p-6
+-0x1.3c5a7ap-7
+-0x1.3c5a7ap-7
+-0x1.791484p-8
+-0x1.2ae48cp-5
+-0x1.9b499p-6
+-0x1.9b499p-6
+-0x1.939456p-7
+-0x1.939456p-7
+-0x1.fa5f56p-8
+-0x1.939456p-7
+-0x1.fa5f56p-8
+-0x1.2ae48cp-5
+-0x1.9b499p-6
+-0x1.8c8aeep-7
+-0x1.043116p-7
+0x1.366446p-7
+0x1.8c0a5cp-6
+0x1.d69646p-6
+0x1.d69646p-6
+0x1.37a1bep-3
+0x1.87577ap-6
+0x1.c3deeep-6
+0x1.c3deeep-6
+0x1.4d4cccp-3
+0x1.87577ap-6
+0x1.c3deeep-6
+0x1.4d4cccp-3
+0x1.c309c8p-2
+0x1.8c73p+1
+-0x1.d8dd28p-1
+0x1.5078e8p-4
+-0x1.44f14ep+2
+-0x1.f371ap-3
+-0x1.f371ap-3
+0x0p+0
+-0x1.869bc8p+2
+-0x1.880382p-3
+0x1.5078e8p-4
+0x1.85b03ep-5
+0x1.ec1598p-4
+0x1.5078e8p-4
+0x1.3c375ep-5
+0x1.ec1598p-4
+-0x1.403b46p-3
+0x1.3c375ep-5
+-0x1.f371ap-3
+-0x1.403b46p-3
+-0x1.089306p-1
+-0x1.f371ap-3
+0x0p+0
+-0x1.089306p-1
+-0x1.44f14ep+2
+-0x1.d80754p+1
+-0x1.869bc8p+2
+-0x1.d80754p+1
+-0x1.880382p-3
+-0x1.f6b4dep+1
+-0x1.5f0852p+1
+-0x1.f6b4dep+1
+0x1.85b03ep-5
+0x1.9aaf96p-4
+0x1.9aaf96p-4
+0x1.787cccp-3
+0x1.787cccp-3
+0x1.014fccp-2
+0x1.014fccp-2
+0x0p+0
+-0x1.48c73p+0
+0x1.d8dd96p-4
+-0x1.5681c8p+2
+-0x1.16a4eap-2
+-0x1.5681c8p+2
+-0x1.16a4eap-2
+-0x1.1f9bf6p-2
+0x0p+0
+-0x1.98a434p+2
+-0x1.3c9424p-3
+0x1.22c3c2p-5
+0x1.d8dd96p-4
+0x1.b60f6ap-4
+0x1.161716p-3
+0x1.13d1e2p-3
+-0x1.4a3bap-4
+-0x1.e7b248p-5
+-0x1.78811cp-5
+-0x1.b16b38p-5
+-0x1.207578p-2
+-0x1.cb6644p-3
+-0x1.084f08p-1
+-0x1.04b9c8p-1
+0x0p+0
+-0x1.cc1328p+1
+-0x1.5663dap+2
+-0x1.cbfee6p+1
+-0x1.98a434p+2
+-0x1.f2759p+1
+-0x1.3c9424p-3
+-0x1.f274eep+1
+-0x1.62e9a4p+1
+0x1.1dbab6p-4
+0x1.468584p-5
+0x1.7c60eap-3
+0x1.08b434p-4
+0x1.248322p-2
+0x1.650abap-3
+0x0p+0
+0x1.1c0be2p-2
+-0x1.48c73p+0
+0x1.c44348p-4
+-0x1.5663dap+2
+-0x1.cc2b06p-3
+-0x1.5663dap+2
+-0x1.cc2b06p-3
+-0x1.d8c4aap-3
+0x0p+0
+-0x1.98a434p+2
+-0x1.3c9424p-3
+0x1.45eedcp-5
+0x1.c44348p-4
+0x1.a8b282p-4
+0x1.01979ep-3
+0x1.06a92p-3
+-0x1.0991a6p-4
+-0x1.a1133ep-5
+-0x1.61fe7cp-5
+-0x1.9b32bcp-5
+-0x1.e3eabcp-3
+-0x1.b30ac4p-3
+-0x1.06876ep-1
+-0x1.04d298p-1
+0x0p+0
+-0x1.cc0b3ap+1
+-0x1.564662p+2
+-0x1.cbe77p+1
+-0x1.98a434p+2
+-0x1.f2757p+1
+-0x1.3c9424p-3
+-0x1.f27544p+1
+-0x1.62e9a4p+1
+0x1.2fd584p-4
+0x1.6d5cfap-5
+0x1.7c0fd6p-3
+0x1.15d8ecp-4
+0x1.209ee2p-2
+0x1.64e24ap-3
+0x0p+0
+0x1.19097ep-2
+-0x1.48c73p+0
+0x1.c08552p-4
+-0x1.564662p+2
+-0x1.d2d55ep-3
+-0x1.564662p+2
+-0x1.d2d55ep-3
+-0x1.dd4c62p-3
+0x0p+0
+-0x1.98a434p+2
+-0x1.3c9424p-3
+0x1.621b1p-5
+0x1.c08552p-4
+0x1.a5c174p-4
+0x1.dd3edp-4
+0x1.ed0b6ap-4
+-0x1.cf70b8p-5
+-0x1.5d01fep-5
+-0x1.702bcp-5
+-0x1.98cbp-5
+-0x1.e793acp-3
+-0x1.b419eap-3
+-0x1.05b2aep-1
+-0x1.03be26p-1
+0x0p+0
+-0x1.cbf45p+1
+-0x1.562a2ap+2
+-0x1.cbd208p+1
+-0x1.98a434p+2
+-0x1.f2755p+1
+-0x1.3c9424p-3
+-0x1.f2754cp+1
+-0x1.62e9a4p+1
+0x1.39bddp-4
+0x1.83109ap-5
+0x1.7bc996p-3
+0x1.21ce0ep-4
+0x1.1d22dp-2
+0x1.653c46p-3
+0x0p+0
+0x1.1614dp-2
+-0x1.48c73p+0
+0x1.bda56p-4
+0x1.b588e6p-4
+-0x1.8815b2p-5
+-0x1.5e00c6p-5
+-0x1.dc3832p-3
+-0x1.04c0e2p-1
+0x0p+0
+-0x1.562a2ap+2
+-0x1.cbde58p+1
+-0x1.98a434p+2
+-0x1.3c9424p-3
+-0x1.f2755p+1
+-0x1.62e9a4p+1
+0x1.7ad04ep-5
+0x1.4382f6p-4
+0x1.7b34e8p-3
+0x1.19e37ep-2
+-0x1.995778p+1
+0x1.da1d38p+3
+-0x1.7e5a86p+2
+-0x1.db841cp-1
+-0x1.f86516p+2
+-0x1.37d6p-1
+-0x1.a25102p+3
+-0x1.37d6p-1
+-0x1.2f5d28p-1
+-0x1.ff8ab4p+2
+-0x1.2f5dep-1
+-0x1.a8de9ep+3
+-0x1.2f5db8p-1
+-0x1.a8de9ep+3
+-0x1.ff8ab4p+2
+-0x1.5da418p+1
+-0x1.40e254p+1
+-0x1.9922fep+3
+-0x1.ce3bd2p-2
+-0x1.5da418p+1
+-0x1.ce3bd2p-2
+-0x1.40e254p+1
+-0x1.e1af4p+1
+-0x1.5e9feap+2
+-0x1.e1af4p+1
+-0x1.58afap+1
+-0x1.3ac766p+1
+-0x1.04f408p-1
+-0x1.9e755ap+3
+-0x1.051fa6p-1
+-0x1.581f7p+1
+-0x1.e0a6c4p+1
+-0x1.3b86fap+1
+-0x1.e09532p+1
+-0x1.648b1p+2
+-0x1.581f7p+1
+-0x1.3b86fap+1
+-0x1.04bfap-1
+-0x1.9e755ap+3
+-0x1.04e1eep-1
+-0x1.57a8cep+1
+-0x1.e09b76p+1
+-0x1.3c21fap+1
+-0x1.e08dp+1
+-0x1.648b1p+2
+-0x1.57a8cep+1
+-0x1.3c21fap+1
+-0x1.049354p-1
+-0x1.9e755ap+3
+-0x1.04af7ap-1
+-0x1.574576p+1
+-0x1.e0921ep+1
+-0x1.3ca21cp+1
+-0x1.e085fap+1
+-0x1.648b1p+2
+-0x1.046dd2p-1
+-0x1.574576p+1
+-0x1.3ca21cp+1
+-0x1.e08a56p+1
+-0x1.648b1p+2
+-0x1.9e755ap+3
+-0x1.799692p+2
+-0x1.de0aa4p+2
+-0x1.aa6a4ap+3
+-0x1.b0fa24p-1
+-0x1.799692p+2
+-0x1.b0fa24p-1
+-0x1.de0aa4p+2
+-0x1.ad5238p-1
+-0x1.e0fa12p+3
+-0x1.ad5238p-1
+-0x1.79b29p+2
+-0x1.de26a2p+2
+-0x1.79bb94p+2
+-0x1.de1f4ap+2
+-0x1.af486cp-1
+-0x1.aee56ep+3
+-0x1.af51c2p-1
+-0x1.79b20ep+2
+-0x1.b0279p-1
+-0x1.de2ae4p+2
+-0x1.b015cap-1
+-0x1.e64e9cp+3
+-0x1.af3f3ap-1
+-0x1.79b20ep+2
+-0x1.de2ae4p+2
+-0x1.b01c2ap-1
+-0x1.e64e9cp+3
+-0x1.aee56ep+3
+-0x1.a90b54p+2
+-0x1.a6f526p-1
+-0x1.52cfd4p+3
+-0x1.a6f526p-1
+-0x1.8de9fap-1
+-0x1.b6bdcep+2
+-0x1.8df738p-1
+-0x1.56979p+3
+-0x1.8df5aap-1
+-0x1.56979p+3
+-0x1.b6bdcep+2
+-0x1.ae58f2p+2
+-0x1.49494ep+3
+-0x1.3753ap+0
+-0x1.49494ep+3
+-0x1.4c8f0ap+3
+-0x1.b0f124p+2
+-0x1.4c8bd4p+3
+-0x1.3ee21ep+0
+-0x1.4c8b26p+3
+-0x1.b0f124p+2
+-0x1.4c8b64p+3
+-0x1.3ee21ep+0
+-0x1.4c8b4ep+3
+-0x1.b0f124p+2
+-0x1.4c8b54p+3
+-0x1.3ee21ep+0
+-0x1.4c8b54p+3
+-0x1.3ee21ep+0
+-0x1.b0f124p+2
+0x1.1bee22p+1
+-0x1.401844p+2
+-0x1.185de8p+3
+-0x1.401844p+2
+-0x1.4419c6p+2
+0x1.1b116ep+1
+-0x1.441702p+2
+-0x1.191032p+3
+-0x1.44172ap+2
+-0x1.191032p+3
+0x1.1b116ep+1
+-0x1.00f514p-5
+-0x1.5a9c88p-6
+-0x1.3c5a7ap-7
+-0x1.791484p-8
+0x1.52509p-7
+0x1.8c0a5cp-6
+0x1.d69646p-6
+0x1.37a1bep-3
+0x1.a35ba6p-2
+0x1.73b35cp+1
+-0x1.d8dd28p-1
+-0x1.949f2ep+1
+0x1.e0c5dp+3
+-0x1.6b934ap+2
+-0x1.fd0d3p-1
+-0x1.37d6p-1
+-0x1.f86516p+2
+-0x1.a25102p+3
+-0x1.ce3bd2p-2
+-0x1.9922fep+3
+-0x1.5da418p+1
+-0x1.e1af4p+1
+-0x1.5e9feap+2
+-0x1.40e254p+1
+-0x1.b0fa24p-1
+-0x1.aa6a4ap+3
+-0x1.799692p+2
+-0x1.ad5238p-1
+-0x1.de0aa4p+2
+-0x1.e0fa12p+3
+-0x1.d80754p+1
+-0x1.869bc8p+2
+-0x1.44f14ep+2
+-0x1.f6b4dep+1
+-0x1.5f0852p+1
+-0x1.880382p-3
+-0x1.a6f526p-1
+-0x1.a90b54p+2
+-0x1.52cfd4p+3
+-0x1.49494ep+3
+-0x1.ae58f2p+2
+-0x1.3753ap+0
+-0x1.401844p+2
+0x1.1bee22p+1
+-0x1.185de8p+3
+0x1.014fccp-2
+0x1.787cccp-3
+0x1.9aaf96p-4
+0x1.85b03ep-5
+0x1.5078e8p-4
+0x1.ec1598p-4
+0x1.3c375ep-5
+-0x1.403b46p-3
+-0x1.f371ap-3
+-0x1.089306p-1
+0x0p+0
+0x1.753bf8p+2
+0x0p+0
+0x1.7191fcp+2
+0x0p+0
+0x1.fa7f1p+0
+0x0p+0
+0x1.dc413p+0
+0x0p+0
+0x1.4634c8p+2
+0x0p+0
+0x1.461488p+2
+0x0p+0
+0x1.841926p+2
+0x0p+0
+0x1.79746ep+2
+0x0p+0
+0x1.2d8a8ep+1
+0x0p+0
+0x1.31ca1cp+1
+0x0p+0
+0x1.527e1p+2
+0x0p+0
+0x1.56af32p+2
+0x0p+0
+0x1.85df9ap+2
+0x0p+0
+0x1.883b14p+2
+0x0p+0
+0x1.3c375ep-5
+0x0p+0
+-0x1.8815b2p-5
+0x0p+0
+0x1.881ddcp+2
+0x0p+0
+0x1.8f63b4p+2
+0x0p+0
+0x1.5d4112p+2
+0x0p+0
+0x1.6061p+2
+0x0p+0
+0x1.828428p+2
+0x0p+0
+0x1.833df4p+2
+0x0p+0
+0x1.8fa03ep+1
+0x0p+0
+0x1.8ae7f4p+1
+0x0p+0
+0x1.2359ap+1
+0x0p+0
+0x1.165188p+1
+0x0p+0
+0x1.444acep+2
+0x0p+0
+0x1.42672ep+2
+0x0p+0
+0x1.7b3418p+2
+0x0p+0
+0x1.6d819ep+2
+0x0p+0
+0x1.75e67ap+2
+0x0p+0
+0x1.734e48p+2
+0x0p+0
+0x1.88924p-2
+0x0p+0
+0x1.86da8p-2
+0x0p+0
+0x1.1bee22p+1
+0x0p+0
+0x1.1b116ep+1
+0x0p+0
+0x1.4c3818p+1
+0x0p+0
+0x1.586114p+1
+0x0p+0
+0x1.5c0072p+2
+0x0p+0
+0x1.5c37cep+2
+0x0p+0
+0x1.34b9ap+0
+0x0p+0
+0x1.dfac6p-1
+0x0p+0
+0x1.481dc8p+0
+0x0p+0
+0x1.38223p+0
+0x0p+0
+0x1.707dcp-3
+0x0p+0
+-0x1.a11f8p-4
+0x0p+0
+0x1.71bd1ep+2
+0x0p+0
+0x1.64a1e6p+2
+0x0p+0
+0x1.e70738p+1
+0x0p+0
+0x1.e43e1p+1
+0x0p+0
+0x1.42902cp+1
+0x0p+0
+0x1.43b516p+1
+0x0p+0
+0x1.618a8ep+2
+0x0p+0
+0x1.589446p+2
+0x0p+0
+0x1.34636p-1
+0x0p+0
+0x1.3c53p-2
+0x0p+0
+0x1.9bfe6p-1
+0x0p+0
+0x1.6ca53p-1
+0x0p+0
+0x1.e35d18p+1
+0x0p+0
+0x1.e79d5p+1
+0x0p+0
+0x1.c69b54p+1
+0x0p+0
+0x1.ccf9f6p+1
+0x0p+0
+0x1.6b24f6p+2
+0x0p+0
+0x1.6c34p+2
+0x0p+0
+0x1.2bda56p+2
+0x0p+0
+0x1.24b4b8p+2
+0x0p+0
+0x1.5d4112p+2
+0x0p+0
+0x1.6061p+2
+0x0p+0
+0x1.e8d5fcp+1
+0x0p+0
+0x1.d383d4p+1
+0x0p+0
+0x1.753bf8p+2
+0x0p+0
+0x1.7191fcp+2
+0x0p+0
+0x1.fa7f1p+0
+0x0p+0
+0x1.dc413p+0
+0x0p+0
+0x1.5c757p+2
+0x0p+0
+0x1.5c1c3p+2
+0x0p+0
+0x1.4634c8p+2
+0x0p+0
+0x1.461488p+2
+0x0p+0
+0x1.787cccp-3
+0x0p+0
+0x1.7b34e8p-3
+0x0p+0
+0x1.828428p+2
+0x0p+0
+0x1.833df4p+2
+0x0p+0
+0x1.82e10ep+2
+0x0p+0
+0x1.82ea64p+2
+0x0p+0
+-0x1.e6aa12p-3
+0x0p+0
+-0x1.e6aa12p-3
+0x0p+0
+-0x1.ef1e8cp-3
+0x0p+0
+-0x1.f13a2cp-3
+0x0p+0
+0x0p+0
+-0x1.05a024p-2
+-0x1.f13a2cp-3
+0x0p+0
+0x1.8295e4p+2
+0x0p+0
+0x1.81c5b4p+2
+0x0p+0
+0x1.8295e4p+2
+0x0p+0
+0x1.81c5b4p+2
+-0x1.2ae48cp-5
+-0x1.9b499p-6
+-0x1.9b499p-6
+-0x1.8c8aeep-7
+-0x1.8c8aeep-7
+-0x1.043116p-7
+-0x1.54d404p-5
+-0x1.dbf698p-6
+-0x1.dbf698p-6
+-0x1.e3c4cap-7
+-0x1.e3c4cap-7
+-0x1.44d68p-7
+-0x1.e3c4cap-7
+-0x1.44d68p-7
+-0x1.54d404p-5
+-0x1.dbf698p-6
+-0x1.de410ap-7
+-0x1.4a527cp-7
+0x1.1a77fcp-7
+0x1.87577ap-6
+0x1.c3deeep-6
+0x1.c3deeep-6
+0x1.4d4cccp-3
+0x1.82a498p-6
+0x1.b12796p-6
+0x1.b12796p-6
+0x1.62f7dap-3
+0x1.82a498p-6
+0x1.b12796p-6
+0x1.62f7dap-3
+0x1.e2b7eap-2
+0x1.a532a4p+1
+-0x1.a51fccp+0
+-0x1.9e0fc2p+1
+0x1.d374ap+3
+-0x1.7e5a86p+2
+-0x1.191032p+3
+-0x1.191032p+3
+-0x1.44172ap+2
+0x1.1b116ep+1
+-0x1.44172ap+2
+-0x1.8abe38p+2
+-0x1.1978a6p+3
+-0x1.47896p+2
+-0x1.1978a6p+3
+-0x1.478904p+2
+0x1.1a34bap+1
+-0x1.8abe38p+2
+-0x1.1978a6p+3
+-0x1.47863cp+2
+0x1.1a34bap+1
+-0x1.b9fb08p-1
+-0x1.ff8ab4p+2
+-0x1.2f5db8p-1
+-0x1.a8de9ep+3
+-0x1.2f5db8p-1
+-0x1.26e526p-1
+-0x1.03582ap+3
+-0x1.26e5d2p-1
+-0x1.af6c3ap+3
+-0x1.26e5cap-1
+-0x1.af6c3ap+3
+-0x1.03582ap+3
+-0x1.574576p+1
+-0x1.3ca21cp+1
+-0x1.9e755ap+3
+-0x1.046dd2p-1
+-0x1.574576p+1
+-0x1.046dd2p-1
+-0x1.3ca21cp+1
+-0x1.e08a56p+1
+-0x1.648b1p+2
+-0x1.e08a56p+1
+-0x1.5250fep+1
+-0x1.36872ep+1
+-0x1.222da8p-1
+-0x1.a3c7b6p+3
+-0x1.224878p-1
+-0x1.5217c4p+1
+-0x1.df8294p+1
+-0x1.36d136p+1
+-0x1.df7b6ep+1
+-0x1.6a7636p+2
+-0x1.5217c4p+1
+-0x1.36d136p+1
+-0x1.22215cp-1
+-0x1.a3c7b6p+3
+-0x1.222f5cp-1
+-0x1.51e836p+1
+-0x1.df7dfcp+1
+-0x1.370e5ap+1
+-0x1.df78bap+1
+-0x1.6a7636p+2
+-0x1.51e836p+1
+-0x1.370e5ap+1
+-0x1.221658p-1
+-0x1.a3c7b6p+3
+-0x1.221f4cp-1
+-0x1.51c022p+1
+-0x1.df7a92p+1
+-0x1.37419cp+1
+-0x1.df763p+1
+-0x1.6a7636p+2
+-0x1.220b1ap-1
+-0x1.51c022p+1
+-0x1.37419cp+1
+-0x1.df77c4p+1
+-0x1.6a7636p+2
+-0x1.a3c7b6p+3
+-0x1.79b20ep+2
+-0x1.de2ae4p+2
+-0x1.aee56ep+3
+-0x1.af3f3ap-1
+-0x1.79b20ep+2
+-0x1.af3f3ap-1
+-0x1.de2ae4p+2
+-0x1.b01c2ap-1
+-0x1.e64e9cp+3
+-0x1.b01c2ap-1
+-0x1.79ce0cp+2
+-0x1.de46e2p+2
+-0x1.79d246p+2
+-0x1.de437p+2
+-0x1.ad8d82p-1
+-0x1.b36092p+3
+-0x1.ad93c6p-1
+-0x1.79cd3ap+2
+-0x1.b2f18p-1
+-0x1.de4994p+2
+-0x1.b2e818p-1
+-0x1.eba326p+3
+-0x1.ad896ep-1
+-0x1.79cd3ap+2
+-0x1.de4994p+2
+-0x1.b2eb62p-1
+-0x1.eba326p+3
+-0x1.b36092p+3
+-0x1.562a2ap+2
+-0x1.05a024p-2
+-0x1.05a024p-2
+0x0p+0
+-0x1.98a434p+2
+-0x1.cbde58p+1
+-0x1.562a2ap+2
+-0x1.cbde58p+1
+-0x1.05a024p-2
+-0x1.5e00c6p-5
+-0x1.04c0e2p-1
+-0x1.05a024p-2
+0x0p+0
+-0x1.04c0e2p-1
+-0x1.5e00c6p-5
+-0x1.8815b2p-5
+-0x1.8815b2p-5
+0x1.b588e6p-4
+0x1.b588e6p-4
+0x1.bda56p-4
+0x1.bda56p-4
+0x1.7ad04ep-5
+0x1.7ad04ep-5
+0x1.4382f6p-4
+0x1.4382f6p-4
+0x1.7b34e8p-3
+0x1.7b34e8p-3
+0x1.19e37ep-2
+0x1.19e37ep-2
+0x0p+0
+-0x1.65461cp+2
+-0x1.1d8a9ep-2
+-0x1.22cc68p-2
+0x0p+0
+-0x1.bf3d06p+1
+-0x1.aaacap+2
+-0x1.bf44ccp+1
+-0x1.65395ap+2
+0x1.452204p-6
+-0x1.22cc68p-2
+-0x1.00404ep-2
+-0x1.f6cb8ap-2
+-0x1.f57494p-2
+0x0p+0
+-0x1.509798p-4
+0x1.5ea602p-6
+0x1.93f616p-5
+-0x1.411ed6p-4
+0x1.0c2306p-3
+0x1.4e1196p-5
+0x1.0a721ep-4
+0x1.0b014p-3
+0x1.0d2312p-4
+0x1.21eb1p-4
+0x1.75fb18p-3
+0x1.014018p-4
+0x1.26d2acp-2
+0x1.5cd4dap-3
+0x0p+0
+0x1.1f290cp-2
+-0x1.65395ap+2
+-0x1.08f3e4p-2
+-0x1.0d283p-2
+0x0p+0
+-0x1.bf2b5cp+1
+-0x1.aaacap+2
+-0x1.bf3498p+1
+-0x1.652dep+2
+0x1.cf11b6p-7
+-0x1.0d283p-2
+-0x1.ebc1ccp-3
+-0x1.f62322p-2
+-0x1.f88d6p-2
+0x0p+0
+-0x1.262552p-4
+0x1.10492p-6
+0x1.ad8c52p-5
+-0x1.1f93bcp-4
+0x1.f32c9cp-4
+0x1.59cda8p-5
+0x1.1225aep-4
+0x1.eef9a4p-4
+0x1.225284p-4
+0x1.2aac98p-4
+0x1.746c6p-3
+0x1.137ba2p-4
+0x1.2347b6p-2
+0x1.5c6f16p-3
+0x0p+0
+0x1.1bd686p-2
+-0x1.652dep+2
+-0x1.07126ap-2
+-0x1.0addcap-2
+0x0p+0
+-0x1.bf172ap+1
+-0x1.aaacap+2
+-0x1.bf21c6p+1
+-0x1.6522ecp+2
+0x1.4068b8p-7
+-0x1.0addcap-2
+-0x1.e47ddcp-3
+-0x1.f750fp-2
+-0x1.f95804p-2
+0x0p+0
+-0x1.0ff534p-4
+0x1.b30006p-7
+0x1.bd2444p-5
+-0x1.08f414p-4
+0x1.e0b05ep-4
+0x1.640e4cp-5
+0x1.1a646p-4
+0x1.da3f3ap-4
+0x1.3174e6p-4
+0x1.2fd10cp-4
+0x1.73afaap-3
+0x1.237c72p-4
+0x1.1fd78ep-2
+0x1.5cf048p-3
+0x0p+0
+0x1.18a92p-2
+-0x1.bf04e8p+1
+-0x1.6522ecp+2
+-0x1.05c64ep-2
+-0x1.f84d18p-2
+0x1.e3e7aep-8
+-0x1.ed0d64p-5
+0x1.b31d3cp-5
+0x1.d09168p-4
+0x1.221d76p-4
+0x1.3f6ad4p-4
+0x1.733d22p-3
+0x1.1c85a6p-2
+0x0p+0
+-0x1.aaacap+2
+-0x1.62e9a4p+1
+-0x1.f2755p+1
+-0x1.3c9424p-3
+-0x1.f2755p+1
+-0x1.ee35eap+1
+-0x1.66caf6p+1
+-0x1.ee3656p+1
+-0x1.e2498cp-4
+-0x1.ee3694p+1
+-0x1.e2498cp-4
+-0x1.66caf6p+1
+-0x1.b6bdcep+2
+-0x1.8df5aap-1
+-0x1.56979p+3
+-0x1.8df5aap-1
+-0x1.74f19ap-1
+-0x1.c47048p+2
+-0x1.75015p-1
+-0x1.5a5f4cp+3
+-0x1.74fed4p-1
+-0x1.5a5f4cp+3
+-0x1.c47048p+2
+-0x1.b0f124p+2
+-0x1.4c8b54p+3
+-0x1.3ee21ep+0
+-0x1.4c8b54p+3
+-0x1.4fcd06p+3
+-0x1.b38956p+2
+-0x1.4fc9dcp+3
+-0x1.46709cp+0
+-0x1.4fc93p+3
+-0x1.b38956p+2
+-0x1.4fc96ep+3
+-0x1.46709cp+0
+-0x1.4fc958p+3
+-0x1.b38956p+2
+-0x1.4fc96p+3
+-0x1.46709cp+0
+-0x1.4fc95cp+3
+-0x1.46709cp+0
+-0x1.b38956p+2
+-0x1.2ae48cp-5
+-0x1.9b499p-6
+-0x1.8c8aeep-7
+-0x1.043116p-7
+0x1.366446p-7
+0x1.87577ap-6
+0x1.c3deeep-6
+0x1.4d4cccp-3
+0x1.c309c8p-2
+0x1.8c73p+1
+-0x1.48c73p+0
+-0x1.995778p+1
+0x1.da1d38p+3
+-0x1.7e5a86p+2
+-0x1.db841cp-1
+-0x1.2f5db8p-1
+-0x1.ff8ab4p+2
+-0x1.a8de9ep+3
+-0x1.046dd2p-1
+-0x1.9e755ap+3
+-0x1.574576p+1
+-0x1.e08a56p+1
+-0x1.648b1p+2
+-0x1.3ca21cp+1
+-0x1.af3f3ap-1
+-0x1.aee56ep+3
+-0x1.79b20ep+2
+-0x1.b01c2ap-1
+-0x1.de2ae4p+2
+-0x1.e64e9cp+3
+-0x1.cbde58p+1
+-0x1.98a434p+2
+-0x1.562a2ap+2
+-0x1.f2755p+1
+-0x1.62e9a4p+1
+-0x1.3c9424p-3
+-0x1.8df5aap-1
+-0x1.b6bdcep+2
+-0x1.56979p+3
+-0x1.4c8b54p+3
+-0x1.b0f124p+2
+-0x1.3ee21ep+0
+-0x1.44172ap+2
+0x1.1b116ep+1
+-0x1.191032p+3
+0x1.19e37ep-2
+0x1.7b34e8p-3
+0x1.4382f6p-4
+0x1.7ad04ep-5
+0x1.bda56p-4
+0x1.b588e6p-4
+-0x1.8815b2p-5
+-0x1.5e00c6p-5
+-0x1.05a024p-2
+-0x1.04c0e2p-1
+0x0p+0
+0x1.7191fcp+2
+0x0p+0
+0x1.6dde52p+2
+0x0p+0
+0x1.dc413p+0
+0x0p+0
+0x1.be035p+0
+0x0p+0
+0x1.461488p+2
+0x0p+0
+0x1.45f5d8p+2
+0x0p+0
+0x1.79746ep+2
+0x0p+0
+0x1.6ecfb6p+2
+0x0p+0
+0x1.31ca1cp+1
+0x0p+0
+0x1.3608d8p+1
+0x0p+0
+0x1.56af32p+2
+0x0p+0
+0x1.5ae054p+2
+0x0p+0
+0x1.883b14p+2
+0x0p+0
+0x1.8a969p+2
+0x0p+0
+0x1.8f0f8ap+2
+0x0p+0
+0x1.8e459cp+2
+0x0p+0
+0x1.8f63b4p+2
+0x0p+0
+0x1.9298bp+2
+0x0p+0
+0x1.6061p+2
+0x0p+0
+0x1.637fdcp+2
+0x0p+0
+0x1.81c5b4p+2
+0x0p+0
+0x1.81c352p+2
+0x0p+0
+0x1.165188p+1
+0x0p+0
+0x1.095968p+1
+0x0p+0
+0x1.42672ep+2
+0x0p+0
+0x1.40839p+2
+0x0p+0
+0x1.6d819ep+2
+0x0p+0
+0x1.5fcf24p+2
+0x0p+0
+0x1.734e48p+2
+0x0p+0
+0x1.70b616p+2
+0x0p+0
+0x1.86da8p-2
+0x0p+0
+0x1.8527cp-2
+0x0p+0
+0x1.1b116ep+1
+0x0p+0
+0x1.1a34bap+1
+0x0p+0
+0x1.586114p+1
+0x0p+0
+0x1.653a84p+1
+0x0p+0
+0x1.5c37cep+2
+0x0p+0
+0x1.5c6e88p+2
+0x0p+0
+0x1.dfac6p-1
+0x0p+0
+0x1.67e65p-1
+0x0p+0
+0x1.38223p+0
+0x0p+0
+0x1.2a65e8p+0
+0x0p+0
+0x1.8b9b38p+2
+0x0p+0
+0x1.7992ccp+2
+0x0p+0
+0x1.64a1e6p+2
+0x0p+0
+0x1.5786aep+2
+0x0p+0
+0x1.e43e1p+1
+0x0p+0
+0x1.e29c4p+1
+0x0p+0
+0x1.43b516p+1
+0x0p+0
+0x1.44c7a8p+1
+0x0p+0
+0x1.589446p+2
+0x0p+0
+0x1.4f9dfep+2
+0x0p+0
+0x1.3c53p-2
+0x0p+0
+0x1.d85f8p-4
+0x0p+0
+0x1.6ca53p-1
+0x0p+0
+0x1.3d4cp-1
+0x0p+0
+0x1.e79d5p+1
+0x0p+0
+0x1.ecfddp+1
+0x0p+0
+0x1.ccf9f6p+1
+0x0p+0
+0x1.d27f4ap+1
+0x0p+0
+0x1.6c34p+2
+0x0p+0
+0x1.6d42fcp+2
+0x0p+0
+0x1.24b4b8p+2
+0x0p+0
+0x1.1d8f18p+2
+0x0p+0
+0x1.6061p+2
+0x0p+0
+0x1.637fdcp+2
+0x0p+0
+0x1.d383d4p+1
+0x0p+0
+0x1.be31acp+1
+0x0p+0
+0x1.7191fcp+2
+0x0p+0
+0x1.6dde52p+2
+0x0p+0
+0x1.dc413p+0
+0x0p+0
+0x1.be035p+0
+0x0p+0
+0x1.5c1c3p+2
+0x0p+0
+0x1.5bc24ap+2
+0x0p+0
+0x1.461488p+2
+0x0p+0
+0x1.45f5d8p+2
+0x0p+0
+0x1.7b34e8p-3
+0x0p+0
+0x1.733d22p-3
+0x0p+0
+0x1.81c5b4p+2
+0x0p+0
+0x1.81c352p+2
+-0x1.54d404p-5
+-0x1.dbf698p-6
+-0x1.dbf698p-6
+-0x1.de410ap-7
+-0x1.de410ap-7
+-0x1.4a527cp-7
+-0x1.7ec37cp-5
+-0x1.0e51dp-5
+-0x1.0e51dp-5
+-0x1.1abd74p-6
+-0x1.1abd74p-6
+-0x1.8af7e4p-7
+-0x1.1abd74p-6
+-0x1.8af7e4p-7
+-0x1.7ec37cp-5
+-0x1.0e51dp-5
+-0x1.189986p-6
+-0x1.8f38a6p-7
+0x1.fd1764p-8
+0x1.7df1b6p-6
+0x1.b12796p-6
+0x1.62f7dap-3
+0x1.9e703ep-6
+0x1.78a2e8p-3
+0x1.9e703ep-6
+0x1.78a2e8p-3
+0x1.013306p-1
+0x1.bdf248p+1
+-0x1.00bc34p+1
+-0x1.a2c80cp+1
+0x1.cccc08p+3
+-0x1.9721eap+2
+-0x1.9871f4p-1
+-0x1.af6c3ap+3
+0x0p+0
+-0x1.03582ap+3
+-0x1.26e5cap-1
+-0x1.af6c3ap+3
+-0x1.26e5cap-1
+-0x1.b468ap+3
+0x0p+0
+-0x1.49f84ap-1
+-0x1.06eafap+3
+-0x1.4971c8p-1
+-0x1.b46722p+3
+-0x1.b46722p+3
+0x0p+0
+-0x1.4a0d28p-1
+-0x1.06eafap+3
+-0x1.49d4aap-1
+-0x1.b465fp+3
+-0x1.b465fp+3
+0x0p+0
+-0x1.49f29p-1
+-0x1.06eafap+3
+-0x1.49e7cp-1
+-0x1.b46512p+3
+-0x1.49f2aep-1
+-0x1.b46512p+3
+0x0p+0
+-0x1.06eafap+3
+-0x1.51c022p+1
+-0x1.37419cp+1
+-0x1.a3c7b6p+3
+-0x1.220b1ap-1
+-0x1.51c022p+1
+-0x1.220b1ap-1
+-0x1.37419cp+1
+-0x1.df77c4p+1
+-0x1.6a7636p+2
+-0x1.df77c4p+1
+-0x1.4ccbaap+1
+-0x1.3126aep+1
+-0x1.3fbea6p-1
+-0x1.a91a12p+3
+-0x1.3fc3fcp-1
+-0x1.4ccbaap+1
+-0x1.de7006p+1
+-0x1.3126aep+1
+-0x1.de6f48p+1
+-0x1.70615cp+2
+-0x1.3fbcbep-1
+-0x1.4ccbaap+1
+-0x1.3126aep+1
+-0x1.de6f9p+1
+-0x1.70615cp+2
+-0x1.a91a12p+3
+-0x1.79cd3ap+2
+-0x1.de4994p+2
+-0x1.b36092p+3
+-0x1.ad896ep-1
+-0x1.79cd3ap+2
+-0x1.ad896ep-1
+-0x1.de4994p+2
+-0x1.b2eb62p-1
+-0x1.eba326p+3
+-0x1.b2eb62p-1
+-0x1.79e938p+2
+-0x1.de6592p+2
+-0x1.79e938p+2
+-0x1.de6592p+2
+-0x1.abd7b6p-1
+-0x1.b7dbb6p+3
+-0x1.abdb3cp-1
+-0x1.79e84p+2
+-0x1.b5c0b6p-1
+-0x1.de66bep+2
+-0x1.b5bee8p-1
+-0x1.f0f7bp+3
+-0x1.abd916p-1
+-0x1.79e84p+2
+-0x1.de66bep+2
+-0x1.b5bfd4p-1
+-0x1.f0f7bp+3
+-0x1.b7dbb6p+3
+-0x1.6522ecp+2
+-0x1.05c64ep-2
+-0x1.aaacap+2
+-0x1.bf04e8p+1
+-0x1.6522ecp+2
+-0x1.bf04e8p+1
+-0x1.05c64ep-2
+0x1.e3e7aep-8
+-0x1.f84d18p-2
+-0x1.05c64ep-2
+0x0p+0
+-0x1.f84d18p-2
+0x1.e3e7aep-8
+-0x1.ed0d64p-5
+-0x1.ed0d64p-5
+0x1.b31d3cp-5
+0x1.b31d3cp-5
+0x1.d09168p-4
+0x1.d09168p-4
+0x1.221d76p-4
+0x1.221d76p-4
+0x1.3f6ad4p-4
+0x1.3f6ad4p-4
+0x1.733d22p-3
+0x1.733d22p-3
+0x1.1c85a6p-2
+0x1.1c85a6p-2
+0x0p+0
+-0x1.72c3bcp+2
+-0x1.fa10dep-3
+-0x1.b1a1ecp+1
+-0x1.bcb50cp+2
+-0x1.b1b6fap+1
+-0x1.72c652p+2
+-0x1.86bcbp-11
+-0x1.ff9532p-3
+-0x1.d540f8p-3
+-0x1.e83fd2p-2
+-0x1.e80f88p-2
+0x0p+0
+-0x1.5dfedp-7
+0x1.394064p-9
+-0x1.2433c4p-5
+-0x1.a12d0ep-7
+0x1.b48546p-4
+-0x1.1b0a2ap-5
+0x1.b3495ap-4
+0x1.8e75e6p-4
+0x1.714242p-4
+0x1.bb7c44p-4
+0x1.6690bap-3
+0x1.6cb25ap-4
+0x1.13a036p-2
+0x1.54d236p-3
+0x0p+0
+0x1.0d75a2p-2
+-0x1.72c652p+2
+-0x1.f96216p-3
+-0x1.b1a3c4p+1
+-0x1.bcb50cp+2
+-0x1.b1aabcp+1
+-0x1.72c8e4p+2
+-0x1.de373cp-11
+-0x1.fec4f6p-3
+-0x1.d20d52p-3
+-0x1.e828c2p-2
+-0x1.e7ba84p-2
+0x0p+0
+-0x1.dad45ep-7
+0x1.f141bap-13
+-0x1.8a2ea8p-6
+-0x1.bd4b26p-7
+0x1.9c0ae4p-4
+-0x1.b1aee8p-6
+0x1.abec1cp-4
+0x1.793e4ap-4
+0x1.7d3bep-4
+0x1.b5cd3p-4
+0x1.67695ap-3
+0x1.7a3bf2p-4
+0x1.10c0bep-2
+0x1.5689eap-3
+0x0p+0
+0x1.0ac434p-2
+-0x1.72c8e4p+2
+-0x1.f8a77cp-3
+-0x1.b1933ep+1
+-0x1.bcb50cp+2
+-0x1.b19bb8p+1
+-0x1.72cb7ep+2
+-0x1.a9ad4ap-12
+-0x1.fdd768p-3
+-0x1.cff59ep-3
+-0x1.e7f36cp-2
+-0x1.e6dee6p-2
+0x0p+0
+-0x1.1b202cp-6
+-0x1.082d5cp-11
+-0x1.28650ep-6
+-0x1.f92f12p-7
+0x1.8a3ce8p-4
+-0x1.52408ep-6
+0x1.aaa812p-4
+0x1.6a38b2p-4
+0x1.89da4p-4
+0x1.b1c56ep-4
+0x1.680c4ep-3
+0x1.869502p-4
+0x1.0df602p-2
+0x1.581fbp-3
+0x0p+0
+0x1.083d18p-2
+-0x1.b183b2p+1
+-0x1.72cb7ep+2
+-0x1.f86f4cp-3
+-0x1.e76e24p-2
+0x0p+0
+-0x1.c63b5ap-12
+-0x1.2bb1a4p-6
+-0x1.b6a86ep-7
+0x1.7a1ffcp-4
+0x1.a8e2c2p-4
+0x1.95adbap-4
+0x1.68b658p-3
+0x1.0b49f8p-2
+-0x1.bcb50cp+2
+-0x1.66caf6p+1
+-0x1.ee3694p+1
+-0x1.e2498cp-4
+-0x1.ee3694p+1
+-0x1.e9f7dcp+1
+-0x1.6aac48p+1
+-0x1.e9f8b8p+1
+-0x1.4b6adp-4
+-0x1.e9f8aap+1
+-0x1.4b6adp-4
+-0x1.6aac48p+1
+-0x1.c47048p+2
+-0x1.74fed4p-1
+-0x1.5a5f4cp+3
+-0x1.74fed4p-1
+-0x1.5c01dap-1
+-0x1.d222c2p+2
+-0x1.5c12dcp-1
+-0x1.5e2708p+3
+-0x1.5c0feep-1
+-0x1.5e2708p+3
+-0x1.d222c2p+2
+-0x1.b38956p+2
+-0x1.4fc95cp+3
+-0x1.46709cp+0
+-0x1.4fc95cp+3
+-0x1.530712p+3
+-0x1.b62188p+2
+-0x1.5303f8p+3
+-0x1.4dff1ap+0
+-0x1.53034ep+3
+-0x1.b62188p+2
+-0x1.53038ap+3
+-0x1.4dff1ap+0
+-0x1.530378p+3
+-0x1.b62188p+2
+-0x1.53037ep+3
+-0x1.4dff1ap+0
+-0x1.53037cp+3
+-0x1.4dff1ap+0
+-0x1.b62188p+2
+0x1.1a34bap+1
+-0x1.47863cp+2
+-0x1.1978a6p+3
+-0x1.47863cp+2
+-0x1.4af766p+2
+0x1.195806p+1
+-0x1.4af6b6p+2
+-0x1.19e11ap+3
+-0x1.4af4c4p+2
+0x1.195806p+1
+-0x1.4af57cp+2
+-0x1.19e11ap+3
+-0x1.4af53cp+2
+-0x1.19e11ap+3
+0x1.195806p+1
+-0x1.54d404p-5
+-0x1.dbf698p-6
+-0x1.de410ap-7
+-0x1.4a527cp-7
+0x1.1a77fcp-7
+0x1.82a498p-6
+0x1.b12796p-6
+0x1.62f7dap-3
+0x1.e2b7eap-2
+0x1.a532a4p+1
+-0x1.a51fccp+0
+-0x1.9e0fc2p+1
+0x1.d374ap+3
+-0x1.8abe38p+2
+-0x1.b9fb08p-1
+-0x1.26e5cap-1
+-0x1.03582ap+3
+-0x1.af6c3ap+3
+-0x1.220b1ap-1
+-0x1.a3c7b6p+3
+-0x1.51c022p+1
+-0x1.df77c4p+1
+-0x1.6a7636p+2
+-0x1.37419cp+1
+-0x1.ad896ep-1
+-0x1.b36092p+3
+-0x1.79cd3ap+2
+-0x1.b2eb62p-1
+-0x1.de4994p+2
+-0x1.eba326p+3
+-0x1.bf04e8p+1
+-0x1.aaacap+2
+-0x1.6522ecp+2
+-0x1.ee3694p+1
+-0x1.66caf6p+1
+-0x1.e2498cp-4
+-0x1.74fed4p-1
+-0x1.c47048p+2
+-0x1.5a5f4cp+3
+-0x1.4fc95cp+3
+-0x1.b38956p+2
+-0x1.46709cp+0
+-0x1.47863cp+2
+0x1.1a34bap+1
+-0x1.1978a6p+3
+0x1.1c85a6p-2
+0x1.733d22p-3
+0x1.3f6ad4p-4
+0x1.221d76p-4
+0x1.d09168p-4
+0x1.b31d3cp-5
+-0x1.ed0d64p-5
+0x1.e3e7aep-8
+-0x1.05c64ep-2
+-0x1.f84d18p-2
+0x0p+0
+0x1.bd7476p+1
+0x0p+0
+0x1.b99324p+1
+0x0p+0
+0x1.6dde52p+2
+0x0p+0
+0x1.6a281ep+2
+0x0p+0
+0x1.be035p+0
+0x0p+0
+0x1.9fc57p+0
+0x0p+0
+0x1.45f5d8p+2
+0x0p+0
+0x1.45d8aep+2
+0x0p+0
+0x1.6ecfb6p+2
+0x0p+0
+0x1.642afep+2
+0x0p+0
+0x1.3608d8p+1
+0x0p+0
+0x1.3a46c2p+1
+0x0p+0
+0x1.5ae054p+2
+0x0p+0
+0x1.5f1178p+2
+0x0p+0
+0x1.8a969p+2
+0x0p+0
+0x1.8cf20ap+2
+0x0p+0
+0x1.e3e7aep-8
+0x0p+0
+-0x1.c63b5ap-12
+0x0p+0
+0x1.637fdcp+2
+0x0p+0
+0x1.669db8p+2
+0x0p+0
+0x1.81c352p+2
+0x0p+0
+0x1.825c3cp+2
+0x0p+0
+0x1.095968p+1
+0x0p+0
+0x1.f8e1dp+0
+0x0p+0
+0x1.40839p+2
+0x0p+0
+0x1.3e9ffp+2
+0x0p+0
+0x1.5fcf24p+2
+0x0p+0
+0x1.521caap+2
+0x0p+0
+0x1.70b616p+2
+0x0p+0
+0x1.6e1de4p+2
+0x0p+0
+0x1.8527cp-2
+0x0p+0
+0x1.83776p-2
+0x0p+0
+0x1.1a34bap+1
+0x0p+0
+0x1.195806p+1
+0x0p+0
+0x1.653a84p+1
+0x0p+0
+0x1.72bbbap+1
+0x0p+0
+0x1.5c6e88p+2
+0x0p+0
+0x1.5ca494p+2
+0x0p+0
+0x1.67e65p-1
+0x0p+0
+0x1.f5438p-2
+0x0p+0
+0x1.7992ccp+2
+0x0p+0
+0x1.678a6p+2
+0x0p+0
+0x1.5786aep+2
+0x0p+0
+0x1.4d94fep+2
+0x0p+0
+0x1.e29c4p+1
+0x0p+0
+0x1.e0fa7p+1
+0x0p+0
+0x1.44c7a8p+1
+0x0p+0
+0x1.45cfdcp+1
+0x0p+0
+0x1.4f9dfep+2
+0x0p+0
+0x1.46a7b6p+2
+0x0p+0
+0x1.d85f8p-4
+0x0p+0
+-0x1.408dp-4
+0x0p+0
+0x1.3d4cp-1
+0x0p+0
+0x1.0df2dp-1
+0x0p+0
+0x1.ecfddp+1
+0x0p+0
+0x1.f318bep+1
+0x0p+0
+0x1.d27f4ap+1
+0x0p+0
+0x1.d773c2p+1
+0x0p+0
+0x1.6d42fcp+2
+0x0p+0
+0x1.68e16p+2
+0x0p+0
+0x1.1d8f18p+2
+0x0p+0
+0x1.166978p+2
+0x0p+0
+0x1.637fdcp+2
+0x0p+0
+0x1.669db8p+2
+0x0p+0
+0x1.be31acp+1
+0x0p+0
+0x1.a8df84p+1
+0x0p+0
+0x1.6dde52p+2
+0x0p+0
+0x1.6a281ep+2
+0x0p+0
+0x1.be035p+0
+0x0p+0
+0x1.9fc57p+0
+0x0p+0
+0x1.5bc24ap+2
+0x0p+0
+0x1.5b67bcp+2
+0x0p+0
+0x1.45f5d8p+2
+0x0p+0
+0x1.45d8aep+2
+0x0p+0
+0x1.733d22p-3
+0x0p+0
+0x1.68b658p-3
+0x0p+0
+0x1.81c352p+2
+0x0p+0
+0x1.825c3cp+2
+-0x1.7ec37cp-5
+-0x1.0e51dp-5
+-0x1.0e51dp-5
+-0x1.189986p-6
+-0x1.189986p-6
+-0x1.8f38a6p-7
+-0x1.a8b2f4p-5
+-0x1.2ea854p-5
+-0x1.2ea854p-5
+-0x1.443674p-6
+-0x1.443674p-6
+-0x1.cfde1p-7
+-0x1.443674p-6
+-0x1.cfde1p-7
+-0x1.a8b2f4p-5
+-0x1.2ea854p-5
+-0x1.42929p-6
+-0x1.d31fa2p-7
+0x1.c53edp-8
+0x1.793ed4p-6
+0x1.9e703ep-6
+0x1.78a2e8p-3
+0x1.8bb8e6p-6
+0x1.8e4df6p-3
+0x1.8bb8e6p-6
+0x1.8e4df6p-3
+0x1.110a18p-1
+0x1.d6b1ecp+1
+-0x1.2ee882p+1
+-0x1.a78056p+1
+0x1.c6237p+3
+-0x1.a3859cp+2
+-0x1.76e8ep-1
+-0x1.b46512p+3
+0x0p+0
+-0x1.06eafap+3
+-0x1.49f2aep-1
+-0x1.b46512p+3
+-0x1.49f2aep-1
+-0x1.b96178p+3
+0x0p+0
+-0x1.6ce2cap-1
+-0x1.0a7dcap+3
+-0x1.6cdceap-1
+-0x1.b96178p+3
+-0x1.6cd63cp-1
+-0x1.b96178p+3
+0x0p+0
+-0x1.0a7dcap+3
+-0x1.4ccbaap+1
+-0x1.4dff1ap+0
+-0x1.4ccbaap+1
+-0x1.3126aep+1
+-0x1.a91a12p+3
+-0x1.3fbcbep-1
+-0x1.4ccbaap+1
+-0x1.3fbcbep-1
+-0x1.3126aep+1
+-0x1.de6f9p+1
+-0x1.70615cp+2
+-0x1.de6f9p+1
+-0x1.4dff1ap+0
+-0x1.53037cp+3
+-0x1.b62188p+2
+-0x1.53037cp+3
+-0x1.5a8a66p+1
+-0x1.5feb86p+0
+-0x1.5b6edap+1
+-0x1.2b0e5p+1
+-0x1.42ae5cp-1
+-0x1.ae6c6ep+3
+-0x1.42dbep-1
+-0x1.5b6edap+1
+-0x1.dbcdbp+1
+-0x1.2b0e5p+1
+-0x1.dbc4bap+1
+-0x1.764c82p+2
+-0x1.555538p+3
+-0x1.5e56f8p+0
+-0x1.554218p+3
+-0x1.b8b9bap+2
+-0x1.5b6edap+1
+-0x1.5e56f8p+0
+-0x1.5c25b8p+1
+-0x1.2b0e5p+1
+-0x1.417df4p-1
+-0x1.ae6c6ep+3
+-0x1.41fad8p-1
+-0x1.5c25b8p+1
+-0x1.dbc806p+1
+-0x1.2b0e5p+1
+-0x1.dbc6dap+1
+-0x1.764c82p+2
+-0x1.554764p+3
+-0x1.5d0d2cp+0
+-0x1.553624p+3
+-0x1.b8b9bap+2
+-0x1.5c25b8p+1
+-0x1.5d0d2cp+0
+-0x1.5cb89ep+1
+-0x1.2b0e5p+1
+-0x1.40f79ap-1
+-0x1.ae6c6ep+3
+-0x1.41545cp-1
+-0x1.5cb43ap+1
+-0x1.dbc74ap+1
+-0x1.2b1624p+1
+-0x1.dbc6b8p+1
+-0x1.764c82p+2
+-0x1.553c54p+3
+-0x1.5bffb6p+0
+-0x1.552dc6p+3
+-0x1.b8b9bap+2
+-0x1.408616p-1
+-0x1.5cb43ap+1
+-0x1.2b1624p+1
+-0x1.dbc6e2p+1
+-0x1.764c82p+2
+-0x1.5bffb6p+0
+-0x1.5532fcp+3
+-0x1.b8b9bap+2
+-0x1.ae6c6ep+3
+-0x1.79e84p+2
+-0x1.de66bep+2
+-0x1.b7dbb6p+3
+-0x1.abd916p-1
+-0x1.79e84p+2
+-0x1.abd916p-1
+-0x1.de66bep+2
+-0x1.b5bfd4p-1
+-0x1.f0f7bp+3
+-0x1.b5bfd4p-1
+-0x1.7a043ep+2
+-0x1.de82bcp+2
+-0x1.7a043ep+2
+-0x1.de82bcp+2
+-0x1.aa276p-1
+-0x1.bc56dap+3
+-0x1.aa27dcp-1
+-0x1.7a043ep+2
+-0x1.b89526p-1
+-0x1.de82bcp+2
+-0x1.b89518p-1
+-0x1.f64c3ap+3
+-0x1.aa277ep-1
+-0x1.7a043ep+2
+-0x1.de82bcp+2
+-0x1.b894fep-1
+-0x1.f64c3ap+3
+-0x1.bc56dap+3
+-0x1.72cb7ep+2
+-0x1.4b6adp-4
+-0x1.72cb7ep+2
+-0x1.f86f4cp-3
+-0x1.bcb50cp+2
+-0x1.f86f4cp-3
+-0x1.bcb50cp+2
+-0x1.b183b2p+1
+-0x1.72cb7ep+2
+-0x1.b183b2p+1
+-0x1.f86f4cp-3
+-0x1.c63b5ap-12
+-0x1.e76e24p-2
+-0x1.f86f4cp-3
+0x0p+0
+-0x1.e76e24p-2
+-0x1.c63b5ap-12
+-0x1.2bb1a4p-6
+-0x1.2bb1a4p-6
+-0x1.b6a86ep-7
+-0x1.b6a86ep-7
+0x1.7a1ffcp-4
+0x1.7a1ffcp-4
+0x1.a8e2c2p-4
+0x1.a8e2c2p-4
+0x1.95adbap-4
+0x1.95adbap-4
+0x1.68b658p-3
+0x1.68b658p-3
+0x1.0b49f8p-2
+0x1.0b49f8p-2
+0x0p+0
+-0x1.4b6adp-4
+-0x1.e9f8aap+1
+-0x1.6aac48p+1
+-0x1.e9f8aap+1
+-0x1.870c14p+2
+0x1.ea7ab8p-4
+-0x1.870c14p+2
+-0x1.db6eecp-4
+-0x1.cf10bap+2
+-0x1.dedf06p-4
+-0x1.aa8a4p+1
+-0x1.cf10d2p+2
+-0x1.aaa1aap+1
+-0x1.87186ep+2
+-0x1.07886cp-4
+-0x1.da5ed4p-4
+-0x1.c2b31ep-4
+-0x1.1029e2p-1
+-0x1.07e1d4p-1
+0x0p+0
+0x1.628a5p-5
+-0x1.0478f8p-4
+-0x1.0faf02p-4
+0x1.31e878p-5
+0x1.8977cap-5
+-0x1.ea30ap-5
+0x1.1ae8c8p-3
+0x1.43be7cp-5
+0x1.134bp-3
+0x1.12a21ep-3
+0x1.5cffe2p-3
+0x1.1258eap-3
+0x1.dff56cp-3
+0x1.544834p-3
+0x0p+0
+0x1.d8531ep-3
+-0x1.e1837cp+1
+0x1.ea7ab8p-4
+-0x1.e17eb8p+1
+-0x1.6e8d9ap+1
+-0x1.87186ep+2
+0x1.ea7ab8p-4
+-0x1.87186ep+2
+-0x1.270d4cp-3
+-0x1.cf10d2p+2
+-0x1.291eacp-3
+-0x1.aaa51p+1
+-0x1.cf110ap+2
+-0x1.aaa7c6p+1
+-0x1.8725c6p+2
+-0x1.db8fd2p-5
+-0x1.1d819ap-3
+-0x1.01524cp-3
+-0x1.0c3c0cp-1
+-0x1.0469b2p-1
+0x0p+0
+0x1.04a2bep-5
+-0x1.b5d83p-5
+-0x1.c36154p-5
+0x1.be7854p-6
+0x1.8a2846p-5
+-0x1.9cc7bep-5
+0x1.11c64ep-3
+0x1.3ce82ap-5
+0x1.13993ep-3
+0x1.0af644p-3
+0x1.5f510ap-3
+0x1.1482d6p-3
+0x1.dc6358p-3
+0x1.573dc6p-3
+0x0p+0
+0x1.d4a162p-3
+-0x1.e1842ap+1
+0x1.ea7ab8p-4
+-0x1.e1823ap+1
+-0x1.6e8d9ap+1
+-0x1.8725c6p+2
+0x1.ea7ab8p-4
+-0x1.8725c6p+2
+-0x1.3cb6p-3
+-0x1.cf110ap+2
+-0x1.3ed5d6p-3
+-0x1.aa9b16p+1
+-0x1.cf113p+2
+-0x1.aaa4f8p+1
+-0x1.87341p+2
+-0x1.8c2e78p-5
+-0x1.2f2f1ap-3
+-0x1.13bdc4p-3
+-0x1.0885p-1
+-0x1.02247cp-1
+0x0p+0
+0x1.6df588p-6
+-0x1.79d8aap-5
+-0x1.87f3d2p-5
+0x1.39fea8p-6
+0x1.83bfb2p-5
+-0x1.66c198p-5
+0x1.0cfee4p-3
+0x1.3ba262p-5
+0x1.164884p-3
+0x1.057716p-3
+0x1.612c92p-3
+0x1.16bb8cp-3
+0x1.d8beccp-3
+0x1.599656p-3
+0x0p+0
+0x1.d154d2p-3
+-0x1.e182e8p+1
+0x1.ea7ab8p-4
+-0x1.e182a8p+1
+-0x1.6e8d9ap+1
+-0x1.aa949cp+1
+-0x1.87341p+2
+-0x1.4d95a2p-3
+-0x1.057bd8p-1
+0x0p+0
+-0x1.53fd28p-5
+0x1.f7b9e6p-7
+-0x1.54b5fap-5
+0x1.7c582p-5
+0x1.081214p-3
+0x1.18db18p-3
+0x1.62e09cp-3
+0x1.d542ecp-3
+0x1.ea7ab8p-4
+-0x1.e182bep+1
+-0x1.6e8d9ap+1
+-0x1.cf113p+2
+-0x1.d222c2p+2
+-0x1.5c0feep-1
+-0x1.5e2708p+3
+-0x1.5c0feep-1
+-0x1.431a06p-1
+-0x1.dfd53cp+2
+-0x1.432bf2p-1
+-0x1.61eec4p+3
+-0x1.43287ep-1
+-0x1.61eec4p+3
+-0x1.dfd53cp+2
+0x1.195806p+1
+-0x1.4af53cp+2
+-0x1.19e11ap+3
+-0x1.4af53cp+2
+-0x1.4e651cp+2
+0x1.187b52p+1
+-0x1.4e62e8p+2
+-0x1.1a498ep+3
+-0x1.4e6332p+2
+-0x1.1a498ep+3
+0x1.187b52p+1
+-0x1.7ec37cp-5
+-0x1.0e51dp-5
+-0x1.189986p-6
+-0x1.8f38a6p-7
+0x1.fd1764p-8
+0x1.7df1b6p-6
+0x1.9e703ep-6
+0x1.78a2e8p-3
+0x1.013306p-1
+0x1.bdf248p+1
+-0x1.00bc34p+1
+-0x1.a2c80cp+1
+0x1.cccc08p+3
+-0x1.9721eap+2
+-0x1.9871f4p-1
+-0x1.49f2aep-1
+-0x1.06eafap+3
+-0x1.b46512p+3
+-0x1.3fbcbep-1
+-0x1.a91a12p+3
+-0x1.4ccbaap+1
+-0x1.de6f9p+1
+-0x1.70615cp+2
+-0x1.3126aep+1
+-0x1.abd916p-1
+-0x1.b7dbb6p+3
+-0x1.79e84p+2
+-0x1.b5bfd4p-1
+-0x1.de66bep+2
+-0x1.f0f7bp+3
+-0x1.b183b2p+1
+-0x1.bcb50cp+2
+-0x1.72cb7ep+2
+-0x1.e9f8aap+1
+-0x1.6aac48p+1
+-0x1.4b6adp-4
+-0x1.5c0feep-1
+-0x1.d222c2p+2
+-0x1.5e2708p+3
+-0x1.53037cp+3
+-0x1.b62188p+2
+-0x1.4dff1ap+0
+-0x1.4af53cp+2
+0x1.195806p+1
+-0x1.19e11ap+3
+0x1.0b49f8p-2
+0x1.68b658p-3
+0x1.95adbap-4
+0x1.a8e2c2p-4
+0x1.7a1ffcp-4
+-0x1.b6a86ep-7
+-0x1.2bb1a4p-6
+-0x1.c63b5ap-12
+-0x1.f86f4cp-3
+-0x1.e76e24p-2
+0x0p+0
+0x1.d773c2p+1
+0x0p+0
+0x1.c78b32p+1
+0x0p+0
+0x1.5b67bcp+2
+0x0p+0
+0x1.5b0d16p+2
+0x0p+0
+0x1.b99324p+1
+0x0p+0
+0x1.b5b1d2p+1
+0x0p+0
+0x1.6a281ep+2
+0x0p+0
+0x1.6a0ef4p+2
+0x0p+0
+0x1.9fc57p+0
+0x0p+0
+0x1.81879p+0
+0x0p+0
+0x1.45d8aep+2
+0x0p+0
+0x1.45bcbp+2
+0x0p+0
+0x1.642afep+2
+0x0p+0
+0x1.598646p+2
+0x0p+0
+0x1.3a46c2p+1
+0x0p+0
+0x1.42bcaep+1
+0x0p+0
+0x1.5f1178p+2
+0x0p+0
+0x1.63429ap+2
+0x0p+0
+0x1.8cf20ap+2
+0x0p+0
+0x1.99c9ap+2
+0x0p+0
+0x1.92189ep+2
+0x0p+0
+0x1.8f77bcp+2
+0x0p+0
+0x1.669db8p+2
+0x0p+0
+0x1.69baa6p+2
+0x0p+0
+0x1.825c3cp+2
+0x0p+0
+0x1.87b308p+2
+0x0p+0
+0x1.f8e1dp+0
+0x0p+0
+0x1.e765dp+0
+0x0p+0
+0x1.521caap+2
+0x0p+0
+0x1.446a3p+2
+0x0p+0
+0x1.6e1de4p+2
+0x0p+0
+0x1.6b85b2p+2
+0x0p+0
+0x1.83776p-2
+0x0p+0
+0x1.81b78p-2
+0x0p+0
+0x1.72bbbap+1
+0x0p+0
+0x1.79aadp+1
+0x0p+0
+0x1.5ca494p+2
+0x0p+0
+0x1.5cdac6p+2
+0x0p+0
+0x1.f5438p-2
+0x0p+0
+0x1.5d74cp-3
+0x0p+0
+0x1.678a6p+2
+0x0p+0
+0x1.552e3cp+2
+0x0p+0
+0x1.4d94fep+2
+0x0p+0
+0x1.439c32p+2
+0x0p+0
+0x1.e0fa7p+1
+0x0p+0
+0x1.df58ap+1
+0x0p+0
+0x1.45cfdcp+1
+0x0p+0
+0x1.48788ap+1
+0x0p+0
+0x1.46a7b6p+2
+0x0p+0
+0x1.3db16ep+2
+0x0p+0
+0x1.8d1d82p+2
+0x0p+0
+0x1.80b9dp+2
+0x0p+0
+0x1.86eba8p+2
+0x0p+0
+0x1.8113e6p+2
+0x0p+0
+0x1.0df2dp-1
+0x0p+0
+0x1.bd334p-2
+0x0p+0
+0x1.ec8c7p-2
+0x0p+0
+0x1.da60bap-2
+0x0p+0
+0x1.f318bep+1
+0x0p+0
+0x1.f92948p+1
+0x0p+0
+0x1.d773c2p+1
+0x0p+0
+0x1.c78b32p+1
+0x0p+0
+0x1.68e16p+2
+0x0p+0
+0x1.6484eep+2
+0x0p+0
+0x1.166978p+2
+0x0p+0
+0x1.0f43d8p+2
+0x0p+0
+0x1.a8df84p+1
+0x0p+0
+0x1.938d5cp+1
+0x0p+0
+0x1.6a281ep+2
+0x0p+0
+0x1.6a0ef4p+2
+0x0p+0
+0x1.9fc57p+0
+0x0p+0
+0x1.81879p+0
+0x0p+0
+0x1.5b67bcp+2
+0x0p+0
+0x1.5b0d16p+2
+0x0p+0
+0x1.45d8aep+2
+0x0p+0
+0x1.45bcbp+2
+0x0p+0
+0x1.68b658p-3
+0x0p+0
+0x1.62e09cp-3
+0x0p+0
+0x1.825c3cp+2
+0x0p+0
+0x1.87b308p+2
+0x0p+0
+0x1.8507a2p+2
+0x0p+0
+0x1.873eaap+2
+0x0p+0
+-0x1.7479aap+2
+-0x1.7479aap+2
+0x0p+0
+-0x1.73e404p+2
+0x0p+0
+-0x1.73bed6p+2
+0x0p+0
+-0x1.73b59ap+2
+0x0p+0
+0x0p+0
+-0x1.75f938p+2
+-0x1.73b59ap+2
+0x0p+0
+0x1.e6a1cp-2
+0x0p+0
+0x1.c267ep-2
+0x0p+0
+-0x1.5c217ep-3
+0x0p+0
+-0x1.5c217ep-3
+0x0p+0
+-0x1.64c4fep-3
+0x0p+0
+-0x1.66ec2cp-3
+0x0p+0
+-0x1.6775dcp-3
+0x0p+0
+0x0p+0
+-0x1.613b5cp-3
+-0x1.6775dcp-3
+0x0p+0
+0x1.86e408p+2
+0x0p+0
+0x1.8715dcp+2
+0x0p+0
+0x1.86e408p+2
+0x0p+0
+0x1.8715dcp+2
+0x0p+0
+-0x1.a32b88p+2
+-0x1.a32b88p+2
+0x0p+0
+-0x1.a32b88p+2
+0x0p+0
+-0x1.a32b88p+2
+0x0p+0
+0x0p+0
+-0x1.a396a8p+2
+-0x1.a32b88p+2
+0x0p+0
+0x1.8113e4p+2
+0x0p+0
+0x1.80a8c4p+2
+-0x1.d2a26cp-5
+-0x1.2ea854p-5
+-0x1.42929p-6
+-0x1.42929p-6
+-0x1.d31fa2p-7
+-0x1.4efed8p-5
+-0x1.6e2f7ep-6
+-0x1.6e2f7ep-6
+-0x1.09e286p-6
+-0x1.6e2f7ep-6
+-0x1.09e286p-6
+-0x1.4efed8p-5
+-0x1.6cf3d8p-6
+-0x1.0b1b94p-6
+0x1.8d663cp-8
+0x1.748bf2p-6
+0x1.79018ep-6
+0x1.a3f904p-3
+0x1.20e12ap-1
+0x1.d6b1ecp+1
+0x1.081214p-3
+-0x1.cf113p+2
+-0x1.613b5cp-3
+-0x1.87341p+2
+-0x1.613b5cp-3
+-0x1.613b5cp-3
+0x0p+0
+-0x1.87341p+2
+0x1.ea7ab8p-4
+0x1.081214p-3
+0x1.18db18p-3
+0x1.7c582p-5
+0x1.081214p-3
+-0x1.54b5fap-5
+0x1.7c582p-5
+0x1.f7b9e6p-7
+-0x1.54b5fap-5
+-0x1.53fd28p-5
+0x1.f7b9e6p-7
+-0x1.613b5cp-3
+-0x1.53fd28p-5
+-0x1.057bd8p-1
+-0x1.613b5cp-3
+0x0p+0
+-0x1.057bd8p-1
+-0x1.87341p+2
+-0x1.aa949cp+1
+-0x1.cf113p+2
+-0x1.aa949cp+1
+0x1.ea7ab8p-4
+-0x1.e182bep+1
+-0x1.6e8d9ap+1
+-0x1.e182bep+1
+0x1.18db18p-3
+0x1.62e09cp-3
+0x1.62e09cp-3
+0x1.d542ecp-3
+0x1.d542ecp-3
+0x0p+0
+0x1.d75558p+1
+0x1.0b09d6p-3
+-0x1.e17f38p+2
+-0x1.cdec3ap-4
+-0x1.9b74a6p+2
+-0x1.81a1b8p-4
+-0x1.831924p-4
+0x0p+0
+-0x1.9b7d64p+2
+0x1.48181p-2
+0x1.97e5p-3
+0x1.0a6b6ep-3
+0x1.0dc06ap-3
+-0x1.08cd08p-7
+-0x1.4eb64ap-10
+-0x1.3f99f2p-5
+-0x1.434d52p-5
+0x1.b8e3acp-6
+0x1.6aa8cp-6
+-0x1.5fb498p-4
+-0x1.384362p-4
+-0x1.92fe94p-4
+-0x1.737e28p-4
+-0x1.071356p-1
+-0x1.f37d4cp-2
+0x0p+0
+-0x1.a4bce2p+1
+-0x1.9b7d64p+2
+-0x1.a4a7dp+1
+-0x1.e189ep+2
+-0x1.d90cfap+1
+0x1.48181p-2
+-0x1.d91192p+1
+-0x1.726eecp+1
+0x1.5a70e6p-3
+0x1.926e2cp-3
+0x1.87314p-3
+0x1.5c090ep-3
+0x0p+0
+0x1.84a74ep-3
+0x1.d73feep+1
+0x1.026452p-3
+-0x1.e189ep+2
+-0x1.d6bb88p-4
+-0x1.9b7d64p+2
+-0x1.89019cp-4
+-0x1.89cdp-4
+0x0p+0
+-0x1.9b86bap+2
+0x1.48181p-2
+0x1.8e8b8ap-3
+0x1.01f99ap-3
+0x1.0cc6a8p-3
+-0x1.6215acp-8
+0x1.7f75c4p-11
+-0x1.30f948p-5
+-0x1.339278p-5
+0x1.36ed1cp-6
+0x1.14a582p-6
+-0x1.28f6c4p-4
+-0x1.126616p-4
+-0x1.91d9fep-4
+-0x1.80e578p-4
+-0x1.00c344p-1
+-0x1.f0285ap-2
+0x0p+0
+-0x1.a4e482p+1
+-0x1.9b86bap+2
+-0x1.a4c9c8p+1
+-0x1.e1946ap+2
+-0x1.d911eap+1
+0x1.48181p-2
+-0x1.d911cap+1
+-0x1.726eecp+1
+0x1.5e6bc8p-3
+0x1.8c4d3ap-3
+0x1.8604a2p-3
+0x1.60b038p-3
+0x0p+0
+0x1.830c1ap-3
+0x1.d731ccp+1
+0x1.fe034ep-4
+-0x1.e1946ap+2
+-0x1.00244cp-3
+-0x1.9b86bap+2
+-0x1.ac2966p-4
+-0x1.acc35p-4
+0x0p+0
+-0x1.9b9074p+2
+0x1.48181p-2
+0x1.89d33ep-3
+0x1.fc719ap-4
+0x1.09d8e4p-3
+-0x1.ba0a6cp-9
+0x1.71ad3ap-9
+-0x1.125cacp-5
+-0x1.19246cp-5
+0x1.3c9aacp-7
+0x1.2e0d4cp-7
+-0x1.11fb04p-4
+-0x1.fc62a6p-5
+-0x1.ade518p-4
+-0x1.95c312p-4
+-0x1.f94e48p-2
+-0x1.ed0c46p-2
+0x0p+0
+-0x1.a4dfe6p+1
+-0x1.9b9074p+2
+-0x1.a4d2bcp+1
+-0x1.e19f72p+2
+-0x1.d911d4p+1
+0x1.48181p-2
+-0x1.d911d2p+1
+-0x1.726eecp+1
+0x1.61d0eep-3
+0x1.87b404p-3
+0x1.849b14p-3
+0x1.6404e8p-3
+0x0p+0
+0x1.81e3dep-3
+0x1.d71748p+1
+0x1.f7852p-4
+-0x1.cc9ca6p-10
+-0x1.e154ap-6
+0x1.26bf9ep-8
+-0x1.f6877ap-5
+-0x1.0f754cp-3
+-0x1.f37f8cp-2
+0x0p+0
+-0x1.9b9074p+2
+-0x1.a4e4fp+1
+0x1.48181p-2
+-0x1.d911d2p+1
+-0x1.726eecp+1
+-0x1.e19f72p+2
+0x1.85f63cp-3
+0x1.64c9a6p-3
+0x1.835016p-3
+-0x1.5d14dp+1
+-0x1.ac38ap+1
+0x1.bf7ad8p+3
+-0x1.a396a8p+2
+0x0p+0
+-0x1.b25266p+2
+0x0p+0
+-0x1.b25266p+2
+0x0p+0
+-0x1.555fccp-1
+-0x1.0a7dcap+3
+-0x1.6cd63cp-1
+-0x1.b96178p+3
+-0x1.6cd63cp-1
+-0x1.8fc3a4p-1
+-0x1.0e109ap+3
+-0x1.8fb0d2p-1
+-0x1.be5ddep+3
+-0x1.8faecep-1
+-0x1.be5ddep+3
+-0x1.0e109ap+3
+-0x1.5cb43ap+1
+-0x1.5bffb6p+0
+-0x1.5cb43ap+1
+-0x1.2b1624p+1
+-0x1.75f938p+2
+0x0p+0
+-0x1.ae6c6ep+3
+-0x1.408616p-1
+-0x1.5cb43ap+1
+-0x1.408616p-1
+-0x1.2b1624p+1
+-0x1.dbc6e2p+1
+-0x1.75f938p+2
+-0x1.dbc6e2p+1
+-0x1.5bffb6p+0
+-0x1.5532fcp+3
+-0x1.b8b9bap+2
+-0x1.5532fcp+3
+-0x1.6a72f6p+1
+-0x1.6dec22p+0
+-0x1.6aaca4p+1
+-0x1.24fdc6p+1
+-0x1.7e5ef8p+2
+0x0p+0
+-0x1.4367f2p-1
+-0x1.b3becap+3
+-0x1.43b076p-1
+-0x1.6aaca4p+1
+-0x1.e00374p+1
+-0x1.24fdc6p+1
+-0x1.dfffbap+1
+-0x1.7e5ef8p+2
+-0x1.5783e6p+3
+-0x1.6d7b9cp+0
+-0x1.577bcp+3
+-0x1.bb51ecp+2
+-0x1.6aaca4p+1
+-0x1.6d7b9cp+0
+-0x1.6adc3cp+1
+-0x1.24fdc6p+1
+-0x1.7e5ef8p+2
+0x0p+0
+-0x1.4357eap-1
+-0x1.b3becap+3
+-0x1.4377bep-1
+-0x1.6adc3cp+1
+-0x1.e32042p+1
+-0x1.24fdc6p+1
+-0x1.e1fd46p+1
+-0x1.7e5ef8p+2
+-0x1.577e08p+3
+-0x1.6d1e0cp+0
+-0x1.577938p+3
+-0x1.bb51ecp+2
+-0x1.6adc3cp+1
+-0x1.6d1e0cp+0
+-0x1.6b0346p+1
+-0x1.24fdc6p+1
+-0x1.7e5ef8p+2
+0x0p+0
+-0x1.4338ap-1
+-0x1.b3becap+3
+-0x1.434f5p-1
+-0x1.6b0346p+1
+-0x1.e26692p+1
+-0x1.24fdc6p+1
+-0x1.e24094p+1
+-0x1.7e5ef8p+2
+-0x1.577af2p+3
+-0x1.6cd0cep+0
+-0x1.57770cp+3
+-0x1.bb51ecp+2
+-0x1.431cc8p-1
+-0x1.6b0346p+1
+-0x1.24fdc6p+1
+-0x1.e24e42p+1
+-0x1.7e5ef8p+2
+0x0p+0
+-0x1.6cd0cep+0
+-0x1.577872p+3
+-0x1.bb51ecp+2
+-0x1.b3becap+3
+-0x1.7a043ep+2
+-0x1.de82bcp+2
+-0x1.bc56dap+3
+-0x1.aa277ep-1
+-0x1.7a043ep+2
+-0x1.aa277ep-1
+-0x1.de82bcp+2
+-0x1.b894fep-1
+-0x1.f64c3ap+3
+-0x1.b894fep-1
+-0x1.7a203cp+2
+-0x1.de9ebap+2
+-0x1.7a203cp+2
+-0x1.de9ebap+2
+-0x1.a875c8p-1
+-0x1.c0d1fep+3
+-0x1.a875eep-1
+-0x1.7a203cp+2
+-0x1.bb6a4cp-1
+-0x1.de9ebap+2
+-0x1.bb6a78p-1
+-0x1.fba0c4p+3
+-0x1.a875dcp-1
+-0x1.7a203cp+2
+-0x1.de9ebap+2
+-0x1.bb6a48p-1
+-0x1.fba0c4p+3
+-0x1.c0d1fep+3
+-0x1.dfd53cp+2
+-0x1.43287ep-1
+-0x1.61eec4p+3
+-0x1.43287ep-1
+-0x1.2a39ap-1
+-0x1.ed87b6p+2
+-0x1.2a4bcp-1
+-0x1.65b68p+3
+-0x1.2a4858p-1
+-0x1.65b68p+3
+-0x1.ed87b6p+2
+0x1.187b52p+1
+-0x1.4e6332p+2
+-0x1.1a498ep+3
+-0x1.4e6332p+2
+-0x1.51d1e4p+2
+0x1.179e9ep+1
+-0x1.51cf4p+2
+-0x1.1ab202p+3
+-0x1.51cfaap+2
+-0x1.1ab202p+3
+0x1.179e9ep+1
+-0x1.a8b2f4p-5
+-0x1.2ea854p-5
+-0x1.42929p-6
+-0x1.d31fa2p-7
+0x1.c53edp-8
+0x1.793ed4p-6
+0x1.8bb8e6p-6
+0x1.8e4df6p-3
+0x1.110a18p-1
+0x1.d6b1ecp+1
+-0x1.2ee882p+1
+-0x1.a78056p+1
+0x1.c6237p+3
+-0x1.a396a8p+2
+-0x1.76e8ep-1
+-0x1.6cd63cp-1
+-0x1.0a7dcap+3
+-0x1.b96178p+3
+-0x1.408616p-1
+-0x1.ae6c6ep+3
+-0x1.5cb43ap+1
+-0x1.dbc6e2p+1
+-0x1.75f938p+2
+-0x1.2b1624p+1
+-0x1.aa277ep-1
+-0x1.bc56dap+3
+-0x1.7a043ep+2
+-0x1.b894fep-1
+-0x1.de82bcp+2
+-0x1.f64c3ap+3
+-0x1.aa949cp+1
+-0x1.cf113p+2
+-0x1.87341p+2
+-0x1.e182bep+1
+-0x1.6e8d9ap+1
+0x1.ea7ab8p-4
+-0x1.43287ep-1
+-0x1.dfd53cp+2
+-0x1.61eec4p+3
+-0x1.5532fcp+3
+-0x1.b8b9bap+2
+-0x1.5bffb6p+0
+-0x1.4e6332p+2
+0x1.187b52p+1
+-0x1.1a498ep+3
+0x1.d542ecp-3
+0x1.62e09cp-3
+0x1.18db18p-3
+0x1.081214p-3
+0x1.7c582p-5
+-0x1.54b5fap-5
+0x1.f7b9e6p-7
+-0x1.53fd28p-5
+-0x1.613b5cp-3
+-0x1.057bd8p-1
+0x0p+0
+0x1.c78b32p+1
+0x0p+0
+0x1.b93c26p+1
+0x0p+0
+0x1.5b0d16p+2
+0x0p+0
+0x1.5ab26cp+2
+0x0p+0
+0x1.b5b1d2p+1
+0x0p+0
+0x1.b1d08p+1
+0x0p+0
+0x1.6a0ef4p+2
+0x0p+0
+0x1.69bc1cp+2
+0x0p+0
+0x1.81879p+0
+0x0p+0
+0x1.6349bp+0
+0x0p+0
+0x1.45bcbp+2
+0x0p+0
+0x1.45a0b2p+2
+0x0p+0
+0x1.598646p+2
+0x0p+0
+0x1.4ee18ep+2
+0x0p+0
+0x1.42bcaep+1
+0x0p+0
+0x1.4b2d9ap+1
+0x0p+0
+0x1.63429ap+2
+0x0p+0
+0x1.6773bcp+2
+0x0p+0
+0x1.ea7ab8p-4
+0x0p+0
+0x1.48181p-2
+0x0p+0
+0x1.8f77bcp+2
+0x0p+0
+0x1.8e32a8p+2
+0x0p+0
+0x1.69baa6p+2
+0x0p+0
+0x1.6cd6acp+2
+0x0p+0
+0x1.8715dcp+2
+0x0p+0
+0x1.89a40cp+2
+0x0p+0
+0x1.e765dp+0
+0x0p+0
+0x1.d53a2p+0
+0x0p+0
+0x1.446a3p+2
+0x0p+0
+0x1.36b7b6p+2
+0x0p+0
+0x1.6b85b2p+2
+0x0p+0
+0x1.68ed8p+2
+0x0p+0
+0x1.81b78p-2
+0x0p+0
+0x1.7ff7ap-2
+0x0p+0
+0x1.79aadp+1
+0x0p+0
+0x1.7f5a7cp+1
+0x0p+0
+0x1.5cdac6p+2
+0x0p+0
+0x1.5d10fap+2
+0x0p+0
+0x1.5d74cp-3
+0x0p+0
+-0x1.2e17cp-3
+0x0p+0
+0x1.552e3cp+2
+0x0p+0
+0x1.429ffap+2
+0x0p+0
+0x1.439c32p+2
+0x0p+0
+0x1.39a366p+2
+0x0p+0
+0x1.df58ap+1
+0x0p+0
+0x1.ddb6dp+1
+0x0p+0
+0x1.48788ap+1
+0x0p+0
+0x1.41f12ap+1
+0x0p+0
+0x1.3db16ep+2
+0x0p+0
+0x1.34bb26p+2
+0x0p+0
+0x1.80a8c4p+2
+0x0p+0
+0x1.71ed06p+2
+0x0p+0
+0x1.c267ep-2
+0x0p+0
+0x1.3c0bep-2
+0x0p+0
+0x1.f92948p+1
+0x0p+0
+0x1.ff41a6p+1
+0x0p+0
+0x1.c78b32p+1
+0x0p+0
+0x1.b93c26p+1
+0x0p+0
+0x1.6484eep+2
+0x0p+0
+0x1.6029dcp+2
+0x0p+0
+0x1.0f43d8p+2
+0x0p+0
+0x1.081e38p+2
+0x0p+0
+0x1.938d5cp+1
+0x0p+0
+0x1.7e3b34p+1
+0x0p+0
+0x1.6a0ef4p+2
+0x0p+0
+0x1.69bc1cp+2
+0x0p+0
+0x1.81879p+0
+0x0p+0
+0x1.6349bp+0
+0x0p+0
+0x1.5b0d16p+2
+0x0p+0
+0x1.5ab26cp+2
+0x0p+0
+0x1.45bcbp+2
+0x0p+0
+0x1.45a0b2p+2
+0x0p+0
+0x1.62e09cp-3
+0x0p+0
+0x1.64c9a6p-3
+0x0p+0
+0x1.8715dcp+2
+0x0p+0
+0x1.89a40cp+2
+-0x1.fc91e4p-5
+-0x1.4efed8p-5
+-0x1.6cf3d8p-6
+-0x1.6cf3d8p-6
+-0x1.0b1b94p-6
+-0x1.6f555cp-5
+-0x1.9890c6p-6
+-0x1.9890c6p-6
+-0x1.2b6e48p-6
+-0x1.6f555cp-5
+-0x1.97a9d8p-6
+-0x1.2c532p-6
+0x1.558da8p-8
+0x1.6fd91p-6
+0x1.664a36p-6
+0x1.b9a412p-3
+0x1.30b83cp-1
+0x1.d71748p+1
+0x1.f7852p-4
+-0x1.e19f72p+2
+-0x1.0f754cp-3
+-0x1.9b9074p+2
+-0x1.0f754cp-3
+-0x1.9b9074p+2
+0x1.48181p-2
+0x1.f7852p-4
+0x1.85f63cp-3
+-0x1.cc9ca6p-10
+0x1.f7852p-4
+-0x1.e154ap-6
+-0x1.cc9ca6p-10
+0x1.26bf9ep-8
+-0x1.e154ap-6
+-0x1.f6877ap-5
+0x1.26bf9ep-8
+-0x1.0f754cp-3
+-0x1.f6877ap-5
+-0x1.f37f8cp-2
+-0x1.0f754cp-3
+0x0p+0
+-0x1.f37f8cp-2
+-0x1.9b9074p+2
+-0x1.a4e4fp+1
+-0x1.e19f72p+2
+-0x1.a4e4fp+1
+0x1.48181p-2
+-0x1.d911d2p+1
+-0x1.726eecp+1
+-0x1.d911d2p+1
+0x1.85f63cp-3
+0x1.64c9a6p-3
+0x1.64c9a6p-3
+0x1.835016p-3
+0x1.835016p-3
+0x0p+0
+0x1.d24b2ap+1
+0x1.b54b5cp-4
+-0x1.f3b5eap+2
+-0x1.c3888ep-3
+-0x1.a6aa6ep+2
+-0x1.9bdf9ap-3
+-0x1.a6aa6ep+2
+-0x1.9bdf9ap-3
+-0x1.a6a446p+2
+0x1.29b63p-2
+0x1.df8d18p-3
+0x1.b3e7ep-4
+0x1.d323bp-4
+-0x1.134c2ap-5
+-0x1.c2b23cp-6
+0x1.51f3ep-9
+-0x1.1775bp-9
+-0x1.01d80cp-4
+-0x1.cd4d9p-5
+0x1.7cd3ccp-4
+0x1.439016p-4
+-0x1.a6e096p-3
+-0x1.5b3282p-3
+-0x1.dae6ccp-2
+-0x1.df7fbap-2
+0x0p+0
+-0x1.a8191p+1
+-0x1.a5ab5p+2
+-0x1.aa1aacp+1
+-0x1.f3c57p+2
+-0x1.ca2c4p+1
+0x1.03f074p-2
+-0x1.c87412p+1
+-0x1.76503ep+1
+0x1.79879cp-3
+0x1.d6c5bap-3
+0x1.2b2b34p-3
+0x1.7fee36p-3
+0x0p+0
+0x1.2ea2c4p-3
+0x1.d236ecp+1
+0x1.b77d16p-4
+-0x1.f3c57p+2
+-0x1.bf849ap-3
+-0x1.a5ab5p+2
+-0x1.934bf4p-3
+-0x1.a5ab5p+2
+-0x1.934bf4p-3
+-0x1.a5a048p+2
+0x1.03f074p-2
+0x1.d3e15ap-3
+0x1.b48dcep-4
+0x1.d64102p-4
+-0x1.e2f464p-6
+-0x1.8f7caep-6
+-0x1.5c3a94p-10
+-0x1.0182ap-8
+-0x1.b6adbcp-5
+-0x1.a2be36p-5
+0x1.1990eap-4
+0x1.03df58p-4
+-0x1.a6e8eap-3
+-0x1.6412eap-3
+-0x1.dd09eep-2
+-0x1.dac9b4p-2
+0x0p+0
+-0x1.a97b96p+1
+-0x1.a49e76p+2
+-0x1.ab4aacp+1
+-0x1.f3d6bep+2
+-0x1.c91b26p+1
+0x1.cb3f08p-3
+-0x1.c77e78p+1
+-0x1.76503ep+1
+0x1.7aa9bcp-3
+0x1.cda6ccp-3
+0x1.2cdc5ep-3
+0x1.81a7fcp-3
+0x0p+0
+0x1.2fc42cp-3
+0x1.d20becp+1
+0x1.b5821cp-4
+-0x1.f3d6bep+2
+-0x1.b5781cp-3
+-0x1.a49e76p+2
+-0x1.87a1c8p-3
+-0x1.a4a386p+2
+-0x1.884e42p-3
+-0x1.a49584p+2
+0x1.cb3f08p-3
+0x1.cc8b3cp-3
+0x1.b155p-4
+0x1.d39ebap-4
+-0x1.96df9ep-6
+-0x1.4bb63p-6
+-0x1.af37dcp-8
+-0x1.fafc74p-8
+-0x1.4ca47ap-5
+-0x1.52379ep-5
+0x1.e3c49ep-5
+0x1.bcb0a8p-5
+-0x1.a1469p-3
+-0x1.631ea8p-3
+-0x1.dbfd3p-2
+-0x1.d980fcp-2
+0x0p+0
+-0x1.aab01cp+1
+-0x1.a39e64p+2
+-0x1.ac2a2ep+1
+-0x1.f3e8eep+2
+-0x1.c80ec4p+1
+0x1.9a0068p-3
+-0x1.c6b8cap+1
+-0x1.76503ep+1
+0x1.7bf1d4p-3
+0x1.c6e5bep-3
+0x1.2e3f78p-3
+0x1.82852ep-3
+0x0p+0
+0x1.311904p-3
+0x1.d1ce86p+1
+0x1.b1e772p-4
+-0x1.48e0fap-6
+-0x1.8ea728p-7
+-0x1.129b5cp-5
+0x1.a09c4ap-5
+-0x1.af8e5ap-3
+-0x1.dad33cp-2
+0x0p+0
+-0x1.a39e64p+2
+-0x1.abaec2p+1
+0x1.9a0068p-3
+-0x1.c72fe8p+1
+-0x1.76503ep+1
+-0x1.f3e8eep+2
+0x1.c62b8p-3
+0x1.7cfd4ep-3
+0x1.2f9c26p-3
+-0x1.8b411ep+1
+-0x1.b0f0eap+1
+0x1.b8d24p+3
+-0x1.c10e24p+2
+-0x1.33d6b8p-1
+-0x1.0e109ap+3
+-0x1.8faecep-1
+-0x1.be5ddep+3
+-0x1.8faecep-1
+-0x1.b289a2p-1
+-0x1.11a36ap+3
+-0x1.b2696ep-1
+-0x1.c35a44p+3
+-0x1.b26c78p-1
+-0x1.11a36ap+3
+-0x1.b26b5cp-1
+-0x1.c35a44p+3
+-0x1.b26ba8p-1
+-0x1.c35a44p+3
+-0x1.11a36ap+3
+-0x1.6b0346p+1
+-0x1.6cd0cep+0
+-0x1.b3becap+3
+-0x1.431cc8p-1
+-0x1.6b0346p+1
+-0x1.431cc8p-1
+-0x1.6cd0cep+0
+-0x1.577872p+3
+-0x1.bb51ecp+2
+-0x1.577872p+3
+-0x1.78c202p+1
+-0x1.7ebd3ap+0
+-0x1.45fddap-1
+-0x1.b91126p+3
+-0x1.460f7ap-1
+-0x1.78c202p+1
+-0x1.59c78ep+3
+-0x1.7ebd3ap+0
+-0x1.59c5dcp+3
+-0x1.bdea1ep+2
+-0x1.46093p-1
+-0x1.78c202p+1
+-0x1.7ebd3ap+0
+-0x1.59c5d4p+3
+-0x1.bdea1ep+2
+-0x1.b91126p+3
+-0x1.7e5ef8p+2
+0x0p+0
+-0x1.7e5ef8p+2
+-0x1.e24e42p+1
+-0x1.24fdc6p+1
+-0x1.e24e42p+1
+-0x1.86c4b8p+2
+0x0p+0
+-0x1.e6889cp+1
+-0x1.86c4b8p+2
+-0x1.e6889ap+1
+-0x1.1ee568p+1
+-0x1.e6818p+1
+-0x1.1ee568p+1
+-0x1.86c4b8p+2
+0x0p+0
+-0x1.7a203cp+2
+-0x1.de9ebap+2
+-0x1.c0d1fep+3
+-0x1.a875dcp-1
+-0x1.7a203cp+2
+-0x1.a875dcp-1
+-0x1.de9ebap+2
+-0x1.bb6a48p-1
+-0x1.fba0c4p+3
+-0x1.bb6a48p-1
+-0x1.7a3c3ap+2
+-0x1.debab8p+2
+-0x1.7a3c3ap+2
+-0x1.debab8p+2
+-0x1.a6c426p-1
+-0x1.c54d22p+3
+-0x1.a6c418p-1
+-0x1.7a3c3ap+2
+-0x1.be3f94p-1
+-0x1.debab8p+2
+-0x1.be3fa2p-1
+-0x1.007aa6p+4
+-0x1.a6c41p-1
+-0x1.7a3c3ap+2
+-0x1.debab8p+2
+-0x1.be3fdcp-1
+-0x1.007aa6p+4
+-0x1.c54d22p+3
+-0x1.ed87b6p+2
+-0x1.2a4858p-1
+-0x1.65b68p+3
+-0x1.2a4858p-1
+-0x1.11607ep-1
+-0x1.fb3a3p+2
+-0x1.1172c4p-1
+-0x1.697e3cp+3
+-0x1.116f58p-1
+-0x1.697e3cp+3
+-0x1.fb3a3p+2
+0x1.179e9ep+1
+-0x1.51cfaap+2
+-0x1.1ab202p+3
+-0x1.51cfaap+2
+-0x1.553d32p+2
+0x1.16c1eap+1
+-0x1.553a6p+2
+-0x1.1b1a76p+3
+-0x1.553adep+2
+-0x1.1b1a76p+3
+0x1.16c1eap+1
+-0x1.d2a26cp-5
+-0x1.4efed8p-5
+-0x1.6cf3d8p-6
+-0x1.0b1b94p-6
+0x1.8d663cp-8
+0x1.748bf2p-6
+0x1.79018ep-6
+0x1.a3f904p-3
+0x1.20e12ap-1
+0x1.d71748p+1
+-0x1.5d14dp+1
+-0x1.ac38ap+1
+0x1.bf7ad8p+3
+-0x1.b25266p+2
+-0x1.555fccp-1
+-0x1.8faecep-1
+-0x1.0e109ap+3
+-0x1.be5ddep+3
+-0x1.431cc8p-1
+-0x1.b3becap+3
+-0x1.6b0346p+1
+-0x1.e24e42p+1
+-0x1.7e5ef8p+2
+-0x1.24fdc6p+1
+-0x1.a875dcp-1
+-0x1.c0d1fep+3
+-0x1.7a203cp+2
+-0x1.bb6a48p-1
+-0x1.de9ebap+2
+-0x1.fba0c4p+3
+-0x1.a4e4fp+1
+-0x1.e19f72p+2
+-0x1.9b9074p+2
+-0x1.d911d2p+1
+-0x1.726eecp+1
+0x1.48181p-2
+-0x1.2a4858p-1
+-0x1.ed87b6p+2
+-0x1.65b68p+3
+-0x1.577872p+3
+-0x1.bb51ecp+2
+-0x1.6cd0cep+0
+-0x1.51cfaap+2
+0x1.179e9ep+1
+-0x1.1ab202p+3
+0x1.835016p-3
+0x1.64c9a6p-3
+0x1.85f63cp-3
+0x1.f7852p-4
+-0x1.cc9ca6p-10
+-0x1.e154ap-6
+0x1.26bf9ep-8
+-0x1.f6877ap-5
+-0x1.0f754cp-3
+-0x1.f37f8cp-2
+0x0p+0
+0x1.88aef8p+2
+0x0p+0
+0x1.80a108p+2
+0x0p+0
+0x1.36eb82p+2
+0x0p+0
+0x1.327068p+2
+0x0p+0
+0x1.b93c26p+1
+0x0p+0
+0x1.ab7d6ap+1
+0x0p+0
+0x1.5ab26cp+2
+0x0p+0
+0x1.5a57bap+2
+0x0p+0
+0x1.b1d08p+1
+0x0p+0
+0x1.adef2ep+1
+0x0p+0
+0x1.69bc1cp+2
+0x0p+0
+0x1.695e9p+2
+0x0p+0
+0x1.6349bp+0
+0x0p+0
+0x1.450bdp+0
+0x0p+0
+0x1.45a0b2p+2
+0x0p+0
+0x1.4584b4p+2
+0x0p+0
+0x1.4ee18ep+2
+0x0p+0
+0x1.443cd6p+2
+0x0p+0
+0x1.4b2d9ap+1
+0x0p+0
+0x1.5d0f84p+1
+0x0p+0
+0x1.6773bcp+2
+0x0p+0
+0x1.6ba4ep+2
+0x0p+0
+0x1.48181p-2
+0x0p+0
+0x1.9a0068p-3
+0x0p+0
+0x1.8e32a8p+2
+0x0p+0
+0x1.9560eep+2
+0x0p+0
+0x1.6cd6acp+2
+0x0p+0
+0x1.6ff1ccp+2
+0x0p+0
+0x1.d53a2p+0
+0x0p+0
+0x1.c2cf1p+0
+0x0p+0
+0x1.36b7b6p+2
+0x0p+0
+0x1.29053cp+2
+0x0p+0
+0x1.68ed8p+2
+0x0p+0
+0x1.66554ep+2
+0x0p+0
+0x1.7ff7ap-2
+0x0p+0
+0x1.7e37cp-2
+0x0p+0
+0x1.7f5a7cp+1
+0x0p+0
+0x1.7890aap+1
+0x0p+0
+0x1.5d10fap+2
+0x0p+0
+0x1.5d4734p+2
+0x0p+0
+0x1.88aef8p+2
+0x0p+0
+0x1.80a108p+2
+0x0p+0
+0x1.429ffap+2
+0x0p+0
+0x1.30567ep+2
+0x0p+0
+0x1.39a366p+2
+0x0p+0
+0x1.2faa9ap+2
+0x0p+0
+0x1.ddb6dp+1
+0x0p+0
+0x1.dc15p+1
+0x0p+0
+0x1.41f12ap+1
+0x0p+0
+0x1.3dbdecp+1
+0x0p+0
+0x1.34bb26p+2
+0x0p+0
+0x1.2bc4dep+2
+0x0p+0
+0x1.71ed06p+2
+0x0p+0
+0x1.633148p+2
+0x0p+0
+0x1.3c0bep-2
+0x0p+0
+0x1.6b5fcp-3
+0x0p+0
+0x1.ff41a6p+1
+0x0p+0
+0x1.02ad02p+2
+0x0p+0
+0x1.b93c26p+1
+0x0p+0
+0x1.ab7d6ap+1
+0x0p+0
+0x1.6029dcp+2
+0x0p+0
+0x1.5bd24p+2
+0x0p+0
+0x1.081e38p+2
+0x0p+0
+0x1.00f898p+2
+0x0p+0
+0x1.7e3b34p+1
+0x0p+0
+0x1.68e914p+1
+0x0p+0
+0x1.69bc1cp+2
+0x0p+0
+0x1.695e9p+2
+0x0p+0
+0x1.6349bp+0
+0x0p+0
+0x1.450bdp+0
+0x0p+0
+0x1.5ab26cp+2
+0x0p+0
+0x1.5a57bap+2
+0x0p+0
+0x1.45a0b2p+2
+0x0p+0
+0x1.4584b4p+2
+0x0p+0
+0x1.64c9a6p-3
+0x0p+0
+0x1.7cfd4ep-3
+0x0p+0
+0x1.89a40cp+2
+0x0p+0
+0x1.84a344p+2
+-0x1.1340aep-4
+-0x1.8fabep-5
+-0x1.97a9d8p-6
+-0x1.2c532p-6
+-0x1.c346c6p-6
+-0x1.4ca5d4p-6
+-0x1.c2a3a2p-6
+-0x1.4d476p-6
+0x1.1db514p-8
+0x1.6b262ep-6
+0x1.5392dep-6
+0x1.cf4f2p-3
+0x1.408f4ep-1
+0x1.d1ce86p+1
+0x1.b1e772p-4
+-0x1.f3e8eep+2
+-0x1.af8e5ap-3
+-0x1.a39e64p+2
+-0x1.af8e5ap-3
+-0x1.a39e64p+2
+0x1.9a0068p-3
+0x1.b1e772p-4
+0x1.c62b8p-3
+-0x1.48e0fap-6
+0x1.b1e772p-4
+-0x1.8ea728p-7
+-0x1.48e0fap-6
+-0x1.129b5cp-5
+-0x1.8ea728p-7
+0x1.a09c4ap-5
+-0x1.129b5cp-5
+-0x1.af8e5ap-3
+0x1.a09c4ap-5
+-0x1.dad33cp-2
+-0x1.af8e5ap-3
+0x0p+0
+-0x1.dad33cp-2
+-0x1.a39e64p+2
+-0x1.abaec2p+1
+-0x1.f3e8eep+2
+-0x1.abaec2p+1
+0x1.9a0068p-3
+-0x1.c72fe8p+1
+-0x1.76503ep+1
+-0x1.c72fe8p+1
+0x1.c62b8p-3
+0x1.7cfd4ep-3
+0x1.7cfd4ep-3
+0x1.2f9c26p-3
+0x1.2f9c26p-3
+0x0p+0
+0x1.c3524p+1
+0x1.42a4a8p-4
+-0x1.033c34p+3
+-0x1.3fb05ap-2
+-0x1.afe81p+2
+-0x1.2acebp-2
+-0x1.afe81p+2
+-0x1.2acebp-2
+-0x1.afdbc2p+2
+0x1.5d3caap-3
+0x1.e4e86p-3
+0x1.3fa896p-4
+0x1.69a194p-4
+-0x1.4fc67cp-7
+-0x1.073b16p-7
+-0x1.63043ap-7
+-0x1.4867aep-7
+-0x1.9e6694p-5
+-0x1.9a471ep-5
+0x1.4cb35cp-3
+0x1.2b9b9p-3
+-0x1.3782c6p-2
+-0x1.03afe2p-2
+-0x1.bcb086p-2
+-0x1.c32004p-2
+0x0p+0
+-0x1.af18dcp+1
+-0x1.af6c22p+2
+-0x1.b04772p+1
+-0x1.0346f6p+3
+-0x1.b85698p+1
+0x1.3b2644p-3
+-0x1.b7194ap+1
+-0x1.7a319p+1
+0x1.9ad23ep-3
+0x1.db08bep-3
+0x1.ce793p-4
+0x1.a15946p-3
+0x0p+0
+0x1.de44fap-4
+0x1.c32392p+1
+0x1.48ffap-4
+-0x1.0346f6p+3
+-0x1.270f8cp-2
+-0x1.af6c22p+2
+-0x1.138dcap-2
+-0x1.af6c22p+2
+-0x1.138dcap-2
+-0x1.af5aep+2
+0x1.3b2644p-3
+0x1.dbac84p-3
+0x1.43f93cp-4
+0x1.6c78f4p-4
+-0x1.ee989ap-8
+-0x1.458c8ap-8
+-0x1.e1e836p-7
+-0x1.bd3b14p-7
+-0x1.2dd30cp-5
+-0x1.41370ap-5
+0x1.1475c8p-3
+0x1.051cc2p-3
+-0x1.260aep-2
+-0x1.f4282ep-3
+-0x1.bfaceep-2
+-0x1.c46174p-2
+0x0p+0
+-0x1.afe694p+1
+-0x1.aef09ep+2
+-0x1.b0de6cp+1
+-0x1.035166p+3
+-0x1.b795a2p+1
+0x1.1f0bdcp-3
+-0x1.b68e1ep+1
+-0x1.7a319p+1
+0x1.986a28p-3
+0x1.d1ba5ap-3
+0x1.d618dp-4
+0x1.a00592p-3
+0x0p+0
+0x1.e4ff3ep-4
+0x1.c2d4b8p+1
+0x1.4d42ccp-4
+-0x1.035166p+3
+-0x1.1b46bap-2
+-0x1.aef09ep+2
+-0x1.081d86p-2
+-0x1.aef09ep+2
+-0x1.081d86p-2
+-0x1.aedc9ep+2
+0x1.1f0bdcp-3
+0x1.d3fdc4p-3
+0x1.46b10ap-4
+0x1.6e864ep-4
+-0x1.46bcaap-8
+-0x1.1cf8dap-9
+-0x1.35d5bep-6
+-0x1.1b20e6p-6
+-0x1.8c4b5cp-6
+-0x1.cd9d82p-6
+0x1.d90d92p-4
+0x1.c5dd84p-4
+-0x1.1de29ep-2
+-0x1.e77c36p-3
+-0x1.c1dea8p-2
+-0x1.c5188cp-2
+0x0p+0
+-0x1.b0908cp+1
+-0x1.ae7b14p+2
+-0x1.b15754p+1
+-0x1.035bdcp+3
+-0x1.b6ebcap+1
+0x1.07e3e2p-3
+-0x1.b61584p+1
+-0x1.7a319p+1
+0x1.96c298p-3
+0x1.c9f1d6p-3
+0x1.dd3eaep-4
+0x1.9e3f62p-3
+0x0p+0
+0x1.ebd416p-4
+0x1.c26d2ep+1
+0x1.50a70cp-4
+-0x1.481f5p-9
+-0x1.6a56c6p-6
+-0x1.e5f966p-7
+0x1.a22fc6p-4
+-0x1.12d5eep-2
+-0x1.c361bap-2
+0x0p+0
+-0x1.ae7b14p+2
+-0x1.b11b52p+1
+0x1.07e3e2p-3
+-0x1.b6618p+1
+-0x1.7a319p+1
+-0x1.035bdcp+3
+0x1.cc8e9p-3
+0x1.9522e4p-3
+0x1.e43ccap-4
+-0x1.b96d6cp+1
+-0x1.b0f0eap+1
+0x1.b8d24p+3
+-0x1.c93deap+1
+0x1.ad447ap+3
+-0x1.c93deap+1
+0x1.ad447ap+3
+-0x1.cfc9e2p+2
+-0x1.124da4p-1
+-0x1.11a36ap+3
+-0x1.b26ba8p-1
+-0x1.c35a44p+3
+-0x1.b26ba8p-1
+-0x1.d5333ap-1
+-0x1.15363ap+3
+-0x1.d51988p-1
+-0x1.c856aap+3
+-0x1.d51a34p-1
+-0x1.c856aap+3
+-0x1.15363ap+3
+-0x1.46093p-1
+-0x1.7ebd3ap+0
+-0x1.b91126p+3
+-0x1.7ebd3ap+0
+-0x1.b91126p+3
+-0x1.46093p-1
+-0x1.78c202p+1
+-0x1.46093p-1
+-0x1.7ebd3ap+0
+-0x1.59c5d4p+3
+-0x1.bdea1ep+2
+-0x1.59c5d4p+3
+-0x1.5a630ap-1
+-0x1.8b8a34p+0
+-0x1.bb29p+3
+-0x1.8b8a34p+0
+-0x1.5a630ap-1
+-0x1.bb29p+3
+-0x1.5e4198p-1
+-0x1.8680bep+1
+-0x1.5ba0ep+3
+-0x1.8b8a34p+0
+-0x1.5bad3ap+3
+-0x1.c0825p+2
+-0x1.585af8p-1
+-0x1.8b8a34p+0
+-0x1.bb29p+3
+-0x1.8b8a34p+0
+-0x1.585af8p-1
+-0x1.bb29p+3
+-0x1.5a7dccp-1
+-0x1.8680bep+1
+-0x1.5ba87cp+3
+-0x1.8b8a34p+0
+-0x1.5baa2cp+3
+-0x1.c0825p+2
+-0x1.59b882p-1
+-0x1.8b8a34p+0
+-0x1.bb29p+3
+-0x1.8b8a34p+0
+-0x1.59b882p-1
+-0x1.bb29p+3
+-0x1.59ff98p-1
+-0x1.8680bep+1
+-0x1.5ba992p+3
+-0x1.8b8a34p+0
+-0x1.5ba9cap+3
+-0x1.c0825p+2
+-0x1.59e5fap-1
+-0x1.8680bep+1
+-0x1.bb29p+3
+-0x1.8b8a34p+0
+-0x1.5ba9b6p+3
+-0x1.c0825p+2
+-0x1.86c4b8p+2
+-0x1.e6818p+1
+-0x1.1ee568p+1
+-0x1.e6818p+1
+-0x1.eabb86p+1
+-0x1.8f2a78p+2
+-0x1.eabc0ep+1
+-0x1.18cd0ap+1
+-0x1.eabb9ep+1
+-0x1.18cd0ap+1
+-0x1.8f2a78p+2
+-0x1.c54d22p+3
+-0x1.a6c41p-1
+-0x1.7a3c3ap+2
+-0x1.a6c41p-1
+-0x1.a5125cp-1
+-0x1.c9c846p+3
+-0x1.a51276p-1
+-0x1.7a5838p+2
+-0x1.a5126ap-1
+-0x1.7a5838p+2
+-0x1.c9c846p+3
+-0x1.debab8p+2
+-0x1.be3fdcp-1
+-0x1.007aa6p+4
+-0x1.be3fdcp-1
+-0x1.c11526p-1
+-0x1.ded6b6p+2
+-0x1.c114ecp-1
+-0x1.0324eap+4
+-0x1.c115p-1
+-0x1.0324eap+4
+-0x1.ded6b6p+2
+-0x1.697e3cp+3
+-0x1.1b1a76p+3
+-0x1.fb3a3p+2
+-0x1.116f58p-1
+-0x1.697e3cp+3
+-0x1.116f58p-1
+-0x1.1b1a76p+3
+-0x1.553adep+2
+0x1.16c1eap+1
+-0x1.553adep+2
+-0x1.6c139cp+3
+-0x1.1aee0cp+3
+-0x1.d113ccp-2
+-0x1.047656p+3
+-0x1.d194fep-2
+-0x1.6c0316p+3
+-0x1.594fcp+2
+-0x1.1add4cp+3
+-0x1.596046p+2
+0x1.15e536p+1
+-0x1.6c0316p+3
+-0x1.1add4cp+3
+-0x1.cebfb2p-2
+-0x1.047656p+3
+-0x1.cfc57ep-2
+-0x1.6bf558p+3
+-0x1.5956a2p+2
+-0x1.1acf42p+3
+-0x1.59637p+2
+0x1.15e536p+1
+-0x1.6bf558p+3
+-0x1.1acf42p+3
+-0x1.cd74bp-2
+-0x1.047656p+3
+-0x1.ce49f2p-2
+-0x1.6bea3cp+3
+-0x1.595edcp+2
+-0x1.1ac3c6p+3
+-0x1.596828p+2
+0x1.15e536p+1
+-0x1.cc65dep-2
+-0x1.6bea3cp+3
+-0x1.1ac3c6p+3
+-0x1.5964d8p+2
+0x1.15e536p+1
+-0x1.047656p+3
+-0x1.fc91e4p-5
+-0x1.6f555cp-5
+-0x1.97a9d8p-6
+-0x1.2c532p-6
+0x1.558da8p-8
+0x1.6fd91p-6
+0x1.664a36p-6
+0x1.b9a412p-3
+0x1.30b83cp-1
+0x1.d1ce86p+1
+-0x1.8b411ep+1
+-0x1.b0f0eap+1
+0x1.b8d24p+3
+-0x1.c10e24p+2
+-0x1.33d6b8p-1
+-0x1.b26ba8p-1
+-0x1.11a36ap+3
+-0x1.c35a44p+3
+-0x1.46093p-1
+-0x1.b91126p+3
+-0x1.78c202p+1
+-0x1.e6818p+1
+-0x1.86c4b8p+2
+-0x1.1ee568p+1
+-0x1.a6c41p-1
+-0x1.c54d22p+3
+-0x1.7a3c3ap+2
+-0x1.be3fdcp-1
+-0x1.debab8p+2
+-0x1.007aa6p+4
+-0x1.abaec2p+1
+-0x1.f3e8eep+2
+-0x1.a39e64p+2
+-0x1.c72fe8p+1
+-0x1.76503ep+1
+0x1.9a0068p-3
+-0x1.116f58p-1
+-0x1.fb3a3p+2
+-0x1.697e3cp+3
+-0x1.59c5d4p+3
+-0x1.bdea1ep+2
+-0x1.7ebd3ap+0
+-0x1.553adep+2
+0x1.16c1eap+1
+-0x1.1b1a76p+3
+0x1.2f9c26p-3
+0x1.7cfd4ep-3
+0x1.c62b8p-3
+0x1.b1e772p-4
+-0x1.48e0fap-6
+-0x1.8ea728p-7
+-0x1.129b5cp-5
+0x1.a09c4ap-5
+-0x1.af8e5ap-3
+-0x1.dad33cp-2
+0x0p+0
+0x1.84a344p+2
+0x0p+0
+0x1.80f258p+2
+0x0p+0
+0x1.80a108p+2
+0x0p+0
+0x1.75c458p+2
+0x0p+0
+0x1.327068p+2
+0x0p+0
+0x1.2f3d28p+2
+0x0p+0
+0x1.ab7d6ap+1
+0x0p+0
+0x1.9dbeaep+1
+0x0p+0
+0x1.a49e0cp+1
+0x0p+0
+0x1.a5b448p+1
+0x0p+0
+0x1.5a57bap+2
+0x0p+0
+0x1.59fd16p+2
+0x0p+0
+0x1.adef2ep+1
+0x0p+0
+0x1.aa0ddcp+1
+0x0p+0
+0x1.695e9p+2
+0x0p+0
+0x1.66e2f6p+2
+0x0p+0
+0x1.450bdp+0
+0x0p+0
+0x1.31abdp+0
+0x0p+0
+0x1.4584b4p+2
+0x0p+0
+0x1.4568b6p+2
+0x0p+0
+0x1.443cd6p+2
+0x0p+0
+0x1.400d22p+2
+0x0p+0
+0x1.5d0f84p+1
+0x0p+0
+0x1.6dddecp+1
+0x0p+0
+0x1.6ba4ep+2
+0x0p+0
+0x1.6fd602p+2
+0x0p+0
+0x1.9a0068p-3
+0x0p+0
+0x1.07e3e2p-3
+0x0p+0
+0x1.a09c4ap-5
+0x0p+0
+0x1.a22fc6p-4
+0x0p+0
+0x1.6ff1ccp+2
+0x0p+0
+0x1.755958p+2
+0x0p+0
+0x1.29053cp+2
+0x0p+0
+0x1.1b52cp+2
+0x0p+0
+0x1.66554ep+2
+0x0p+0
+0x1.63bd1cp+2
+0x0p+0
+0x1.7e37cp-2
+0x0p+0
+0x1.7c77ep-2
+0x0p+0
+0x1.7890aap+1
+0x0p+0
+0x1.73241ap+1
+0x0p+0
+0x1.5d4734p+2
+0x0p+0
+0x1.5d7d68p+2
+0x0p+0
+0x1.30567ep+2
+0x0p+0
+0x1.1d87b4p+2
+0x0p+0
+0x1.2faa9ap+2
+0x0p+0
+0x1.25b1cep+2
+0x0p+0
+0x1.dc15p+1
+0x0p+0
+0x1.dd6fcp+1
+0x0p+0
+0x1.3dbdecp+1
+0x0p+0
+0x1.3983cep+1
+0x0p+0
+0x1.2bc4dep+2
+0x0p+0
+0x1.22ce96p+2
+0x0p+0
+0x1.633148p+2
+0x0p+0
+0x1.54758ap+2
+0x0p+0
+0x1.6b5fcp-3
+0x0p+0
+0x1.7a9fp-5
+0x0p+0
+0x1.02ad02p+2
+0x0p+0
+0x1.05b93p+2
+0x0p+0
+0x1.ab7d6ap+1
+0x0p+0
+0x1.9dbeaep+1
+0x0p+0
+0x1.a49e0cp+1
+0x0p+0
+0x1.9e5bbep+1
+0x0p+0
+0x1.9dbeaep+1
+0x0p+0
+0x1.5bd24p+2
+0x0p+0
+0x1.577c7p+2
+0x0p+0
+0x1.00f898p+2
+0x0p+0
+0x1.f3a5fp+1
+0x0p+0
+0x1.68e914p+1
+0x0p+0
+0x1.5396f4p+1
+0x0p+0
+0x1.695e9p+2
+0x0p+0
+0x1.66e2f6p+2
+0x0p+0
+0x1.450bdp+0
+0x0p+0
+0x1.31abdp+0
+0x0p+0
+0x1.5a57bap+2
+0x0p+0
+0x1.59fd16p+2
+0x0p+0
+0x1.7cfd4ep-3
+0x0p+0
+0x1.9522e4p-3
+0x0p+0
+0x1.84a344p+2
+0x0p+0
+0x1.80f258p+2
+0x0p+0
+-0x1.7e8b26p+1
+0x0p+0
+-0x1.7e8b26p+1
+0x0p+0
+-0x1.7e44dcp+1
+0x0p+0
+-0x1.7e32c2p+1
+0x0p+0
+-0x1.7e2e32p+1
+0x0p+0
+0x0p+0
+-0x1.8d970ap+1
+-0x1.7e2e32p+1
+0x0p+0
+0x1.a6113ap+1
+0x0p+0
+0x1.96a862p+1
+0x0p+0
+0x1.a6113ap+1
+0x0p+0
+0x1.96a862p+1
+-0x1.28386ap-4
+-0x1.b00264p-5
+-0x1.c2a3a2p-6
+-0x1.4d476p-6
+-0x1.ee409p-6
+-0x1.6d9a14p-6
+-0x1.edd78cp-6
+-0x1.6e01fcp-6
+0x1.cbb9p-9
+0x1.66734cp-6
+0x1.40db86p-6
+0x1.e4fa2ep-3
+0x1.50666p-1
+0x1.c26d2ep+1
+0x1.cc8e9p-3
+0x1.c26d2ep+1
+0x1.50a70cp-4
+-0x1.035bdcp+3
+-0x1.12d5eep-2
+-0x1.ae7b14p+2
+-0x1.12d5eep-2
+-0x1.ae7b14p+2
+0x1.07e3e2p-3
+-0x1.035bdcp+3
+-0x1.7a319p+1
+0x1.50a70cp-4
+0x1.cc8e9p-3
+-0x1.481f5p-9
+0x1.50a70cp-4
+-0x1.6a56c6p-6
+-0x1.481f5p-9
+-0x1.e5f966p-7
+-0x1.6a56c6p-6
+0x1.a22fc6p-4
+-0x1.e5f966p-7
+-0x1.12d5eep-2
+0x1.a22fc6p-4
+-0x1.c361bap-2
+-0x1.12d5eep-2
+0x0p+0
+-0x1.c361bap-2
+-0x1.ae7b14p+2
+-0x1.b11b52p+1
+-0x1.035bdcp+3
+-0x1.b11b52p+1
+0x1.07e3e2p-3
+-0x1.b6618p+1
+-0x1.7a319p+1
+-0x1.b6618p+1
+0x1.cc8e9p-3
+0x1.9522e4p-3
+0x1.9522e4p-3
+0x1.e43ccap-4
+0x1.e43ccap-4
+0x0p+0
+0x1.9e07cep+1
+0x1.a4faf8p-3
+0x1.9e07cep+1
+0x1.f8cf14p-5
+-0x1.04993ap+3
+-0x1.2ef408p-2
+-0x1.04a32cp+3
+-0x1.1cf076p-2
+-0x1.ba786cp+2
+-0x1.147aep-2
+-0x1.ba786cp+2
+-0x1.147aep-2
+-0x1.ba6852p+2
+0x1.964048p-4
+-0x1.048a8ap+3
+-0x1.8624e8p+1
+0x1.a4faf8p-3
+0x1.f8cf14p-5
+0x1.232c22p-4
+0x1.8e29c8p-6
+0x1.8bfd1cp-6
+-0x1.c7c2dap-6
+-0x1.8749dp-6
+0x1.a1734cp-8
+0x1.3a385ap-10
+0x1.844bdp-3
+0x1.759f7cp-3
+-0x1.2a6ff8p-2
+-0x1.0e6968p-2
+-0x1.cbf7a2p-2
+-0x1.d3b06ep-2
+0x0p+0
+-0x1.af4558p+1
+-0x1.ba594ap+2
+-0x1.afcff4p+1
+-0x1.048734p+3
+-0x1.ae764cp+1
+0x1.82f1eap-4
+-0x1.adde1p+1
+-0x1.863ab8p+1
+0x1.a29c34p-3
+0x1.996aacp-3
+0x1.9d5068p-4
+0x1.a75da6p-3
+0x0p+0
+0x1.b34fe2p-4
+0x1.9e07cep+1
+0x1.9f1b08p-3
+0x1.9e07cep+1
+0x1.0dca2ep-4
+-0x1.048734p+3
+-0x1.4a0db6p-2
+-0x1.04935ep+3
+-0x1.354ff4p-2
+-0x1.ba594ap+2
+-0x1.30d63cp-2
+-0x1.ba594ap+2
+-0x1.30d63cp-2
+-0x1.ba4d44p+2
+0x1.82f1eap-4
+-0x1.047ad6p+3
+-0x1.863ab8p+1
+0x1.9f1b08p-3
+0x1.0dca2ep-4
+0x1.2d4be6p-4
+0x1.713fb2p-6
+0x1.832ef8p-6
+-0x1.abe8a4p-6
+-0x1.7d688ap-6
+0x1.18b54ep-7
+0x1.24191ep-8
+0x1.6fce3cp-3
+0x1.65715ep-3
+-0x1.41a6c2p-2
+-0x1.054b36p-2
+-0x1.cf506p-2
+-0x1.db9e68p-2
+0x0p+0
+-0x1.afa654p+1
+-0x1.ba3edap+2
+-0x1.b000d2p+1
+-0x1.047832p+3
+-0x1.ae4398p+1
+0x1.72067ep-4
+-0x1.adc91ep+1
+-0x1.864bb4p+1
+0x1.9ce68ap-3
+0x1.91ba36p-3
+0x1.a7d522p-4
+0x1.a28fcp-3
+0x0p+0
+0x1.bc8b6ep-4
+0x1.9e07cep+1
+0x1.98857p-3
+0x1.9e07cep+1
+0x1.1bbf44p-4
+-0x1.047832p+3
+-0x1.3d5054p-2
+-0x1.04842cp+3
+-0x1.29b5c2p-2
+-0x1.ba3edap+2
+-0x1.2659dep-2
+-0x1.ba3edap+2
+-0x1.2659dep-2
+-0x1.ba31f8p+2
+0x1.72067ep-4
+-0x1.046b7ep+3
+-0x1.864bb4p+1
+0x1.98857p-3
+0x1.1bbf44p-4
+0x1.37f434p-4
+0x1.5f3e32p-6
+0x1.78c684p-6
+-0x1.924c58p-6
+-0x1.6dd47ap-6
+0x1.9c7564p-7
+0x1.12994ep-7
+0x1.3ded68p-3
+0x1.3a315cp-3
+-0x1.391f26p-2
+-0x1.f845bcp-3
+-0x1.d4d322p-2
+-0x1.e16b94p-2
+0x0p+0
+-0x1.b003fp+1
+-0x1.ba2474p+2
+-0x1.b040d8p+1
+-0x1.04693ep+3
+-0x1.adf9cp+1
+0x1.6350a4p-4
+-0x1.ad9e1ep+1
+-0x1.865ap+1
+0x1.984b9ap-3
+0x1.8b539cp-3
+0x1.b1bacap-4
+0x1.9dc49p-3
+0x0p+0
+0x1.c560b8p-4
+0x1.9e07cep+1
+0x1.278d56p-4
+0x1.530cb6p-6
+-0x1.8212ccp-6
+0x1.8bcdbep-6
+0x1.1dd0acp-3
+-0x1.3173f4p-2
+-0x1.da8e2ap-2
+0x0p+0
+-0x1.ba2474p+2
+-0x1.b04fdep+1
+0x1.6350a4p-4
+-0x1.adc30cp+1
+-0x1.865ap+1
+-0x1.04693ep+3
+0x1.921bcep-3
+0x1.93f0aap-3
+0x1.bb1e4ap-4
+-0x1.e799bap+1
+-0x1.e18aeap+1
+0x1.a1b6b4p+3
+-0x1.de85ap+2
+-0x1.e1891ep-2
+-0x1.c856aap+3
+-0x1.bb29p+3
+-0x1.bb29p+3
+-0x1.8b8a34p+0
+-0x1.bb29p+3
+0x0p+0
+-0x1.8d970ap+1
+0x0p+0
+-0x1.15363ap+3
+0x0p+0
+-0x1.15363ap+3
+-0x1.d51a34p-1
+-0x1.c856aap+3
+-0x1.d51a34p-1
+-0x1.bb29p+3
+-0x1.59e5fap-1
+-0x1.8d970ap+1
+-0x1.59e5fap-1
+-0x1.8b8a34p+0
+-0x1.5ba9b6p+3
+-0x1.c0825p+2
+-0x1.5ba9b6p+3
+-0x1.cd531p+3
+-0x1.c13e9cp+3
+-0x1.c13e9cp+3
+-0x1.6437c2p+0
+-0x1.c13e9cp+3
+0x0p+0
+-0x1.a83368p+1
+0x0p+0
+-0x1.188ecp+3
+0x0p+0
+-0x1.d9c8e6p-1
+-0x1.187e7ap+3
+-0x1.d836d8p-1
+-0x1.cd531p+3
+-0x1.4ef09ep-1
+-0x1.c13e9cp+3
+-0x1.4ed236p-1
+-0x1.a83368p+1
+-0x1.5cdffep+3
+-0x1.6437c2p+0
+-0x1.5cd6bap+3
+-0x1.c31a82p+2
+-0x1.cd531p+3
+-0x1.c13e9cp+3
+-0x1.c13e9cp+3
+-0x1.6437c2p+0
+-0x1.c13e9cp+3
+0x0p+0
+-0x1.a83368p+1
+0x0p+0
+-0x1.187e7ap+3
+0x0p+0
+-0x1.d8c36ep-1
+-0x1.186f5ap+3
+-0x1.d83b92p-1
+-0x1.cd531p+3
+-0x1.655b66p-1
+-0x1.c13e9cp+3
+-0x1.5d27fep-1
+-0x1.a83368p+1
+-0x1.5cd9f4p+3
+-0x1.6437c2p+0
+-0x1.5cd8cep+3
+-0x1.c31a82p+2
+-0x1.cd531p+3
+-0x1.c13e9cp+3
+-0x1.c13e9cp+3
+-0x1.6437c2p+0
+-0x1.c13e9cp+3
+0x0p+0
+-0x1.a83368p+1
+0x0p+0
+-0x1.186f5ap+3
+0x0p+0
+-0x1.d86b86p-1
+-0x1.186238p+3
+-0x1.d80fc4p-1
+-0x1.cd531p+3
+-0x1.601f64p-1
+-0x1.c13e9cp+3
+-0x1.5f0cep-1
+-0x1.a83368p+1
+-0x1.5cd938p+3
+-0x1.6437c2p+0
+-0x1.5cd914p+3
+-0x1.c31a82p+2
+-0x1.d8305p-1
+-0x1.cd531p+3
+-0x1.c13e9cp+3
+-0x1.5f6fcp-1
+-0x1.a83368p+1
+0x0p+0
+-0x1.6437c2p+0
+-0x1.5cd91ep+3
+-0x1.c31a82p+2
+-0x1.186238p+3
+-0x1.8f2a78p+2
+-0x1.eabb9ep+1
+-0x1.18cd0ap+1
+-0x1.eabb9ep+1
+-0x1.eef51ep+1
+-0x1.979038p+2
+-0x1.eef39cp+1
+-0x1.12b4acp+1
+-0x1.eef3d6p+1
+-0x1.12b4acp+1
+-0x1.979038p+2
+-0x1.c9c846p+3
+-0x1.a5126ap-1
+-0x1.7a5838p+2
+-0x1.a5126ap-1
+-0x1.a360b6p-1
+-0x1.ce436ap+3
+-0x1.a36112p-1
+-0x1.7a7436p+2
+-0x1.a360dcp-1
+-0x1.7a7436p+2
+-0x1.ce436ap+3
+-0x1.ded6b6p+2
+-0x1.c115p-1
+-0x1.0324eap+4
+-0x1.c115p-1
+-0x1.c3ea48p-1
+-0x1.def2b4p+2
+-0x1.c3ea48p-1
+-0x1.05cf2ep+4
+-0x1.c3ea54p-1
+-0x1.05cf2ep+4
+-0x1.def2b4p+2
+-0x1.6bea3cp+3
+-0x1.1ac3c6p+3
+-0x1.047656p+3
+-0x1.cc65dep-2
+-0x1.6bea3cp+3
+-0x1.cc65dep-2
+-0x1.1ac3c6p+3
+-0x1.5964d8p+2
+0x1.15e536p+1
+-0x1.5964d8p+2
+-0x1.6e7f9cp+3
+-0x1.1a975cp+3
+-0x1.7ab5a4p-2
+-0x1.0b4f94p+3
+-0x1.7b9376p-2
+-0x1.6e7984p+3
+-0x1.5d7c5p+2
+-0x1.1a8e74p+3
+-0x1.5d8074p+2
+0x1.150882p+1
+-0x1.6e7984p+3
+-0x1.1a8e74p+3
+-0x1.7a8882p-2
+-0x1.0b4f94p+3
+-0x1.7ae8bep-2
+-0x1.6e749ep+3
+-0x1.5d7e14p+2
+-0x1.1a8748p+3
+-0x1.5d820ap+2
+0x1.150882p+1
+-0x1.7a197cp-2
+-0x1.6e749ep+3
+-0x1.1a8748p+3
+-0x1.5d809cp+2
+0x1.150882p+1
+-0x1.0b4f94p+3
+-0x1.1340aep-4
+-0x1.8fabep-5
+-0x1.c2a3a2p-6
+-0x1.4d476p-6
+0x1.1db514p-8
+0x1.6b262ep-6
+0x1.5392dep-6
+0x1.cf4f2p-3
+0x1.408f4ep-1
+0x1.c26d2ep+1
+-0x1.b96d6cp+1
+-0x1.c93deap+1
+0x1.ad447ap+3
+-0x1.cfc9e2p+2
+-0x1.124da4p-1
+-0x1.d51a34p-1
+-0x1.15363ap+3
+-0x1.c856aap+3
+-0x1.59e5fap-1
+-0x1.bb29p+3
+-0x1.8d970ap+1
+-0x1.eabb9ep+1
+-0x1.8f2a78p+2
+-0x1.18cd0ap+1
+-0x1.a5126ap-1
+-0x1.c9c846p+3
+-0x1.7a5838p+2
+-0x1.c115p-1
+-0x1.ded6b6p+2
+-0x1.0324eap+4
+-0x1.b11b52p+1
+-0x1.035bdcp+3
+-0x1.ae7b14p+2
+-0x1.b6618p+1
+-0x1.7a319p+1
+0x1.07e3e2p-3
+-0x1.cc65dep-2
+-0x1.047656p+3
+-0x1.6bea3cp+3
+-0x1.5ba9b6p+3
+-0x1.c0825p+2
+-0x1.8b8a34p+0
+-0x1.5964d8p+2
+0x1.15e536p+1
+-0x1.1ac3c6p+3
+0x1.e43ccap-4
+0x1.9522e4p-3
+0x1.cc8e9p-3
+0x1.50a70cp-4
+-0x1.481f5p-9
+-0x1.6a56c6p-6
+-0x1.e5f966p-7
+0x1.a22fc6p-4
+-0x1.12d5eep-2
+-0x1.c361bap-2
+0x0p+0
+0x1.dd6fcp+1
+0x0p+0
+0x1.de61b8p+1
+0x0p+0
+0x1.80f258p+2
+0x0p+0
+0x1.7f0876p+2
+0x0p+0
+0x1.75c458p+2
+0x0p+0
+0x1.6a1af8p+2
+0x0p+0
+0x1.2f3d28p+2
+0x0p+0
+0x1.3911c6p+2
+0x0p+0
+0x1.96a862p+1
+0x0p+0
+0x1.7c0c04p+1
+0x0p+0
+0x1.59fd16p+2
+0x0p+0
+0x1.59a26cp+2
+0x0p+0
+0x1.aa0ddcp+1
+0x0p+0
+0x1.9de56cp+1
+0x0p+0
+0x1.66e2f6p+2
+0x0p+0
+0x1.6631bep+2
+0x0p+0
+0x1.31abdp+0
+0x0p+0
+0x1.1d58cp+0
+0x0p+0
+0x1.4568b6p+2
+0x0p+0
+0x1.454cb8p+2
+0x0p+0
+0x1.400d22p+2
+0x0p+0
+0x1.33e1eap+2
+0x0p+0
+0x1.6dddecp+1
+0x0p+0
+0x1.767c6p+1
+0x0p+0
+0x1.6fd602p+2
+0x0p+0
+0x1.740724p+2
+0x0p+0
+0x1.07e3e2p-3
+0x0p+0
+0x1.6350a4p-4
+0x0p+0
+0x1.a22fc6p-4
+0x0p+0
+0x1.1dd0acp-3
+0x0p+0
+0x1.755958p+2
+0x0p+0
+0x1.7a7e1ep+2
+0x0p+0
+0x1.1b52cp+2
+0x0p+0
+0x1.0da044p+2
+0x0p+0
+0x1.63bd1cp+2
+0x0p+0
+0x1.6124eap+2
+0x0p+0
+0x1.7c77ep-2
+0x0p+0
+0x1.7ab8p-2
+0x0p+0
+0x1.73241ap+1
+0x0p+0
+0x1.73ef8ep+1
+0x0p+0
+0x1.5d7d68p+2
+0x0p+0
+0x1.5db39ap+2
+0x0p+0
+0x1.1d87b4p+2
+0x0p+0
+0x1.1b6cfp+2
+0x0p+0
+0x1.25b1cep+2
+0x0p+0
+0x1.1bb902p+2
+0x0p+0
+0x1.dd6fcp+1
+0x0p+0
+0x1.de61b8p+1
+0x0p+0
+0x1.3983cep+1
+0x0p+0
+0x1.354b96p+1
+0x0p+0
+0x1.22ce96p+2
+0x0p+0
+0x1.19d84ep+2
+0x0p+0
+0x1.54758ap+2
+0x0p+0
+0x1.45b9ccp+2
+0x0p+0
+0x1.7a9fp-5
+0x0p+0
+-0x1.5c208p-4
+0x0p+0
+0x1.05b93p+2
+0x0p+0
+0x1.08c56p+2
+0x0p+0
+0x1.96a862p+1
+0x0p+0
+0x1.7c0c04p+1
+0x0p+0
+0x1.577c7p+2
+0x0p+0
+0x1.5719acp+2
+0x0p+0
+0x1.f3a5fp+1
+0x0p+0
+0x1.5396f4p+1
+0x0p+0
+0x1.3e44d4p+1
+0x0p+0
+0x1.59fd16p+2
+0x0p+0
+0x1.59a26cp+2
+0x0p+0
+0x1.9522e4p-3
+0x0p+0
+0x1.93f0aap-3
+0x0p+0
+0x1.80f258p+2
+0x0p+0
+0x1.7f0876p+2
+0x0p+0
+-0x1.15363ap+3
+-0x1.15363ap+3
+0x0p+0
+-0x1.14e20ep+3
+0x0p+0
+-0x1.14cd4p+3
+0x0p+0
+-0x1.14c81p+3
+0x0p+0
+0x0p+0
+-0x1.183c36p+3
+-0x1.14c81p+3
+0x0p+0
+0x1.f55e98p+1
+0x0p+0
+0x1.e78ep+1
+-0x1.3d3026p-4
+-0x1.d058e8p-5
+-0x1.edd78cp-6
+-0x1.6e01fcp-6
+-0x1.0cba3ep-5
+-0x1.8e54bp-6
+-0x1.0c9d4ap-5
+-0x1.8e8df2p-6
+0x1.5c07d8p-9
+0x1.61c06ap-6
+0x1.2e242ep-6
+0x1.faa53cp-3
+0x1.603d72p-1
+0x1.9e07cep+1
+0x1.921bcep-3
+-0x1.04693ep+3
+-0x1.3173f4p-2
+-0x1.ba2474p+2
+-0x1.3173f4p-2
+-0x1.ba2474p+2
+0x1.6350a4p-4
+-0x1.04693ep+3
+-0x1.865ap+1
+0x1.921bcep-3
+0x1.93f0aap-3
+0x1.278d56p-4
+0x1.921bcep-3
+0x1.530cb6p-6
+0x1.278d56p-4
+-0x1.8212ccp-6
+0x1.530cb6p-6
+0x1.8bcdbep-6
+-0x1.8212ccp-6
+0x1.1dd0acp-3
+0x1.8bcdbep-6
+-0x1.3173f4p-2
+0x1.1dd0acp-3
+-0x1.da8e2ap-2
+-0x1.3173f4p-2
+0x0p+0
+-0x1.da8e2ap-2
+-0x1.ba2474p+2
+-0x1.b04fdep+1
+-0x1.04693ep+3
+-0x1.b04fdep+1
+0x1.6350a4p-4
+-0x1.adc30cp+1
+-0x1.865ap+1
+-0x1.adc30cp+1
+0x1.93f0aap-3
+0x1.bb1e4ap-4
+0x1.bb1e4ap-4
+0x0p+0
+0x1.909b2ep+1
+0x1.4096ccp-3
+0x1.909b2ep+1
+0x1.4096ccp-3
+-0x1.0626e2p+3
+-0x1.5f0f8ap-2
+-0x1.0632d2p+3
+-0x1.4d817cp-2
+-0x1.c6223p+2
+-0x1.4d6ee6p-2
+-0x1.c61b2cp+2
+0x1.d3925p-5
+-0x1.0619f4p+3
+-0x1.93681ep+1
+0x1.8ec774p-3
+0x1.438108p-3
+0x1.4817c6p-3
+0x1.c7d706p-5
+0x1.f52ec8p-5
+0x1.70bdfcp-5
+0x1.6f09d6p-5
+-0x1.adb408p-7
+-0x1.4c9cbp-7
+0x1.27cd7ap-4
+0x1.00a81p-4
+0x1.510a2ep-3
+0x1.4eb0acp-3
+-0x1.5c6908p-2
+-0x1.10caap-2
+-0x1.edb1cep-2
+-0x1.f493e6p-2
+0x0p+0
+-0x1.af3b2ep+1
+-0x1.c61b2cp+2
+-0x1.af2c18p+1
+-0x1.0619f4p+3
+-0x1.a6ba44p+1
+0x1.d3925p-5
+-0x1.a6adf6p+1
+-0x1.93681ep+1
+0x1.c7a304p-4
+0x1.903c16p-3
+0x0p+0
+0x1.d38d02p-4
+0x1.92bad8p+1
+0x1.399f6p-3
+0x1.92bad8p+1
+0x1.399f6p-3
+-0x1.0619f4p+3
+-0x1.4b564ep-2
+-0x1.0625f6p+3
+-0x1.3abf5ap-2
+-0x1.c61b2cp+2
+-0x1.3c642p-2
+-0x1.c6135ap+2
+0x1.d3925p-5
+-0x1.060bc6p+3
+-0x1.93681ep+1
+0x1.8ad064p-3
+0x1.3bb74p-3
+0x1.44fd6cp-3
+0x1.e545fp-5
+0x1.febbdcp-5
+0x1.5a678ap-5
+0x1.612d32p-5
+-0x1.687bc2p-7
+-0x1.0f59d6p-7
+0x1.33cc4cp-4
+0x1.1003c8p-4
+0x1.43fee6p-3
+0x1.3f1088p-3
+-0x1.4e95d2p-2
+-0x1.078558p-2
+-0x1.f0be6ep-2
+-0x1.f9a16ep-2
+0x0p+0
+-0x1.af733ap+1
+-0x1.c6135ap+2
+-0x1.af4e58p+1
+-0x1.060bc6p+3
+-0x1.a6b3ep+1
+0x1.d3925p-5
+-0x1.a6b1c2p+1
+-0x1.93681ep+1
+0x1.cd6e5p-4
+0x1.8cb866p-3
+0x0p+0
+0x1.dbba7ep-4
+0x1.94962cp+1
+0x1.3704cap-3
+0x1.94962cp+1
+0x1.3704cap-3
+-0x1.060bc6p+3
+-0x1.3ff3b2p-2
+-0x1.0617aep+3
+-0x1.2ff6ep-2
+-0x1.c6135ap+2
+-0x1.326476p-2
+-0x1.c60b18p+2
+0x1.d3925p-5
+-0x1.05fcf4p+3
+-0x1.93681ep+1
+0x1.86b81ep-3
+0x1.38be98p-3
+0x1.41ed8cp-3
+0x1.f585cp-5
+0x1.0573fp-4
+0x1.4a884p-5
+0x1.5421a2p-5
+-0x1.db36cp-8
+-0x1.5a192ap-8
+0x1.3a5a86p-4
+0x1.1917b6p-4
+0x1.1edaccp-3
+0x1.218866p-3
+-0x1.46799ep-2
+-0x1.014f1ep-2
+-0x1.f4c06ep-2
+-0x1.fd3d56p-2
+0x0p+0
+-0x1.af8736p+1
+-0x1.c60b18p+2
+-0x1.af6696p+1
+-0x1.05fcd2p+3
+-0x1.a6b282p+1
+0x1.d3925p-5
+0x1.20ec56p-5
+0x0p+0
+0x1.abce8ap-9
+0x1.274f7cp-5
+0x1.abce8ap-9
+0x1.20ec56p-5
+-0x1.1016ap-2
+-0x1.5dbafap-2
+-0x1.1016ap-2
+0x1.903c7p-5
+0x1.89d94cp-5
+0x1.903c7p-5
+0x1.89d94cp-5
+0x1.25fd94p-8
+0x0p+0
+0x1.25e676p-8
+0x1.903c7p-5
+-0x1.40f45ap-2
+0x1.89d94cp-5
+-0x1.40e7d2p-2
+-0x1.92720cp-2
+0x1.25ff3ep-8
+0x1.903c7p-5
+0x1.89d94cp-5
+-0x1.40e68ap-2
+-0x1.92720cp-2
+0x0p+0
+0x1.1cdabep-1
+-0x1.59b51cp+1
+0x1.18ad8cp+2
+-0x1.59b51cp+1
+-0x1.628592p+1
+0x1.44ecbep-1
+-0x1.627e9cp+1
+0x1.2124a4p+2
+-0x1.627edp+1
+0x1.2124a4p+2
+0x1.44ecbep-1
+0x1.0d78c2p+0
+-0x1.f03baap-2
+-0x1.df5cfcp+1
+-0x1.f03baap-2
+-0x1.0eccacp-1
+0x1.1916a6p+0
+-0x1.0ebf6p-1
+-0x1.e7183ep+1
+-0x1.0ec1dp-1
+-0x1.e7183ep+1
+0x1.1916a6p+0
+0x1.e5ea78p-4
+0x0p+0
+0x1.067104p-4
+0x1.e5ea78p-4
+0x1.99f9c6p-7
+0x1.067104p-4
+-0x1.75697cp-6
+0x1.99f9c6p-7
+-0x1.25e4c6p-7
+-0x1.75697cp-6
+0x1.b87eap-7
+-0x1.25e4c6p-7
+0x1.772dfp-6
+0x1.b87eap-7
+-0x1.fdccd6p-7
+0x1.772dfp-6
+-0x1.13746p-4
+-0x1.fdccd6p-7
+-0x1.e11fap-4
+-0x1.13746p-4
+0x0p+0
+-0x1.e11fap-4
+0x0p+0
+0x1.f0b23ep-4
+0x1.f1375ep-4
+0x1.109c64p-4
+0x1.1216a8p-4
+0x1.fb2288p-7
+0x1.020d08p-6
+-0x1.290812p-6
+-0x1.271418p-6
+-0x1.b9131cp-8
+-0x1.c1e4fcp-8
+0x1.675572p-7
+0x1.64049cp-7
+0x1.3003fap-6
+0x1.3070ep-6
+-0x1.2c7384p-6
+-0x1.27a0c2p-6
+-0x1.1e2aeep-4
+-0x1.1cd006p-4
+-0x1.ec88cp-4
+-0x1.eb799p-4
+0x0p+0
+0x0p+0
+0x1.f01ac8p-4
+0x1.f0a912p-4
+0x1.10c3c4p-4
+0x1.123f82p-4
+0x1.fb00a2p-7
+0x1.020bd4p-6
+-0x1.271908p-6
+-0x1.24ff22p-6
+-0x1.ba9bf8p-8
+-0x1.c2d5cap-8
+0x1.67e36ep-7
+0x1.647934p-7
+0x1.2dfddp-6
+0x1.2e4b28p-6
+-0x1.2c6ceap-6
+-0x1.27b19ap-6
+-0x1.1e40eep-4
+-0x1.1cea98p-4
+-0x1.ec0148p-4
+-0x1.eaf6ep-4
+0x0p+0
+0x0p+0
+0x1.ef8f2cp-4
+0x1.f01bfap-4
+0x1.10ef64p-4
+0x1.126a22p-4
+0x1.fb567p-7
+0x1.022ebap-6
+-0x1.24e652p-6
+-0x1.22d5d6p-6
+-0x1.bbbdeep-8
+-0x1.c3cfbp-8
+0x1.68098cp-7
+0x1.64af6ep-7
+0x1.2bcd2ap-6
+0x1.2c1eb6p-6
+-0x1.2c884ap-6
+-0x1.27d0dep-6
+-0x1.1e5c9p-4
+-0x1.1d068ap-4
+-0x1.eb7c2ep-4
+-0x1.ea743ap-4
+0x0p+0
+0x1.ef0268p-4
+0x1.111754p-4
+0x1.fb9762p-7
+-0x1.22bae6p-6
+-0x1.bc98f8p-8
+0x1.68387p-7
+0x1.29a83ap-6
+-0x1.2ca286p-6
+-0x1.1e76fap-4
+-0x1.eaf7fap-4
+0x0p+0
+-0x1.61d84ep-10
+-0x1.9b131cp-10
+-0x1.0d66acp-9
+-0x1.7a913ep-9
+-0x1.03ac96p-8
+-0x1.40067p-8
+-0x1.6df1c8p-8
+-0x1.8b4aa6p-8
+-0x1.9900bcp-8
+-0x1.9d09cap-8
+0x0p+0
+0x0p+0
+0x1.12f21ep+0
+0x1.89cc08p-2
+-0x1.109facp+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.f46d46p-7
+0x0p+0
+-0x1.42bd3p-4
+-0x1.6e49bcp+0
+-0x1.39c29ap-3
+-0x1.5052cp+1
+-0x1.bb2892p-1
+-0x1.02724ap+2
+-0x1.48cbe2p+1
+-0x1.ee3962p-1
+-0x1.b457dep+1
+-0x1.58638p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.abce8ap-9
+0x0p+0
+0x1.274f7cp-5
+-0x1.1016ap-2
+0x1.20ec56p-5
+-0x1.5dbafap-2
+-0x1.59b51cp+1
+0x1.1cdabep-1
+0x1.18ad8cp+2
+-0x1.f03baap-2
+0x1.0d78c2p+0
+-0x1.df5cfcp+1
+0x1.e5ea78p-4
+0x1.067104p-4
+0x1.99f9c6p-7
+-0x1.75697cp-6
+-0x1.25e4c6p-7
+0x1.b87eap-7
+0x1.772dfp-6
+-0x1.fdccd6p-7
+-0x1.13746p-4
+-0x1.e11fap-4
+0x0p+0
+0x1.811e4cp+2
+0x0p+0
+0x1.7e114ep+2
+0x0p+0
+0x1.89cc08p-2
+0x0p+0
+0x1.5249c8p-3
+0x0p+0
+0x1.274f7cp-5
+0x0p+0
+0x1.903c7p-5
+0x0p+0
+0x1.20ec56p-5
+0x0p+0
+0x1.89d94cp-5
+0x0p+0
+0x1.7c4406p+2
+0x0p+0
+0x1.78f896p+2
+0x0p+0
+0x1.db738ap+1
+0x0p+0
+0x1.d93a52p+1
+0x0p+0
+0x1.12f21ep+0
+0x0p+0
+0x1.317eccp+0
+0x0p+0
+0x1.5abaa4p+2
+0x0p+0
+0x1.5901aap+2
+0x0p+0
+0x1.8d14c2p+2
+0x0p+0
+0x1.82650ap+2
+0x0p+0
+0x1.368d48p+2
+0x0p+0
+0x1.34d214p+2
+0x0p+0
+0x1.8851a2p+2
+0x0p+0
+0x1.7cfc96p+2
+0x0p+0
+0x1.d3ecacp+1
+0x0p+0
+0x1.bf915cp+1
+0x0p+0
+0x1.1f5ad8p+1
+0x0p+0
+0x1.024c54p+1
+0x0p+0
+0x1.731bfcp+2
+0x0p+0
+0x1.70477cp+2
+0x0p+0
+0x1.44e27p+1
+0x0p+0
+0x1.3d272ep+1
+0x0p+0
+0x1.0d78c2p+0
+0x0p+0
+0x1.1916a6p+0
+0x0p+0
+0x1.030014p+1
+0x0p+0
+0x1.ed6p+0
+0x0p+0
+0x1.cde1bp-1
+0x0p+0
+0x1.aa333p-1
+0x0p+0
+0x1.54588ap+2
+0x0p+0
+0x1.55f7e4p+2
+0x0p+0
+0x1.db738ap+1
+0x0p+0
+0x1.d93a52p+1
+0x0p+0
+0x1.6fe78ep+1
+0x0p+0
+0x1.64c8fcp+1
+0x0p+0
+0x1.067104p-4
+0x0p+0
+0x1.111754p-4
+0x0p+0
+0x1.8dd1e4p+2
+0x0p+0
+0x1.8da5dap+2
+-0x1.bba1e4p-10
+-0x1.f16e6p-10
+-0x1.f16e6p-10
+-0x1.35a5f4p-9
+-0x1.35a5f4p-9
+-0x1.9f30a6p-9
+-0x1.9f30a6p-9
+-0x1.13fff4p-8
+-0x1.13fff4p-8
+-0x1.4e69cep-8
+-0x1.4e69cep-8
+-0x1.7ae462p-8
+-0x1.7ae462p-8
+-0x1.97a1c6p-8
+-0x1.97a1c6p-8
+-0x1.a56682p-8
+-0x1.a56682p-8
+-0x1.a99988p-8
+-0x1.0980c6p-9
+-0x1.208e86p-9
+-0x1.49f656p-9
+-0x1.c00f16p-10
+-0x1.2058fcp-9
+-0x1.56842cp-9
+-0x1.9eee7p-9
+-0x1.af1ebp-10
+-0x1.54e58p-9
+-0x1.b6af08p-9
+-0x1.061a7ep-8
+-0x1.fd5b92p-10
+-0x1.b1fa4ep-9
+-0x1.29b8d6p-8
+-0x1.4c4bcep-8
+-0x1.6cd4ccp-9
+-0x1.24cceap-8
+-0x1.5d8c0ap-8
+-0x1.a8d242p-8
+-0x1.b4149ap-9
+-0x1.5cac3p-8
+-0x1.85764p-8
+-0x1.e52af4p-8
+-0x1.fb9cp-9
+-0x1.86fc38p-8
+-0x1.a031bcp-8
+-0x1.0206f4p-7
+-0x1.24198p-8
+-0x1.a3363p-8
+-0x1.ac7106p-8
+-0x1.01abp-7
+-0x1.4d0608p-8
+-0x1.afe7dep-8
+-0x1.ae2b3ep-8
+-0x1.e45334p-8
+-0x1.7a192p-8
+-0x1.09a3ecp-9
+-0x1.217874p-9
+-0x1.49ea08p-9
+-0x1.c2417cp-10
+-0x1.212b7p-9
+-0x1.58bc1p-9
+-0x1.9f50d8p-9
+-0x1.b46cf6p-10
+-0x1.56ec66p-9
+-0x1.bc9a0cp-9
+-0x1.06c08ap-8
+-0x1.054ffcp-9
+-0x1.b761b2p-9
+-0x1.273772p-8
+-0x1.4e557p-8
+-0x1.692aa4p-9
+-0x1.22eab8p-8
+-0x1.5d6314p-8
+-0x1.a5fb2ep-8
+-0x1.b5aadcp-9
+-0x1.5c435cp-8
+-0x1.8666ecp-8
+-0x1.e37532p-8
+-0x1.000892p-8
+-0x1.87b1ccp-8
+-0x1.a17634p-8
+-0x1.01a216p-7
+-0x1.26d914p-8
+-0x1.a4543cp-8
+-0x1.ae0ef6p-8
+-0x1.01907p-7
+-0x1.4ff376p-8
+-0x1.b165bap-8
+-0x1.b0d032p-8
+-0x1.e4ffc4p-8
+-0x1.7d8cecp-8
+-0x1.09de14p-9
+-0x1.2279ecp-9
+-0x1.49f9fcp-9
+-0x1.c49868p-10
+-0x1.2212e6p-9
+-0x1.5b3e8cp-9
+-0x1.9fc502p-9
+-0x1.ba56acp-10
+-0x1.593c52p-9
+-0x1.c0ca9cp-9
+-0x1.0783d6p-8
+-0x1.0a4798p-9
+-0x1.bb4fa6p-9
+-0x1.25911ap-8
+-0x1.4fad3ep-8
+-0x1.671f32p-9
+-0x1.21ac38p-8
+-0x1.5d2c08p-8
+-0x1.a3c31ep-8
+-0x1.b72e5ep-9
+-0x1.5be33p-8
+-0x1.873748p-8
+-0x1.e1c826p-8
+-0x1.0222eap-8
+-0x1.884934p-8
+-0x1.a2aab8p-8
+-0x1.013206p-7
+-0x1.298114p-8
+-0x1.a562fp-8
+-0x1.afb64cp-8
+-0x1.0171dcp-7
+-0x1.52e306p-8
+-0x1.b2e788p-8
+-0x1.b345b2p-8
+-0x1.e5b90ap-8
+-0x1.80c8aap-8
+-0x1.0a31bep-9
+-0x1.2391b8p-9
+-0x1.5dcb8cp-9
+-0x1.c3ed2p-9
+-0x1.2477f2p-8
+-0x1.5cfbd4p-8
+-0x1.87e946p-8
+-0x1.a3d576p-8
+-0x1.b15aa4p-8
+-0x1.b5932p-8
+0x0p+0
+0x0p+0
+0x1.500b7ap+0
+0x1.5249c8p-3
+-0x1.4b051ap+1
+-0x1.4b051ap+1
+0x0p+0
+-0x1.10f98cp+2
+-0x1.92720cp-2
+-0x1.4b051ap+1
+-0x1.c8f064p-1
+-0x1.10f98cp+2
+-0x1.c8f064p-1
+-0x1.92720cp-2
+-0x1.40e68ap-2
+0x1.89d94cp-5
+-0x1.40e68ap-2
+-0x1.bc12p-5
+-0x1.4d5404p+1
+-0x1.4d5404p+1
+0x0p+0
+-0x1.1bc0f2p+2
+-0x1.126622p-1
+-0x1.e650cap-1
+-0x1.4d5404p+1
+-0x1.e62e62p-1
+-0x1.1ad1fap+2
+-0x1.8eeb38p-2
+-0x1.12c2ecp-1
+-0x1.91ef4p-2
+0x1.f2c642p-5
+-0x1.bc12p-5
+-0x1.4d5404p+1
+-0x1.4d5404p+1
+0x0p+0
+-0x1.1ad1fap+2
+-0x1.12c2ecp-1
+-0x1.e88b5ap-1
+-0x1.4d5404p+1
+-0x1.e7b2fp-1
+-0x1.1a106ep+2
+-0x1.909ea8p-2
+-0x1.1336ecp-1
+-0x1.93a61p-2
+0x1.f2c642p-5
+-0x1.bc12p-5
+-0x1.4d5404p+1
+-0x1.4d5404p+1
+0x0p+0
+-0x1.1a106ep+2
+-0x1.1336ecp-1
+-0x1.e9eabep-1
+-0x1.4d5404p+1
+-0x1.e9201ap-1
+-0x1.19731cp+2
+-0x1.92918ap-2
+-0x1.13b158p-1
+-0x1.951646p-2
+0x1.f2c642p-5
+-0x1.bc12p-5
+-0x1.4d5404p+1
+-0x1.eafd06p-1
+-0x1.19731cp+2
+-0x1.13b158p-1
+-0x1.94311ep-2
+0x1.f2c642p-5
+0x0p+0
+-0x1.1cefcp+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.f75594p-3
+-0x1.523206p-2
+-0x1.523206p-2
+0x0p+0
+0x0p+0
+-0x1.2bdb26p-6
+-0x1.f75594p-3
+-0x1.2bdb26p-6
+-0x1.523206p-2
+-0x1.753684p+0
+-0x1.64ae1p+1
+-0x1.753684p+0
+-0x1.a5560cp-2
+-0x1.03d96p-1
+-0x1.03d96p-1
+0x0p+0
+-0x1.611ae4p-6
+0x0p+0
+-0x1.5f6a98p-6
+-0x1.a5560cp-2
+-0x1.8690ap+0
+-0x1.03d96p-1
+-0x1.86a184p+0
+-0x1.79096p+1
+-0x1.a5560cp-2
+-0x1.03d96p-1
+-0x1.03d96p-1
+0x0p+0
+-0x1.60072cp-6
+0x0p+0
+-0x1.5fcd22p-6
+-0x1.a5560cp-2
+-0x1.869732p+0
+-0x1.03d96p-1
+-0x1.869ae6p+0
+-0x1.79096p+1
+-0x1.5fdf5ep-6
+-0x1.a5560cp-2
+-0x1.03d96p-1
+-0x1.8699ap+0
+-0x1.79096p+1
+0x0p+0
+0x0p+0
+-0x1.bf767p+1
+-0x1.e13e88p-1
+-0x1.5cd95p+2
+-0x1.e13e88p-1
+-0x1.d4422ap-1
+-0x1.ca9502p+1
+-0x1.d444a2p-1
+-0x1.614f2p+2
+-0x1.d443dep-1
+-0x1.614f2p+2
+-0x1.ca9502p+1
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.25ff3ep-8
+0x1.903c7p-5
+0x1.25ff3ep-8
+0x1.7615d2p-8
+0x0p+0
+0x1.76142cp-8
+0x1.f92964p-5
+0x1.761796p-8
+0x1.f92964p-5
+0x0p+0
+0x1.44ecbep-1
+-0x1.627edp+1
+0x1.2124a4p+2
+-0x1.627edp+1
+-0x1.6b4a52p+1
+0x1.6cfebep-1
+-0x1.6b4112p+1
+0x1.299bbcp+2
+-0x1.6b4236p+1
+0x1.6cfebep-1
+-0x1.6b41c4p+1
+0x1.299bbcp+2
+-0x1.6b41e8p+1
+0x1.299bbcp+2
+0x1.6cfebep-1
+0x1.1916a6p+0
+-0x1.0ec1dp-1
+-0x1.e7183ep+1
+-0x1.0ec1dp-1
+-0x1.256b5ep-1
+0x1.24b48ap+0
+-0x1.255ddp-1
+-0x1.eed38p+1
+-0x1.25607cp-1
+-0x1.eed38p+1
+0x1.24b48ap+0
+0x1.ef0268p-4
+0x0p+0
+0x1.111754p-4
+0x1.ef0268p-4
+0x1.fb9762p-7
+0x1.111754p-4
+-0x1.22bae6p-6
+0x1.fb9762p-7
+-0x1.bc98f8p-8
+-0x1.22bae6p-6
+0x1.68387p-7
+-0x1.bc98f8p-8
+0x1.29a83ap-6
+0x1.68387p-7
+-0x1.2ca286p-6
+0x1.29a83ap-6
+-0x1.1e76fap-4
+-0x1.2ca286p-6
+-0x1.eaf7fap-4
+-0x1.1e76fap-4
+0x0p+0
+-0x1.eaf7fap-4
+0x0p+0
+0x1.f7c776p-4
+0x1.f852cp-4
+0x1.1c0954p-4
+0x1.1d8ce6p-4
+0x1.31efcep-6
+0x1.368684p-6
+-0x1.7710eep-7
+-0x1.73ac76p-7
+-0x1.3491b8p-8
+-0x1.3b0758p-8
+0x1.186fdap-7
+0x1.15c16ep-7
+0x1.90946p-7
+0x1.9211bp-7
+-0x1.5cfaa6p-6
+-0x1.586afep-6
+-0x1.291e48p-4
+-0x1.27b3e4p-4
+-0x1.f50dep-4
+-0x1.f3fc02p-4
+0x0p+0
+0x0p+0
+0x1.f73074p-4
+0x1.f7c182p-4
+0x1.1c2bc4p-4
+0x1.1db1b8p-4
+0x1.32259ep-6
+0x1.36c4d2p-6
+-0x1.743b06p-7
+-0x1.705bf8p-7
+-0x1.35939cp-8
+-0x1.3b7c66p-8
+0x1.18c4d4p-7
+0x1.160c3ap-7
+0x1.8d831p-7
+0x1.8e989cp-7
+-0x1.5d3da8p-6
+-0x1.58c4b6p-6
+-0x1.292e84p-4
+-0x1.27c90ep-4
+-0x1.f4852ap-4
+-0x1.f377b8p-4
+0x0p+0
+0x0p+0
+0x1.f6a31cp-4
+0x1.f73254p-4
+0x1.1c51bep-4
+0x1.1dd72ap-4
+0x1.32a5d4p-6
+0x1.373668p-6
+-0x1.70b1a2p-7
+-0x1.6cdf86p-7
+-0x1.361be6p-8
+-0x1.3beb28p-8
+0x1.189c92p-7
+0x1.15ff42p-7
+0x1.89f128p-7
+0x1.8b0b3ep-7
+-0x1.5da316p-6
+-0x1.592d36p-6
+-0x1.2944cp-4
+-0x1.27df7ep-4
+-0x1.f3fe7p-4
+-0x1.f2f36ep-4
+0x0p+0
+0x1.f614e6p-4
+0x1.1c7358p-4
+0x1.331688p-6
+-0x1.6d34dp-7
+-0x1.36575p-8
+0x1.188824p-7
+0x1.866f4ep-7
+-0x1.5e0606p-6
+-0x1.2959f8p-4
+-0x1.f3791ap-4
+0x0p+0
+-0x1.bba1e4p-10
+-0x1.f16e6p-10
+-0x1.35a5f4p-9
+-0x1.9f30a6p-9
+-0x1.13fff4p-8
+-0x1.4e69cep-8
+-0x1.7ae462p-8
+-0x1.97a1c6p-8
+-0x1.a56682p-8
+-0x1.a99988p-8
+0x0p+0
+0x0p+0
+0x1.317eccp+0
+0x1.5249c8p-3
+-0x1.16c7b6p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.2bdb26p-6
+0x0p+0
+-0x1.f75594p-3
+-0x1.753684p+0
+-0x1.523206p-2
+-0x1.64ae1p+1
+-0x1.c8f064p-1
+-0x1.10f98cp+2
+-0x1.4b051ap+1
+-0x1.e13e88p-1
+-0x1.bf767p+1
+-0x1.5cd95p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.25ff3ep-8
+0x0p+0
+0x1.903c7p-5
+-0x1.40e68ap-2
+0x1.89d94cp-5
+-0x1.92720cp-2
+-0x1.627edp+1
+0x1.44ecbep-1
+0x1.2124a4p+2
+-0x1.0ec1dp-1
+0x1.1916a6p+0
+-0x1.e7183ep+1
+0x1.ef0268p-4
+0x1.111754p-4
+0x1.fb9762p-7
+-0x1.22bae6p-6
+-0x1.bc98f8p-8
+0x1.68387p-7
+0x1.29a83ap-6
+-0x1.2ca286p-6
+-0x1.1e76fap-4
+-0x1.eaf7fap-4
+0x0p+0
+0x1.82650ap+2
+0x0p+0
+0x1.77ca56p+2
+0x0p+0
+0x1.44ecbep-1
+0x0p+0
+0x1.6cfebep-1
+0x0p+0
+0x1.7e114ep+2
+0x0p+0
+0x1.78dca4p+2
+0x0p+0
+0x1.5249c8p-3
+0x0p+0
+-0x1.bc12p-5
+0x0p+0
+0x1.903c7p-5
+0x0p+0
+0x1.f92964p-5
+0x0p+0
+0x1.89d94cp-5
+0x0p+0
+0x1.f2c642p-5
+0x0p+0
+0x1.78f896p+2
+0x0p+0
+0x1.6fa98cp+2
+0x0p+0
+0x1.d93a52p+1
+0x0p+0
+0x1.d6eb68p+1
+0x0p+0
+0x1.317eccp+0
+0x0p+0
+0x1.500b7ap+0
+0x0p+0
+0x1.5901aap+2
+0x0p+0
+0x1.54c016p+2
+0x0p+0
+0x1.82650ap+2
+0x0p+0
+0x1.77ca56p+2
+0x0p+0
+0x1.34d214p+2
+0x0p+0
+0x1.30794ep+2
+0x0p+0
+0x1.7cfc96p+2
+0x0p+0
+0x1.71a48ap+2
+0x0p+0
+0x1.bf915cp+1
+0x0p+0
+0x1.ab360cp+1
+0x0p+0
+0x1.024c54p+1
+0x0p+0
+0x1.e2b268p+0
+0x0p+0
+0x1.f3a588p+0
+0x0p+0
+0x1.ef7d9ep+0
+0x0p+0
+0x1.70477cp+2
+0x0p+0
+0x1.6d73a6p+2
+0x0p+0
+0x1.3d272ep+1
+0x0p+0
+0x1.356becp+1
+0x0p+0
+0x1.1916a6p+0
+0x0p+0
+0x1.24b48ap+0
+0x0p+0
+0x1.ed6p+0
+0x0p+0
+0x1.d4bfd8p+0
+0x0p+0
+0x1.aa333p-1
+0x0p+0
+0x1.8684bp-1
+0x0p+0
+0x1.55f7e4p+2
+0x0p+0
+0x1.57973ap+2
+0x0p+0
+0x1.d93a52p+1
+0x0p+0
+0x1.d6eb68p+1
+0x0p+0
+0x1.64c8fcp+1
+0x0p+0
+0x1.59aa6ap+1
+0x0p+0
+0x1.111754p-4
+0x0p+0
+0x1.1c7358p-4
+0x0p+0
+0x1.8da5dap+2
+0x0p+0
+0x1.8d7a4ep+2
+0x0p+0
+-0x1.16404ep+2
+-0x1.16404ep+2
+0x0p+0
+-0x1.15a6c6p+2
+0x0p+0
+-0x1.1580cp+2
+0x0p+0
+-0x1.157744p+2
+0x0p+0
+0x0p+0
+-0x1.15e9a2p+2
+-0x1.157744p+2
+0x0p+0
+0x1.f2a1c8p+0
+0x0p+0
+0x1.f0d85p+0
+-0x1.0a31bep-9
+-0x1.2391b8p-9
+-0x1.2391b8p-9
+-0x1.5dcb8cp-9
+-0x1.5dcb8cp-9
+-0x1.c3ed2p-9
+-0x1.c3ed2p-9
+-0x1.2477f2p-8
+-0x1.2477f2p-8
+-0x1.5cfbd4p-8
+-0x1.5cfbd4p-8
+-0x1.87e946p-8
+-0x1.87e946p-8
+-0x1.a3d576p-8
+-0x1.a3d576p-8
+-0x1.b15aa4p-8
+-0x1.b15aa4p-8
+-0x1.b5932p-8
+-0x1.35e192p-9
+-0x1.4b690ep-9
+-0x1.75508cp-9
+-0x1.0be926p-9
+-0x1.4b5a56p-9
+-0x1.7ea9c4p-9
+-0x1.c7b85p-9
+-0x1.01edf6p-9
+-0x1.7d5048p-9
+-0x1.db6b82p-9
+-0x1.187ca4p-8
+-0x1.27122ep-9
+-0x1.d70072p-9
+-0x1.3a30d4p-8
+-0x1.5c0e96p-8
+-0x1.934ba4p-9
+-0x1.357058p-8
+-0x1.6c1e1p-8
+-0x1.b5bc16p-8
+-0x1.d8b2b8p-9
+-0x1.6b5a1ap-8
+-0x1.927b24p-8
+-0x1.ef2864p-8
+-0x1.0f7f34p-8
+-0x1.93fea4p-8
+-0x1.ac656cp-8
+-0x1.05fa4ep-7
+-0x1.355dc6p-8
+-0x1.af3f56p-8
+-0x1.b86528p-8
+-0x1.056454p-7
+-0x1.5d857ap-8
+-0x1.bba2d4p-8
+-0x1.ba24d6p-8
+-0x1.ed537cp-8
+-0x1.88c5f6p-8
+-0x1.35de5ap-9
+-0x1.4c3574p-9
+-0x1.7523cap-9
+-0x1.0cdeeep-9
+-0x1.4c0b84p-9
+-0x1.80dadep-9
+-0x1.c7f912p-9
+-0x1.048ebap-9
+-0x1.7f498cp-9
+-0x1.e14c4ep-9
+-0x1.1915dep-8
+-0x1.2db654p-9
+-0x1.dc6216p-9
+-0x1.37be78p-8
+-0x1.5e181ep-8
+-0x1.8fb9cp-9
+-0x1.339798p-8
+-0x1.6c0184p-8
+-0x1.b2eb46p-8
+-0x1.da67e8p-9
+-0x1.6afbecp-8
+-0x1.9373b4p-8
+-0x1.ed894ap-8
+-0x1.11b5b2p-8
+-0x1.94b832p-8
+-0x1.ad9b0cp-8
+-0x1.05a124p-7
+-0x1.37fb58p-8
+-0x1.b053dp-8
+-0x1.b9e354p-8
+-0x1.05528ap-7
+-0x1.603866p-8
+-0x1.bd03f2p-8
+-0x1.bc9ef6p-8
+-0x1.edf7f2p-8
+-0x1.8bfa94p-8
+-0x1.35f5f4p-9
+-0x1.4d1c96p-9
+-0x1.7507f2p-9
+-0x1.0df956p-9
+-0x1.4cd77p-9
+-0x1.834b88p-9
+-0x1.c84cd4p-9
+-0x1.0776b2p-9
+-0x1.8185b4p-9
+-0x1.e581ep-9
+-0x1.19cba4p-8
+-0x1.32ba56p-9
+-0x1.e04c64p-9
+-0x1.362318p-8
+-0x1.5f6ccap-8
+-0x1.8dc6aep-9
+-0x1.326298p-8
+-0x1.6bd94p-8
+-0x1.b0bd88p-8
+-0x1.dc072p-9
+-0x1.6aaaaep-8
+-0x1.94439ep-8
+-0x1.ebf4cap-8
+-0x1.13c60ap-8
+-0x1.9553c8p-8
+-0x1.aec3fcp-8
+-0x1.053cf8p-7
+-0x1.3a8468p-8
+-0x1.b157f8p-8
+-0x1.bb6ad4p-8
+-0x1.053b48p-7
+-0x1.62ef4ep-8
+-0x1.be6cbp-8
+-0x1.beed76p-8
+-0x1.eea92cp-8
+-0x1.8efe9p-8
+-0x1.362854p-9
+-0x1.4e1aeap-9
+-0x1.85cdap-9
+-0x1.e8a358p-9
+-0x1.35132p-8
+-0x1.6bb3b2p-8
+-0x1.94f984p-8
+-0x1.afde6ep-8
+-0x1.bcf498p-8
+-0x1.c11606p-8
+0x0p+0
+0x0p+0
+0x1.6e9828p+0
+-0x1.bc12p-5
+0x1.6cfebep-1
+0x1.6cfebep-1
+-0x1.6b41e8p+1
+0x1.299bbcp+2
+-0x1.6b41e8p+1
+-0x1.15b4ccp-3
+0x1.931e9ep-1
+-0x1.748134p+1
+0x1.931e9ep-1
+-0x1.7479d4p+1
+0x1.3212d4p+2
+-0x1.15b4ccp-3
+0x1.931e9ep-1
+-0x1.7479eep+1
+0x1.931e9ep-1
+-0x1.7479e6p+1
+0x1.3212d4p+2
+-0x1.15b4ccp-3
+0x1.931e9ep-1
+-0x1.7479eep+1
+0x1.3212d4p+2
+-0x1.2317cap+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.5fdf5ep-6
+-0x1.a5560cp-2
+-0x1.5fdf5ep-6
+-0x1.936312p-6
+0x0p+0
+-0x1.9360e4p-6
+-0x1.2780a8p-1
+-0x1.936192p-6
+-0x1.2780a8p-1
+0x0p+0
+-0x1.03d96p-1
+-0x1.8699ap+0
+-0x1.79096p+1
+-0x1.8699ap+0
+-0x1.97df1cp+0
+-0x1.5e99bcp-1
+-0x1.97ded8p+0
+-0x1.8d64bp+1
+-0x1.97daa8p+0
+-0x1.8d64bp+1
+-0x1.5e99bcp-1
+-0x1.4d5404p+1
+0x0p+0
+-0x1.15e9a2p+2
+-0x1.13b158p-1
+-0x1.15e9a2p+2
+0x0p+0
+-0x1.15e9a2p+2
+-0x1.eafd06p-1
+-0x1.4d5404p+1
+-0x1.eafd06p-1
+-0x1.13b158p-1
+-0x1.94311ep-2
+0x1.f2c642p-5
+-0x1.94311ep-2
+-0x1.500cdap+1
+0x0p+0
+-0x1.16f5dap+2
+-0x1.5cde74p-1
+-0x1.169234p+2
+0x0p+0
+-0x1.ec6048p-1
+-0x1.168cc6p+2
+-0x1.dbd27p-1
+-0x1.500cdap+1
+-0x1.e20484p-2
+-0x1.5ed1cep-1
+-0x1.e4b652p-2
+0x1.2dd99cp-4
+-0x1.500cdap+1
+0x0p+0
+-0x1.168cc6p+2
+-0x1.5ed1cep-1
+-0x1.164238p+2
+0x0p+0
+-0x1.e0f92ap-1
+-0x1.162bep+2
+-0x1.e00218p-1
+-0x1.500cdap+1
+-0x1.e3a78ep-2
+-0x1.6053d6p-1
+-0x1.e5c25cp-2
+0x1.2dd99cp-4
+-0x1.500cdap+1
+0x0p+0
+-0x1.162bep+2
+-0x1.6053d6p-1
+-0x1.15eef6p+2
+0x0p+0
+-0x1.e059f8p-1
+-0x1.15d95ap+2
+-0x1.e0e50ap-1
+-0x1.500cdap+1
+-0x1.e501d8p-2
+-0x1.61997ap-1
+-0x1.e6b1dp-2
+0x1.2dd99cp-4
+-0x1.e0b342p-1
+-0x1.500cdap+1
+0x0p+0
+-0x1.15d95ap+2
+-0x1.61997ap-1
+-0x1.e617c8p-2
+0x1.2dd99cp-4
+-0x1.ca9502p+1
+-0x1.d443dep-1
+-0x1.614f2p+2
+-0x1.d443dep-1
+-0x1.c74882p-1
+-0x1.d5b394p+1
+-0x1.c74afep-1
+-0x1.65c4fp+2
+-0x1.c74acp-1
+-0x1.65c4fp+2
+-0x1.d5b394p+1
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.761796p-8
+0x1.f92964p-5
+0x1.761796p-8
+0x1.c62e06p-8
+0x0p+0
+0x1.c63d48p-8
+0x1.310b2cp-4
+0x1.c62a2cp-8
+0x1.310b2cp-4
+0x0p+0
+0x1.24b48ap+0
+-0x1.25607cp-1
+-0x1.eed38p+1
+-0x1.25607cp-1
+-0x1.3c04c4p-1
+0x1.30526ep+0
+-0x1.3bf708p-1
+-0x1.f68ec2p+1
+-0x1.3bf95ep-1
+-0x1.f68ec2p+1
+0x1.30526ep+0
+0x1.f614e6p-4
+0x0p+0
+0x1.1c7358p-4
+0x1.f614e6p-4
+0x1.331688p-6
+0x1.1c7358p-4
+-0x1.6d34dp-7
+0x1.331688p-6
+-0x1.36575p-8
+-0x1.6d34dp-7
+0x1.188824p-7
+-0x1.36575p-8
+0x1.866f4ep-7
+0x1.188824p-7
+-0x1.5e0606p-6
+0x1.866f4ep-7
+-0x1.2959f8p-4
+-0x1.5e0606p-6
+-0x1.f3791ap-4
+-0x1.2959f8p-4
+0x0p+0
+-0x1.f3791ap-4
+0x0p+0
+0x1.fce046p-4
+0x1.fd6eecp-4
+0x1.27d74ap-4
+0x1.296152p-4
+0x1.6e91a4p-6
+0x1.732c7ap-6
+-0x1.d259f8p-9
+-0x1.c710ccp-9
+-0x1.62843ap-9
+-0x1.694e46p-9
+0x1.8e5e44p-8
+0x1.8a73bcp-8
+0x1.328b5p-8
+0x1.373ddp-8
+-0x1.94adeep-6
+-0x1.9083eap-6
+-0x1.33b08cp-4
+-0x1.323732p-4
+-0x1.fc33fap-4
+-0x1.fb2092p-4
+0x0p+0
+0x0p+0
+0x1.fc4c7ep-4
+0x1.fcddb2p-4
+0x1.27f18ep-4
+0x1.297e6p-4
+0x1.6f21c2p-6
+0x1.73c47p-6
+-0x1.cc91b4p-9
+-0x1.beba0cp-9
+-0x1.624ce2p-9
+-0x1.681a86p-9
+0x1.8e04bep-8
+0x1.8a281ap-8
+0x1.2f07bap-8
+0x1.32a45p-8
+-0x1.95490ep-6
+-0x1.913948p-6
+-0x1.33bad2p-4
+-0x1.32467ap-4
+-0x1.fbaa1ep-4
+-0x1.fa9ae4p-4
+0x0p+0
+0x0p+0
+0x1.fbbfbap-4
+0x1.fc4ef2p-4
+0x1.280fc2p-4
+0x1.299c04p-4
+0x1.700cf4p-6
+0x1.749aep-6
+-0x1.c35a02p-9
+-0x1.b598a4p-9
+-0x1.61057cp-9
+-0x1.66c8ccp-9
+0x1.8c9906p-8
+0x1.89060ap-8
+0x1.2a225ep-8
+0x1.2dc578p-8
+-0x1.960998p-6
+-0x1.91fab8p-6
+-0x1.33cb4ep-4
+-0x1.3257c4p-4
+-0x1.fb228p-4
+-0x1.fa150ep-4
+0x0p+0
+0x1.fb31cep-4
+0x1.28288p-4
+0x1.70e3b6p-6
+-0x1.ba482ep-9
+-0x1.5f32a2p-9
+0x1.8b71d2p-8
+0x1.255592p-8
+-0x1.96c746p-6
+-0x1.33db24p-4
+-0x1.fa9c0ap-4
+0x0p+0
+-0x1.0a31bep-9
+-0x1.2391b8p-9
+-0x1.5dcb8cp-9
+-0x1.c3ed2p-9
+-0x1.2477f2p-8
+-0x1.5cfbd4p-8
+-0x1.87e946p-8
+-0x1.a3d576p-8
+-0x1.b15aa4p-8
+-0x1.b5932p-8
+0x0p+0
+0x0p+0
+0x1.500b7ap+0
+-0x1.bc12p-5
+-0x1.1cefcp+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.5fdf5ep-6
+0x0p+0
+-0x1.a5560cp-2
+-0x1.8699ap+0
+-0x1.03d96p-1
+-0x1.79096p+1
+-0x1.eafd06p-1
+-0x1.15e9a2p+2
+-0x1.4d5404p+1
+-0x1.d443dep-1
+-0x1.ca9502p+1
+-0x1.614f2p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.761796p-8
+0x0p+0
+0x1.f92964p-5
+-0x1.94311ep-2
+0x1.f2c642p-5
+-0x1.13b158p-1
+-0x1.6b41e8p+1
+0x1.6cfebep-1
+0x1.299bbcp+2
+-0x1.25607cp-1
+0x1.24b48ap+0
+-0x1.eed38p+1
+0x1.f614e6p-4
+0x1.1c7358p-4
+0x1.331688p-6
+-0x1.6d34dp-7
+-0x1.36575p-8
+0x1.188824p-7
+0x1.866f4ep-7
+-0x1.5e0606p-6
+-0x1.2959f8p-4
+-0x1.f3791ap-4
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.90bfd6p+2
+0x0p+0
+0x1.908c54p+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.77ca56p+2
+0x0p+0
+0x1.6d2fap+2
+0x0p+0
+0x1.6cfebep-1
+0x0p+0
+0x1.931e9ep-1
+0x0p+0
+0x1.78dca4p+2
+0x0p+0
+0x1.73be3ap+2
+0x0p+0
+0x1.8ea792p+2
+0x0p+0
+0x1.89721p+2
+0x0p+0
+0x1.f2c642p-5
+0x0p+0
+0x1.2dd99cp-4
+0x0p+0
+0x1.6fa98cp+2
+0x0p+0
+0x1.65ec86p+2
+0x0p+0
+0x1.d6eb68p+1
+0x0p+0
+0x1.d43292p+1
+0x0p+0
+0x1.500b7ap+0
+0x0p+0
+0x1.6e9828p+0
+0x0p+0
+0x1.54c016p+2
+0x0p+0
+0x1.56094ep+2
+0x0p+0
+0x1.77ca56p+2
+0x0p+0
+0x1.6d2fap+2
+0x0p+0
+0x1.30794ep+2
+0x0p+0
+0x1.2c290cp+2
+0x0p+0
+0x1.71a48ap+2
+0x0p+0
+0x1.664c7ep+2
+0x0p+0
+0x1.ab360cp+1
+0x0p+0
+0x1.96dabcp+1
+0x0p+0
+0x1.f0d85p+0
+0x0p+0
+0x1.f1197p+0
+0x0p+0
+0x1.6d73a6p+2
+0x0p+0
+0x1.6aa08ap+2
+0x0p+0
+0x1.356becp+1
+0x0p+0
+0x1.2db0aap+1
+0x0p+0
+0x1.24b48ap+0
+0x0p+0
+0x1.30526ep+0
+0x0p+0
+0x1.d4bfd8p+0
+0x0p+0
+0x1.bc1fbp+0
+0x0p+0
+0x1.8684bp-1
+0x0p+0
+0x1.62d63p-1
+0x0p+0
+0x1.57973ap+2
+0x0p+0
+0x1.59365ep+2
+0x0p+0
+0x1.d6eb68p+1
+0x0p+0
+0x1.d43292p+1
+0x0p+0
+0x1.59aa6ap+1
+0x0p+0
+0x1.4e8bd8p+1
+0x0p+0
+0x1.1c7358p-4
+0x0p+0
+0x1.28288p-4
+0x0p+0
+0x1.8d7a4ep+2
+0x0p+0
+0x1.8d504ap+2
+-0x1.362854p-9
+-0x1.4e1aeap-9
+-0x1.4e1aeap-9
+-0x1.85cdap-9
+-0x1.85cdap-9
+-0x1.e8a358p-9
+-0x1.e8a358p-9
+-0x1.35132p-8
+-0x1.35132p-8
+-0x1.6bb3b2p-8
+-0x1.6bb3b2p-8
+-0x1.94f984p-8
+-0x1.94f984p-8
+-0x1.afde6ep-8
+-0x1.afde6ep-8
+-0x1.bcf498p-8
+-0x1.bcf498p-8
+-0x1.c11606p-8
+-0x1.61d828p-9
+-0x1.75f24p-9
+-0x1.a037d4p-9
+-0x1.378238p-9
+-0x1.76044ep-9
+-0x1.a6abd8p-9
+-0x1.f01d3ap-9
+-0x1.2c36cp-9
+-0x1.a58bb8p-9
+-0x1.0010dcp-8
+-0x1.2ab99ap-8
+-0x1.4f8b8ep-9
+-0x1.fbff8ep-9
+-0x1.4acc02p-8
+-0x1.6bcfcap-8
+-0x1.ba0474p-9
+-0x1.462722p-8
+-0x1.7ad5eep-8
+-0x1.c2b56p-8
+-0x1.fda324p-9
+-0x1.7a24d2p-8
+-0x1.9f8b62p-8
+-0x1.f967bep-8
+-0x1.211698p-8
+-0x1.a10d9cp-8
+-0x1.b86e64p-8
+-0x1.0a109ep-7
+-0x1.463e9ep-8
+-0x1.bb2956p-8
+-0x1.c3ff1cp-8
+-0x1.09366cp-7
+-0x1.6d5b24p-8
+-0x1.c70fdep-8
+-0x1.c5a7bcp-8
+-0x1.f63da4p-8
+-0x1.96c52p-8
+-0x1.61b4c6p-9
+-0x1.76a72p-9
+-0x1.9fe1d8p-9
+-0x1.386994p-9
+-0x1.769c66p-9
+-0x1.a8cb76p-9
+-0x1.f03c36p-9
+-0x1.2ececap-9
+-0x1.a778f4p-9
+-0x1.030b22p-8
+-0x1.2b4d7p-8
+-0x1.56424p-9
+-0x1.00b582p-8
+-0x1.4860d4p-8
+-0x1.6ddcb2p-8
+-0x1.b683cap-9
+-0x1.44529ap-8
+-0x1.7abc14p-8
+-0x1.bff09cp-8
+-0x1.ff4e06p-9
+-0x1.79cd6p-8
+-0x1.a083b8p-8
+-0x1.f7d718p-8
+-0x1.234534p-8
+-0x1.a1cb68p-8
+-0x1.b9977cp-8
+-0x1.09c2dep-7
+-0x1.48bd4ep-8
+-0x1.bc3254p-8
+-0x1.c564d2p-8
+-0x1.092c2ep-7
+-0x1.6fdb5ap-8
+-0x1.c85c82p-8
+-0x1.c7fdfap-8
+-0x1.f6ded2p-8
+-0x1.99c4e8p-8
+-0x1.61add6p-9
+-0x1.776fd6p-9
+-0x1.9fa5a4p-9
+-0x1.39676ap-9
+-0x1.774d78p-9
+-0x1.ab3a26p-9
+-0x1.f07136p-9
+-0x1.31b8bcp-9
+-0x1.a9ab78p-9
+-0x1.052d9cp-8
+-0x1.2bfcf6p-8
+-0x1.5b5886p-9
+-0x1.02b348p-8
+-0x1.46c5bcp-8
+-0x1.6f325p-8
+-0x1.b4a088p-9
+-0x1.432316p-8
+-0x1.7a9664p-8
+-0x1.bdcc5p-8
+-0x1.00753p-8
+-0x1.7978e2p-8
+-0x1.a1578cp-8
+-0x1.f64932p-8
+-0x1.254fa8p-8
+-0x1.a26d1cp-8
+-0x1.bab1ep-8
+-0x1.096a84p-7
+-0x1.4b268ap-8
+-0x1.bd2cfep-8
+-0x1.c6d5b8p-8
+-0x1.091dfep-7
+-0x1.72605ap-8
+-0x1.c9af98p-8
+-0x1.ca2b5p-8
+-0x1.f78ac8p-8
+-0x1.9c979p-8
+-0x1.61be28p-9
+-0x1.785b1p-9
+-0x1.adb0d6p-9
+-0x1.06c1aap-8
+-0x1.45c104p-8
+-0x1.7a6ba8p-8
+-0x1.a20f4p-8
+-0x1.bbc2c6p-8
+-0x1.c8480ep-8
+-0x1.cc350ap-8
+0x0p+0
+0x0p+0
+0x1.6e9828p+0
+-0x1.8d64bp+1
+-0x1.8d64bp+1
+-0x1.97daa8p+0
+-0x1.5e99bcp-1
+-0x1.97daa8p+0
+0x1.755958p+0
+-0x1.a0b6d8p+1
+-0x1.a83216p+0
+-0x1.a0b6d8p+1
+-0x1.a82ee8p+0
+-0x1.b95a18p-1
+0x1.755958p+0
+-0x1.a0b6d8p+1
+-0x1.a8281ep+0
+-0x1.b95a18p-1
+-0x1.15b4ccp-3
+-0x1.500cdap+1
+-0x1.500cdap+1
+0x0p+0
+-0x1.15d95ap+2
+-0x1.61997ap-1
+-0x1.15d95ap+2
+0x0p+0
+-0x1.500cdap+1
+-0x1.e0b342p-1
+-0x1.15d95ap+2
+-0x1.e0b342p-1
+-0x1.61997ap-1
+-0x1.e617c8p-2
+0x1.2dd99cp-4
+-0x1.e617c8p-2
+-0x1.61897cp-2
+-0x1.530374p+1
+-0x1.530524p+1
+0x0p+0
+-0x1.17269cp+2
+-0x1.aac696p-1
+-0x1.17269cp+2
+0x0p+0
+-0x1.e1bf14p-1
+-0x1.530524p+1
+-0x1.e1b3cep-1
+-0x1.17167p+2
+-0x1.19da52p-1
+-0x1.aac696p-1
+-0x1.19f546p-1
+0x1.625018p-4
+-0x1.61897cp-2
+-0x1.530524p+1
+-0x1.e195f2p-1
+-0x1.17167p+2
+-0x1.aac696p-1
+-0x1.19df74p-1
+0x1.625018p-4
+0x0p+0
+-0x1.293fd4p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.936192p-6
+-0x1.2780a8p-1
+-0x1.936192p-6
+-0x1.c6e488p-6
+0x0p+0
+-0x1.c6e778p-6
+-0x1.7c5648p-1
+-0x1.c6e8eap-6
+-0x1.7c5648p-1
+0x0p+0
+-0x1.d5b394p+1
+-0x1.c74acp-1
+-0x1.65c4fp+2
+-0x1.c74acp-1
+-0x1.ba506p-1
+-0x1.e0d226p+1
+-0x1.ba52a8p-1
+-0x1.6a3acp+2
+-0x1.ba526ap-1
+-0x1.6a3acp+2
+-0x1.e0d226p+1
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.c62a2cp-8
+0x1.310b2cp-4
+0x1.c62a2cp-8
+0x1.0b2052p-7
+0x0p+0
+0x1.0b23dp-7
+0x1.6581a6p-4
+0x1.0b2618p-7
+0x1.6581a6p-4
+0x0p+0
+0x1.931e9ep-1
+-0x1.7479eep+1
+0x1.3212d4p+2
+-0x1.7479eep+1
+-0x1.7db392p+1
+0x1.b93e7ep-1
+-0x1.7dacaap+1
+0x1.3a89ecp+2
+-0x1.7dac84p+1
+0x1.b93e7ep-1
+-0x1.7dacap+1
+0x1.3a89ecp+2
+-0x1.7dac8ep+1
+0x1.3a89ecp+2
+0x1.b93e7ep-1
+0x1.30526ep+0
+-0x1.3bf95ep-1
+-0x1.f68ec2p+1
+-0x1.3bf95ep-1
+-0x1.529866p-1
+0x1.3bf052p+0
+-0x1.528b1ap-1
+-0x1.fe4a04p+1
+-0x1.528d46p-1
+-0x1.fe4a04p+1
+0x1.3bf052p+0
+0x1.fb31cep-4
+0x0p+0
+0x1.28288p-4
+0x1.fb31cep-4
+0x1.70e3b6p-6
+0x1.28288p-4
+-0x1.ba482ep-9
+0x1.70e3b6p-6
+-0x1.5f32a2p-9
+-0x1.ba482ep-9
+0x1.8b71d2p-8
+-0x1.5f32a2p-9
+0x1.255592p-8
+0x1.8b71d2p-8
+-0x1.96c746p-6
+0x1.255592p-8
+-0x1.33db24p-4
+-0x1.96c746p-6
+-0x1.fa9c0ap-4
+-0x1.33db24p-4
+0x0p+0
+-0x1.fa9c0ap-4
+0x0p+0
+0x1.00105p-3
+0x1.00586ep-3
+0x1.33912p-4
+0x1.351facp-4
+0x1.b85a0cp-6
+0x1.bcdbe8p-6
+0x1.49de14p-8
+0x1.4e9f9ep-8
+-0x1.f8032p-12
+-0x1.f79be2p-12
+0x1.b38402p-9
+0x1.af8338p-9
+-0x1.dc882cp-9
+-0x1.cf455ep-9
+-0x1.d7fe08p-6
+-0x1.d4447ep-6
+-0x1.3d9e46p-4
+-0x1.3c1a2p-4
+-0x1.00fca8p-3
+-0x1.007172p-3
+0x0p+0
+0x0p+0
+0x1.ff9142p-4
+0x1.00109cp-3
+0x1.33a32ep-4
+0x1.35345cp-4
+0x1.b93eaep-6
+0x1.bdce66p-6
+0x1.49c40ap-8
+0x1.500476p-8
+-0x1.e26beap-12
+-0x1.d9dfep-12
+0x1.b09e02p-9
+0x1.acc83p-9
+-0x1.dddd48p-9
+-0x1.d32dc8p-9
+-0x1.d8e88cp-6
+-0x1.d5501cp-6
+-0x1.3da5c6p-4
+-0x1.3c26d8p-4
+-0x1.00b732p-3
+-0x1.002dd4p-3
+0x0p+0
+0x0p+0
+0x1.ff05bcp-4
+0x1.ff93c8p-4
+0x1.33babep-4
+0x1.354af6p-4
+0x1.ba8edap-6
+0x1.bf05ccp-6
+0x1.4baf4p-8
+0x1.51eb04p-8
+-0x1.c4117cp-12
+-0x1.bba282p-12
+0x1.ab5884p-9
+0x1.a838p-9
+-0x1.e2b24ap-9
+-0x1.d7fb46p-9
+-0x1.d9ff46p-6
+-0x1.d66594p-6
+-0x1.3db372p-4
+-0x1.3c3546p-4
+-0x1.0072ap-3
+-0x1.ffd44cp-4
+0x0p+0
+0x1.fe78aep-4
+0x1.33cbf6p-4
+0x1.bbc4acp-6
+0x1.4d9538p-8
+-0x1.a13036p-12
+0x1.a6d642p-9
+-0x1.e767d8p-9
+-0x1.db1044p-6
+-0x1.3dc09ap-4
+-0x1.002e6cp-3
+0x0p+0
+-0x1.362854p-9
+-0x1.4e1aeap-9
+-0x1.85cdap-9
+-0x1.e8a358p-9
+-0x1.35132p-8
+-0x1.6bb3b2p-8
+-0x1.94f984p-8
+-0x1.afde6ep-8
+-0x1.bcf498p-8
+-0x1.c11606p-8
+0x0p+0
+0x0p+0
+0x1.6e9828p+0
+-0x1.15b4ccp-3
+-0x1.2317cap+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.936192p-6
+0x0p+0
+-0x1.2780a8p-1
+-0x1.97daa8p+0
+-0x1.5e99bcp-1
+-0x1.8d64bp+1
+-0x1.e0b342p-1
+-0x1.15d95ap+2
+-0x1.500cdap+1
+-0x1.c74acp-1
+-0x1.d5b394p+1
+-0x1.65c4fp+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.c62a2cp-8
+0x0p+0
+0x1.310b2cp-4
+-0x1.e617c8p-2
+0x1.2dd99cp-4
+-0x1.61997ap-1
+-0x1.7479eep+1
+0x1.931e9ep-1
+0x1.3212d4p+2
+-0x1.3bf95ep-1
+0x1.30526ep+0
+-0x1.f68ec2p+1
+0x1.fb31cep-4
+0x1.28288p-4
+0x1.70e3b6p-6
+-0x1.ba482ep-9
+-0x1.5f32a2p-9
+0x1.8b71d2p-8
+0x1.255592p-8
+-0x1.96c746p-6
+-0x1.33db24p-4
+-0x1.fa9c0ap-4
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.908c54p+2
+0x0p+0
+0x1.9058cep+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.6d2fap+2
+0x0p+0
+0x1.6294ecp+2
+0x0p+0
+0x1.931e9ep-1
+0x0p+0
+0x1.b93e7ep-1
+0x0p+0
+0x1.73be3ap+2
+0x0p+0
+0x1.6ee3c8p+2
+0x0p+0
+0x1.89721p+2
+0x0p+0
+0x1.7c071ep+2
+0x0p+0
+0x1.2dd99cp-4
+0x0p+0
+0x1.625018p-4
+0x0p+0
+0x1.65ec86p+2
+0x0p+0
+0x1.5cc6e4p+2
+0x0p+0
+0x1.d43292p+1
+0x0p+0
+0x1.d13a48p+1
+0x0p+0
+0x1.6e9828p+0
+0x0p+0
+0x1.755958p+0
+0x0p+0
+0x1.56094ep+2
+0x0p+0
+0x1.55ecf8p+2
+0x0p+0
+0x1.6d2fap+2
+0x0p+0
+0x1.6294ecp+2
+0x0p+0
+0x1.2c290cp+2
+0x0p+0
+0x1.2815aep+2
+0x0p+0
+0x1.664c7ep+2
+0x0p+0
+0x1.5af474p+2
+0x0p+0
+0x1.96dabcp+1
+0x0p+0
+0x1.838894p+1
+0x0p+0
+0x1.f1197p+0
+0x0p+0
+0x1.ec2518p+0
+0x0p+0
+0x1.6aa08ap+2
+0x0p+0
+0x1.67ce0ep+2
+0x0p+0
+0x1.2db0aap+1
+0x0p+0
+0x1.25f568p+1
+0x0p+0
+0x1.30526ep+0
+0x0p+0
+0x1.3bf052p+0
+0x0p+0
+0x1.62d63p-1
+0x0p+0
+0x1.3f27bp-1
+0x0p+0
+0x1.59365ep+2
+0x0p+0
+0x1.5ad568p+2
+0x0p+0
+0x1.d43292p+1
+0x0p+0
+0x1.d13a48p+1
+0x0p+0
+0x1.4e8bd8p+1
+0x0p+0
+0x1.436d46p+1
+0x0p+0
+0x1.28288p-4
+0x0p+0
+0x1.33cbf6p-4
+0x0p+0
+0x1.8d504ap+2
+0x0p+0
+0x1.8d28b4p+2
+-0x1.61be28p-9
+-0x1.785b1p-9
+-0x1.785b1p-9
+-0x1.adb0d6p-9
+-0x1.adb0d6p-9
+-0x1.06c1aap-8
+-0x1.06c1aap-8
+-0x1.45c104p-8
+-0x1.45c104p-8
+-0x1.7a6ba8p-8
+-0x1.7a6ba8p-8
+-0x1.a20f4p-8
+-0x1.a20f4p-8
+-0x1.bbc2c6p-8
+-0x1.bbc2c6p-8
+-0x1.c8480ep-8
+-0x1.c8480ep-8
+-0x1.cc350ap-8
+-0x1.8d6dfcp-9
+-0x1.a03266p-9
+-0x1.cab622p-9
+-0x1.62da88p-9
+-0x1.a065d8p-9
+-0x1.ce8f0ep-9
+-0x1.0c1074p-8
+-0x1.56799ap-9
+-0x1.cda6b2p-9
+-0x1.1280dap-8
+-0x1.3cde0cp-8
+-0x1.783f4ep-9
+-0x1.108d5ep-8
+-0x1.5b79e6p-8
+-0x1.7b9e12p-8
+-0x1.e0e426p-9
+-0x1.56ee36p-8
+-0x1.898de4p-8
+-0x1.cfce0cp-8
+-0x1.113a74p-8
+-0x1.88f63cp-8
+-0x1.aca11ep-8
+-0x1.01e668p-7
+-0x1.32946cp-8
+-0x1.ae238ep-8
+-0x1.c452bcp-8
+-0x1.0e44dap-7
+-0x1.56c68ap-8
+-0x1.c6f54cp-8
+-0x1.cf5292p-8
+-0x1.0d2078p-7
+-0x1.7c9d4ap-8
+-0x1.d23d0ep-8
+-0x1.d0c6cp-8
+-0x1.ff1b0ep-8
+-0x1.a42e02p-8
+-0x1.8d29f4p-9
+-0x1.a0d228p-9
+-0x1.ca4212p-9
+-0x1.63aa38p-9
+-0x1.a0e3dcp-9
+-0x1.d0a962p-9
+-0x1.0c10dap-8
+-0x1.591084p-9
+-0x1.cf8762p-9
+-0x1.15803ep-8
+-0x1.3d6822p-8
+-0x1.7f074cp-9
+-0x1.134772p-8
+-0x1.590c9cp-8
+-0x1.7da78p-8
+-0x1.dd6eccp-9
+-0x1.551d0ap-8
+-0x1.897c58p-8
+-0x1.cd0d16p-8
+-0x1.1217acp-8
+-0x1.88a42ap-8
+-0x1.ad961p-8
+-0x1.01276ap-7
+-0x1.34b272p-8
+-0x1.aedf5cp-8
+-0x1.c571d8p-8
+-0x1.0dfff8p-7
+-0x1.5927c6p-8
+-0x1.c7f7fcp-8
+-0x1.d0a1fap-8
+-0x1.0d1c9p-7
+-0x1.7ef47cp-8
+-0x1.d3778cp-8
+-0x1.d2ff4cp-8
+-0x1.ffb7c8p-8
+-0x1.a70298p-8
+-0x1.8d075ep-9
+-0x1.a18826p-9
+-0x1.c9e91cp-9
+-0x1.649678p-9
+-0x1.a1809p-9
+-0x1.d30d4cp-9
+-0x1.0c20dap-8
+-0x1.5bf05ap-9
+-0x1.d1a8bep-9
+-0x1.17a17ap-8
+-0x1.3e0d2p-8
+-0x1.841f16p-9
+-0x1.154034p-8
+-0x1.5777a8p-8
+-0x1.7efe34p-8
+-0x1.db8b7cp-9
+-0x1.53ed7cp-8
+-0x1.895b06p-8
+-0x1.caeebcp-8
+-0x1.12e42ep-8
+-0x1.8855dp-8
+-0x1.ae64f8p-8
+-0x1.006836p-7
+-0x1.36aeb4p-8
+-0x1.af7b8ap-8
+-0x1.c68282p-8
+-0x1.0dafacp-7
+-0x1.5b71ep-8
+-0x1.c8e8d8p-8
+-0x1.d1fd92p-8
+-0x1.0d137ap-7
+-0x1.81507p-8
+-0x1.d4b77ap-8
+-0x1.d51294p-8
+-0x1.003036p-7
+-0x1.a9ab8ep-8
+-0x1.8cfdbep-9
+-0x1.a2657ap-9
+-0x1.d57a92p-9
+-0x1.19369ap-8
+-0x1.567122p-8
+-0x1.893754p-8
+-0x1.af17eep-8
+-0x1.c78828p-8
+-0x1.d35adep-8
+-0x1.d7049ep-8
+0x0p+0
+0x0p+0
+0x1.755958p+0
+0x1.6581a6p-4
+0x1.6581a6p-4
+0x1.0b2618p-7
+0x0p+0
+0x1.0b2618p-7
+0x1.c30ab6p+0
+0x1.f059eep-4
+0x1.eaec68p-10
+0x1.f059eep-4
+0x1.ead2f2p-10
+0x0p+0
+0x1.c30ab6p+0
+0x1.f059eep-4
+0x1.eb2c54p-10
+0x0p+0
+-0x1.61897cp-2
+0x1.b93e7ep-1
+-0x1.61897cp-2
+-0x1.530524p+1
+-0x1.530524p+1
+0x0p+0
+-0x1.17167p+2
+0x0p+0
+-0x1.530524p+1
+-0x1.e195f2p-1
+-0x1.17167p+2
+-0x1.e195f2p-1
+0x1.b93e7ep-1
+-0x1.7dac8ep+1
+0x1.3a89ecp+2
+-0x1.7dac8ep+1
+-0x1.2e5d4ep-1
+0x1.e212p-1
+-0x1.2e5d4ep-1
+-0x1.56725ap+1
+-0x1.56725ap+1
+0x0p+0
+-0x1.189334p+2
+0x0p+0
+-0x1.e268f8p-1
+-0x1.56725ap+1
+-0x1.e2df7p-1
+-0x1.1886f2p+2
+-0x1.873aa4p+1
+0x1.e13b1cp-1
+-0x1.873024p+1
+0x1.430104p+2
+-0x1.2e5d4ep-1
+0x1.e13b1cp-1
+-0x1.2e5d4ep-1
+-0x1.56725ap+1
+-0x1.56725ap+1
+0x0p+0
+-0x1.1886f2p+2
+0x0p+0
+-0x1.e28d8cp-1
+-0x1.56725ap+1
+-0x1.e2aad2p-1
+-0x1.187cf6p+2
+-0x1.87310ap+1
+0x1.e08b86p-1
+-0x1.873886p+1
+0x1.430104p+2
+-0x1.2e5d4ep-1
+0x1.e08b86p-1
+-0x1.2e5d4ep-1
+-0x1.56725ap+1
+-0x1.56725ap+1
+0x0p+0
+-0x1.187cf6p+2
+0x0p+0
+-0x1.e2805ap-1
+-0x1.56725ap+1
+-0x1.e28f66p-1
+-0x1.1874e2p+2
+-0x1.8735dcp+1
+0x1.dffafcp-1
+-0x1.873d4p+1
+0x1.430104p+2
+-0x1.2e5d4ep-1
+-0x1.56725ap+1
+-0x1.e27038p-1
+-0x1.1874e2p+2
+0x0p+0
+0x1.dffafcp-1
+-0x1.873a8ep+1
+0x1.430104p+2
+-0x1.2f67dep+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.c6e8eap-6
+-0x1.7c5648p-1
+-0x1.c6e8eap-6
+-0x1.fa6bdep-6
+0x0p+0
+-0x1.fa67ccp-6
+-0x1.d12be8p-1
+-0x1.fa66b6p-6
+-0x1.d12be8p-1
+0x0p+0
+-0x1.b95a18p-1
+-0x1.a8281ep+0
+-0x1.a0b6d8p+1
+-0x1.a8281ep+0
+-0x1.b877f6p+0
+-0x1.0a0d3ap+0
+-0x1.b87422p+0
+-0x1.b409p+1
+-0x1.b86954p+0
+-0x1.0a0d3ap+0
+-0x1.b86d4cp+0
+-0x1.b409p+1
+-0x1.b86bd6p+0
+-0x1.b409p+1
+-0x1.0a0d3ap+0
+-0x1.e0d226p+1
+-0x1.ba526ap-1
+-0x1.6a3acp+2
+-0x1.ba526ap-1
+-0x1.ad5908p-1
+-0x1.ebf0b8p+1
+-0x1.ad5b56p-1
+-0x1.6eb09p+2
+-0x1.ad5b72p-1
+-0x1.6eb09p+2
+-0x1.ebf0b8p+1
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.625018p-4
+-0x1.19df74p-1
+-0x1.aac696p-1
+-0x1.19df74p-1
+-0x1.409354p-1
+0x1.96c694p-4
+-0x1.408776p-1
+-0x1.f3f3b2p-1
+-0x1.4076aap-1
+0x1.96c694p-4
+-0x1.407cbp-1
+-0x1.f3f3b2p-1
+-0x1.407a92p-1
+-0x1.f3f3b2p-1
+0x1.96c694p-4
+0x1.3bf052p+0
+-0x1.528d46p-1
+-0x1.fe4a04p+1
+-0x1.528d46p-1
+-0x1.69271p-1
+0x1.478e36p+0
+-0x1.69198p-1
+-0x1.0302a4p+2
+-0x1.691c04p-1
+-0x1.0302a4p+2
+0x1.478e36p+0
+0x1.fe78aep-4
+0x0p+0
+0x1.33cbf6p-4
+0x1.fe78aep-4
+0x1.bbc4acp-6
+0x1.33cbf6p-4
+0x1.4d9538p-8
+0x1.bbc4acp-6
+-0x1.a13036p-12
+0x1.4d9538p-8
+0x1.a6d642p-9
+-0x1.a13036p-12
+-0x1.e767d8p-9
+0x1.a6d642p-9
+-0x1.db1044p-6
+-0x1.e767d8p-9
+-0x1.3dc09ap-4
+-0x1.db1044p-6
+-0x1.002e6cp-3
+-0x1.3dc09ap-4
+0x0p+0
+-0x1.002e6cp-3
+0x0p+0
+0x1.00d6eap-3
+0x1.011f86p-3
+0x1.3ee006p-4
+0x1.407188p-4
+0x1.09bdd4p-5
+0x1.0be2bcp-5
+0x1.c4def4p-7
+0x1.c7151p-7
+0x1.1fb0acp-9
+0x1.26bffp-9
+0x1.81324p-14
+0x1.aa7da8p-14
+-0x1.915aeap-7
+-0x1.8d1bd4p-7
+-0x1.155e12p-5
+-0x1.13b422p-5
+-0x1.46d0aap-4
+-0x1.45487ep-4
+-0x1.0329fcp-3
+-0x1.029c1ep-3
+0x0p+0
+0x0p+0
+0x1.009178p-3
+0x1.00d886p-3
+0x1.3eee7ep-4
+0x1.4081bep-4
+0x1.0a49bcp-5
+0x1.0c7ae4p-5
+0x1.c37e14p-7
+0x1.c681a8p-7
+0x1.241736p-9
+0x1.2c5bcp-9
+0x1.e9146p-15
+0x1.2156d2p-14
+-0x1.90700ep-7
+-0x1.8cdffcp-7
+-0x1.15e95p-5
+-0x1.14559ep-5
+-0x1.46db7ap-4
+-0x1.4558dep-4
+-0x1.02e336p-3
+-0x1.0256b6p-3
+0x0p+0
+0x0p+0
+0x1.004c0cp-3
+0x1.009264p-3
+0x1.3f047ap-4
+0x1.4095fp-4
+0x1.0b12aap-5
+0x1.0d37bp-5
+0x1.c342b2p-7
+0x1.c642acp-7
+0x1.29ab92p-9
+0x1.31e07ep-9
+0x1.845c04p-18
+0x1.76022ep-16
+-0x1.908cbap-7
+-0x1.8cf65cp-7
+-0x1.1690a2p-5
+-0x1.14fb7cp-5
+-0x1.46ec1p-4
+-0x1.456a94p-4
+-0x1.029d08p-3
+-0x1.02113ep-3
+0x0p+0
+0x1.0005aep-3
+0x1.3f13cp-4
+0x1.0bccbap-5
+0x1.c30722p-7
+0x1.2fc8a2p-9
+-0x1.486d6p-15
+-0x1.90a052p-7
+-0x1.173518p-5
+-0x1.46fc4p-4
+-0x1.025738p-3
+0x0p+0
+-0x1.61be28p-9
+-0x1.785b1p-9
+-0x1.adb0d6p-9
+-0x1.06c1aap-8
+-0x1.45c104p-8
+-0x1.7a6ba8p-8
+-0x1.a20f4p-8
+-0x1.bbc2c6p-8
+-0x1.c8480ep-8
+-0x1.cc350ap-8
+0x0p+0
+0x0p+0
+0x1.755958p+0
+-0x1.61897cp-2
+-0x1.293fd4p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.c6e8eap-6
+0x0p+0
+-0x1.7c5648p-1
+-0x1.a8281ep+0
+-0x1.b95a18p-1
+-0x1.a0b6d8p+1
+-0x1.e195f2p-1
+-0x1.17167p+2
+-0x1.530524p+1
+-0x1.ba526ap-1
+-0x1.e0d226p+1
+-0x1.6a3acp+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.0b2618p-7
+0x0p+0
+0x1.6581a6p-4
+-0x1.19df74p-1
+0x1.625018p-4
+-0x1.aac696p-1
+-0x1.7dac8ep+1
+0x1.b93e7ep-1
+0x1.3a89ecp+2
+-0x1.528d46p-1
+0x1.3bf052p+0
+-0x1.fe4a04p+1
+0x1.fe78aep-4
+0x1.33cbf6p-4
+0x1.bbc4acp-6
+0x1.4d9538p-8
+-0x1.a13036p-12
+0x1.a6d642p-9
+-0x1.e767d8p-9
+-0x1.db1044p-6
+-0x1.3dc09ap-4
+-0x1.002e6cp-3
+0x0p+0
+0x1.3a89ecp+2
+0x0p+0
+0x1.430104p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.9058cep+2
+0x0p+0
+0x1.90255p+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.6294ecp+2
+0x0p+0
+0x1.57fa38p+2
+0x0p+0
+0x1.b93e7ep-1
+0x0p+0
+0x1.dffafcp-1
+0x0p+0
+0x1.6ee3c8p+2
+0x0p+0
+0x1.6a1064p+2
+0x0p+0
+0x1.7c071ep+2
+0x0p+0
+0x1.6c540cp+2
+0x0p+0
+0x1.625018p-4
+0x0p+0
+0x1.96c694p-4
+0x0p+0
+0x1.5cc6e4p+2
+0x0p+0
+0x1.53a14p+2
+0x0p+0
+0x1.d13a48p+1
+0x0p+0
+0x1.cdcd12p+1
+0x0p+0
+0x1.55ecf8p+2
+0x0p+0
+0x1.55d1bp+2
+0x0p+0
+0x1.6294ecp+2
+0x0p+0
+0x1.57fa38p+2
+0x0p+0
+0x1.2815aep+2
+0x0p+0
+0x1.2404cp+2
+0x0p+0
+0x1.5af474p+2
+0x0p+0
+0x1.4f9c68p+2
+0x0p+0
+0x1.838894p+1
+0x0p+0
+0x1.70366cp+1
+0x0p+0
+0x1.ec2518p+0
+0x0p+0
+0x1.e6ab5p+0
+0x0p+0
+0x1.67ce0ep+2
+0x0p+0
+0x1.64fc36p+2
+0x0p+0
+0x1.25f568p+1
+0x0p+0
+0x1.1e3a24p+1
+0x0p+0
+0x1.3bf052p+0
+0x0p+0
+0x1.478e36p+0
+0x0p+0
+0x1.3f27bp-1
+0x0p+0
+0x1.1b793p-1
+0x0p+0
+0x1.5ad568p+2
+0x0p+0
+0x1.5c7448p+2
+0x0p+0
+0x1.d13a48p+1
+0x0p+0
+0x1.cdcd12p+1
+0x0p+0
+0x1.436d46p+1
+0x0p+0
+0x1.384eb4p+1
+0x0p+0
+0x1.33cbf6p-4
+0x0p+0
+0x1.3f13cp-4
+0x0p+0
+0x1.8d28b4p+2
+0x0p+0
+0x1.8d03c4p+2
+-0x1.8cfdbep-9
+-0x1.a2657ap-9
+-0x1.a2657ap-9
+-0x1.d57a92p-9
+-0x1.d57a92p-9
+-0x1.19369ap-8
+-0x1.19369ap-8
+-0x1.567122p-8
+-0x1.567122p-8
+-0x1.893754p-8
+-0x1.893754p-8
+-0x1.af17eep-8
+-0x1.af17eep-8
+-0x1.c78828p-8
+-0x1.c78828p-8
+-0x1.d35adep-8
+-0x1.d35adep-8
+-0x1.d7049ep-8
+-0x1.b8ad92p-9
+-0x1.ca3cdp-9
+-0x1.f4dec8p-9
+-0x1.8dfc9p-9
+-0x1.ca8122p-9
+-0x1.f658cap-9
+-0x1.1ff058p-8
+-0x1.80a0aep-9
+-0x1.f59c14p-9
+-0x1.24f5cap-8
+-0x1.4eec3cp-8
+-0x1.a103fcp-9
+-0x1.231968p-8
+-0x1.6c2a04p-8
+-0x1.8b5d5ep-8
+-0x1.03f16ep-8
+-0x1.67be02p-8
+-0x1.98599p-8
+-0x1.dcf60cp-8
+-0x1.23affap-8
+-0x1.97d738p-8
+-0x1.b9a9ccp-8
+-0x1.072fb2p-7
+-0x1.43e748p-8
+-0x1.bb320ep-8
+-0x1.d0181ep-8
+-0x1.1293d6p-7
+-0x1.66f332p-8
+-0x1.d2a9a8p-8
+-0x1.da6562p-8
+-0x1.111cb2p-7
+-0x1.8b639ap-8
+-0x1.dd3402p-8
+-0x1.db9654p-8
+-0x1.03f57ap-7
+-0x1.b11f4ep-8
+-0x1.b8598p-9
+-0x1.cac336p-9
+-0x1.f449dp-9
+-0x1.8ec3ccp-9
+-0x1.caef82p-9
+-0x1.f86f08p-9
+-0x1.1fe6e2p-8
+-0x1.83379cp-9
+-0x1.f778f6p-9
+-0x1.27ed0cp-8
+-0x1.4f7212p-8
+-0x1.a7c09p-9
+-0x1.25ca54p-8
+-0x1.69c49p-8
+-0x1.8d61eap-8
+-0x1.023a38p-8
+-0x1.65f2p-8
+-0x1.98473p-8
+-0x1.da3e04p-8
+-0x1.248894p-8
+-0x1.97869cp-8
+-0x1.ba9ba2p-8
+-0x1.067532p-7
+-0x1.45fabap-8
+-0x1.bbe9ccp-8
+-0x1.d12c58p-8
+-0x1.1256bep-7
+-0x1.69361ep-8
+-0x1.d3a15ep-8
+-0x1.dba18cp-8
+-0x1.111cdep-7
+-0x1.8d94a6p-8
+-0x1.de5e0ep-8
+-0x1.ddb9eep-8
+-0x1.0442bap-7
+-0x1.b3d0e8p-8
+-0x1.b81d34p-9
+-0x1.cb6956p-9
+-0x1.f3d25ap-9
+-0x1.8fa4fep-9
+-0x1.cb7a24p-9
+-0x1.fad18p-9
+-0x1.1fe9fep-8
+-0x1.861dc6p-9
+-0x1.f9a04ap-9
+-0x1.2a07aap-8
+-0x1.5013f2p-8
+-0x1.acd77cp-9
+-0x1.27c2bap-8
+-0x1.683288p-8
+-0x1.8eb494p-8
+-0x1.014f1cp-8
+-0x1.64c4bcp-8
+-0x1.982884p-8
+-0x1.d825ecp-8
+-0x1.2553bap-8
+-0x1.973ad6p-8
+-0x1.bb673ap-8
+-0x1.05bcf8p-7
+-0x1.47e862p-8
+-0x1.bc85d4p-8
+-0x1.d22fep-8
+-0x1.120db8p-7
+-0x1.6b649ap-8
+-0x1.d489c8p-8
+-0x1.dced68p-8
+-0x1.11193ep-7
+-0x1.8fcdbcp-8
+-0x1.df9196p-8
+-0x1.dfb7f8p-8
+-0x1.049604p-7
+-0x1.b65a6ep-8
+-0x1.b7fc1ap-9
+-0x1.cc2d44p-9
+-0x1.fd3884p-9
+-0x1.2b9cf4p-8
+-0x1.672e5cp-8
+-0x1.980496p-8
+-0x1.bc15fcp-8
+-0x1.d32a64p-8
+-0x1.de3d42p-8
+-0x1.e1962cp-8
+0x0p+0
+0x0p+0
+0x1.085e0ap+1
+-0x1.2e5d4ep-1
+-0x1.1874e2p+2
+-0x1.2e5d4ep-1
+0x1.dffafcp-1
+-0x1.1874e2p+2
+0x0p+0
+-0x1.56725ap+1
+0x0p+0
+0x1.dffafcp-1
+-0x1.873a8ep+1
+0x1.430104p+2
+-0x1.873a8ep+1
+-0x1.1874e2p+2
+-0x1.e27038p-1
+-0x1.56725ap+1
+-0x1.e27038p-1
+-0x1.f1db72p-2
+-0x1.1e0174p+2
+-0x1.f1db72p-2
+0x1.edc00cp-1
+-0x1.1e18dep+2
+0x0p+0
+-0x1.5bb316p+1
+0x0p+0
+-0x1.959252p+1
+0x1.eda99p-1
+-0x1.9628bap+1
+0x1.4b781cp+2
+-0x1.ded282p-1
+-0x1.1e17ep+2
+-0x1.de180ap-1
+-0x1.5bb316p+1
+-0x1.f1db72p-2
+-0x1.1e17ep+2
+-0x1.f1db72p-2
+0x1.eda99p-1
+-0x1.1e2ca6p+2
+0x0p+0
+-0x1.5bb316p+1
+0x0p+0
+-0x1.95e7b2p+1
+0x1.ed7b2p-1
+-0x1.960356p+1
+0x1.4b781cp+2
+-0x1.decac4p-1
+-0x1.1e273cp+2
+-0x1.deaaeap-1
+-0x1.5bb316p+1
+-0x1.f1db72p-2
+-0x1.1e273cp+2
+-0x1.f1db72p-2
+0x1.ed7b2p-1
+-0x1.1e39b6p+2
+0x0p+0
+-0x1.5bb316p+1
+0x0p+0
+-0x1.95f94ap+1
+0x1.ed3e34p-1
+-0x1.96021ap+1
+0x1.4b781cp+2
+-0x1.deb688p-1
+-0x1.1e31f8p+2
+-0x1.dec4b2p-1
+-0x1.5bb316p+1
+-0x1.f1db72p-2
+0x1.ed3e34p-1
+-0x1.95fef6p+1
+0x1.4b781cp+2
+-0x1.1e31f8p+2
+-0x1.debfbp-1
+-0x1.5bb316p+1
+0x0p+0
+-0x1.358fe8p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.fa66b6p-6
+-0x1.d12be8p-1
+-0x1.fa66b6p-6
+-0x1.16f4cep-5
+0x0p+0
+-0x1.16f27ep-5
+-0x1.1300c4p+0
+-0x1.16f52p-5
+-0x1.1300c4p+0
+0x0p+0
+-0x1.0a0d3ap+0
+-0x1.b86bd6p+0
+-0x1.b409p+1
+-0x1.b86bd6p+0
+-0x1.c8b3c2p+0
+-0x1.376d68p+0
+-0x1.c8a81cp+0
+-0x1.c75b28p+1
+-0x1.c8a8d2p+0
+-0x1.c75b28p+1
+-0x1.376d68p+0
+-0x1.ebf0b8p+1
+-0x1.ad5b72p-1
+-0x1.6eb09p+2
+-0x1.ad5b72p-1
+-0x1.a0630ep-1
+-0x1.f70f4ap+1
+-0x1.a06576p-1
+-0x1.73266p+2
+-0x1.a06502p-1
+-0x1.73266p+2
+-0x1.f70f4ap+1
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.eb2c54p-10
+0x1.f059eep-4
+0x1.eb2c54p-10
+-0x1.20cb58p-8
+0x0p+0
+-0x1.20b25ap-8
+0x1.3d991cp-3
+-0x1.20e26cp-8
+0x1.3d991cp-3
+0x0p+0
+0x1.96c694p-4
+-0x1.407a92p-1
+-0x1.f3f3b2p-1
+-0x1.407a92p-1
+-0x1.67143ap-1
+0x1.cb3d1p-4
+-0x1.66f532p-1
+-0x1.1e9068p+0
+-0x1.66f4acp-1
+0x1.cb3d1p-4
+-0x1.66f4e6p-1
+-0x1.1e9068p+0
+-0x1.66f4d2p-1
+-0x1.1e9068p+0
+0x1.cb3d1p-4
+0x1.478e36p+0
+-0x1.691c04p-1
+-0x1.0302a4p+2
+-0x1.691c04p-1
+-0x1.7fb092p-1
+0x1.532c1ap+0
+-0x1.7fa2f8p-1
+-0x1.06e046p+2
+-0x1.7fa52cp-1
+-0x1.06e046p+2
+0x1.532c1ap+0
+0x1.0005aep-3
+0x0p+0
+0x1.3f13cp-4
+0x1.0005aep-3
+0x1.0bccbap-5
+0x1.3f13cp-4
+0x1.c30722p-7
+0x1.0bccbap-5
+0x1.2fc8a2p-9
+0x1.c30722p-7
+-0x1.486d6p-15
+0x1.2fc8a2p-9
+-0x1.90a052p-7
+-0x1.486d6p-15
+-0x1.173518p-5
+-0x1.90a052p-7
+-0x1.46fc4p-4
+-0x1.173518p-5
+-0x1.025738p-3
+-0x1.46fc4p-4
+0x0p+0
+-0x1.025738p-3
+0x0p+0
+0x1.00d1b6p-3
+0x1.011bp-3
+0x1.49b878p-4
+0x1.4b49dap-4
+0x1.411984p-5
+0x1.4311b8p-5
+0x1.6ebfa4p-6
+0x1.6ff986p-6
+0x1.657604p-8
+0x1.6c578ap-8
+-0x1.e7671ep-9
+-0x1.dee876p-9
+-0x1.5445fcp-6
+-0x1.51bb02p-6
+-0x1.47814ep-5
+-0x1.45f98p-5
+-0x1.4f7d22p-4
+-0x1.4dfbc6p-4
+-0x1.04946ep-3
+-0x1.0401f2p-3
+0x0p+0
+0x0p+0
+0x1.008df6p-3
+0x1.00d49cp-3
+0x1.49ca2ep-4
+0x1.4b5ba6p-4
+0x1.41a1f8p-5
+0x1.43b032p-5
+0x1.6d9754p-6
+0x1.6f37d6p-6
+0x1.67a3c6p-8
+0x1.6f529p-8
+-0x1.eba4aep-9
+-0x1.e34706p-9
+-0x1.5359d4p-6
+-0x1.5127c4p-6
+-0x1.4807e2p-5
+-0x1.469dccp-5
+-0x1.4f938p-4
+-0x1.4e176ap-4
+-0x1.044b5ap-3
+-0x1.03ba14p-3
+0x0p+0
+0x0p+0
+0x1.00484cp-3
+0x1.008e98p-3
+0x1.49e6bep-4
+0x1.4b74eap-4
+0x1.427024p-5
+0x1.447352p-5
+0x1.6d115ap-6
+0x1.6eab94p-6
+0x1.6a7c02p-8
+0x1.722f7ap-8
+-0x1.f29604p-9
+-0x1.e98338p-9
+-0x1.530448p-6
+-0x1.50cbc4p-6
+-0x1.48b1dcp-5
+-0x1.474654p-5
+-0x1.4faeccp-4
+-0x1.4e33fep-4
+-0x1.0402c4p-3
+-0x1.037242p-3
+0x0p+0
+0x1.00015ep-3
+0x1.49fbacp-4
+0x1.432d3cp-5
+0x1.6c8c16p-6
+0x1.6d9dfcp-8
+-0x1.f86b52p-9
+-0x1.52a908p-6
+-0x1.4959b2p-5
+-0x1.4fc9cep-4
+-0x1.03ba9ep-3
+0x0p+0
+-0x1.8cfdbep-9
+-0x1.a2657ap-9
+-0x1.d57a92p-9
+-0x1.19369ap-8
+-0x1.567122p-8
+-0x1.893754p-8
+-0x1.af17eep-8
+-0x1.c78828p-8
+-0x1.d35adep-8
+-0x1.d7049ep-8
+0x0p+0
+0x0p+0
+0x1.c30ab6p+0
+-0x1.2e5d4ep-1
+-0x1.2f67dep+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.fa66b6p-6
+0x0p+0
+-0x1.d12be8p-1
+-0x1.b86bd6p+0
+-0x1.0a0d3ap+0
+-0x1.b409p+1
+-0x1.e27038p-1
+-0x1.1874e2p+2
+-0x1.56725ap+1
+-0x1.ad5b72p-1
+-0x1.ebf0b8p+1
+-0x1.6eb09p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x1.eb2c54p-10
+0x0p+0
+0x1.f059eep-4
+-0x1.407a92p-1
+0x1.96c694p-4
+-0x1.f3f3b2p-1
+-0x1.873a8ep+1
+0x1.dffafcp-1
+0x1.430104p+2
+-0x1.691c04p-1
+0x1.478e36p+0
+-0x1.0302a4p+2
+0x1.0005aep-3
+0x1.3f13cp-4
+0x1.0bccbap-5
+0x1.c30722p-7
+0x1.2fc8a2p-9
+-0x1.486d6p-15
+-0x1.90a052p-7
+-0x1.173518p-5
+-0x1.46fc4p-4
+-0x1.025738p-3
+0x0p+0
+0x1.430104p+2
+0x0p+0
+0x1.4b781cp+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.90255p+2
+0x0p+0
+0x1.8ff1ccp+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.57fa38p+2
+0x0p+0
+0x1.4d5f84p+2
+0x0p+0
+0x1.52acdep+2
+0x0p+0
+0x1.4ff5c6p+2
+0x0p+0
+0x1.dffafcp-1
+0x0p+0
+0x1.ed3e34p-1
+0x0p+0
+0x1.6a1064p+2
+0x0p+0
+0x1.65411cp+2
+0x0p+0
+0x1.6c540cp+2
+0x0p+0
+0x1.7301fep+2
+0x0p+0
+0x1.96c694p-4
+0x0p+0
+0x1.cb3d1p-4
+0x0p+0
+0x1.53a14p+2
+0x0p+0
+0x1.4a7b9cp+2
+0x0p+0
+0x1.cdcd12p+1
+0x0p+0
+0x1.c88c56p+1
+0x0p+0
+0x1.55d1bp+2
+0x0p+0
+0x1.5647cp+2
+0x0p+0
+0x1.57fa38p+2
+0x0p+0
+0x1.4d5f84p+2
+0x0p+0
+0x1.2404cp+2
+0x0p+0
+0x1.1ff582p+2
+0x0p+0
+0x1.4f9c68p+2
+0x0p+0
+0x1.44445cp+2
+0x0p+0
+0x1.70366cp+1
+0x0p+0
+0x1.5ce444p+1
+0x0p+0
+0x1.e6ab5p+0
+0x0p+0
+0x1.cfb6f8p+0
+0x0p+0
+0x1.64fc36p+2
+0x0p+0
+0x1.622b1p+2
+0x0p+0
+0x1.1e3a24p+1
+0x0p+0
+0x1.167eep+1
+0x0p+0
+0x1.478e36p+0
+0x0p+0
+0x1.532c1ap+0
+0x0p+0
+0x1.1b793p-1
+0x0p+0
+0x1.ef956p-2
+0x0p+0
+0x1.5c7448p+2
+0x0p+0
+0x1.5e1316p+2
+0x0p+0
+0x1.cdcd12p+1
+0x0p+0
+0x1.c88c56p+1
+0x0p+0
+0x1.384eb4p+1
+0x0p+0
+0x1.2d3022p+1
+0x0p+0
+0x1.3f13cp-4
+0x0p+0
+0x1.49fbacp-4
+0x0p+0
+0x1.8d03c4p+2
+0x0p+0
+0x1.8ce08ep+2
+0x0p+0
+-0x1.08a7bep+0
+0x0p+0
+-0x1.08a7bep+0
+0x0p+0
+-0x1.063192p+0
+0x0p+0
+-0x1.0595ap+0
+0x0p+0
+-0x1.056edep+0
+0x0p+0
+0x0p+0
+-0x1.0e14d2p+0
+-0x1.056edep+0
+0x0p+0
+0x1.50c3fep+2
+0x0p+0
+0x1.4e9a82p+2
+0x0p+0
+0x1.50c3fep+2
+0x0p+0
+0x1.4e9a82p+2
+-0x1.b7fc1ap-9
+-0x1.cc2d44p-9
+-0x1.cc2d44p-9
+-0x1.fd3884p-9
+-0x1.fd3884p-9
+-0x1.2b9cf4p-8
+-0x1.2b9cf4p-8
+-0x1.672e5cp-8
+-0x1.672e5cp-8
+-0x1.980496p-8
+-0x1.980496p-8
+-0x1.bc15fcp-8
+-0x1.bc15fcp-8
+-0x1.d32a64p-8
+-0x1.d32a64p-8
+-0x1.de3d42p-8
+-0x1.de3d42p-8
+-0x1.e1962cp-8
+-0x1.e3abeep-9
+-0x1.f4049ap-9
+-0x1.0f51bcp-8
+-0x1.b8fec8p-9
+-0x1.f4676cp-9
+-0x1.0f0b5ep-8
+-0x1.33abccp-8
+-0x1.aacfeap-9
+-0x1.0ebd38p-8
+-0x1.375c24p-8
+-0x1.60e48ap-8
+-0x1.c9c078p-9
+-0x1.359fbep-8
+-0x1.7ce73ep-8
+-0x1.9b1988p-8
+-0x1.177b2p-8
+-0x1.7891b6p-8
+-0x1.a726d2p-8
+-0x1.ea3126p-8
+-0x1.361794p-8
+-0x1.a6c036p-8
+-0x1.c6a7dap-8
+-0x1.0c8a1ap-7
+-0x1.551548p-8
+-0x1.c83722p-8
+-0x1.dbba5ap-8
+-0x1.16f81cp-7
+-0x1.76c94p-8
+-0x1.de4024p-8
+-0x1.e547c6p-8
+-0x1.15267ep-7
+-0x1.99c12p-8
+-0x1.e800c4p-8
+-0x1.e627e2p-8
+-0x1.085acap-7
+-0x1.bdae22p-8
+-0x1.e33a4ap-9
+-0x1.f48aa4p-9
+-0x1.0efc4ap-8
+-0x1.b9bdfep-9
+-0x1.f4ca6cp-9
+-0x1.10062ap-8
+-0x1.339408p-8
+-0x1.ad579p-9
+-0x1.0fa0a4p-8
+-0x1.3a5d14p-8
+-0x1.615ffap-8
+-0x1.d08f3ap-9
+-0x1.385758p-8
+-0x1.7a79bep-8
+-0x1.9d206cp-8
+-0x1.15c02ap-8
+-0x1.76be5p-8
+-0x1.a7194cp-8
+-0x1.e77b98p-8
+-0x1.36eb22p-8
+-0x1.a66ebap-8
+-0x1.c79446p-8
+-0x1.0bd3d4p-7
+-0x1.571a12p-8
+-0x1.c8eeacp-8
+-0x1.dcc494p-8
+-0x1.16c258p-7
+-0x1.78f37cp-8
+-0x1.df312ep-8
+-0x1.e674a4p-8
+-0x1.152d06p-7
+-0x1.9bcfb6p-8
+-0x1.e919f6p-8
+-0x1.e839fap-8
+-0x1.08a6d2p-7
+-0x1.c03ffap-8
+-0x1.e2eb72p-9
+-0x1.f51af8p-9
+-0x1.0eb6a2p-8
+-0x1.ba8ab8p-9
+-0x1.f53df8p-9
+-0x1.112f78p-8
+-0x1.338938p-8
+-0x1.b032bp-9
+-0x1.10a962p-8
+-0x1.3c7da4p-8
+-0x1.61f754p-8
+-0x1.d5b14cp-9
+-0x1.3a4f4p-8
+-0x1.78e60ep-8
+-0x1.9e765p-8
+-0x1.14cfap-8
+-0x1.7591b6p-8
+-0x1.a6f4e4p-8
+-0x1.e565bap-8
+-0x1.37aef8p-8
+-0x1.a61ff4p-8
+-0x1.c85ce6p-8
+-0x1.0b20c2p-7
+-0x1.58f78cp-8
+-0x1.c98918p-8
+-0x1.ddc39p-8
+-0x1.168098p-7
+-0x1.7b0d7p-8
+-0x1.e014ep-8
+-0x1.e7afcap-8
+-0x1.152e44p-7
+-0x1.9de9dp-8
+-0x1.ea3fe8p-8
+-0x1.ea26c2p-8
+-0x1.08f99p-7
+-0x1.c2abe4p-8
+-0x1.e2b92p-9
+-0x1.f5cdf2p-9
+-0x1.125e9p-8
+-0x1.3e1014p-8
+-0x1.77dfdap-8
+-0x1.a6ccfap-8
+-0x1.c90abap-8
+-0x1.deb6cp-8
+-0x1.e8ef6ep-8
+-0x1.ebf6aep-8
+0x0p+0
+0x0p+0
+0x1.2f36b8p+1
+-0x1.f1db72p-2
+-0x1.1e31f8p+2
+-0x1.f1db72p-2
+0x1.ed3e34p-1
+-0x1.5bb316p+1
+0x1.ed3e34p-1
+-0x1.5bb316p+1
+0x0p+0
+-0x1.1e31f8p+2
+0x0p+0
+0x1.ed3e34p-1
+-0x1.95fef6p+1
+0x1.4b781cp+2
+-0x1.95fef6p+1
+-0x1.5bb316p+1
+-0x1.debfbp-1
+-0x1.1e31f8p+2
+-0x1.debfbp-1
+-0x1.cdcf56p-2
+-0x1.25b1f4p+2
+-0x1.cdcf56p-2
+0x1.ed5e6cp-1
+-0x1.60d8d6p+1
+0x1.ed2654p-1
+-0x1.60aeaap+1
+0x0p+0
+-0x1.25b6d6p+2
+0x0p+0
+-0x1.a77efap+1
+0x1.ebc7a4p-1
+-0x1.a75914p+1
+0x1.53ef34p+2
+-0x1.d946c6p-1
+-0x1.60aeaap+1
+-0x1.d80d7cp-1
+-0x1.25b6d6p+2
+-0x1.cdcf56p-2
+-0x1.25b6d6p+2
+-0x1.cdcf56p-2
+0x1.ebc7a4p-1
+-0x1.60aeaap+1
+0x1.eb93a6p-1
+-0x1.608cfcp+1
+0x0p+0
+-0x1.25baaep+2
+0x0p+0
+-0x1.a75572p+1
+0x1.ea7e9cp-1
+-0x1.a775f4p+1
+0x1.53ef34p+2
+-0x1.d80e38p-1
+-0x1.608cfcp+1
+-0x1.d79494p-1
+-0x1.25baaep+2
+-0x1.cdcf56p-2
+-0x1.25baaep+2
+-0x1.cdcf56p-2
+0x1.ea7e9cp-1
+-0x1.608cfcp+1
+0x1.ea4becp-1
+-0x1.6072dcp+1
+0x0p+0
+-0x1.25bddcp+2
+0x0p+0
+-0x1.a76a1ep+1
+0x1.e9767p-1
+-0x1.a786b2p+1
+0x1.53ef34p+2
+-0x1.d7cf3p-1
+-0x1.6072dcp+1
+-0x1.d75dacp-1
+-0x1.25bddcp+2
+-0x1.cdcf56p-2
+0x1.e9767p-1
+-0x1.a77c6ap+1
+0x1.53ef34p+2
+-0x1.6072dcp+1
+-0x1.d792ecp-1
+0x0p+0
+-0x1.25bddcp+2
+-0x1.3bb7f2p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.0e14d2p+0
+0x0p+0
+0x0p+0
+-0x1.16f52p-5
+-0x1.0e14d2p+0
+-0x1.16f52p-5
+-0x1.27c1f8p+0
+0x0p+0
+-0x1.ceabe2p-3
+0x0p+0
+-0x1.cbb2cp-3
+-0x1.27c1f8p+0
+-0x1.27c1f8p+0
+0x0p+0
+-0x1.22165ap-2
+0x0p+0
+-0x1.0be79ep-2
+-0x1.27c1f8p+0
+-0x1.27c1f8p+0
+0x0p+0
+-0x1.13fd9ap-2
+0x0p+0
+-0x1.110bacp-2
+-0x1.27c1f8p+0
+-0x1.121d7ap-2
+-0x1.27c1f8p+0
+0x0p+0
+0x0p+0
+-0x1.c75b28p+1
+0x1.cb3d1p-4
+-0x1.376d68p+0
+-0x1.c8a8d2p+0
+-0x1.c75b28p+1
+-0x1.c8a8d2p+0
+0x1.cb3d1p-4
+-0x1.66f4d2p-1
+-0x1.1e9068p+0
+-0x1.66f4d2p-1
+-0x1.bee984p+1
+0x1.0bc36cp-2
+-0x1.da0cacp+0
+-0x1.64cd96p+0
+-0x1.d9f5dep+0
+-0x1.be3d04p+1
+-0x1.70eae6p-1
+0x1.1030b6p-2
+-0x1.6ec594p-1
+-0x1.4326f6p+0
+-0x1.be3d04p+1
+0x1.1030b6p-2
+-0x1.db0306p+0
+-0x1.64cd96p+0
+-0x1.daa3d8p+0
+-0x1.bda918p+1
+-0x1.6f871p-1
+0x1.13be58p-2
+-0x1.6dcc28p-1
+-0x1.4326f6p+0
+-0x1.bda918p+1
+0x1.13be58p-2
+-0x1.db75e2p+0
+-0x1.64cd96p+0
+-0x1.db2bep+0
+-0x1.bd27a8p+1
+-0x1.6e67eap-1
+0x1.16ac9ep-2
+-0x1.6cebfcp-1
+-0x1.4326f6p+0
+-0x1.dbe0d2p+0
+-0x1.bd27a8p+1
+0x1.16ac9ep-2
+-0x1.6d7168p-1
+-0x1.4326f6p+0
+-0x1.64cd96p+0
+-0x1.f70f4ap+1
+-0x1.a06502p-1
+-0x1.73266p+2
+-0x1.a06502p-1
+-0x1.936d9cp-1
+-0x1.0116eep+2
+-0x1.93703cp-1
+-0x1.779c3p+2
+-0x1.936fdap-1
+-0x1.779c3p+2
+-0x1.0116eep+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+-0x1.20e26cp-8
+0x1.3d991cp-3
+-0x1.20e26cp-8
+0x1.39f496p-12
+0x1.39eeb2p-12
+0x1.39f496p-12
+0x1.39eeb2p-12
+0x1.cf4adp-15
+0x0p+0
+0x1.c7eec6p-15
+0x1.39f496p-12
+-0x1.61524p-7
+0x1.39eeb2p-12
+-0x1.62b688p-7
+0x1.83054p-3
+0x1.39f496p-12
+0x1.39eeb2p-12
+0x1.5b129ap-18
+0x1.3748c2p-11
+0x1.e05ebp-15
+0x0p+0
+0x1.cdd81ap-15
+0x1.46bfbep-12
+-0x1.622966p-7
+0x1.2d28a2p-12
+-0x1.627246p-7
+0x1.83054p-3
+0x1.e18b3p-15
+0x1.46bfbep-12
+0x1.2d28a2p-12
+-0x1.625f78p-7
+0x1.83054p-3
+0x0p+0
+0x1.532c1ap+0
+-0x1.7fa52cp-1
+-0x1.06e046p+2
+-0x1.7fa52cp-1
+-0x1.963484p-1
+0x1.5ec9fep+0
+-0x1.9626b6p-1
+-0x1.0abde8p+2
+-0x1.962944p-1
+-0x1.0abde8p+2
+0x1.5ec9fep+0
+0x1.00015ep-3
+0x0p+0
+0x1.49fbacp-4
+0x1.00015ep-3
+0x1.432d3cp-5
+0x1.49fbacp-4
+0x1.6c8c16p-6
+0x1.432d3cp-5
+0x1.6d9dfcp-8
+0x1.6c8c16p-6
+-0x1.f86b52p-9
+0x1.6d9dfcp-8
+-0x1.52a908p-6
+-0x1.f86b52p-9
+-0x1.4959b2p-5
+-0x1.52a908p-6
+-0x1.4fc9cep-4
+-0x1.4959b2p-5
+-0x1.03ba9ep-3
+-0x1.4fc9cep-4
+0x0p+0
+-0x1.03ba9ep-3
+0x0p+0
+0x1.00071cp-3
+0x1.0051e8p-3
+0x1.54710ep-4
+0x1.55fd42p-4
+0x1.81ea6p-5
+0x1.83a7fp-5
+0x1.f33238p-6
+0x1.f4c5aap-6
+0x1.2f8154p-7
+0x1.348a42p-7
+-0x1.07f5eep-7
+-0x1.037ec4p-7
+-0x1.da23b8p-6
+-0x1.d73fa8p-6
+-0x1.82351cp-5
+-0x1.80ba48p-5
+-0x1.5834dp-4
+-0x1.56c53ap-4
+-0x1.0526a8p-3
+-0x1.048e86p-3
+0x0p+0
+0x0p+0
+0x1.ff89e6p-4
+0x1.000b88p-3
+0x1.548df4p-4
+0x1.5618bep-4
+0x1.824accp-5
+0x1.842a1ep-5
+0x1.f1d5f4p-6
+0x1.f3cbd8p-6
+0x1.301144p-7
+0x1.359f1ep-7
+-0x1.087b06p-7
+-0x1.04244cp-7
+-0x1.d9002cp-6
+-0x1.d66dccp-6
+-0x1.829672p-5
+-0x1.814342p-5
+-0x1.585da8p-4
+-0x1.56f3b2p-4
+-0x1.04dacap-3
+-0x1.044388p-3
+0x0p+0
+0x0p+0
+0x1.fefd38p-4
+0x1.ff8a44p-4
+0x1.54b9dep-4
+0x1.563fbep-4
+0x1.82fa94p-5
+0x1.84d014p-5
+0x1.f127bcp-6
+0x1.f312ecp-6
+0x1.310086p-7
+0x1.3695e4p-7
+-0x1.09b61ap-7
+-0x1.0538d4p-7
+-0x1.d88068p-6
+-0x1.d5e0cp-6
+-0x1.8326bap-5
+-0x1.81d248p-5
+-0x1.588ac4p-4
+-0x1.57220cp-4
+-0x1.048f4cp-3
+-0x1.03f902p-3
+0x0p+0
+0x1.fe6d58p-4
+0x1.54dce2p-4
+0x1.83982cp-5
+0x1.f078ep-6
+0x1.32173ep-7
+-0x1.0aa2a4p-7
+-0x1.d7f4cep-6
+-0x1.83b616p-5
+-0x1.58b792p-4
+-0x1.044448p-3
+0x0p+0
+-0x1.b7fc1ap-9
+-0x1.cc2d44p-9
+-0x1.fd3884p-9
+-0x1.2b9cf4p-8
+-0x1.672e5cp-8
+-0x1.980496p-8
+-0x1.bc15fcp-8
+-0x1.d32a64p-8
+-0x1.de3d42p-8
+-0x1.e1962cp-8
+0x0p+0
+0x0p+0
+0x1.085e0ap+1
+-0x1.f1db72p-2
+-0x1.358fe8p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.16f52p-5
+0x0p+0
+-0x1.0e14d2p+0
+-0x1.c8a8d2p+0
+-0x1.376d68p+0
+-0x1.c75b28p+1
+-0x1.debfbp-1
+-0x1.1e31f8p+2
+-0x1.5bb316p+1
+-0x1.a06502p-1
+-0x1.f70f4ap+1
+-0x1.73266p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.20e26cp-8
+0x0p+0
+0x1.3d991cp-3
+-0x1.66f4d2p-1
+0x1.cb3d1p-4
+-0x1.1e9068p+0
+-0x1.95fef6p+1
+0x1.ed3e34p-1
+0x1.4b781cp+2
+-0x1.7fa52cp-1
+0x1.532c1ap+0
+-0x1.06e046p+2
+0x1.00015ep-3
+0x1.49fbacp-4
+0x1.432d3cp-5
+0x1.6c8c16p-6
+0x1.6d9dfcp-8
+-0x1.f86b52p-9
+-0x1.52a908p-6
+-0x1.4959b2p-5
+-0x1.4fc9cep-4
+-0x1.03ba9ep-3
+0x0p+0
+0x1.8e4076p+1
+0x0p+0
+0x1.7cc302p+1
+0x0p+0
+0x1.4b781cp+2
+0x0p+0
+0x1.53ef34p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.8ff1ccp+2
+0x0p+0
+0x1.80fddep+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.4e9a82p+2
+0x0p+0
+0x1.482f38p+2
+0x0p+0
+0x1.ed3e34p-1
+0x0p+0
+0x1.e9767p-1
+0x0p+0
+0x1.65411cp+2
+0x0p+0
+0x1.647188p+2
+0x0p+0
+0x1.7301fep+2
+0x0p+0
+0x1.7542cp+2
+0x0p+0
+0x1.cb3d1p-4
+0x0p+0
+0x1.16ac9ep-2
+0x0p+0
+0x1.4a7b9cp+2
+0x0p+0
+0x1.4155f8p+2
+0x0p+0
+0x1.c88c56p+1
+0x0p+0
+0x1.c3cc9p+1
+0x0p+0
+0x1.5647cp+2
+0x0p+0
+0x1.572d58p+2
+0x0p+0
+0x1.4e9a82p+2
+0x0p+0
+0x1.482f38p+2
+0x0p+0
+0x1.1ff582p+2
+0x0p+0
+0x1.1b2782p+2
+0x0p+0
+0x1.44445cp+2
+0x0p+0
+0x1.38ec5p+2
+0x0p+0
+0x1.5ce444p+1
+0x0p+0
+0x1.6717c4p+1
+0x0p+0
+0x1.cfb6f8p+0
+0x0p+0
+0x1.b18768p+0
+0x0p+0
+0x1.622b1p+2
+0x0p+0
+0x1.5f5a8ep+2
+0x0p+0
+0x1.167eep+1
+0x0p+0
+0x1.0ec39cp+1
+0x0p+0
+0x1.532c1ap+0
+0x0p+0
+0x1.5ec9fep+0
+0x0p+0
+0x1.ef956p-2
+0x0p+0
+0x1.a8386p-2
+0x0p+0
+0x1.5e1316p+2
+0x0p+0
+0x1.5fb1bap+2
+0x0p+0
+0x1.c88c56p+1
+0x0p+0
+0x1.c3cc9p+1
+0x0p+0
+0x1.2d3022p+1
+0x0p+0
+0x1.22119p+1
+0x0p+0
+0x1.49fbacp-4
+0x0p+0
+0x1.54dce2p-4
+0x0p+0
+0x1.8ce08ep+2
+0x0p+0
+0x1.8cbcd8p+2
+-0x1.e2b92p-9
+-0x1.f5cdf2p-9
+-0x1.f5cdf2p-9
+-0x1.125e9p-8
+-0x1.125e9p-8
+-0x1.3e1014p-8
+-0x1.3e1014p-8
+-0x1.77dfdap-8
+-0x1.77dfdap-8
+-0x1.a6ccfap-8
+-0x1.a6ccfap-8
+-0x1.c90abap-8
+-0x1.c90abap-8
+-0x1.deb6cp-8
+-0x1.deb6cp-8
+-0x1.e8ef6ep-8
+-0x1.e8ef6ep-8
+-0x1.ebf6aep-8
+-0x1.07347ap-8
+-0x1.0ed2a4p-8
+-0x1.2417f8p-8
+-0x1.e3d0c6p-9
+-0x1.0f0a68p-8
+-0x1.22cdacp-8
+-0x1.473d9cp-8
+-0x1.d4e05ep-9
+-0x1.22982cp-8
+-0x1.49cf44p-8
+-0x1.72c3bp-8
+-0x1.f2a06ep-9
+-0x1.4823ap-8
+-0x1.8d98bcp-8
+-0x1.aad646p-8
+-0x1.2af5f2p-8
+-0x1.8962f2p-8
+-0x1.b5ef36p-8
+-0x1.f772d2p-8
+-0x1.4870fp-8
+-0x1.b5a17cp-8
+-0x1.d39c98p-8
+-0x1.11f678p-7
+-0x1.660e6ep-8
+-0x1.d5351cp-8
+-0x1.e746b6p-8
+-0x1.1b6f58p-7
+-0x1.865cd2p-8
+-0x1.e9c4d6p-8
+-0x1.eff9f2p-8
+-0x1.193f92p-7
+-0x1.a7bea8p-8
+-0x1.f2a0f4p-8
+-0x1.f08864p-8
+-0x1.0cbe1ap-7
+-0x1.c9e3dp-8
+-0x1.06f5c8p-8
+-0x1.0f0446p-8
+-0x1.23bd88p-8
+-0x1.e46b7cp-9
+-0x1.0f2ac2p-8
+-0x1.23cff2p-8
+-0x1.471cdp-8
+-0x1.d766bp-9
+-0x1.237ed4p-8
+-0x1.4cc156p-8
+-0x1.7339ep-8
+-0x1.f962aep-9
+-0x1.4ad566p-8
+-0x1.8b2ee2p-8
+-0x1.acd786p-8
+-0x1.293e5ep-8
+-0x1.8792b4p-8
+-0x1.b5e244p-8
+-0x1.f4c444p-8
+-0x1.494134p-8
+-0x1.b54ed8p-8
+-0x1.d48326p-8
+-0x1.114444p-7
+-0x1.680426p-8
+-0x1.d5e64ap-8
+-0x1.e848f4p-8
+-0x1.1b3edep-7
+-0x1.886e58p-8
+-0x1.eaaf2ap-8
+-0x1.f11a32p-8
+-0x1.194b1p-7
+-0x1.a9b02cp-8
+-0x1.f3b044p-8
+-0x1.f28b0ap-8
+-0x1.0d0a0cp-7
+-0x1.cc5cap-8
+-0x1.06c84ap-8
+-0x1.0f3f88p-8
+-0x1.236b48p-8
+-0x1.e52b7ap-9
+-0x1.0f5ab4p-8
+-0x1.24f3a8p-8
+-0x1.470bbp-8
+-0x1.da2f9cp-9
+-0x1.247f06p-8
+-0x1.4edc72p-8
+-0x1.73c864p-8
+-0x1.fe7a86p-9
+-0x1.4cc6a2p-8
+-0x1.89a016p-8
+-0x1.ae2adcp-8
+-0x1.284e8cp-8
+-0x1.8666c4p-8
+-0x1.b5bd8p-8
+-0x1.f2b4c8p-8
+-0x1.49feeep-8
+-0x1.b5020ep-8
+-0x1.d544b8p-8
+-0x1.1095d6p-7
+-0x1.69d356p-8
+-0x1.d67922p-8
+-0x1.e93fp-8
+-0x1.1b0146p-7
+-0x1.8a6fa4p-8
+-0x1.eb8b3ap-8
+-0x1.f24a28p-8
+-0x1.1950dap-7
+-0x1.abae8cp-8
+-0x1.f4cca2p-8
+-0x1.f469fep-8
+-0x1.0d5c6cp-7
+-0x1.ceb1fcp-8
+-0x1.06a6p-8
+-0x1.0f922cp-8
+-0x1.261b8cp-8
+-0x1.506c5cp-8
+-0x1.88984p-8
+-0x1.b59854p-8
+-0x1.d5ea3p-8
+-0x1.ea2972p-8
+-0x1.f3801ap-8
+-0x1.f62c7ap-8
+0x0p+0
+0x0p+0
+0x1.560f66p+1
+-0x1.cdcf56p-2
+-0x1.25bddcp+2
+-0x1.cdcf56p-2
+0x1.e9767p-1
+-0x1.6072dcp+1
+0x1.e9767p-1
+-0x1.3bb7f2p+2
+0x1.e9767p-1
+-0x1.6072dcp+1
+0x0p+0
+-0x1.25bddcp+2
+0x0p+0
+0x1.e9767p-1
+-0x1.a77c6ap+1
+0x1.53ef34p+2
+-0x1.a77c6ap+1
+-0x1.6072dcp+1
+-0x1.d792ecp-1
+-0x1.25bddcp+2
+-0x1.d792ecp-1
+-0x1.ad3daep-2
+-0x1.2db716p+2
+-0x1.ad3daep-2
+0x1.e15a14p-1
+-0x1.659434p+1
+0x1.e12fdcp-1
+-0x1.3e1dc2p+2
+0x1.e0e688p-1
+-0x1.658bd4p+1
+0x0p+0
+-0x1.2db716p+2
+0x0p+0
+-0x1.b809a4p+1
+0x1.e0bfbep-1
+-0x1.b7c054p+1
+0x1.5c664cp+2
+-0x1.d15e44p-1
+-0x1.658bd4p+1
+-0x1.d14096p-1
+-0x1.2db716p+2
+-0x1.ad3daep-2
+-0x1.2db716p+2
+-0x1.ad3daep-2
+0x1.e0bfbep-1
+-0x1.658bd4p+1
+0x1.e09a38p-1
+-0x1.3e1dc2p+2
+0x1.e05c4ep-1
+-0x1.6584cap+1
+0x0p+0
+-0x1.2db716p+2
+0x0p+0
+-0x1.b7cc4ap+1
+0x1.e03ec8p-1
+-0x1.b7cbfcp+1
+0x1.5c664cp+2
+-0x1.d106a8p-1
+-0x1.6584cap+1
+-0x1.d0ff46p-1
+-0x1.2db716p+2
+-0x1.ad3daep-2
+-0x1.2db716p+2
+-0x1.ad3daep-2
+0x1.e03ec8p-1
+-0x1.6584cap+1
+0x1.e019c2p-1
+-0x1.3e1dc2p+2
+0x1.dfe8ap-1
+-0x1.657f3cp+1
+0x0p+0
+-0x1.2db716p+2
+0x0p+0
+-0x1.b7cc14p+1
+0x1.dfd3bap-1
+-0x1.b7cfb2p+1
+0x1.5c664cp+2
+-0x1.d101bep-1
+-0x1.657f3cp+1
+-0x1.d0eaeep-1
+-0x1.2db716p+2
+-0x1.ad3daep-2
+0x1.dfd3bap-1
+-0x1.b7ce5ep+1
+0x1.5c664cp+2
+-0x1.3e1dc2p+2
+-0x1.657f3cp+1
+-0x1.d0f2e6p-1
+0x0p+0
+-0x1.2db716p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.27c1f8p+0
+0x0p+0
+0x0p+0
+-0x1.121d7ap-2
+-0x1.27c1f8p+0
+-0x1.121d7ap-2
+-0x1.416f1cp+0
+0x0p+0
+-0x1.d20356p-2
+0x0p+0
+-0x1.cf521ap-2
+-0x1.416f1cp+0
+-0x1.416f1cp+0
+0x0p+0
+-0x1.ceedd4p-2
+0x0p+0
+-0x1.cf135ep-2
+-0x1.416f1cp+0
+-0x1.416f1cp+0
+0x0p+0
+-0x1.cf059p-2
+0x0p+0
+-0x1.cf0a44p-2
+-0x1.416f1cp+0
+-0x1.cf088ep-2
+-0x1.416f1cp+0
+0x0p+0
+0x0p+0
+-0x1.bd27a8p+1
+0x1.16ac9ep-2
+-0x1.64cd96p+0
+0x0p+0
+-0x1.64cd96p+0
+-0x1.dbe0d2p+0
+-0x1.bd27a8p+1
+-0x1.dbe0d2p+0
+0x1.16ac9ep-2
+-0x1.6d7168p-1
+-0x1.4326f6p+0
+-0x1.6d7168p-1
+-0x1.b0d3bp+1
+0x1.c5084cp-2
+-0x1.9d434ap+0
+0x0p+0
+-0x1.e893b8p+0
+-0x1.9d434ap+0
+-0x1.e8351cp+0
+-0x1.b09c94p+1
+-0x1.70e3f8p-1
+0x1.c71078p-2
+-0x1.6f7768p-1
+-0x1.67bd84p+0
+-0x1.b09c94p+1
+0x1.c71078p-2
+-0x1.9d434ap+0
+0x0p+0
+-0x1.e9253ap+0
+-0x1.9d434ap+0
+-0x1.e8d2bap+0
+-0x1.b066c2p+1
+-0x1.6ff73cp-1
+0x1.c911f8p-2
+-0x1.6f24dcp-1
+-0x1.67bd84p+0
+-0x1.b066c2p+1
+0x1.c911f8p-2
+-0x1.9d434ap+0
+0x0p+0
+-0x1.e9825p+0
+-0x1.9d434ap+0
+-0x1.e94516p+0
+-0x1.b03486p+1
+-0x1.6f6edp-1
+0x1.caf05cp-2
+-0x1.6eba44p-1
+-0x1.67bd84p+0
+-0x1.e9e4c4p+0
+-0x1.b03486p+1
+0x1.caf05cp-2
+-0x1.6efa04p-1
+-0x1.67bd84p+0
+-0x1.9d434ap+0
+0x0p+0
+-0x1.0116eep+2
+-0x1.936fdap-1
+-0x1.779c3p+2
+-0x1.936fdap-1
+-0x1.867972p-1
+-0x1.06a636p+2
+-0x1.867c0ep-1
+-0x1.7c12p+2
+-0x1.867bacp-1
+-0x1.7c12p+2
+-0x1.06a636p+2
+0x1.46bfbep-12
+0x1.2d28a2p-12
+0x0p+0
+0x1.e18b3p-15
+0x1.46bfbep-12
+0x1.e18b3p-15
+0x1.2d28a2p-12
+-0x1.625f78p-7
+0x1.83054p-3
+-0x1.625f78p-7
+0x1.6e1ad8p-11
+0x1.614f34p-11
+0x1.d008dep-13
+0x1.2dc01ap-10
+0x1.0ca63ep-13
+0x0p+0
+0x1.0b30ep-13
+0x1.76ae6ep-11
+-0x1.1b9706p-6
+0x1.58ad36p-11
+-0x1.1b4e8p-6
+0x1.c87164p-3
+0x1.0a7f3ep-13
+0x1.76ae6ep-11
+0x1.58ad36p-11
+-0x1.1b6762p-6
+0x1.c87164p-3
+0x0p+0
+0x1.5ec9fep+0
+-0x1.962944p-1
+-0x1.0abde8p+2
+-0x1.962944p-1
+-0x1.acb368p-1
+0x1.6a67e2p+0
+-0x1.aca5d8p-1
+-0x1.0e9b8ap+2
+-0x1.aca8a8p-1
+-0x1.0e9b8ap+2
+0x1.6a67e2p+0
+0x1.fe6d58p-4
+0x0p+0
+0x1.54dce2p-4
+0x1.fe6d58p-4
+0x1.83982cp-5
+0x1.54dce2p-4
+0x1.f078ep-6
+0x1.83982cp-5
+0x1.32173ep-7
+0x1.f078ep-6
+-0x1.0aa2a4p-7
+0x1.32173ep-7
+-0x1.d7f4cep-6
+-0x1.0aa2a4p-7
+-0x1.83b616p-5
+-0x1.d7f4cep-6
+-0x1.58b792p-4
+-0x1.83b616p-5
+-0x1.044448p-3
+-0x1.58b792p-4
+0x0p+0
+-0x1.044448p-3
+0x0p+0
+0x1.fcf48cp-4
+0x1.fd8e1ep-4
+0x1.5fc0a8p-4
+0x1.613f7p-4
+0x1.ca38ecp-5
+0x1.cbb3f2p-5
+0x1.37577ap-5
+0x1.386bep-5
+0x1.b6ec2cp-7
+0x1.bd8806p-7
+-0x1.9f9fc4p-7
+-0x1.98575cp-7
+-0x1.2c6328p-5
+-0x1.2ac73p-5
+-0x1.c3e92ap-5
+-0x1.c2653ep-5
+-0x1.61d5f8p-4
+-0x1.6082dp-4
+-0x1.04c8fap-3
+-0x1.042b8ep-3
+0x0p+0
+0x0p+0
+0x1.fc73bp-4
+0x1.fd0132p-4
+0x1.5feeb2p-4
+0x1.616b36p-4
+0x1.ca4f46p-5
+0x1.cbf8b4p-5
+0x1.36b0d4p-5
+0x1.37f2e6p-5
+0x1.b674f4p-7
+0x1.bdb344p-7
+-0x1.9f2398p-7
+-0x1.9815ep-7
+-0x1.2bd216p-5
+-0x1.2a5a52p-5
+-0x1.c407b2p-5
+-0x1.c2b508p-5
+-0x1.62153p-4
+-0x1.60c9p-4
+-0x1.047a74p-3
+-0x1.03ddd8p-3
+0x0p+0
+0x0p+0
+0x1.fbe656p-4
+0x1.fc7428p-4
+0x1.6030ap-4
+0x1.61a614p-4
+0x1.cabf38p-5
+0x1.cc615ep-5
+0x1.36643cp-5
+0x1.379df4p-5
+0x1.b66998p-7
+0x1.bdba32p-7
+-0x1.9f6896p-7
+-0x1.983e04p-7
+-0x1.2b9728p-5
+-0x1.2a157cp-5
+-0x1.c4635ap-5
+-0x1.c30f8p-5
+-0x1.625942p-4
+-0x1.610dep-4
+-0x1.042c6p-3
+-0x1.0390cap-3
+0x0p+0
+0x1.fb54a4p-4
+0x1.606806p-4
+0x1.cb1d7ep-5
+0x1.36163cp-5
+0x1.b68f2p-7
+-0x1.9f5efep-7
+-0x1.2b5268p-5
+-0x1.c4befcp-5
+-0x1.629c1cp-4
+-0x1.03defep-3
+0x0p+0
+-0x1.e2b92p-9
+-0x1.f5cdf2p-9
+-0x1.125e9p-8
+-0x1.3e1014p-8
+-0x1.77dfdap-8
+-0x1.a6ccfap-8
+-0x1.c90abap-8
+-0x1.deb6cp-8
+-0x1.e8ef6ep-8
+-0x1.ebf6aep-8
+0x0p+0
+0x0p+0
+0x1.2f36b8p+1
+-0x1.cdcf56p-2
+-0x1.3bb7f2p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.121d7ap-2
+0x0p+0
+-0x1.27c1f8p+0
+-0x1.dbe0d2p+0
+-0x1.64cd96p+0
+-0x1.bd27a8p+1
+-0x1.d792ecp-1
+-0x1.25bddcp+2
+-0x1.6072dcp+1
+-0x1.936fdap-1
+-0x1.0116eep+2
+-0x1.779c3p+2
+0x1.e18b3p-15
+0x0p+0
+0x1.46bfbep-12
+-0x1.625f78p-7
+0x1.2d28a2p-12
+0x1.83054p-3
+-0x1.6d7168p-1
+0x1.16ac9ep-2
+-0x1.4326f6p+0
+-0x1.a77c6ap+1
+0x1.e9767p-1
+0x1.53ef34p+2
+-0x1.962944p-1
+0x1.5ec9fep+0
+-0x1.0abde8p+2
+0x1.fe6d58p-4
+0x1.54dce2p-4
+0x1.83982cp-5
+0x1.f078ep-6
+0x1.32173ep-7
+-0x1.0aa2a4p-7
+-0x1.d7f4cep-6
+-0x1.83b616p-5
+-0x1.58b792p-4
+-0x1.044448p-3
+0x0p+0
+0x1.7cc302p+1
+0x0p+0
+0x1.6c710ep+1
+0x0p+0
+0x1.53ef34p+2
+0x0p+0
+0x1.5c664cp+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.80fddep+2
+0x0p+0
+0x1.752f2ep+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.482f38p+2
+0x0p+0
+0x1.41c3fp+2
+0x0p+0
+0x1.e9767p-1
+0x0p+0
+0x1.dfd3bap-1
+0x0p+0
+0x1.647188p+2
+0x0p+0
+0x1.644076p+2
+0x0p+0
+0x1.7542cp+2
+0x0p+0
+0x1.774bdcp+2
+0x0p+0
+0x1.16ac9ep-2
+0x0p+0
+0x1.caf05cp-2
+0x0p+0
+0x1.4155f8p+2
+0x0p+0
+0x1.383054p+2
+0x0p+0
+0x1.c3cc9p+1
+0x0p+0
+0x1.bec03p+1
+0x0p+0
+0x1.572d58p+2
+0x0p+0
+0x1.58015ap+2
+0x0p+0
+0x1.482f38p+2
+0x0p+0
+0x1.41c3fp+2
+0x0p+0
+0x1.1b2782p+2
+0x0p+0
+0x1.17a684p+2
+0x0p+0
+0x1.38ec5p+2
+0x0p+0
+0x1.2acee4p+2
+0x0p+0
+0x1.6717c4p+1
+0x0p+0
+0x1.740ae6p+1
+0x0p+0
+0x1.b18768p+0
+0x0p+0
+0x1.91a28p+0
+0x0p+0
+0x1.5f5a8ep+2
+0x0p+0
+0x1.5c8aap+2
+0x0p+0
+0x1.0ec39cp+1
+0x0p+0
+0x1.070858p+1
+0x0p+0
+0x1.5ec9fep+0
+0x0p+0
+0x1.6a67e2p+0
+0x0p+0
+0x1.a8386p-2
+0x0p+0
+0x1.60db6p-2
+0x0p+0
+0x1.5fb1bap+2
+0x0p+0
+0x1.61504p+2
+0x0p+0
+0x1.c3cc9p+1
+0x0p+0
+0x1.bec03p+1
+0x0p+0
+0x1.22119p+1
+0x0p+0
+0x1.16f3p+1
+0x0p+0
+0x1.54dce2p-4
+0x0p+0
+0x1.606806p-4
+0x0p+0
+0x1.8cbcd8p+2
+0x0p+0
+0x1.8c9546p+2
+-0x1.06a6p-8
+-0x1.0f922cp-8
+-0x1.0f922cp-8
+-0x1.261b8cp-8
+-0x1.261b8cp-8
+-0x1.506c5cp-8
+-0x1.506c5cp-8
+-0x1.88984p-8
+-0x1.88984p-8
+-0x1.b59854p-8
+-0x1.b59854p-8
+-0x1.d5ea3p-8
+-0x1.d5ea3p-8
+-0x1.ea2972p-8
+-0x1.ea2972p-8
+-0x1.f3801ap-8
+-0x1.f3801ap-8
+-0x1.f62c7ap-8
+-0x1.1c7deap-8
+-0x1.237dd8p-8
+-0x1.38bf34p-8
+-0x1.073634p-8
+-0x1.23c3bp-8
+-0x1.368aa8p-8
+-0x1.5ab95ap-8
+-0x1.fed774p-9
+-0x1.366738p-8
+-0x1.5c2b8cp-8
+-0x1.8491d4p-8
+-0x1.0dae96p-8
+-0x1.5a9ae6p-8
+-0x1.9e5122p-8
+-0x1.ba8a8ap-8
+-0x1.3e7362p-8
+-0x1.9a32cp-8
+-0x1.c4ba9p-8
+-0x1.02631ap-7
+-0x1.5ab9d6p-8
+-0x1.c48296p-8
+-0x1.e07c0ep-8
+-0x1.176e9ap-7
+-0x1.76daa6p-8
+-0x1.e224p-8
+-0x1.f2b968p-8
+-0x1.1ff66ap-7
+-0x1.95a87p-8
+-0x1.f53578p-8
+-0x1.fa8a9ep-8
+-0x1.1d664p-7
+-0x1.b56beap-8
+-0x1.fd2722p-8
+-0x1.fabe3p-8
+-0x1.1121a8p-7
+-0x1.d5d4a6p-8
+-0x1.1c31aep-8
+-0x1.23ac6ep-8
+-0x1.38552p-8
+-0x1.0782ap-8
+-0x1.23e514p-8
+-0x1.3783dap-8
+-0x1.5a9352p-8
+-0x1.00ac2p-8
+-0x1.3741b2p-8
+-0x1.5f212p-8
+-0x1.84fc16p-8
+-0x1.111302p-8
+-0x1.5d4824p-8
+-0x1.9be572p-8
+-0x1.bc90bap-8
+-0x1.3cb072p-8
+-0x1.985bacp-8
+-0x1.c4a56cp-8
+-0x1.010b08p-7
+-0x1.5b7ca6p-8
+-0x1.c42cf8p-8
+-0x1.e15ed2p-8
+-0x1.16c18cp-7
+-0x1.78bf68p-8
+-0x1.e2d0e4p-8
+-0x1.f3b334p-8
+-0x1.1fca4ep-7
+-0x1.97a4a4p-8
+-0x1.f6195cp-8
+-0x1.fba546p-8
+-0x1.1d769p-7
+-0x1.b747ecp-8
+-0x1.fe2fdp-8
+-0x1.fcb2b6p-8
+-0x1.116dbap-7
+-0x1.d83888p-8
+-0x1.1bf292p-8
+-0x1.23ebe6p-8
+-0x1.37fb18p-8
+-0x1.07dcfap-8
+-0x1.2411a2p-8
+-0x1.38a38cp-8
+-0x1.5a78d4p-8
+-0x1.021298p-8
+-0x1.3843cap-8
+-0x1.613ca4p-8
+-0x1.858aa6p-8
+-0x1.13a13cp-8
+-0x1.5f3f6ap-8
+-0x1.9a4ab8p-8
+-0x1.bde1bp-8
+-0x1.3bbd16p-8
+-0x1.972a7cp-8
+-0x1.c47e86p-8
+-0x1.00047p-7
+-0x1.5c30b4p-8
+-0x1.c3daf6p-8
+-0x1.e21a8cp-8
+-0x1.16161ep-7
+-0x1.7a7dap-8
+-0x1.e35d8p-8
+-0x1.f4a446p-8
+-0x1.1f90bp-7
+-0x1.9992ecp-8
+-0x1.f6f03p-8
+-0x1.fccba8p-8
+-0x1.1d8038p-7
+-0x1.b92fe6p-8
+-0x1.ff43bep-8
+-0x1.fe86b6p-8
+-0x1.11c064p-7
+-0x1.da7a08p-8
+-0x1.1bc642p-8
+-0x1.24354ep-8
+-0x1.39c7cap-8
+-0x1.62cbe4p-8
+-0x1.9940cap-8
+-0x1.c454d6p-8
+-0x1.e2ba7cp-8
+-0x1.f588cp-8
+-0x1.fdfb48p-8
+-0x1.001e2ep-7
+0x0p+0
+0x0p+0
+0x1.7ce814p+1
+-0x1.ad3daep-2
+0x1.dfd3bap-1
+-0x1.657f3cp+1
+0x1.dfd3bap-1
+-0x1.3e1dc2p+2
+0x1.dfd3bap-1
+-0x1.657f3cp+1
+0x0p+0
+0x1.dfd3bap-1
+-0x1.b7ce5ep+1
+0x1.5c664cp+2
+-0x1.b7ce5ep+1
+-0x1.657f3cp+1
+-0x1.d0f2e6p-1
+-0x1.2db716p+2
+-0x1.d0f2e6p-1
+-0x1.95ad7p-2
+0x1.d6894ep-1
+-0x1.6c9dap+1
+0x1.d667fcp-1
+-0x1.408392p+2
+0x1.d62c8ep-1
+-0x1.6c9814p+1
+0x0p+0
+-0x1.c812d2p+1
+0x1.d62c8ep-1
+-0x1.c80688p+1
+0x1.64dd64p+2
+-0x1.cc9c6ep-1
+-0x1.6c9814p+1
+-0x1.cd2382p-1
+-0x1.35b05p+2
+-0x1.95ad7p-2
+0x1.d62c8ep-1
+-0x1.6c9814p+1
+0x1.d6094p-1
+-0x1.408392p+2
+0x1.d5e686p-1
+-0x1.6c94d6p+1
+0x0p+0
+-0x1.c7fcdcp+1
+0x1.d5e686p-1
+-0x1.c80512p+1
+0x1.64dd64p+2
+-0x1.ccf316p-1
+-0x1.6c94d6p+1
+-0x1.ccf512p-1
+-0x1.35b05p+2
+-0x1.95ad7p-2
+0x1.d5e686p-1
+-0x1.6c94d6p+1
+0x1.d5c008p-1
+-0x1.408392p+2
+0x1.d5af0cp-1
+-0x1.6c9342p+1
+0x0p+0
+-0x1.c80212p+1
+0x1.d5af0cp-1
+-0x1.c805e2p+1
+0x1.64dd64p+2
+-0x1.ccf426p-1
+-0x1.6c9342p+1
+-0x1.ccecc6p-1
+-0x1.35b05p+2
+-0x1.95ad7p-2
+0x1.d5af0cp-1
+-0x1.c80472p+1
+0x1.64dd64p+2
+-0x1.408392p+2
+-0x1.6c9342p+1
+-0x1.ccef52p-1
+-0x1.35b05p+2
+0x0p+0
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.cf088ep-2
+-0x1.416f1cp+0
+-0x1.cf088ep-2
+-0x1.45e144p-1
+0x0p+0
+-0x1.44b98cp-1
+-0x1.5b1c4p+0
+-0x1.447da8p-1
+0x0p+0
+-0x1.44941ep-1
+-0x1.5b1c4p+0
+-0x1.448bbp-1
+0x0p+0
+-0x1.448ec8p-1
+-0x1.5b1c4p+0
+-0x1.448d96p-1
+-0x1.5b1c4p+0
+0x0p+0
+-0x1.b03486p+1
+0x1.c87164p-3
+-0x1.b03486p+1
+0x1.caf05cp-2
+0x1.c87164p-3
+0x1.caf05cp-2
+0x1.76ae6ep-11
+0x1.58ad36p-11
+-0x1.9d434ap+0
+-0x1.e9e4c4p+0
+-0x1.b03486p+1
+-0x1.e9e4c4p+0
+0x1.caf05cp-2
+-0x1.6efa04p-1
+-0x1.67bd84p+0
+-0x1.6efa04p-1
+0x1.c87164p-3
+-0x1.1b6762p-6
+0x1.58ad36p-11
+-0x1.1b6762p-6
+0x1.76ae6ep-11
+0x1.0a7f3ep-13
+0x0p+0
+0x1.0a7f3ep-13
+-0x1.90c62cp+1
+0x1.b9cdap-3
+-0x1.900cp+1
+0x1.0b3936p-1
+0x1.8b20eep-3
+0x1.0b3936p-1
+0x1.31929cp-8
+0x1.2dd236p-8
+0x1.1dd42ep-8
+0x1.4192a6p-8
+-0x1.f3395p+0
+-0x1.d5b8fep+0
+-0x1.f3214ap+0
+-0x1.900cp+1
+-0x1.7b7e3ep-1
+0x1.03638p-1
+-0x1.7e8e7ap-1
+-0x1.8c5412p+0
+-0x1.a32966p-4
+0x1.97ba82p-3
+-0x1.d2725ep-4
+0x1.2d77a8p-8
+0x1.d7623ap-11
+0x1.31ee12p-8
+0x1.e24fb2p-11
+0x0p+0
+-0x1.900cp+1
+0x1.97ba82p-3
+-0x1.8f6b74p+1
+0x1.03638p-1
+0x1.700324p-3
+0x1.03638p-1
+0x1.31ee12p-8
+0x1.2d77a8p-8
+0x1.05240ep-8
+0x1.5a5702p-8
+-0x1.f3efe8p+0
+-0x1.d5b8fep+0
+-0x1.f3a84ap+0
+-0x1.8f6b74p+1
+-0x1.7d7ab4p-1
+0x1.f9629cp-2
+-0x1.80429ep-1
+-0x1.8c5412p+0
+-0x1.c1d848p-4
+0x1.7cdd34p-3
+-0x1.ea2fa8p-4
+0x1.2c3d64p-8
+0x1.ddc128p-11
+0x1.33435cp-8
+0x1.dda89ap-11
+0x0p+0
+-0x1.8f6b74p+1
+0x1.7cdd34p-3
+-0x1.8ee0bap+1
+0x1.f9629cp-2
+0x1.5accb4p-3
+0x1.f9629cp-2
+0x1.33435cp-8
+0x1.2c3d64p-8
+0x1.eb7abap-9
+0x1.69f6dep-8
+-0x1.f46db6p+0
+-0x1.d5b8fep+0
+-0x1.f42952p+0
+-0x1.8ee0bap+1
+-0x1.7f4882p-1
+0x1.edd376p-2
+-0x1.81ad96p-1
+-0x1.8c5412p+0
+-0x1.dc4542p-4
+0x1.675f3p-3
+-0x1.fe0a92p-4
+0x1.2ab2dp-8
+0x1.dd5dbap-11
+0x1.3517b4p-8
+0x1.dba2e6p-11
+0x0p+0
+-0x1.f4d3acp+0
+-0x1.8ee0bap+1
+0x1.edd376p-2
+-0x1.80d5d4p-1
+-0x1.8c5412p+0
+0x1.675f3p-3
+-0x1.f27ea2p-4
+0x1.2ab2dp-8
+0x1.3517b4p-8
+0x1.dc79b6p-11
+0x0p+0
+-0x1.d5b8fep+0
+-0x1.06a636p+2
+-0x1.867bacp-1
+-0x1.7c12p+2
+-0x1.867bacp-1
+-0x1.79864p-1
+-0x1.0c357ep+2
+-0x1.798888p-1
+-0x1.8087dp+2
+-0x1.79882ap-1
+-0x1.8087dp+2
+-0x1.0c357ep+2
+0x1.6a67e2p+0
+-0x1.aca8a8p-1
+-0x1.0e9b8ap+2
+-0x1.aca8a8p-1
+-0x1.c32d9cp-1
+0x1.7605c6p+0
+-0x1.c32p-1
+-0x1.12792cp+2
+-0x1.c3225ep-1
+-0x1.12792cp+2
+0x1.7605c6p+0
+0x1.fb54a4p-4
+0x0p+0
+0x1.606806p-4
+0x1.fb54a4p-4
+0x1.cb1d7ep-5
+0x1.606806p-4
+0x1.36163cp-5
+0x1.cb1d7ep-5
+0x1.b68f2p-7
+0x1.36163cp-5
+-0x1.9f5efep-7
+0x1.b68f2p-7
+-0x1.2b5268p-5
+-0x1.9f5efep-7
+-0x1.c4befcp-5
+-0x1.2b5268p-5
+-0x1.629c1cp-4
+-0x1.c4befcp-5
+-0x1.03defep-3
+-0x1.629c1cp-4
+0x0p+0
+-0x1.03defep-3
+0x0p+0
+0x1.f8677ap-4
+0x1.f90546p-4
+0x1.6c983cp-4
+0x1.6dfd8ep-4
+0x1.0b56a8p-4
+0x1.0bf3e2p-4
+0x1.71644ep-5
+0x1.72da4cp-5
+0x1.1e51e8p-6
+0x1.227c9ap-6
+-0x1.1a3ea8p-6
+-0x1.150932p-6
+-0x1.687664p-5
+-0x1.66a862p-5
+-0x1.04f2bap-4
+-0x1.042342p-4
+-0x1.6d6472p-4
+-0x1.6c35d4p-4
+-0x1.036cbp-3
+-0x1.02cd2ap-3
+0x0p+0
+0x0p+0
+0x1.f7ecfp-4
+0x1.f879a4p-4
+0x1.6cd85ap-4
+0x1.6e3bfcp-4
+0x1.0b30bep-4
+0x1.0bea9cp-4
+0x1.70da74p-5
+0x1.727b8ap-5
+0x1.1d70c8p-6
+0x1.21f5b4p-6
+-0x1.19612cp-6
+-0x1.145006p-6
+-0x1.67f75ap-5
+-0x1.6649bep-5
+-0x1.04d72ap-4
+-0x1.04248ap-4
+-0x1.6db87cp-4
+-0x1.6c92ccp-4
+-0x1.031d28p-3
+-0x1.027e9p-3
+0x0p+0
+0x0p+0
+0x1.f761fp-4
+0x1.f7ee68p-4
+0x1.6d3152p-4
+0x1.6e8cb2p-4
+0x1.0b3cep-4
+0x1.0bf3f6p-4
+0x1.70aaf6p-5
+0x1.7241bp-5
+0x1.1cce1p-6
+0x1.215f98p-6
+-0x1.18e6f2p-6
+-0x1.13cd12p-6
+-0x1.67d17ep-5
+-0x1.6616fcp-5
+-0x1.04e19cp-4
+-0x1.042e6cp-4
+-0x1.6e12dep-4
+-0x1.6ced7p-4
+-0x1.02ce1ep-3
+-0x1.0230dcp-3
+0x0p+0
+0x1.f6d1aap-4
+0x1.6d7e4ep-4
+0x1.0b4102p-4
+0x1.707828p-5
+0x1.1c4764p-6
+-0x1.18484ap-6
+-0x1.679d64p-5
+-0x1.04ecb4p-4
+-0x1.6e6b6ap-4
+-0x1.027fa6p-3
+0x0p+0
+-0x1.06a6p-8
+-0x1.0f922cp-8
+-0x1.261b8cp-8
+-0x1.506c5cp-8
+-0x1.88984p-8
+-0x1.b59854p-8
+-0x1.d5ea3p-8
+-0x1.ea2972p-8
+-0x1.f3801ap-8
+-0x1.f62c7ap-8
+0x0p+0
+0x0p+0
+0x1.560f66p+1
+-0x1.ad3daep-2
+-0x1.3e1dc2p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.cf088ep-2
+0x0p+0
+-0x1.416f1cp+0
+-0x1.e9e4c4p+0
+-0x1.9d434ap+0
+-0x1.b03486p+1
+-0x1.d0f2e6p-1
+-0x1.2db716p+2
+-0x1.657f3cp+1
+-0x1.867bacp-1
+-0x1.06a636p+2
+-0x1.7c12p+2
+0x1.0a7f3ep-13
+0x0p+0
+0x1.76ae6ep-11
+-0x1.1b6762p-6
+0x1.58ad36p-11
+0x1.c87164p-3
+-0x1.6efa04p-1
+0x1.caf05cp-2
+-0x1.67bd84p+0
+-0x1.b7ce5ep+1
+0x1.dfd3bap-1
+0x1.5c664cp+2
+-0x1.aca8a8p-1
+0x1.6a67e2p+0
+-0x1.0e9b8ap+2
+0x1.fb54a4p-4
+0x1.606806p-4
+0x1.cb1d7ep-5
+0x1.36163cp-5
+0x1.b68f2p-7
+-0x1.9f5efep-7
+-0x1.2b5268p-5
+-0x1.c4befcp-5
+-0x1.629c1cp-4
+-0x1.03defep-3
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.2acee4p+2
+0x0p+0
+0x1.1cb176p+2
+0x0p+0
+0x1.6c710ep+1
+0x0p+0
+0x1.5c3afap+1
+0x0p+0
+0x1.5c664cp+2
+0x0p+0
+0x1.64dd64p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.752f2ep+2
+0x0p+0
+0x1.698e04p+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.41c3fp+2
+0x0p+0
+0x1.3b58a6p+2
+0x0p+0
+0x1.dfd3bap-1
+0x0p+0
+0x1.d5af0cp-1
+0x0p+0
+0x1.644076p+2
+0x0p+0
+0x1.6204fcp+2
+0x0p+0
+0x1.774bdcp+2
+0x0p+0
+0x1.78c4ep+2
+0x0p+0
+0x1.caf05cp-2
+0x0p+0
+0x1.edd376p-2
+0x0p+0
+0x1.383054p+2
+0x0p+0
+0x1.2f0ab2p+2
+0x0p+0
+0x1.bec03p+1
+0x0p+0
+0x1.b7ac2ap+1
+0x0p+0
+0x1.58015ap+2
+0x0p+0
+0x1.5881ccp+2
+0x0p+0
+0x1.17a684p+2
+0x0p+0
+0x1.14eaccp+2
+0x0p+0
+0x1.2acee4p+2
+0x0p+0
+0x1.1cb176p+2
+0x0p+0
+0x1.740ae6p+1
+0x0p+0
+0x1.955eb2p+1
+0x0p+0
+0x1.91a28p+0
+0x0p+0
+0x1.71bd98p+0
+0x0p+0
+0x1.5c8aap+2
+0x0p+0
+0x1.59bb6ap+2
+0x0p+0
+0x1.070858p+1
+0x0p+0
+0x1.fe9a28p+0
+0x0p+0
+0x1.6a67e2p+0
+0x0p+0
+0x1.7605c6p+0
+0x0p+0
+0x1.60db6p-2
+0x0p+0
+0x1.197e6p-2
+0x0p+0
+0x1.3d2cep-2
+0x0p+0
+0x1.32d05ep-2
+0x0p+0
+0x1.61504p+2
+0x0p+0
+0x1.62eebp+2
+0x0p+0
+0x1.bec03p+1
+0x0p+0
+0x1.b7ac2ap+1
+0x0p+0
+0x1.16f3p+1
+0x0p+0
+0x1.0bd47p+1
+0x0p+0
+0x1.606806p-4
+0x0p+0
+0x1.6d7e4ep-4
+0x0p+0
+0x1.8c9546p+2
+0x0p+0
+0x1.8c6608p+2
+0x0p+0
+-0x1.7ef2bp+2
+-0x1.7ef2bp+2
+0x0p+0
+-0x1.7e5bd4p+2
+0x0p+0
+-0x1.7e367p+2
+0x0p+0
+0x0p+0
+-0x1.806512p+2
+-0x1.7e367p+2
+0x0p+0
+0x1.3e946p-2
+0x0p+0
+0x1.1baa4p-2
+-0x1.1bc642p-8
+-0x1.24354ep-8
+-0x1.24354ep-8
+-0x1.39c7cap-8
+-0x1.39c7cap-8
+-0x1.62cbe4p-8
+-0x1.62cbe4p-8
+-0x1.9940cap-8
+-0x1.9940cap-8
+-0x1.c454d6p-8
+-0x1.c454d6p-8
+-0x1.e2ba7cp-8
+-0x1.e2ba7cp-8
+-0x1.f588cp-8
+-0x1.f588cp-8
+-0x1.fdfb48p-8
+-0x1.fdfb48p-8
+-0x1.001e2ep-7
+-0x1.319e2cp-8
+-0x1.3820fap-8
+-0x1.4d4096p-8
+-0x1.1c789ep-8
+-0x1.387424p-8
+-0x1.4a36e6p-8
+-0x1.6e1ddcp-8
+-0x1.146502p-8
+-0x1.4a26b6p-8
+-0x1.6e8b14p-8
+-0x1.964aeap-8
+-0x1.2215c2p-8
+-0x1.6d0efep-8
+-0x1.aef9acp-8
+-0x1.ca3a9p-8
+-0x1.51e1eap-8
+-0x1.aaf85cp-8
+-0x1.d37712p-8
+-0x1.090fc6p-7
+-0x1.6ce37cp-8
+-0x1.d35b72p-8
+-0x1.ed4c5ap-8
+-0x1.1cf08cp-7
+-0x1.877bdap-8
+-0x1.ef058cp-8
+-0x1.fe18b6p-8
+-0x1.248c7p-7
+-0x1.a4b5dp-8
+-0x1.0049b6p-7
+-0x1.0282e6p-7
+-0x1.219a9cp-7
+-0x1.c2d61ap-8
+-0x1.03cbfcp-7
+-0x1.02670ap-7
+-0x1.158582p-7
+-0x1.e189eep-8
+-0x1.314528p-8
+-0x1.384abp-8
+-0x1.4ccb58p-8
+-0x1.1cbe8cp-8
+-0x1.3889a8p-8
+-0x1.4b2eccp-8
+-0x1.6dedccp-8
+-0x1.15a246p-8
+-0x1.4afe4p-8
+-0x1.7177fcp-8
+-0x1.96b784p-8
+-0x1.256c48p-8
+-0x1.6fb314p-8
+-0x1.ac8b16p-8
+-0x1.cc3766p-8
+-0x1.501c36p-8
+-0x1.a91eaap-8
+-0x1.d35ef8p-8
+-0x1.07ba24p-7
+-0x1.6d9bd8p-8
+-0x1.d301ccp-8
+-0x1.ee2db2p-8
+-0x1.1c4642p-7
+-0x1.8955b4p-8
+-0x1.efaff8p-8
+-0x1.ff0bdep-8
+-0x1.2466ap-7
+-0x1.a69c78p-8
+-0x1.00b8dp-7
+-0x1.030a4cp-7
+-0x1.21ae02p-7
+-0x1.c49a88p-8
+-0x1.044c08p-7
+-0x1.035dcep-7
+-0x1.15d16ep-7
+-0x1.e3dea4p-8
+-0x1.310044p-8
+-0x1.387ff2p-8
+-0x1.4c6714p-8
+-0x1.1d1326p-8
+-0x1.38b0dp-8
+-0x1.4c4c3p-8
+-0x1.6dcbdcp-8
+-0x1.17088p-8
+-0x1.4bfe36p-8
+-0x1.7389fap-8
+-0x1.974182p-8
+-0x1.27f38p-8
+-0x1.719e0ep-8
+-0x1.aaeee2p-8
+-0x1.cd7fccp-8
+-0x1.4f239ap-8
+-0x1.a7ea74p-8
+-0x1.d3355ap-8
+-0x1.06b5cap-7
+-0x1.6e45aap-8
+-0x1.d2abfcp-8
+-0x1.eee678p-8
+-0x1.1b9e9ep-7
+-0x1.8b05a6p-8
+-0x1.f03acep-8
+-0x1.fff46p-8
+-0x1.24331cp-7
+-0x1.a8745ep-8
+-0x1.012178p-7
+-0x1.039a82p-7
+-0x1.21bc74p-7
+-0x1.c66d9cp-8
+-0x1.04d278p-7
+-0x1.04431cp-7
+-0x1.1624a2p-7
+-0x1.e60eb4p-8
+-0x1.30c96p-8
+-0x1.38c3dp-8
+-0x1.4d713cp-8
+-0x1.750e6ep-8
+-0x1.a9e316p-8
+-0x1.d306f6p-8
+-0x1.ef821p-8
+-0x1.006a68p-7
+-0x1.042d18p-7
+-0x1.051b0ep-7
+0x0p+0
+0x0p+0
+-0x1.d5b8fep+0
+-0x1.5b1c4p+0
+-0x1.d5b8fep+0
+-0x1.d5b8fep+0
+0x0p+0
+-0x1.8ee0bap+1
+0x1.675f3p-3
+0x1.675f3p-3
+0x1.edd376p-2
+0x1.3517b4p-8
+0x1.2ab2dp-8
+-0x1.d5b8fep+0
+-0x1.f4d3acp+0
+-0x1.8ee0bap+1
+-0x1.f4d3acp+0
+0x1.675f3p-3
+-0x1.f27ea2p-4
+0x1.2ab2dp-8
+-0x1.f27ea2p-4
+0x1.3517b4p-8
+0x1.dc79b6p-11
+0x0p+0
+0x1.dc79b6p-11
+0x1.edd376p-2
+-0x1.80d5d4p-1
+-0x1.8c5412p+0
+-0x1.80d5d4p-1
+-0x1.5b1c4p+0
+-0x1.448d96p-1
+0x0p+0
+-0x1.448d96p-1
+-0x1.fb2802p-3
+-0x1.da97ep+0
+-0x1.45bec4p+0
+-0x1.da8bb6p+0
+-0x1.407a84p+0
+-0x1.d835f8p+0
+-0x1.d835f8p+0
+0x0p+0
+-0x1.6ec9ep+1
+0x1.75ca02p-3
+0x1.5d6d4ep-3
+0x1.1a980ap-1
+0x1.435ccap-7
+0x1.3e2a5cp-7
+0x1.1e34f6p-7
+0x1.637dep-7
+-0x1.007b92p+1
+-0x1.d835f8p+0
+-0x1.013d26p+1
+-0x1.6e756ep+1
+-0x1.aea466p-3
+0x1.699594p-3
+-0x1.b65ebp-3
+0x1.3d647ap-7
+0x1.fc3384p-10
+0x1.4464e6p-7
+0x1.e96c46p-10
+0x0p+0
+-0x1.8ec13ap-1
+0x1.15f7f2p-1
+-0x1.90ccb6p-1
+-0x1.b0eaap+0
+-0x1.8e2ae2p-1
+-0x1.407a84p+0
+-0x1.8c57ecp-1
+0x0p+0
+-0x1.fb2802p-3
+-0x1.d835f8p+0
+-0x1.407a84p+0
+-0x1.d835f8p+0
+-0x1.3c3cc8p+0
+-0x1.d65b5p+0
+-0x1.d65b5p+0
+0x0p+0
+-0x1.6e756ep+1
+0x1.699594p-3
+0x1.5433ccp-3
+0x1.15f7f2p-1
+0x1.4464e6p-7
+0x1.3d647ap-7
+0x1.2bfbe4p-7
+0x1.55e948p-7
+-0x1.012f44p+1
+-0x1.d65b5p+0
+-0x1.01dd4ep+1
+-0x1.6e2da6p+1
+-0x1.b30c26p-3
+0x1.5efa9p-3
+-0x1.bbf5dap-3
+0x1.3d521ep-7
+0x1.efd9bep-10
+0x1.44a59cp-7
+0x1.ed1c48p-10
+0x0p+0
+-0x1.90125ep-1
+0x1.121156p-1
+-0x1.91ea12p-1
+-0x1.b0eaap+0
+-0x1.8c50fap-1
+-0x1.3c3cc8p+0
+-0x1.8a8e6ap-1
+0x0p+0
+-0x1.fb2802p-3
+-0x1.d65b5p+0
+-0x1.3c3cc8p+0
+-0x1.d65b5p+0
+-0x1.38cea8p+0
+-0x1.d4e18cp+0
+-0x1.d4e18cp+0
+0x0p+0
+-0x1.6e2da6p+1
+0x1.5efa9p-3
+0x1.4bd10cp-3
+0x1.121156p-1
+0x1.44a59cp-7
+0x1.3d521ep-7
+0x1.3114dep-7
+0x1.50faaap-7
+-0x1.01da36p+1
+-0x1.d4e18cp+0
+-0x1.026bf6p+1
+-0x1.6dee76p+1
+-0x1.b8f608p-3
+0x1.555fa8p-3
+-0x1.c0bfeep-3
+0x1.3d79cap-7
+0x1.ee4a18p-10
+0x1.44a77ep-7
+0x1.ecd676p-10
+0x0p+0
+-0x1.9142eep-1
+0x1.0ec024p-1
+-0x1.92d3fep-1
+-0x1.b0eaap+0
+-0x1.8b2fd4p-1
+-0x1.38cea8p+0
+-0x1.8985e4p-1
+0x0p+0
+-0x1.fb2802p-3
+-0x1.d4e18cp+0
+-0x1.026d02p+1
+-0x1.6dee76p+1
+0x1.555fa8p-3
+-0x1.be20a4p-3
+0x1.3d79cap-7
+0x1.44a77ep-7
+0x1.ed91a4p-10
+0x0p+0
+0x1.0ec024p-1
+-0x1.9245aep-1
+-0x1.b0eaap+0
+0x0p+0
+-0x1.38cea8p+0
+-0x1.8a1c88p-1
+0x0p+0
+0x1.a3c0c2p+1
+-0x1.95ad7p-2
+0x1.64dd64p+2
+-0x1.95ad7p-2
+0x1.d5af0cp-1
+-0x1.6c9342p+1
+0x1.d5af0cp-1
+-0x1.6c9342p+1
+0x0p+0
+0x1.d5af0cp-1
+-0x1.c80472p+1
+0x1.64dd64p+2
+-0x1.c80472p+1
+-0x1.6c9342p+1
+-0x1.ccef52p-1
+-0x1.35b05p+2
+-0x1.ccef52p-1
+-0x1.a37df4p-1
+0x1.68e7d4p+2
+-0x1.a37df4p-1
+0x1.c1c45cp-1
+-0x1.7591d2p+1
+0x1.c1c45cp-1
+-0x1.7591d2p+1
+0x0p+0
+-0x1.d6027p+1
+0x1.c1c45cp-1
+-0x1.d587f8p+1
+0x1.68a92ap+2
+-0x1.cb7868p-1
+-0x1.7591d2p+1
+-0x1.cadfc4p-1
+-0x1.3da98ap+2
+-0x1.a37df4p-1
+0x1.68a92ap+2
+-0x1.a37df4p-1
+0x1.c1c45cp-1
+-0x1.7591d2p+1
+0x1.c1c45cp-1
+-0x1.7591d2p+1
+0x0p+0
+-0x1.d61d3ap+1
+0x1.c1c45cp-1
+-0x1.d5e73cp+1
+0x1.68779ep+2
+-0x1.cb169ap-1
+-0x1.7591d2p+1
+-0x1.cb02eap-1
+-0x1.3da98ap+2
+-0x1.a37df4p-1
+0x1.68779ep+2
+-0x1.a37df4p-1
+0x1.c1c45cp-1
+-0x1.7591d2p+1
+0x1.c1c1aep-1
+-0x1.7591d2p+1
+0x0p+0
+-0x1.d5e03ap+1
+0x1.c1c1aep-1
+-0x1.d5e2cep+1
+0x1.68501ep+2
+-0x1.cb09dep-1
+-0x1.7591d2p+1
+-0x1.cb078p-1
+-0x1.3da98ap+2
+-0x1.a37df4p-1
+0x1.c1c1aep-1
+-0x1.d5ccb2p+1
+-0x1.7591d2p+1
+-0x1.cb085ap-1
+-0x1.3da98ap+2
+0x0p+0
+0x1.68501ep+2
+-0x1.42e962p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.806512p+2
+0x0p+0
+-0x1.0c357ep+2
+-0x1.79882ap-1
+-0x1.806512p+2
+-0x1.79882ap-1
+-0x1.879d64p+2
+0x0p+0
+-0x1.840b04p-1
+-0x1.11c4c6p+2
+-0x1.83fadp-1
+-0x1.879d64p+2
+-0x1.879d64p+2
+0x0p+0
+-0x1.8fdbbep-1
+-0x1.11c4c6p+2
+-0x1.8b8a2p-1
+-0x1.879d64p+2
+-0x1.879d64p+2
+0x0p+0
+-0x1.8d1a82p-1
+-0x1.11c4c6p+2
+-0x1.8c8a02p-1
+-0x1.879d64p+2
+-0x1.8cbe42p-1
+-0x1.879d64p+2
+0x0p+0
+-0x1.11c4c6p+2
+0x1.7605c6p+0
+-0x1.c3225ep-1
+-0x1.12792cp+2
+-0x1.c3225ep-1
+-0x1.d9a226p-1
+0x1.81a3aap+0
+-0x1.d9949ep-1
+-0x1.1656cep+2
+-0x1.d9972ep-1
+-0x1.1656cep+2
+0x1.81a3aap+0
+0x1.f6d1aap-4
+0x0p+0
+0x1.6d7e4ep-4
+0x1.f6d1aap-4
+0x1.0b4102p-4
+0x1.6d7e4ep-4
+0x1.707828p-5
+0x1.0b4102p-4
+0x1.1c4764p-6
+0x1.707828p-5
+-0x1.18484ap-6
+0x1.1c4764p-6
+-0x1.679d64p-5
+-0x1.18484ap-6
+-0x1.04ecb4p-4
+-0x1.679d64p-5
+-0x1.6e6b6ap-4
+-0x1.04ecb4p-4
+-0x1.027fa6p-3
+-0x1.6e6b6ap-4
+0x0p+0
+-0x1.027fa6p-3
+0x0p+0
+0x1.f2a2a2p-4
+0x1.f3416ep-4
+0x1.7bdb46p-4
+0x1.7d18ccp-4
+0x1.3195a6p-4
+0x1.3218ccp-4
+0x1.a92be8p-5
+0x1.ab11d8p-5
+0x1.5942f4p-6
+0x1.5e76b6p-6
+-0x1.5c3eccp-6
+-0x1.556dd4p-6
+-0x1.a23488p-5
+-0x1.a01d9ap-5
+-0x1.286c64p-4
+-0x1.278af6p-4
+-0x1.7bc2e6p-4
+-0x1.7abb14p-4
+-0x1.011c12p-3
+-0x1.008184p-3
+0x0p+0
+0x0p+0
+0x1.f23418p-4
+0x1.f2bb7p-4
+0x1.7c2708p-4
+0x1.7d6586p-4
+0x1.313c36p-4
+0x1.31df7ep-4
+0x1.a8bf7cp-5
+0x1.aad0fcp-5
+0x1.57c9bp-6
+0x1.5d59ap-6
+-0x1.5ad0aap-6
+-0x1.54254cp-6
+-0x1.a1c6eep-5
+-0x1.9fcda8p-5
+-0x1.28243cp-4
+-0x1.276312p-4
+-0x1.7c2268p-4
+-0x1.7b274p-4
+-0x1.00cf2ep-3
+-0x1.003548p-3
+0x0p+0
+0x0p+0
+0x1.f1b204p-4
+0x1.f2370ep-4
+0x1.7c9092p-4
+0x1.7dc684p-4
+0x1.3119dcp-4
+0x1.31baeep-4
+0x1.a8ad16p-5
+0x1.aab2a4p-5
+0x1.569634p-6
+0x1.5c3172p-6
+-0x1.59c546p-6
+-0x1.5313eap-6
+-0x1.a1b4a4p-5
+-0x1.9fac2ep-5
+-0x1.280a98p-4
+-0x1.274808p-4
+-0x1.7c8ad6p-4
+-0x1.7b900ep-4
+-0x1.008286p-3
+-0x1.ffd436p-4
+0x0p+0
+0x1.f12912p-4
+0x1.7ced12p-4
+0x1.30f088p-4
+0x1.a8936ap-5
+0x1.5580e6p-6
+-0x1.589724p-6
+-0x1.a18e68p-5
+-0x1.27f21p-4
+-0x1.7cf146p-4
+-0x1.0036bcp-3
+0x0p+0
+-0x1.1bc642p-8
+-0x1.24354ep-8
+-0x1.39c7cap-8
+-0x1.62cbe4p-8
+-0x1.9940cap-8
+-0x1.c454d6p-8
+-0x1.e2ba7cp-8
+-0x1.f588cp-8
+-0x1.fdfb48p-8
+-0x1.001e2ep-7
+0x0p+0
+0x0p+0
+0x1.7ce814p+1
+-0x1.95ad7p-2
+-0x1.408392p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.448d96p-1
+0x0p+0
+-0x1.5b1c4p+0
+-0x1.f4d3acp+0
+-0x1.d5b8fep+0
+-0x1.8ee0bap+1
+-0x1.ccef52p-1
+-0x1.35b05p+2
+-0x1.6c9342p+1
+-0x1.79882ap-1
+-0x1.0c357ep+2
+-0x1.806512p+2
+0x1.dc79b6p-11
+0x0p+0
+0x1.3517b4p-8
+-0x1.f27ea2p-4
+0x1.2ab2dp-8
+0x1.675f3p-3
+-0x1.80d5d4p-1
+0x1.edd376p-2
+-0x1.8c5412p+0
+-0x1.c80472p+1
+0x1.d5af0cp-1
+0x1.64dd64p+2
+-0x1.c3225ep-1
+0x1.7605c6p+0
+-0x1.12792cp+2
+0x1.f6d1aap-4
+0x1.6d7e4ep-4
+0x1.0b4102p-4
+0x1.707828p-5
+0x1.1c4764p-6
+-0x1.18484ap-6
+-0x1.679d64p-5
+-0x1.04ecb4p-4
+-0x1.6e6b6ap-4
+-0x1.027fa6p-3
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+-0x1.fb2802p-3
+0x0p+0
+0x1.1cb176p+2
+0x0p+0
+0x1.1ce754p+2
+0x0p+0
+0x1.5c3afap+1
+0x0p+0
+0x1.4e72bap+1
+0x0p+0
+0x1.64dd64p+2
+0x0p+0
+0x1.68501ep+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.698e04p+2
+0x0p+0
+0x1.60dc24p+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.3b58a6p+2
+0x0p+0
+0x1.43ec0cp+2
+0x0p+0
+0x1.d5af0cp-1
+0x0p+0
+0x1.c1c1aep-1
+0x0p+0
+0x1.6204fcp+2
+0x0p+0
+0x1.5fd7p+2
+0x0p+0
+0x1.78c4ep+2
+0x0p+0
+0x1.5daff8p+2
+0x0p+0
+0x1.edd376p-2
+0x0p+0
+0x1.0ec024p-1
+0x0p+0
+0x1.2f0ab2p+2
+0x0p+0
+0x1.25e50ep+2
+0x0p+0
+0x1.b7ac2ap+1
+0x0p+0
+0x1.aead9ap+1
+0x0p+0
+0x1.5881ccp+2
+0x0p+0
+0x1.58beaap+2
+0x0p+0
+0x1.14eaccp+2
+0x0p+0
+0x1.10e934p+2
+0x0p+0
+0x1.1cb176p+2
+0x0p+0
+0x1.1ce754p+2
+0x0p+0
+0x1.955eb2p+1
+0x0p+0
+0x1.b650f6p+1
+0x0p+0
+0x1.71bd98p+0
+0x0p+0
+0x1.51d8bp+0
+0x0p+0
+0x1.59bb6ap+2
+0x0p+0
+0x1.56ecdp+2
+0x0p+0
+0x1.fe9a28p+0
+0x0p+0
+0x1.ef23ap+0
+0x0p+0
+0x1.7605c6p+0
+0x0p+0
+0x1.81a3aap+0
+0x0p+0
+0x1.1baa4p-2
+0x0p+0
+0x1.504a4p-3
+0x0p+0
+0x1.62eebp+2
+0x0p+0
+0x1.6087eep+2
+0x0p+0
+0x1.0bd47p+1
+0x0p+0
+0x1.00b5ep+1
+0x0p+0
+0x1.6d7e4ep-4
+0x0p+0
+0x1.7ced12p-4
+0x0p+0
+0x1.8c6608p+2
+0x0p+0
+0x1.8c2bfp+2
+-0x1.30c96p-8
+-0x1.38c3dp-8
+-0x1.38c3dp-8
+-0x1.4d713cp-8
+-0x1.4d713cp-8
+-0x1.750e6ep-8
+-0x1.750e6ep-8
+-0x1.a9e316p-8
+-0x1.a9e316p-8
+-0x1.d306f6p-8
+-0x1.d306f6p-8
+-0x1.ef821p-8
+-0x1.ef821p-8
+-0x1.006a68p-7
+-0x1.006a68p-7
+-0x1.042d18p-7
+-0x1.042d18p-7
+-0x1.051b0ep-7
+-0x1.46a14ap-8
+-0x1.4caf7cp-8
+-0x1.61a762p-8
+-0x1.31a3dap-8
+-0x1.4d0afp-8
+-0x1.5de058p-8
+-0x1.816c5ep-8
+-0x1.2957d2p-8
+-0x1.5de02p-8
+-0x1.80cd9ep-8
+-0x1.a7fe32p-8
+-0x1.365fcap-8
+-0x1.7f69bap-8
+-0x1.bf9bf8p-8
+-0x1.d9d86ep-8
+-0x1.6542e2p-8
+-0x1.bbaf44p-8
+-0x1.e22932p-8
+-0x1.0fc12ap-7
+-0x1.7eea66p-8
+-0x1.e222fap-8
+-0x1.fa13eep-8
+-0x1.2279e6p-7
+-0x1.97f44p-8
+-0x1.fbdfb4p-8
+-0x1.04b264p-7
+-0x1.293464p-7
+-0x1.b38516p-8
+-0x1.05f1dp-7
+-0x1.07b25ap-7
+-0x1.25d99ep-7
+-0x1.d0015ep-8
+-0x1.08f7dp-7
+-0x1.0763eap-7
+-0x1.19e9a4p-7
+-0x1.ed0f9cp-8
+-0x1.46408ap-8
+-0x1.4cd292p-8
+-0x1.612818p-8
+-0x1.31e57ap-8
+-0x1.4d1a7cp-8
+-0x1.5ed054p-8
+-0x1.81302p-8
+-0x1.2a936cp-8
+-0x1.5eb246p-8
+-0x1.83bdd4p-8
+-0x1.a865a6p-8
+-0x1.39b96ap-8
+-0x1.8212bp-8
+-0x1.bd28d4p-8
+-0x1.dbd7ecp-8
+-0x1.637acap-8
+-0x1.b9d726p-8
+-0x1.e2066ap-8
+-0x1.0e6bfep-7
+-0x1.7f98bap-8
+-0x1.e1c3c8p-8
+-0x1.faf0f4p-8
+-0x1.21d188p-7
+-0x1.99c07ap-8
+-0x1.fc8aep-8
+-0x1.052a64p-7
+-0x1.291522p-7
+-0x1.b55c5ap-8
+-0x1.065ffcp-7
+-0x1.08355ep-7
+-0x1.25f0a8p-7
+-0x1.d1b4p-8
+-0x1.097458p-7
+-0x1.085784p-7
+-0x1.1a36b2p-7
+-0x1.ef54ccp-8
+-0x1.45f346p-8
+-0x1.4cff68p-8
+-0x1.60baf4p-8
+-0x1.32322cp-8
+-0x1.4d3848p-8
+-0x1.5fe6d8p-8
+-0x1.81047p-8
+-0x1.2bf33p-8
+-0x1.5fa856p-8
+-0x1.85ce7ep-8
+-0x1.a8eb72p-8
+-0x1.3c399ep-8
+-0x1.83faf6p-8
+-0x1.bb891ep-8
+-0x1.dd213cp-8
+-0x1.627b02p-8
+-0x1.b89c34p-8
+-0x1.e1d28p-8
+-0x1.0d64eap-7
+-0x1.8036f6p-8
+-0x1.e166fp-8
+-0x1.fba98ep-8
+-0x1.212c28p-7
+-0x1.9b64c8p-8
+-0x1.fd1478p-8
+-0x1.059cfep-7
+-0x1.28e6b4p-7
+-0x1.b725acp-8
+-0x1.06c6a6p-7
+-0x1.08c2eap-7
+-0x1.26033ap-7
+-0x1.d375a2p-8
+-0x1.09f8e2p-7
+-0x1.0938eap-7
+-0x1.1a8a3p-7
+-0x1.f178bcp-8
+-0x1.45b4f6p-8
+-0x1.4d3dp-8
+-0x1.610372p-8
+-0x1.87536ep-8
+-0x1.ba736p-8
+-0x1.e19e6cp-8
+-0x1.fc44f2p-8
+-0x1.060aap-7
+-0x1.095292p-7
+-0x1.0a0e14p-7
+0x0p+0
+-0x1.fb2802p-3
+-0x1.38cea8p+0
+-0x1.38cea8p+0
+-0x1.d4e18cp+0
+-0x1.6dee76p+1
+0x1.555fa8p-3
+0x1.555fa8p-3
+0x1.0ec024p-1
+0x1.44a77ep-7
+0x1.3d79cap-7
+-0x1.38cea8p+0
+-0x1.8a1c88p-1
+0x0p+0
+-0x1.8a1c88p-1
+-0x1.d4e18cp+0
+-0x1.026d02p+1
+-0x1.6dee76p+1
+-0x1.026d02p+1
+0x1.555fa8p-3
+-0x1.be20a4p-3
+0x1.3d79cap-7
+-0x1.be20a4p-3
+0x1.44a77ep-7
+0x1.ed91a4p-10
+0x0p+0
+0x1.ed91a4p-10
+0x1.0ec024p-1
+-0x1.9245aep-1
+-0x1.b0eaap+0
+-0x1.9245aep-1
+-0x1.d88adp-2
+-0x1.2cd75cp+0
+-0x1.2d69aap+0
+-0x1.d9c06ep+0
+-0x1.5a423cp+1
+0x1.c6acf8p-3
+-0x1.5c8844p+1
+0x1.cfc09cp-3
+0x1.cfc09cp-3
+0x1.326e74p-1
+0x1.ed7872p-7
+0x1.e64abcp-7
+0x1.ed7872p-7
+0x1.e64abcp-7
+-0x1.ce8becp-1
+-0x1.2ad606p+0
+-0x1.cd713ap-1
+0x0p+0
+-0x1.0a1054p+1
+-0x1.d91abp+0
+-0x1.0a8d12p+1
+-0x1.5c8844p+1
+-0x1.54127cp-2
+0x1.d0b2a2p-3
+-0x1.59f794p-2
+0x1.e64abcp-7
+0x1.776978p-9
+0x1.ed7872p-7
+0x1.773064p-9
+0x0p+0
+-0x1.a0059ap-1
+0x1.321efp-1
+-0x1.a0615p-1
+-0x1.d5812ep+0
+-0x1.d88adp-2
+-0x1.2ad606p+0
+-0x1.2b4c84p+0
+-0x1.d91abp+0
+-0x1.5c8844p+1
+0x1.d0b2a2p-3
+-0x1.5e735p+1
+0x1.d8bdc2p-3
+0x1.d8bdc2p-3
+0x1.321efp-1
+0x1.ed7872p-7
+0x1.e64abcp-7
+0x1.ed7872p-7
+0x1.e64abcp-7
+-0x1.cd959cp-1
+-0x1.292794p+0
+-0x1.ccd8ecp-1
+0x0p+0
+-0x1.0af1dep+1
+-0x1.d8961ep+0
+-0x1.0b30ep+1
+-0x1.5e735p+1
+-0x1.577b12p-2
+0x1.d91c96p-3
+-0x1.5d107p-2
+0x1.e64abcp-7
+0x1.775c78p-9
+0x1.ed7872p-7
+0x1.77753p-9
+0x0p+0
+-0x1.a0402ap-1
+0x1.31ffe6p-1
+-0x1.a0590ap-1
+-0x1.d5812ep+0
+-0x1.d88adp-2
+-0x1.292794p+0
+-0x1.2986dep+0
+-0x1.d8961ep+0
+-0x1.5e735p+1
+0x1.d91c96p-3
+-0x1.601784p+1
+0x1.e03c96p-3
+0x1.e03c96p-3
+0x1.31ffe6p-1
+0x1.ed7872p-7
+0x1.e64abcp-7
+0x1.ed7872p-7
+0x1.e64abcp-7
+-0x1.cd1c76p-1
+-0x1.27bbecp+0
+-0x1.cc754cp-1
+0x0p+0
+-0x1.0b90e6p+1
+-0x1.d82b7cp+0
+-0x1.0bc2fcp+1
+-0x1.601784p+1
+-0x1.5b064p-2
+0x1.e03c96p-3
+-0x1.5f95ccp-2
+0x1.e64abcp-7
+0x1.774eap-9
+0x1.ed7872p-7
+0x1.777b3ap-9
+0x0p+0
+-0x1.a0503ap-1
+0x1.31ffe6p-1
+-0x1.a0533cp-1
+-0x1.d5812ep+0
+-0x1.d88adp-2
+-0x1.27bbecp+0
+-0x1.ccb074p-1
+0x0p+0
+-0x1.d82b7cp+0
+-0x1.0c14a6p+1
+-0x1.601784p+1
+0x1.e03c96p-3
+-0x1.5ded2ap-2
+0x1.e64abcp-7
+0x1.ed7872p-7
+0x1.77590ap-9
+0x0p+0
+0x1.31ffe6p-1
+-0x1.a05202p-1
+-0x1.d5812ep+0
+0x1.ca997p+1
+-0x1.a37df4p-1
+-0x1.3da98ap+2
+-0x1.a37df4p-1
+0x1.68501ep+2
+-0x1.7591d2p+1
+0x1.c1c1aep-1
+-0x1.7591d2p+1
+0x0p+0
+0x1.68501ep+2
+-0x1.d5ccb2p+1
+0x1.c1c1aep-1
+-0x1.d5ccb2p+1
+-0x1.7591d2p+1
+-0x1.cb085ap-1
+-0x1.3da98ap+2
+-0x1.cb085ap-1
+-0x1.a2fc8ap-1
+-0x1.45cb0cp+2
+-0x1.a2fc8ap-1
+0x1.5ad0a8p+2
+-0x1.7cfabp+1
+0x1.b261fcp-1
+-0x1.7cfabp+1
+0x0p+0
+-0x1.dd8fap+1
+0x1.5ab0b2p+2
+-0x1.dd32b8p+1
+0x1.b261fcp-1
+-0x1.e5dfbp-1
+-0x1.7cfabp+1
+-0x1.e6051ep-1
+-0x1.45ce84p+2
+-0x1.a2fc8ap-1
+-0x1.45ce84p+2
+-0x1.a2fc8ap-1
+0x1.5ab0b2p+2
+-0x1.7cfabp+1
+0x1.b261fcp-1
+-0x1.7cfabp+1
+0x0p+0
+-0x1.dd39ap+1
+0x1.5a8fdap+2
+-0x1.dd213ap+1
+0x1.b261fcp-1
+-0x1.e7bf7ap-1
+-0x1.7cfabp+1
+-0x1.e720cap-1
+-0x1.45d118p+2
+-0x1.a2fc8ap-1
+-0x1.45d118p+2
+-0x1.a2fc8ap-1
+0x1.5a8fdap+2
+-0x1.7cfabp+1
+0x1.b261fcp-1
+-0x1.7cfabp+1
+0x0p+0
+-0x1.dd2a0cp+1
+0x1.5a6edcp+2
+-0x1.dd1114p+1
+0x1.b261fcp-1
+-0x1.e7c31p-1
+-0x1.7cfabp+1
+-0x1.e788f2p-1
+-0x1.45d2fp+2
+-0x1.a2fc8ap-1
+0x1.5a6edcp+2
+-0x1.dd1a0cp+1
+0x1.b261fcp-1
+-0x1.7cfabp+1
+-0x1.e7fedap-1
+0x0p+0
+-0x1.45d2fp+2
+-0x1.454f32p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.879d64p+2
+0x0p+0
+-0x1.11c4c6p+2
+-0x1.8cbe42p-1
+-0x1.879d64p+2
+-0x1.8cbe42p-1
+-0x1.8ed5b6p+2
+0x0p+0
+-0x1.973d32p-1
+-0x1.17540ep+2
+-0x1.972656p-1
+-0x1.8ed5b6p+2
+-0x1.972e1ap-1
+-0x1.8ed5b6p+2
+0x0p+0
+-0x1.17540ep+2
+0x1.81a3aap+0
+-0x1.d9972ep-1
+-0x1.1656cep+2
+-0x1.d9972ep-1
+-0x1.f011cep-1
+0x1.8d418ep+0
+-0x1.f00408p-1
+-0x1.1a347p+2
+-0x1.f006c4p-1
+-0x1.1a347p+2
+0x1.8d418ep+0
+0x1.f12912p-4
+0x0p+0
+0x1.7ced12p-4
+0x1.f12912p-4
+0x1.30f088p-4
+0x1.7ced12p-4
+0x1.a8936ap-5
+0x1.30f088p-4
+0x1.5580e6p-6
+0x1.a8936ap-5
+-0x1.589724p-6
+0x1.5580e6p-6
+-0x1.a18e68p-5
+-0x1.589724p-6
+-0x1.27f21p-4
+-0x1.a18e68p-5
+-0x1.7cf146p-4
+-0x1.27f21p-4
+-0x1.0036bcp-3
+-0x1.7cf146p-4
+0x0p+0
+-0x1.0036bcp-3
+0x0p+0
+0x1.ec2da4p-4
+0x1.ecc6a6p-4
+0x1.8e05c8p-4
+0x1.8f0b3p-4
+0x1.55df0ep-4
+0x1.565456p-4
+0x1.dfc362p-5
+0x1.e21cbep-5
+0x1.8680bp-6
+0x1.8d031ep-6
+-0x1.900baep-6
+-0x1.87b94p-6
+-0x1.da34dp-5
+-0x1.d7af68p-5
+-0x1.4acd98p-4
+-0x1.49da58p-4
+-0x1.8d5d5cp-4
+-0x1.8c7a52p-4
+-0x1.fc1bb8p-4
+-0x1.fb035ap-4
+0x0p+0
+0x0p+0
+0x1.ebd2cp-4
+0x1.ec4d48p-4
+0x1.8e4e7cp-4
+0x1.8f5a08p-4
+0x1.555b6ep-4
+0x1.55f1cp-4
+0x1.df5d8ep-5
+0x1.e1e5dcp-5
+0x1.84b2a6p-6
+0x1.8b854cp-6
+-0x1.8e5006p-6
+-0x1.861814p-6
+-0x1.d9c37ap-5
+-0x1.d75d12p-5
+-0x1.4a616p-4
+-0x1.498f6p-4
+-0x1.8db6e6p-4
+-0x1.8ce5cap-4
+-0x1.fb903ep-4
+-0x1.fa7978p-4
+0x0p+0
+0x0p+0
+0x1.eb62d8p-4
+0x1.ebd88cp-4
+0x1.8eb9f4p-4
+0x1.8fbd3ep-4
+0x1.551292p-4
+0x1.55a682p-4
+0x1.df4e54p-5
+0x1.e1cb88p-5
+0x1.832e76p-6
+0x1.8a0964p-6
+-0x1.8cf0b6p-6
+-0x1.84b2f4p-6
+-0x1.d9af2p-5
+-0x1.d738eap-5
+-0x1.4a2aecp-4
+-0x1.495664p-4
+-0x1.8e1eb8p-4
+-0x1.8d4dacp-4
+-0x1.fb056p-4
+-0x1.f9f19ap-4
+0x0p+0
+0x1.eaea28p-4
+0x1.8f176ep-4
+0x1.54c3fap-4
+0x1.df363cp-5
+0x1.81c9b8p-6
+-0x1.8b6f54p-6
+-0x1.d982aep-5
+-0x1.49f506p-4
+-0x1.8e8424p-4
+-0x1.fa7c4p-4
+0x0p+0
+-0x1.30c96p-8
+-0x1.38c3dp-8
+-0x1.4d713cp-8
+-0x1.750e6ep-8
+-0x1.a9e316p-8
+-0x1.d306f6p-8
+-0x1.ef821p-8
+-0x1.006a68p-7
+-0x1.042d18p-7
+-0x1.051b0ep-7
+0x0p+0
+-0x1.fb2802p-3
+0x1.a3c0c2p+1
+-0x1.a37df4p-1
+-0x1.42e962p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.8a1c88p-1
+0x0p+0
+-0x1.38cea8p+0
+-0x1.026d02p+1
+-0x1.d4e18cp+0
+-0x1.6dee76p+1
+-0x1.cb085ap-1
+-0x1.3da98ap+2
+-0x1.7591d2p+1
+-0x1.8cbe42p-1
+-0x1.11c4c6p+2
+-0x1.879d64p+2
+0x1.ed91a4p-10
+0x0p+0
+0x1.44a77ep-7
+-0x1.be20a4p-3
+0x1.3d79cap-7
+0x1.555fa8p-3
+-0x1.9245aep-1
+0x1.0ec024p-1
+-0x1.b0eaap+0
+-0x1.d5ccb2p+1
+0x1.c1c1aep-1
+0x1.68501ep+2
+-0x1.d9972ep-1
+0x1.81a3aap+0
+-0x1.1656cep+2
+0x1.f12912p-4
+0x1.7ced12p-4
+0x1.30f088p-4
+0x1.a8936ap-5
+0x1.5580e6p-6
+-0x1.589724p-6
+-0x1.a18e68p-5
+-0x1.27f21p-4
+-0x1.7cf146p-4
+-0x1.0036bcp-3
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.824676p+2
+0x0p+0
+0x1.749708p+2
+0x0p+0
+0x1.1ce754p+2
+0x0p+0
+0x1.1c14d8p+2
+0x0p+0
+0x1.4e72bap+1
+0x0p+0
+0x1.47256p+1
+0x0p+0
+0x1.68501ep+2
+0x0p+0
+0x1.5a6edcp+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.60dc24p+2
+0x0p+0
+0x1.5889a8p+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.43ec0cp+2
+0x0p+0
+0x1.4830bcp+2
+0x0p+0
+0x1.c1c1aep-1
+0x0p+0
+0x1.b261fcp-1
+0x0p+0
+0x1.5fd7p+2
+0x0p+0
+0x1.5e1576p+2
+0x0p+0
+0x1.5daff8p+2
+0x0p+0
+0x1.5dc024p+2
+0x0p+0
+0x1.0ec024p-1
+0x0p+0
+0x1.31ffe6p-1
+0x0p+0
+0x1.25e50ep+2
+0x0p+0
+0x1.1cbf6ap+2
+0x0p+0
+0x1.aead9ap+1
+0x0p+0
+0x1.a744bcp+1
+0x0p+0
+0x1.58beaap+2
+0x0p+0
+0x1.551fdap+2
+0x0p+0
+0x1.10e934p+2
+0x0p+0
+0x1.0c1564p+2
+0x0p+0
+0x1.1ce754p+2
+0x0p+0
+0x1.1c14d8p+2
+0x0p+0
+0x1.b650f6p+1
+0x0p+0
+0x1.c427e8p+1
+0x0p+0
+0x1.51d8bp+0
+0x0p+0
+0x1.313318p+0
+0x0p+0
+0x1.56ecdp+2
+0x0p+0
+0x1.541edep+2
+0x0p+0
+0x1.ef23ap+0
+0x0p+0
+0x1.dfad18p+0
+0x0p+0
+0x1.81a3aap+0
+0x0p+0
+0x1.8d418ep+0
+0x0p+0
+0x1.504a4p-3
+0x0p+0
+0x1.a5p-5
+0x0p+0
+0x1.6087eep+2
+0x0p+0
+0x1.5f39f2p+2
+0x0p+0
+0x1.00b5ep+1
+0x0p+0
+0x1.eb2eap+0
+0x0p+0
+0x1.7ced12p-4
+0x0p+0
+0x1.8f176ep-4
+0x0p+0
+0x1.8c2bfp+2
+0x0p+0
+0x1.8be5a6p+2
+-0x1.45b4f6p-8
+-0x1.4d3dp-8
+-0x1.4d3dp-8
+-0x1.610372p-8
+-0x1.610372p-8
+-0x1.87536ep-8
+-0x1.87536ep-8
+-0x1.ba736p-8
+-0x1.ba736p-8
+-0x1.e19e6cp-8
+-0x1.e19e6cp-8
+-0x1.fc44f2p-8
+-0x1.fc44f2p-8
+-0x1.060aap-7
+-0x1.060aap-7
+-0x1.095292p-7
+-0x1.095292p-7
+-0x1.0a0e14p-7
+-0x1.5b8cep-8
+-0x1.6128acp-8
+-0x1.75f182p-8
+-0x1.46beeap-8
+-0x1.6188e4p-8
+-0x1.71728ep-8
+-0x1.94971p-8
+-0x1.3e3e6ep-8
+-0x1.71828ep-8
+-0x1.93129ep-8
+-0x1.b99c9cp-8
+-0x1.4aaa3p-8
+-0x1.91c2f6p-8
+-0x1.d02c42p-8
+-0x1.e97d36p-8
+-0x1.788956p-8
+-0x1.cc5c9ep-8
+-0x1.f0c0a8p-8
+-0x1.166ec6p-7
+-0x1.90d464p-8
+-0x1.f0d8dcp-8
+-0x1.036b68p-7
+-0x1.280b94p-7
+-0x1.a845bap-8
+-0x1.045924p-7
+-0x1.0a529cp-7
+-0x1.2de994p-7
+-0x1.c226f8p-8
+-0x1.0b9512p-7
+-0x1.0cd7d4p-7
+-0x1.2a258ap-7
+-0x1.dcf584p-8
+-0x1.0e1c26p-7
+-0x1.0c56fp-7
+-0x1.1e505ap-7
+-0x1.f86db4p-8
+-0x1.5b27eep-8
+-0x1.61417cp-8
+-0x1.756b7ap-8
+-0x1.46f8dp-8
+-0x1.61912ap-8
+-0x1.725ef4p-8
+-0x1.94572cp-8
+-0x1.3f72d2p-8
+-0x1.724fdap-8
+-0x1.95f9bap-8
+-0x1.b9fae4p-8
+-0x1.4dff2p-8
+-0x1.9465a8p-8
+-0x1.cdb3b8p-8
+-0x1.eb7bdap-8
+-0x1.76b65ep-8
+-0x1.ca7a48p-8
+-0x1.f09f9cp-8
+-0x1.15186p-7
+-0x1.917caep-8
+-0x1.f077d6p-8
+-0x1.03d5d2p-7
+-0x1.2767d4p-7
+-0x1.a9fec6p-8
+-0x1.04ab88p-7
+-0x1.0ac802p-7
+-0x1.2dcbcep-7
+-0x1.c3efcap-8
+-0x1.0c015p-7
+-0x1.0d5a36p-7
+-0x1.2a41dap-7
+-0x1.de989cp-8
+-0x1.0e9828p-7
+-0x1.0d4666p-7
+-0x1.1e9f8ap-7
+-0x1.faa55ep-8
+-0x1.5ad378p-8
+-0x1.616856p-8
+-0x1.74f4dcp-8
+-0x1.4741d2p-8
+-0x1.61a994p-8
+-0x1.736df8p-8
+-0x1.9425a8p-8
+-0x1.40cb8ep-8
+-0x1.733d66p-8
+-0x1.9808e2p-8
+-0x1.ba7632p-8
+-0x1.507fd8p-8
+-0x1.964c86p-8
+-0x1.cc0d62p-8
+-0x1.ecc358p-8
+-0x1.75b05ap-8
+-0x1.c93b64p-8
+-0x1.f0685cp-8
+-0x1.141408p-7
+-0x1.920e2ep-8
+-0x1.f016c2p-8
+-0x1.042e6cp-7
+-0x1.26c3fap-7
+-0x1.ab9478p-8
+-0x1.04ed58p-7
+-0x1.0b38cp-7
+-0x1.2da10ap-7
+-0x1.c5a838p-8
+-0x1.0c66d4p-7
+-0x1.0de532p-7
+-0x1.2a5778p-7
+-0x1.e04cd2p-8
+-0x1.0f1acp-7
+-0x1.0e25ccp-7
+-0x1.1ef55p-7
+-0x1.fcbceep-8
+-0x1.5a8d62p-8
+-0x1.61a19cp-8
+-0x1.74820ep-8
+-0x1.9989b6p-8
+-0x1.caf4b6p-8
+-0x1.f02edep-8
+-0x1.04789ep-7
+-0x1.0ba4bep-7
+-0x1.0e73e4p-7
+-0x1.0ef80cp-7
+0x0p+0
+-0x1.d88adp-2
+-0x1.27bbecp+0
+-0x1.27bbecp+0
+-0x1.d82b7cp+0
+-0x1.d82b7cp+0
+0x0p+0
+-0x1.601784p+1
+0x1.e03c96p-3
+0x1.e03c96p-3
+0x1.31ffe6p-1
+-0x1.27bbecp+0
+-0x1.ccb074p-1
+0x0p+0
+-0x1.ccb074p-1
+-0x1.d82b7cp+0
+-0x1.0c14a6p+1
+-0x1.601784p+1
+-0x1.0c14a6p+1
+0x1.e03c96p-3
+-0x1.5ded2ap-2
+0x1.e64abcp-7
+-0x1.5ded2ap-2
+0x1.31ffe6p-1
+-0x1.a05202p-1
+-0x1.d5812ep+0
+-0x1.a05202p-1
+-0x1.59c0dp-1
+-0x1.1bc4ap+0
+-0x1.1bc4ap+0
+-0x1.e3a242p+0
+-0x1.e3a164p+0
+0x0p+0
+-0x1.4c6b4ap+1
+0x1.28c4f4p-2
+0x1.2afb1ep-2
+0x1.55ae36p-1
+-0x1.084abap+0
+-0x1.1b69f2p+0
+-0x1.082fe8p+0
+0x0p+0
+-0x1.1413dep+1
+-0x1.e3a164p+0
+-0x1.13f1d8p+1
+-0x1.4d8eacp+1
+-0x1.d1e95ap-2
+0x1.2afb1ep-2
+-0x1.d45a82p-2
+0x1.478dd8p-6
+-0x1.ae103ap-1
+0x1.55ae36p-1
+-0x1.ae118cp-1
+-0x1.fa17bcp+0
+-0x1.59c0dp-1
+-0x1.1b69f2p+0
+-0x1.1b69f2p+0
+-0x1.e3a164p+0
+-0x1.e3a0eep+0
+0x0p+0
+-0x1.4d8eacp+1
+0x1.2afb1ep-2
+0x1.2ceabcp-2
+0x1.55ae36p-1
+-0x1.0819a2p+0
+-0x1.1b2534p+0
+-0x1.081f98p+0
+0x0p+0
+-0x1.145416p+1
+-0x1.e3a0eep+0
+-0x1.143d4ep+1
+-0x1.4e8a16p+1
+-0x1.d3233ap-2
+0x1.2ceabcp-2
+-0x1.d5cd68p-2
+0x1.478dd8p-6
+-0x1.ae104ep-1
+0x1.55ae36p-1
+-0x1.ae10fcp-1
+-0x1.fa17bcp+0
+-0x1.59c0dp-1
+-0x1.1b2534p+0
+-0x1.1b2534p+0
+-0x1.e3a0eep+0
+-0x1.e3a0bcp+0
+0x0p+0
+-0x1.4e8a16p+1
+0x1.2ceabcp-2
+0x1.2ea028p-2
+0x1.55ae36p-1
+-0x1.081d7cp+0
+-0x1.1afa34p+0
+-0x1.081ceap+0
+0x0p+0
+-0x1.148ffcp+1
+-0x1.e3a0bcp+0
+-0x1.147a3p+1
+-0x1.4f65dp+1
+-0x1.d4d3f8p-2
+0x1.2ea028p-2
+-0x1.d715a4p-2
+0x1.478dd8p-6
+-0x1.ae10a8p-1
+0x1.55ae36p-1
+-0x1.ae10aap-1
+-0x1.fa17bcp+0
+-0x1.59c0dp-1
+-0x1.1afa34p+0
+-0x1.081d12p+0
+0x0p+0
+-0x1.e3a0bcp+0
+-0x1.14c24cp+1
+-0x1.4f65dp+1
+0x1.2ea028p-2
+-0x1.d643dcp-2
+0x1.478dd8p-6
+0x1.55ae36p-1
+-0x1.ae10c6p-1
+-0x1.fa17bcp+0
+0x0p+0
+0x1.f1721ep+1
+-0x1.a2fc8ap-1
+-0x1.45d2fp+2
+-0x1.a2fc8ap-1
+0x1.5a6edcp+2
+-0x1.a2fc8ap-1
+0x1.b261fcp-1
+0x1.b261fcp-1
+-0x1.dd1a0cp+1
+0x1.5a6edcp+2
+-0x1.dd1a0cp+1
+-0x1.45d2fp+2
+-0x1.e7fedap-1
+-0x1.7cfabp+1
+-0x1.e7fedap-1
+-0x1.96b438p-1
+-0x1.5028b8p+2
+-0x1.96b438p-1
+0x1.4efb28p+2
+-0x1.96b438p-1
+0x1.875a3p-1
+-0x1.e6418ap+1
+0x1.8743e6p-1
+-0x1.e613p+1
+0x1.4eea3p+2
+-0x1.03c1fp+0
+-0x1.502544p+2
+-0x1.02c372p+0
+-0x1.84638ep+1
+-0x1.96b438p-1
+-0x1.502544p+2
+-0x1.96b438p-1
+0x1.4eea3p+2
+-0x1.96b438p-1
+0x1.8743e6p-1
+-0x1.e6618p+1
+0x1.872814p-1
+-0x1.e6478ep+1
+0x1.4eda38p+2
+-0x1.030332p+0
+-0x1.5021bcp+2
+-0x1.030718p+0
+-0x1.84638ep+1
+-0x1.96b438p-1
+-0x1.5021bcp+2
+-0x1.96b438p-1
+0x1.4eda38p+2
+-0x1.96b438p-1
+0x1.872814p-1
+-0x1.e64284p+1
+0x1.8707bp-1
+-0x1.e6471cp+1
+0x1.4ecb08p+2
+-0x1.0305b8p+0
+-0x1.501e1cp+2
+-0x1.03212cp+0
+-0x1.84638ep+1
+-0x1.96b438p-1
+0x1.8707bp-1
+-0x1.e637dp+1
+0x1.4ecb08p+2
+-0x1.501e1cp+2
+-0x1.031754p+0
+-0x1.84638ep+1
+-0x1.47b502p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.17540ep+2
+-0x1.972e1ap-1
+-0x1.8ed5b6p+2
+-0x1.972e1ap-1
+-0x1.a1ad5ap-1
+-0x1.1ce356p+2
+-0x1.a1a7aep-1
+-0x1.960e08p+2
+-0x1.a1a99ap-1
+-0x1.960e08p+2
+-0x1.1ce356p+2
+0x0p+0
+0x1.77590ap-9
+0x1.ed7872p-7
+0x1.77590ap-9
+0x1.f7ee2p-9
+0x0p+0
+0x1.f7fdc8p-9
+0x1.4b24b4p-6
+0x1.f82de8p-9
+0x1.4b24b4p-6
+0x0p+0
+0x1.8d418ep+0
+-0x1.f006c4p-1
+-0x1.1a347p+2
+-0x1.f006c4p-1
+-0x1.033e2p+0
+0x1.98df72p+0
+-0x1.03375p+0
+-0x1.1e1212p+2
+-0x1.0338a8p+0
+-0x1.1e1212p+2
+0x1.98df72p+0
+0x1.eaea28p-4
+0x0p+0
+0x1.8f176ep-4
+0x1.eaea28p-4
+0x1.54c3fap-4
+0x1.8f176ep-4
+0x1.df363cp-5
+0x1.54c3fap-4
+0x1.81c9b8p-6
+0x1.df363cp-5
+-0x1.8b6f54p-6
+0x1.81c9b8p-6
+-0x1.d982aep-5
+-0x1.8b6f54p-6
+-0x1.49f506p-4
+-0x1.d982aep-5
+-0x1.8e8424p-4
+-0x1.49f506p-4
+-0x1.fa7c4p-4
+-0x1.8e8424p-4
+0x0p+0
+-0x1.fa7c4p-4
+0x0p+0
+0x1.e5f4bep-4
+0x1.e67d38p-4
+0x1.a2da5cp-4
+0x1.a39a0cp-4
+0x1.76bfdp-4
+0x1.77364cp-4
+0x1.0a78bap-4
+0x1.0bdd0cp-4
+0x1.a3ace4p-6
+0x1.abcb58p-6
+-0x1.b329dep-6
+-0x1.a986ep-6
+-0x1.07f9f8p-4
+-0x1.066a38p-4
+-0x1.6af092p-4
+-0x1.69ee38p-4
+-0x1.a1e3d6p-4
+-0x1.a11fd4p-4
+-0x1.f55f4p-4
+-0x1.f47a6ep-4
+0x0p+0
+0x0p+0
+0x1.e5b5aap-4
+0x1.e61a0ap-4
+0x1.a30c76p-4
+0x1.a3d8f8p-4
+0x1.76238p-4
+0x1.76b996p-4
+0x1.0a3504p-4
+0x1.0bb44ap-4
+0x1.a1f538p-6
+0x1.aa4c1cp-6
+-0x1.b186p-6
+-0x1.a7ea68p-6
+-0x1.07af2p-4
+-0x1.06304ap-4
+-0x1.6a6f32p-4
+-0x1.698cc2p-4
+-0x1.a2236cp-4
+-0x1.a17706p-4
+-0x1.f4ed44p-4
+-0x1.f409fp-4
+0x0p+0
+0x0p+0
+0x1.e56244p-4
+0x1.e5bebcp-4
+0x1.a36614p-4
+0x1.a42bc2p-4
+0x1.75c456p-4
+0x1.7656ap-4
+0x1.0a1aa2p-4
+0x1.0b9618p-4
+0x1.a083a2p-6
+0x1.a8db88p-6
+-0x1.b02f7p-6
+-0x1.a68bbp-6
+-0x1.0792ap-4
+-0x1.060c88p-4
+-0x1.6a284ap-4
+-0x1.6941cap-4
+-0x1.a2775ap-4
+-0x1.a1cb7p-4
+-0x1.f47c3ap-4
+-0x1.f39b3p-4
+0x0p+0
+0x1.e50418p-4
+0x1.a3b146p-4
+0x1.756012p-4
+0x1.09fc38p-4
+0x1.9f2ddep-6
+-0x1.aeb56cp-6
+-0x1.076926p-4
+-0x1.69e116p-4
+-0x1.a2c93ep-4
+-0x1.f40c86p-4
+0x0p+0
+-0x1.45b4f6p-8
+-0x1.4d3dp-8
+-0x1.610372p-8
+-0x1.87536ep-8
+-0x1.ba736p-8
+-0x1.e19e6cp-8
+-0x1.fc44f2p-8
+-0x1.060aap-7
+-0x1.095292p-7
+-0x1.0a0e14p-7
+0x0p+0
+-0x1.d88adp-2
+0x1.ca997p+1
+-0x1.a2fc8ap-1
+-0x1.454f32p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.ccb074p-1
+0x0p+0
+-0x1.27bbecp+0
+-0x1.0c14a6p+1
+-0x1.d82b7cp+0
+-0x1.601784p+1
+-0x1.e7fedap-1
+-0x1.45d2fp+2
+-0x1.7cfabp+1
+-0x1.972e1ap-1
+-0x1.17540ep+2
+-0x1.8ed5b6p+2
+0x1.77590ap-9
+0x0p+0
+0x1.ed7872p-7
+-0x1.5ded2ap-2
+0x1.e64abcp-7
+0x1.e03c96p-3
+-0x1.a05202p-1
+0x1.31ffe6p-1
+-0x1.d5812ep+0
+-0x1.dd1a0cp+1
+0x1.b261fcp-1
+0x1.5a6edcp+2
+-0x1.f006c4p-1
+0x1.8d418ep+0
+-0x1.1a347p+2
+0x1.eaea28p-4
+0x1.8f176ep-4
+0x1.54c3fap-4
+0x1.df363cp-5
+0x1.81c9b8p-6
+-0x1.8b6f54p-6
+-0x1.d982aep-5
+-0x1.49f506p-4
+-0x1.8e8424p-4
+-0x1.fa7c4p-4
+0x0p+0
+0x1.ca997p+1
+0x0p+0
+0x1.f1721ep+1
+0x0p+0
+0x1.0c1564p+2
+0x0p+0
+0x1.07be9p+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.749708p+2
+0x0p+0
+0x1.66e79cp+2
+0x0p+0
+0x1.1c14d8p+2
+0x0p+0
+0x1.193788p+2
+0x0p+0
+0x1.1aa63p+2
+0x0p+0
+0x1.198cc8p+2
+0x0p+0
+0x1.193788p+2
+0x0p+0
+0x1.47256p+1
+0x0p+0
+0x1.3e079cp+1
+0x0p+0
+0x1.5a6edcp+2
+0x0p+0
+0x1.4ecb08p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.5889a8p+2
+0x0p+0
+0x1.501872p+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.4830bcp+2
+0x0p+0
+0x1.4b6128p+2
+0x0p+0
+0x1.b261fcp-1
+0x0p+0
+0x1.8707bp-1
+0x0p+0
+0x1.5e1576p+2
+0x0p+0
+0x1.5c5d9ep+2
+0x0p+0
+0x1.5dc024p+2
+0x0p+0
+0x1.5f493p+2
+0x0p+0
+0x1.31ffe6p-1
+0x0p+0
+0x1.55ae36p-1
+0x0p+0
+0x1.1cbf6ap+2
+0x0p+0
+0x1.1399c8p+2
+0x0p+0
+0x1.a744bcp+1
+0x0p+0
+0x1.9fdbdep+1
+0x0p+0
+0x1.551fdap+2
+0x0p+0
+0x1.5159ep+2
+0x0p+0
+0x1.0c1564p+2
+0x0p+0
+0x1.07be9p+2
+0x0p+0
+0x1.1c14d8p+2
+0x0p+0
+0x1.193788p+2
+0x0p+0
+0x1.313318p+0
+0x0p+0
+0x1.080668p+0
+0x0p+0
+0x1.1c9ccp+0
+0x0p+0
+0x1.11a3c6p+0
+0x0p+0
+0x1.541edep+2
+0x0p+0
+0x1.51518cp+2
+0x0p+0
+0x1.dfad18p+0
+0x0p+0
+0x1.d0369p+0
+0x0p+0
+0x1.8d418ep+0
+0x0p+0
+0x1.98df72p+0
+0x0p+0
+0x1.a5p-5
+0x0p+0
+-0x1.f729p-5
+0x0p+0
+0x1.5f39f2p+2
+0x0p+0
+0x1.5dea82p+2
+0x0p+0
+0x1.eb2eap+0
+0x0p+0
+0x1.d4f18p+0
+0x0p+0
+0x1.8f176ep-4
+0x0p+0
+0x1.a3b146p-4
+0x0p+0
+0x1.8be5a6p+2
+0x0p+0
+0x1.8b9492p+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.cf2c4ap-9
+0x0p+0
+0x1.23022ep-8
+0x0p+0
+0x0p+0
+-0x1.954338p-4
+0x1.23022ep-8
+0x0p+0
+0x1.23022ep-8
+0x0p+0
+-0x1.954338p-4
+0x0p+0
+-0x1.4db6c4p+2
+-0x1.4db6c4p+2
+0x0p+0
+-0x1.4e3a7p+2
+0x0p+0
+-0x1.4e5b88p+2
+0x0p+0
+-0x1.4e63dp+2
+0x0p+0
+0x0p+0
+-0x1.50c174p+2
+-0x1.4e63dp+2
+0x0p+0
+0x1.0eef98p+0
+0x0p+0
+0x1.057908p+0
+-0x1.5a8d62p-8
+-0x1.61a19cp-8
+-0x1.61a19cp-8
+-0x1.74820ep-8
+-0x1.74820ep-8
+-0x1.9989b6p-8
+-0x1.9989b6p-8
+-0x1.caf4b6p-8
+-0x1.caf4b6p-8
+-0x1.f02edep-8
+-0x1.f02edep-8
+-0x1.04789ep-7
+-0x1.04789ep-7
+-0x1.0ba4bep-7
+-0x1.0ba4bep-7
+-0x1.0e73e4p-7
+-0x1.0e73e4p-7
+-0x1.0ef80cp-7
+-0x1.70654cp-8
+-0x1.758d48p-8
+-0x1.8a235ap-8
+-0x1.5bca86p-8
+-0x1.75f848p-8
+-0x1.84f12ap-8
+-0x1.a7b5dap-8
+-0x1.530eccp-8
+-0x1.851016p-8
+-0x1.a548e6p-8
+-0x1.cb255p-8
+-0x1.5ee6c2p-8
+-0x1.a41132p-8
+-0x1.e0ad98p-8
+-0x1.f915fap-8
+-0x1.8bc1bcp-8
+-0x1.dcf8e2p-8
+-0x1.ff511ap-8
+-0x1.1d20fap-7
+-0x1.a29ce8p-8
+-0x1.ff8274p-8
+-0x1.09c18cp-7
+-0x1.2da4d6p-7
+-0x1.b86536p-8
+-0x1.0ab97p-7
+-0x1.0fecbap-7
+-0x1.32a7bep-7
+-0x1.d09906p-8
+-0x1.1132d4p-7
+-0x1.11f926p-7
+-0x1.2e7c2p-7
+-0x1.e9c15p-8
+-0x1.133c1p-7
+-0x1.1140e8p-7
+-0x1.22be32p-7
+-0x1.01d16ap-7
+-0x1.6ff626p-8
+-0x1.75a332p-8
+-0x1.8992fp-8
+-0x1.5c01b6p-8
+-0x1.75fa2cp-8
+-0x1.85d52cp-8
+-0x1.a771p-8
+-0x1.543964p-8
+-0x1.85d43p-8
+-0x1.a82ca2p-8
+-0x1.cb7e12p-8
+-0x1.6234b2p-8
+-0x1.a6a988p-8
+-0x1.de32b6p-8
+-0x1.fb0c06p-8
+-0x1.89ea9cp-8
+-0x1.db1a5p-8
+-0x1.ff2868p-8
+-0x1.1bd014p-7
+-0x1.a33656p-8
+-0x1.ff1d24p-8
+-0x1.0a2a0ep-7
+-0x1.2d03a8p-7
+-0x1.ba111cp-8
+-0x1.0b0988p-7
+-0x1.1060cep-7
+-0x1.328dep-7
+-0x1.d252ecp-8
+-0x1.119ceap-7
+-0x1.127908p-7
+-0x1.2e9a7cp-7
+-0x1.eb571ap-8
+-0x1.13b62cp-7
+-0x1.122e22p-7
+-0x1.230dc4p-7
+-0x1.02e8c2p-7
+-0x1.6f9afcp-8
+-0x1.75c482p-8
+-0x1.89135ep-8
+-0x1.5c476ep-8
+-0x1.760ba4p-8
+-0x1.86e21cp-8
+-0x1.a73a58p-8
+-0x1.558e4p-8
+-0x1.86c006p-8
+-0x1.aa2b46p-8
+-0x1.cbf4dp-8
+-0x1.64a7d8p-8
+-0x1.a8859ap-8
+-0x1.dc8ceep-8
+-0x1.fc506cp-8
+-0x1.88dd66p-8
+-0x1.d9da6cp-8
+-0x1.feedeap-8
+-0x1.1acc14p-7
+-0x1.a3c2ep-8
+-0x1.feb766p-8
+-0x1.0a815ep-7
+-0x1.2c632cp-7
+-0x1.bb98e6p-8
+-0x1.0b4aa2p-7
+-0x1.10ceeap-7
+-0x1.32680ap-7
+-0x1.d3faeep-8
+-0x1.11ff9p-7
+-0x1.130142p-7
+-0x1.2eb358p-7
+-0x1.ecf9b2p-8
+-0x1.1435d2p-7
+-0x1.130c38p-7
+-0x1.2363e6p-7
+-0x1.03eff4p-7
+-0x1.6f4f9ap-8
+-0x1.75f68p-8
+-0x1.87eefp-8
+-0x1.aba2d4p-8
+-0x1.db74a4p-8
+-0x1.feaee2p-8
+-0x1.0acb3ep-7
+-0x1.11386p-7
+-0x1.138e24p-7
+-0x1.13dc1ap-7
+0x0p+0
+-0x1.59c0dp-1
+-0x1.4f65dp+1
+-0x1.59c0dp-1
+0x1.f1721ep+1
+-0x1.4f65dp+1
+0x1.2ea028p-2
+-0x1.e3a0bcp+0
+0x0p+0
+-0x1.1afa34p+0
+-0x1.e3a0bcp+0
+-0x1.954338p-4
+0x0p+0
+-0x1.4f65dp+1
+-0x1.14c24cp+1
+-0x1.e3a0bcp+0
+-0x1.14c24cp+1
+-0x1.1afa34p+0
+-0x1.081d12p+0
+-0x1.954338p-4
+-0x1.081d12p+0
+0x1.2ea028p-2
+-0x1.d643dcp-2
+0x1.478dd8p-6
+-0x1.d643dcp-2
+-0x1.974bbcp-1
+-0x1.3f646ap+1
+-0x1.974bbcp-1
+0x1.056c7ap+2
+-0x1.3f646ap+1
+0x1.4bdbd8p-2
+-0x1.ef40ep+0
+0x0p+0
+-0x1.0f02e8p+0
+-0x1.ef5a88p+0
+-0x1.55fdccp-2
+0x0p+0
+-0x1.1ba8eep+1
+-0x1.3fe83ap+1
+-0x1.1c4332p+1
+-0x1.ef5a88p+0
+-0x1.08a026p+0
+-0x1.0f02e8p+0
+-0x1.08a4e8p+0
+-0x1.55fdccp-2
+-0x1.24e818p-1
+0x1.4d0428p-2
+-0x1.222d66p-1
+0x1.9bf652p-6
+-0x1.974bbcp-1
+-0x1.3fe83ap+1
+-0x1.974bbcp-1
+0x1.056c7ap+2
+-0x1.3fe83ap+1
+0x1.4d0428p-2
+-0x1.ef5a88p+0
+0x0p+0
+-0x1.0f02e8p+0
+-0x1.ef6aa6p+0
+-0x1.55fdccp-2
+0x0p+0
+-0x1.1bd13p+1
+-0x1.405b56p+1
+-0x1.1c23ecp+1
+-0x1.ef6aa6p+0
+-0x1.df839cp-1
+-0x1.0f02e8p+0
+-0x1.efb6bap-1
+-0x1.55fdccp-2
+-0x1.2308dep-1
+0x1.4dfcfap-2
+-0x1.23373cp-1
+0x1.9bf652p-6
+-0x1.974bbcp-1
+-0x1.405b56p+1
+-0x1.974bbcp-1
+0x1.056c7ap+2
+-0x1.405b56p+1
+0x1.4dfcfap-2
+-0x1.ef6aa6p+0
+0x0p+0
+-0x1.0f02e8p+0
+-0x1.ef7798p+0
+-0x1.55fdccp-2
+0x0p+0
+-0x1.1c04a6p+1
+-0x1.40c506p+1
+-0x1.1c35f2p+1
+-0x1.ef7798p+0
+-0x1.ea5daep-1
+-0x1.0f02e8p+0
+-0x1.ec30fp-1
+-0x1.55fdccp-2
+-0x1.232656p-1
+0x1.4ede06p-2
+-0x1.239fccp-1
+0x1.9bf652p-6
+-0x1.974bbcp-1
+0x1.056c7ap+2
+-0x1.40c506p+1
+-0x1.1c2306p+1
+-0x1.ef7798p+0
+-0x1.0f02e8p+0
+-0x1.eb8f3ap-1
+-0x1.55fdccp-2
+0x0p+0
+0x1.4ede06p-2
+-0x1.2373dp-1
+0x1.9bf652p-6
+-0x1.96b438p-1
+-0x1.50c174p+2
+-0x1.96b438p-1
+0x1.4ecb08p+2
+-0x1.96b438p-1
+0x1.8707bp-1
+-0x1.50c174p+2
+0x0p+0
+0x1.8707bp-1
+-0x1.e637dp+1
+0x1.4ecb08p+2
+-0x1.e637dp+1
+-0x1.50c174p+2
+-0x1.031754p+0
+-0x1.84638ep+1
+-0x1.031754p+0
+-0x1.9185bcp-1
+-0x1.5a75d8p+2
+-0x1.9185bcp-1
+0x1.435754p+2
+-0x1.9185bcp-1
+0x1.5d6672p-1
+-0x1.5a6b56p+2
+0x0p+0
+-0x1.efa46ap+1
+0x1.5d6672p-1
+-0x1.ef7f0cp+1
+0x1.434c3ep+2
+-0x1.0d6fcep+0
+-0x1.5a6b56p+2
+-0x1.0a47ecp+0
+-0x1.8bcc6cp+1
+-0x1.9185bcp-1
+-0x1.5a6b56p+2
+-0x1.9185bcp-1
+0x1.434c3ep+2
+-0x1.9185bcp-1
+0x1.5d6672p-1
+-0x1.5a6124p+2
+0x0p+0
+-0x1.ef7956p+1
+0x1.5d6672p-1
+-0x1.ef7b62p+1
+0x1.4341c8p+2
+-0x1.0b672p+0
+-0x1.5a6124p+2
+-0x1.0b1c5ap+0
+-0x1.8bcc6cp+1
+-0x1.9185bcp-1
+-0x1.5a6124p+2
+-0x1.9185bcp-1
+0x1.4341c8p+2
+-0x1.9185bcp-1
+0x1.5d6672p-1
+-0x1.5a56f4p+2
+0x0p+0
+-0x1.ef6b66p+1
+0x1.5d6672p-1
+-0x1.ef7124p+1
+0x1.4337dap+2
+-0x1.0b3704p+0
+-0x1.5a56f4p+2
+-0x1.0b4888p+0
+-0x1.8bcc6cp+1
+-0x1.9185bcp-1
+0x1.5d6672p-1
+-0x1.ef60c4p+1
+0x1.4337dap+2
+-0x1.5a56f4p+2
+-0x1.0b4244p+0
+-0x1.8bcc6cp+1
+0x0p+0
+-0x1.4a1ad2p+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x1.8493d8p-32
+0x0p+0
+-0x1.8493dap-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.1ce356p+2
+-0x1.a1a99ap-1
+-0x1.960e08p+2
+-0x1.a1a99ap-1
+-0x1.ac286p-1
+-0x1.22729ep+2
+-0x1.ac2588p-1
+-0x1.9d465ap+2
+-0x1.ac263ap-1
+-0x1.9d465ap+2
+-0x1.22729ep+2
+0x0p+0
+0x1.f82de8p-9
+0x1.4b24b4p-6
+0x1.f82de8p-9
+0x1.3c614cp-8
+0x0p+0
+0x1.3c56dap-8
+0x1.9f8d2ep-6
+0x1.3c6ecap-8
+0x1.9f8d2ep-6
+0x0p+0
+0x1.55ae36p-1
+-0x1.ae10c6p-1
+-0x1.fa17bcp+0
+-0x1.ae10c6p-1
+-0x1.bbcdep-1
+0x1.795c86p-1
+-0x1.bbcd4ap-1
+-0x1.0f5726p+1
+-0x1.bbccf8p-1
+-0x1.0f5726p+1
+0x1.795c86p-1
+0x1.98df72p+0
+-0x1.0338a8p+0
+-0x1.1e1212p+2
+-0x1.0338a8p+0
+-0x1.0e70d4p+0
+0x1.a47d56p+0
+-0x1.0e6a06p+0
+-0x1.21efb4p+2
+-0x1.0e6b38p+0
+-0x1.21efb4p+2
+0x1.a47d56p+0
+0x1.e50418p-4
+0x0p+0
+0x1.a3b146p-4
+0x1.e50418p-4
+0x1.756012p-4
+0x1.a3b146p-4
+0x1.09fc38p-4
+0x1.756012p-4
+0x1.9f2ddep-6
+0x1.09fc38p-4
+-0x1.aeb56cp-6
+0x1.9f2ddep-6
+-0x1.076926p-4
+-0x1.aeb56cp-6
+-0x1.69e116p-4
+-0x1.076926p-4
+-0x1.a2c93ep-4
+-0x1.69e116p-4
+-0x1.f40c86p-4
+-0x1.a2c93ep-4
+0x0p+0
+-0x1.f40c86p-4
+0x0p+0
+0x1.e148c6p-4
+0x1.e1b3acp-4
+0x1.b944b4p-4
+0x1.b9b8cap-4
+0x1.938b6ep-4
+0x1.9410cap-4
+0x1.235cfep-4
+0x1.24f7ccp-4
+0x1.b2d8e4p-6
+0x1.bccc44p-6
+-0x1.c75506p-6
+-0x1.bc9672p-6
+-0x1.20bfb6p-4
+-0x1.1ed066p-4
+-0x1.88483ap-4
+-0x1.87374cp-4
+-0x1.b8364p-4
+-0x1.b78b8p-4
+-0x1.ef50ccp-4
+-0x1.eeb1c4p-4
+0x0p+0
+0x0p+0
+0x1.e12aacp-4
+0x1.e16f94p-4
+0x1.b94ee6p-4
+0x1.b9d5c4p-4
+0x1.92e97ep-4
+0x1.938bb4p-4
+0x1.22f552p-4
+0x1.24ae36p-4
+0x1.b19f6ep-6
+0x1.bbaf46p-6
+-0x1.c62bep-6
+-0x1.bb5ddcp-6
+-0x1.20541ep-4
+-0x1.1e7712p-4
+-0x1.87c004p-4
+-0x1.86cc74p-4
+-0x1.b84a2ep-4
+-0x1.b7bcb6p-4
+-0x1.ef01acp-4
+-0x1.ee63fcp-4
+0x0p+0
+0x0p+0
+0x1.e0fb2p-4
+0x1.e13598p-4
+0x1.b9842cp-4
+0x1.ba0682p-4
+0x1.92847ep-4
+0x1.93216p-4
+0x1.22b4bcp-4
+0x1.246bb6p-4
+0x1.b0a386p-6
+0x1.baaa56p-6
+-0x1.c53894p-6
+-0x1.ba5f26p-6
+-0x1.20163p-4
+-0x1.1e336ep-4
+-0x1.8774f4p-4
+-0x1.867b46p-4
+-0x1.b8795ap-4
+-0x1.b7ec72p-4
+-0x1.eeb34ep-4
+-0x1.ee175ep-4
+0x0p+0
+0x1.e0bf54p-4
+0x1.b9ac24p-4
+0x1.921a38p-4
+0x1.22712ep-4
+0x1.afb95ep-6
+-0x1.c41f38p-6
+-0x1.1fcb5p-4
+-0x1.872726p-4
+-0x1.b8a772p-4
+-0x1.ee6606p-4
+0x0p+0
+-0x1.5a8d62p-8
+-0x1.61a19cp-8
+-0x1.74820ep-8
+-0x1.9989b6p-8
+-0x1.caf4b6p-8
+-0x1.f02edep-8
+-0x1.04789ep-7
+-0x1.0ba4bep-7
+-0x1.0e73e4p-7
+-0x1.0ef80cp-7
+0x0p+0
+-0x1.59c0dp-1
+0x1.f1721ep+1
+-0x1.96b438p-1
+-0x1.47b502p+2
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+-0x1.081d12p+0
+-0x1.954338p-4
+-0x1.1afa34p+0
+-0x1.14c24cp+1
+-0x1.e3a0bcp+0
+-0x1.4f65dp+1
+-0x1.031754p+0
+-0x1.50c174p+2
+-0x1.84638ep+1
+-0x1.a1a99ap-1
+-0x1.1ce356p+2
+-0x1.960e08p+2
+0x1.f82de8p-9
+0x0p+0
+0x1.4b24b4p-6
+-0x1.d643dcp-2
+0x1.478dd8p-6
+0x1.2ea028p-2
+-0x1.ae10c6p-1
+0x1.55ae36p-1
+-0x1.fa17bcp+0
+-0x1.e637dp+1
+0x1.8707bp-1
+0x1.4ecb08p+2
+-0x1.0338a8p+0
+0x1.98df72p+0
+-0x1.1e1212p+2
+0x1.e50418p-4
+0x1.a3b146p-4
+0x1.756012p-4
+0x1.09fc38p-4
+0x1.9f2ddep-6
+-0x1.aeb56cp-6
+-0x1.076926p-4
+-0x1.69e116p-4
+-0x1.a2c93ep-4
+-0x1.f40c86p-4
+0x0p+0
+0x1.f1721ep+1
+0x0p+0
+0x1.056c7ap+2
+0x0p+0
+0x1.07be9p+2
+0x0p+0
+0x1.040e34p+2
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.66e79cp+2
+0x0p+0
+0x1.5f363ep+2
+0x0p+0
+0x1.193788p+2
+0x0p+0
+0x1.1641dp+2
+0x0p+0
+0x1.3e079cp+1
+0x0p+0
+0x1.34dea8p+1
+0x0p+0
+0x1.4ecb08p+2
+0x0p+0
+0x1.4337dap+2
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x1.8493d8p-32
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x0p+0
+0x1.501872p+2
+0x0p+0
+0x1.54adcep+2
+0x0p+0
+0x1.8bcaaap+2
+0x0p+0
+0x1.7cbfdap+2
+0x0p+0
+0x1.4b6128p+2
+0x0p+0
+0x1.4e5efcp+2
+0x0p+0
+0x1.8707bp-1
+0x0p+0
+0x1.5d6672p-1
+0x0p+0
+0x1.5c5d9ep+2
+0x0p+0
+0x1.5aa618p+2
+0x0p+0
+0x1.5f493p+2
+0x0p+0
+0x1.5feefep+2
+0x0p+0
+0x1.55ae36p-1
+0x0p+0
+0x1.795c86p-1
+0x0p+0
+0x1.1399c8p+2
+0x0p+0
+0x1.0a7424p+2
+0x0p+0
+0x1.9fdbdep+1
+0x0p+0
+0x1.9873p+1
+0x0p+0
+0x1.5159ep+2
+0x0p+0
+0x1.4f4f24p+2
+0x0p+0
+0x1.193788p+2
+0x0p+0
+0x1.1641dp+2
+0x0p+0
+0x1.057908p+0
+0x0p+0
+0x1.be461p-1
+0x0p+0
+0x1.51518cp+2
+0x0p+0
+0x1.4e84e8p+2
+0x0p+0
+0x1.d0369p+0
+0x0p+0
+0x1.c0c008p+0
+0x0p+0
+0x1.98df72p+0
+0x0p+0
+0x1.a47d56p+0
+0x0p+0
+0x1.8e3164p+2
+0x0p+0
+0x1.86f912p+2
+0x0p+0
+0x1.5dea82p+2
+0x0p+0
+0x1.5c9aeep+2
+0x0p+0
+0x1.d4f18p+0
+0x0p+0
+0x1.beb46p+0
+0x0p+0
+0x1.a3b146p-4
+0x0p+0
+0x1.b9ac24p-4
+0x0p+0
+0x1.8b9492p+2
+0x0p+0
+0x1.8b3d18p+2
+-0x1.6f4f9ap-8
+-0x1.75f68p-8
+-0x1.75f68p-8
+-0x1.87eefp-8
+-0x1.87eefp-8
+-0x1.aba2d4p-8
+-0x1.aba2d4p-8
+-0x1.db74a4p-8
+-0x1.db74a4p-8
+-0x1.feaee2p-8
+-0x1.feaee2p-8
+-0x1.0acb3ep-7
+-0x1.0acb3ep-7
+-0x1.11386p-7
+-0x1.11386p-7
+-0x1.138e24p-7
+-0x1.138e24p-7
+-0x1.13dc1ap-7
+-0x1.852784p-8
+-0x1.89e22cp-8
+-0x1.9e3a2ap-8
+-0x1.70cb3ep-8
+-0x1.8a4ff4p-8
+-0x1.985e0cp-8
+-0x1.babdc4p-8
+-0x1.67cc9ap-8
+-0x1.988c2ap-8
+-0x1.b76204p-8
+-0x1.dca0a2p-8
+-0x1.73023p-8
+-0x1.b6405ep-8
+-0x1.f12d86p-8
+-0x1.04524ep-7
+-0x1.9ee3aep-8
+-0x1.ed9152p-8
+-0x1.06e89p-7
+-0x1.23d858p-7
+-0x1.b4469ep-8
+-0x1.071124p-7
+-0x1.10142cp-7
+-0x1.334672p-7
+-0x1.c8633cp-8
+-0x1.111694p-7
+-0x1.15805cp-7
+-0x1.3771dp-7
+-0x1.dee04p-8
+-0x1.16cb02p-7
+-0x1.171366p-7
+-0x1.32dc2cp-7
+-0x1.f66134p-8
+-0x1.1856d8p-7
+-0x1.1624f6p-7
+-0x1.272e4cp-7
+-0x1.075ec2p-7
+-0x1.84b62ap-8
+-0x1.89ecf8p-8
+-0x1.9da8cep-8
+-0x1.70f61p-8
+-0x1.8a4bfap-8
+-0x1.993c16p-8
+-0x1.ba6cf2p-8
+-0x1.68f75ep-8
+-0x1.9948c2p-8
+-0x1.ba42dep-8
+-0x1.dcf3acp-8
+-0x1.764b8p-8
+-0x1.b8d83ep-8
+-0x1.eea714p-8
+-0x1.054cbep-7
+-0x1.9d01a8p-8
+-0x1.eba4a6p-8
+-0x1.06d39p-7
+-0x1.22833ap-7
+-0x1.b4d914p-8
+-0x1.06dc2ap-7
+-0x1.107aa6p-7
+-0x1.32a7a4p-7
+-0x1.ca01cp-8
+-0x1.116444p-7
+-0x1.15f28p-7
+-0x1.375c2ep-7
+-0x1.e0892p-8
+-0x1.173364p-7
+-0x1.1792ap-7
+-0x1.32fd9ep-7
+-0x1.f7ec3p-8
+-0x1.18cfc2p-7
+-0x1.17103cp-7
+-0x1.277ff2p-7
+-0x1.0870e8p-7
+-0x1.84539p-8
+-0x1.8a0a04p-8
+-0x1.9d255ep-8
+-0x1.7133f2p-8
+-0x1.8a58p-8
+-0x1.9a3f38p-8
+-0x1.ba2e5ap-8
+-0x1.6a44f2p-8
+-0x1.9a2bdap-8
+-0x1.bc4386p-8
+-0x1.dd63bcp-8
+-0x1.78be9ep-8
+-0x1.baae92p-8
+-0x1.ecf68cp-8
+-0x1.05eeap-7
+-0x1.9be49p-8
+-0x1.ea5b9ap-8
+-0x1.06b47cp-7
+-0x1.217e6p-7
+-0x1.b55a7ep-8
+-0x1.06a8e4p-7
+-0x1.10cf8p-7
+-0x1.32098p-7
+-0x1.cb7f2ep-8
+-0x1.11a368p-7
+-0x1.165f9p-7
+-0x1.3739a2p-7
+-0x1.e224a4p-8
+-0x1.1795fep-7
+-0x1.1818cep-7
+-0x1.3319bp-7
+-0x1.f9843cp-8
+-0x1.194e52p-7
+-0x1.17ed4ep-7
+-0x1.27d7d6p-7
+-0x1.097448p-7
+-0x1.8401eep-8
+-0x1.8a3592p-8
+-0x1.9b4b24p-8
+-0x1.bdb3cp-8
+-0x1.ebd258p-8
+-0x1.069428p-7
+-0x1.111694p-7
+-0x1.16c81cp-7
+-0x1.18a3ep-7
+-0x1.18bcfcp-7
+0x0p+0
+-0x1.974bbcp-1
+0x1.056c7ap+2
+-0x1.d4d6a8p-1
+0x1.121fe6p+2
+-0x1.d4d6a8p-1
+0x1.121fe6p+2
+-0x1.9185bcp-1
+-0x1.5a56f4p+2
+-0x1.9185bcp-1
+0x1.4337dap+2
+-0x1.9185bcp-1
+0x1.5d6672p-1
+-0x1.5a56f4p+2
+0x0p+0
+0x1.5d6672p-1
+-0x1.ef60c4p+1
+0x1.4337dap+2
+-0x1.ef60c4p+1
+-0x1.5a56f4p+2
+-0x1.0b4244p+0
+-0x1.8bcc6cp+1
+-0x1.0b4244p+0
+-0x1.697dfep-1
+-0x1.6399ap+2
+-0x1.697dfep-1
+0x1.37851p+2
+-0x1.697dfep-1
+0x1.33c534p-1
+-0x1.638706p+2
+0x0p+0
+-0x1.f86bdep+1
+0x1.33c534p-1
+-0x1.f86f94p+1
+0x1.3781aap+2
+-0x1.15ea38p+0
+-0x1.638706p+2
+-0x1.1618ep+0
+-0x1.93354ap+1
+-0x1.697dfep-1
+-0x1.638706p+2
+-0x1.697dfep-1
+0x1.3781aap+2
+-0x1.697dfep-1
+0x1.33c534p-1
+-0x1.6374dcp+2
+0x0p+0
+-0x1.f85828p+1
+0x1.33c534p-1
+-0x1.f860ap+1
+0x1.377e3ep+2
+-0x1.160728p+0
+-0x1.6374dcp+2
+-0x1.162d16p+0
+-0x1.93354ap+1
+-0x1.697dfep-1
+-0x1.6374dcp+2
+-0x1.697dfep-1
+0x1.377e3ep+2
+-0x1.697dfep-1
+0x1.33c534p-1
+-0x1.63632ep+2
+0x0p+0
+-0x1.f84f42p+1
+0x1.33c534p-1
+-0x1.f85578p+1
+0x1.377adp+2
+-0x1.161f6cp+0
+-0x1.63632ep+2
+-0x1.164296p+0
+-0x1.93354ap+1
+-0x1.697dfep-1
+0x1.33c534p-1
+-0x1.f845ap+1
+0x1.377adp+2
+-0x1.63632ep+2
+-0x1.16361p+0
+-0x1.93354ap+1
+0x0p+0
+-0x1.4c80a2p+2
+0x0p+0
diff --git a/math/test/ulp.c b/math/test/ulp.c
new file mode 100644
index 000000000000..51479b87a0fd
--- /dev/null
+++ b/math/test/ulp.c
@@ -0,0 +1,853 @@
+/*
+ * ULP error checking tool for math functions.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <ctype.h>
+#include <fenv.h>
+#include <float.h>
+#include <math.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mathlib.h"
+
+/* Don't depend on mpfr by default. */
+#ifndef USE_MPFR
+# define USE_MPFR 0
+#endif
+#if USE_MPFR
+# include <mpfr.h>
+#endif
+
+#ifndef WANT_VMATH
+/* Enable the build of vector math code. */
+# define WANT_VMATH 1
+#endif
+
+static inline uint64_t
+asuint64 (double f)
+{
+ union
+ {
+ double f;
+ uint64_t i;
+ } u = {f};
+ return u.i;
+}
+
+static inline double
+asdouble (uint64_t i)
+{
+ union
+ {
+ uint64_t i;
+ double f;
+ } u = {i};
+ return u.f;
+}
+
+static inline uint32_t
+asuint (float f)
+{
+ union
+ {
+ float f;
+ uint32_t i;
+ } u = {f};
+ return u.i;
+}
+
+static inline float
+asfloat (uint32_t i)
+{
+ union
+ {
+ uint32_t i;
+ float f;
+ } u = {i};
+ return u.f;
+}
+
+static uint64_t seed = 0x0123456789abcdef;
+static uint64_t
+rand64 (void)
+{
+ seed = 6364136223846793005ull * seed + 1;
+ return seed ^ (seed >> 32);
+}
+
+/* Uniform random in [0,n]. */
+static uint64_t
+randn (uint64_t n)
+{
+ uint64_t r, m;
+
+ if (n == 0)
+ return 0;
+ n++;
+ if (n == 0)
+ return rand64 ();
+ for (;;)
+ {
+ r = rand64 ();
+ m = r % n;
+ if (r - m <= -n)
+ return m;
+ }
+}
+
+struct gen
+{
+ uint64_t start;
+ uint64_t len;
+ uint64_t start2;
+ uint64_t len2;
+ uint64_t off;
+ uint64_t step;
+ uint64_t cnt;
+};
+
+struct args_f1
+{
+ float x;
+};
+
+struct args_f2
+{
+ float x;
+ float x2;
+};
+
+struct args_d1
+{
+ double x;
+};
+
+struct args_d2
+{
+ double x;
+ double x2;
+};
+
+/* result = y + tail*2^ulpexp. */
+struct ret_f
+{
+ float y;
+ double tail;
+ int ulpexp;
+ int ex;
+ int ex_may;
+};
+
+struct ret_d
+{
+ double y;
+ double tail;
+ int ulpexp;
+ int ex;
+ int ex_may;
+};
+
+static inline uint64_t
+next1 (struct gen *g)
+{
+ /* For single argument use randomized incremental steps,
+ that produce dense sampling without collisions and allow
+ testing all inputs in a range. */
+ uint64_t r = g->start + g->off;
+ g->off += g->step + randn (g->step / 2);
+ if (g->off > g->len)
+ g->off -= g->len; /* hack. */
+ return r;
+}
+
+static inline uint64_t
+next2 (uint64_t *x2, struct gen *g)
+{
+ /* For two arguments use uniform random sampling. */
+ uint64_t r = g->start + randn (g->len);
+ *x2 = g->start2 + randn (g->len2);
+ return r;
+}
+
+static struct args_f1
+next_f1 (void *g)
+{
+ return (struct args_f1){asfloat (next1 (g))};
+}
+
+static struct args_f2
+next_f2 (void *g)
+{
+ uint64_t x2;
+ uint64_t x = next2 (&x2, g);
+ return (struct args_f2){asfloat (x), asfloat (x2)};
+}
+
+static struct args_d1
+next_d1 (void *g)
+{
+ return (struct args_d1){asdouble (next1 (g))};
+}
+
+static struct args_d2
+next_d2 (void *g)
+{
+ uint64_t x2;
+ uint64_t x = next2 (&x2, g);
+ return (struct args_d2){asdouble (x), asdouble (x2)};
+}
+
+struct conf
+{
+ int r;
+ int rc;
+ int quiet;
+ int mpfr;
+ int fenv;
+ unsigned long long n;
+ double softlim;
+ double errlim;
+};
+
+/* Wrappers for sincos. */
+static float sincosf_sinf(float x) {(void)cosf(x); return sinf(x);}
+static float sincosf_cosf(float x) {(void)sinf(x); return cosf(x);}
+static double sincos_sin(double x) {(void)cos(x); return sin(x);}
+static double sincos_cos(double x) {(void)sin(x); return cos(x);}
+#if USE_MPFR
+static int sincos_mpfr_sin(mpfr_t y, const mpfr_t x, mpfr_rnd_t r) { mpfr_cos(y,x,r); return mpfr_sin(y,x,r); }
+static int sincos_mpfr_cos(mpfr_t y, const mpfr_t x, mpfr_rnd_t r) { mpfr_sin(y,x,r); return mpfr_cos(y,x,r); }
+#endif
+
+/* A bit of a hack: call vector functions twice with the same
+ input in lane 0 but a different value in other lanes: once
+ with an in-range value and then with a special case value. */
+static int secondcall;
+
+/* Wrappers for vector functions. */
+#if __aarch64__ && WANT_VMATH
+typedef __f32x4_t v_float;
+typedef __f64x2_t v_double;
+static const float fv[2] = {1.0f, -INFINITY};
+static const double dv[2] = {1.0, -INFINITY};
+static inline v_float argf(float x) { return (v_float){x,x,x,fv[secondcall]}; }
+static inline v_double argd(double x) { return (v_double){x,dv[secondcall]}; }
+
+static float v_sinf(float x) { return __v_sinf(argf(x))[0]; }
+static float v_cosf(float x) { return __v_cosf(argf(x))[0]; }
+static float v_expf_1u(float x) { return __v_expf_1u(argf(x))[0]; }
+static float v_expf(float x) { return __v_expf(argf(x))[0]; }
+static float v_exp2f_1u(float x) { return __v_exp2f_1u(argf(x))[0]; }
+static float v_exp2f(float x) { return __v_exp2f(argf(x))[0]; }
+static float v_logf(float x) { return __v_logf(argf(x))[0]; }
+static float v_powf(float x, float y) { return __v_powf(argf(x),argf(y))[0]; }
+static double v_sin(double x) { return __v_sin(argd(x))[0]; }
+static double v_cos(double x) { return __v_cos(argd(x))[0]; }
+static double v_exp(double x) { return __v_exp(argd(x))[0]; }
+static double v_log(double x) { return __v_log(argd(x))[0]; }
+static double v_pow(double x, double y) { return __v_pow(argd(x),argd(y))[0]; }
+#ifdef __vpcs
+static float vn_sinf(float x) { return __vn_sinf(argf(x))[0]; }
+static float vn_cosf(float x) { return __vn_cosf(argf(x))[0]; }
+static float vn_expf_1u(float x) { return __vn_expf_1u(argf(x))[0]; }
+static float vn_expf(float x) { return __vn_expf(argf(x))[0]; }
+static float vn_exp2f_1u(float x) { return __vn_exp2f_1u(argf(x))[0]; }
+static float vn_exp2f(float x) { return __vn_exp2f(argf(x))[0]; }
+static float vn_logf(float x) { return __vn_logf(argf(x))[0]; }
+static float vn_powf(float x, float y) { return __vn_powf(argf(x),argf(y))[0]; }
+static double vn_sin(double x) { return __vn_sin(argd(x))[0]; }
+static double vn_cos(double x) { return __vn_cos(argd(x))[0]; }
+static double vn_exp(double x) { return __vn_exp(argd(x))[0]; }
+static double vn_log(double x) { return __vn_log(argd(x))[0]; }
+static double vn_pow(double x, double y) { return __vn_pow(argd(x),argd(y))[0]; }
+static float Z_sinf(float x) { return _ZGVnN4v_sinf(argf(x))[0]; }
+static float Z_cosf(float x) { return _ZGVnN4v_cosf(argf(x))[0]; }
+static float Z_expf(float x) { return _ZGVnN4v_expf(argf(x))[0]; }
+static float Z_exp2f(float x) { return _ZGVnN4v_exp2f(argf(x))[0]; }
+static float Z_logf(float x) { return _ZGVnN4v_logf(argf(x))[0]; }
+static float Z_powf(float x, float y) { return _ZGVnN4vv_powf(argf(x),argf(y))[0]; }
+static double Z_sin(double x) { return _ZGVnN2v_sin(argd(x))[0]; }
+static double Z_cos(double x) { return _ZGVnN2v_cos(argd(x))[0]; }
+static double Z_exp(double x) { return _ZGVnN2v_exp(argd(x))[0]; }
+static double Z_log(double x) { return _ZGVnN2v_log(argd(x))[0]; }
+static double Z_pow(double x, double y) { return _ZGVnN2vv_pow(argd(x),argd(y))[0]; }
+#endif
+#endif
+
+struct fun
+{
+ const char *name;
+ int arity;
+ int singleprec;
+ int twice;
+ union
+ {
+ float (*f1) (float);
+ float (*f2) (float, float);
+ double (*d1) (double);
+ double (*d2) (double, double);
+ } fun;
+ union
+ {
+ double (*f1) (double);
+ double (*f2) (double, double);
+ long double (*d1) (long double);
+ long double (*d2) (long double, long double);
+ } fun_long;
+#if USE_MPFR
+ union
+ {
+ int (*f1) (mpfr_t, const mpfr_t, mpfr_rnd_t);
+ int (*f2) (mpfr_t, const mpfr_t, const mpfr_t, mpfr_rnd_t);
+ int (*d1) (mpfr_t, const mpfr_t, mpfr_rnd_t);
+ int (*d2) (mpfr_t, const mpfr_t, const mpfr_t, mpfr_rnd_t);
+ } fun_mpfr;
+#endif
+};
+
+static const struct fun fun[] = {
+#if USE_MPFR
+# define F(x, x_wrap, x_long, x_mpfr, a, s, t, twice) \
+ {#x, a, s, twice, {.t = x_wrap}, {.t = x_long}, {.t = x_mpfr}},
+#else
+# define F(x, x_wrap, x_long, x_mpfr, a, s, t, twice) \
+ {#x, a, s, twice, {.t = x_wrap}, {.t = x_long}},
+#endif
+#define F1(x) F (x##f, x##f, x, mpfr_##x, 1, 1, f1, 0)
+#define F2(x) F (x##f, x##f, x, mpfr_##x, 2, 1, f2, 0)
+#define D1(x) F (x, x, x##l, mpfr_##x, 1, 0, d1, 0)
+#define D2(x) F (x, x, x##l, mpfr_##x, 2, 0, d2, 0)
+ F1 (sin)
+ F1 (cos)
+ F (sincosf_sinf, sincosf_sinf, sincos_sin, sincos_mpfr_sin, 1, 1, f1, 0)
+ F (sincosf_cosf, sincosf_cosf, sincos_cos, sincos_mpfr_cos, 1, 1, f1, 0)
+ F1 (exp)
+ F1 (exp2)
+ F1 (log)
+ F1 (log2)
+ F2 (pow)
+ F1 (erf)
+ D1 (exp)
+ D1 (exp2)
+ D1 (log)
+ D1 (log2)
+ D2 (pow)
+ D1 (erf)
+#if WANT_VMATH
+ F (__s_sinf, __s_sinf, sin, mpfr_sin, 1, 1, f1, 0)
+ F (__s_cosf, __s_cosf, cos, mpfr_cos, 1, 1, f1, 0)
+ F (__s_expf_1u, __s_expf_1u, exp, mpfr_exp, 1, 1, f1, 0)
+ F (__s_expf, __s_expf, exp, mpfr_exp, 1, 1, f1, 0)
+ F (__s_exp2f_1u, __s_exp2f_1u, exp2, mpfr_exp2, 1, 1, f1, 0)
+ F (__s_exp2f, __s_exp2f, exp2, mpfr_exp2, 1, 1, f1, 0)
+ F (__s_powf, __s_powf, pow, mpfr_pow, 2, 1, f2, 0)
+ F (__s_logf, __s_logf, log, mpfr_log, 1, 1, f1, 0)
+ F (__s_sin, __s_sin, sinl, mpfr_sin, 1, 0, d1, 0)
+ F (__s_cos, __s_cos, cosl, mpfr_cos, 1, 0, d1, 0)
+ F (__s_exp, __s_exp, expl, mpfr_exp, 1, 0, d1, 0)
+ F (__s_log, __s_log, logl, mpfr_log, 1, 0, d1, 0)
+ F (__s_pow, __s_pow, powl, mpfr_pow, 2, 0, d2, 0)
+#if __aarch64__
+ F (__v_sinf, v_sinf, sin, mpfr_sin, 1, 1, f1, 1)
+ F (__v_cosf, v_cosf, cos, mpfr_cos, 1, 1, f1, 1)
+ F (__v_expf_1u, v_expf_1u, exp, mpfr_exp, 1, 1, f1, 1)
+ F (__v_expf, v_expf, exp, mpfr_exp, 1, 1, f1, 1)
+ F (__v_exp2f_1u, v_exp2f_1u, exp2, mpfr_exp2, 1, 1, f1, 1)
+ F (__v_exp2f, v_exp2f, exp2, mpfr_exp2, 1, 1, f1, 1)
+ F (__v_logf, v_logf, log, mpfr_log, 1, 1, f1, 1)
+ F (__v_powf, v_powf, pow, mpfr_pow, 2, 1, f2, 1)
+ F (__v_sin, v_sin, sinl, mpfr_sin, 1, 0, d1, 1)
+ F (__v_cos, v_cos, cosl, mpfr_cos, 1, 0, d1, 1)
+ F (__v_exp, v_exp, expl, mpfr_exp, 1, 0, d1, 1)
+ F (__v_log, v_log, logl, mpfr_log, 1, 0, d1, 1)
+ F (__v_pow, v_pow, powl, mpfr_pow, 2, 0, d2, 1)
+#ifdef __vpcs
+ F (__vn_sinf, vn_sinf, sin, mpfr_sin, 1, 1, f1, 1)
+ F (__vn_cosf, vn_cosf, cos, mpfr_cos, 1, 1, f1, 1)
+ F (__vn_expf_1u, vn_expf_1u, exp, mpfr_exp, 1, 1, f1, 1)
+ F (__vn_expf, vn_expf, exp, mpfr_exp, 1, 1, f1, 1)
+ F (__vn_exp2f_1u, vn_exp2f_1u, exp2, mpfr_exp2, 1, 1, f1, 1)
+ F (__vn_exp2f, vn_exp2f, exp2, mpfr_exp2, 1, 1, f1, 1)
+ F (__vn_logf, vn_logf, log, mpfr_log, 1, 1, f1, 1)
+ F (__vn_powf, vn_powf, pow, mpfr_pow, 2, 1, f2, 1)
+ F (__vn_sin, vn_sin, sinl, mpfr_sin, 1, 0, d1, 1)
+ F (__vn_cos, vn_cos, cosl, mpfr_cos, 1, 0, d1, 1)
+ F (__vn_exp, vn_exp, expl, mpfr_exp, 1, 0, d1, 1)
+ F (__vn_log, vn_log, logl, mpfr_log, 1, 0, d1, 1)
+ F (__vn_pow, vn_pow, powl, mpfr_pow, 2, 0, d2, 1)
+ F (_ZGVnN4v_sinf, Z_sinf, sin, mpfr_sin, 1, 1, f1, 1)
+ F (_ZGVnN4v_cosf, Z_cosf, cos, mpfr_cos, 1, 1, f1, 1)
+ F (_ZGVnN4v_expf, Z_expf, exp, mpfr_exp, 1, 1, f1, 1)
+ F (_ZGVnN4v_exp2f, Z_exp2f, exp2, mpfr_exp2, 1, 1, f1, 1)
+ F (_ZGVnN4v_logf, Z_logf, log, mpfr_log, 1, 1, f1, 1)
+ F (_ZGVnN4vv_powf, Z_powf, pow, mpfr_pow, 2, 1, f2, 1)
+ F (_ZGVnN2v_sin, Z_sin, sinl, mpfr_sin, 1, 0, d1, 1)
+ F (_ZGVnN2v_cos, Z_cos, cosl, mpfr_cos, 1, 0, d1, 1)
+ F (_ZGVnN2v_exp, Z_exp, expl, mpfr_exp, 1, 0, d1, 1)
+ F (_ZGVnN2v_log, Z_log, logl, mpfr_log, 1, 0, d1, 1)
+ F (_ZGVnN2vv_pow, Z_pow, powl, mpfr_pow, 2, 0, d2, 1)
+#endif
+#endif
+#endif
+#undef F
+#undef F1
+#undef F2
+#undef D1
+#undef D2
+ {0}};
+
+/* Boilerplate for generic calls. */
+
+static inline int
+ulpscale_f (float x)
+{
+ int e = asuint (x) >> 23 & 0xff;
+ if (!e)
+ e++;
+ return e - 0x7f - 23;
+}
+static inline int
+ulpscale_d (double x)
+{
+ int e = asuint64 (x) >> 52 & 0x7ff;
+ if (!e)
+ e++;
+ return e - 0x3ff - 52;
+}
+static inline float
+call_f1 (const struct fun *f, struct args_f1 a)
+{
+ return f->fun.f1 (a.x);
+}
+static inline float
+call_f2 (const struct fun *f, struct args_f2 a)
+{
+ return f->fun.f2 (a.x, a.x2);
+}
+
+static inline double
+call_d1 (const struct fun *f, struct args_d1 a)
+{
+ return f->fun.d1 (a.x);
+}
+static inline double
+call_d2 (const struct fun *f, struct args_d2 a)
+{
+ return f->fun.d2 (a.x, a.x2);
+}
+static inline double
+call_long_f1 (const struct fun *f, struct args_f1 a)
+{
+ return f->fun_long.f1 (a.x);
+}
+static inline double
+call_long_f2 (const struct fun *f, struct args_f2 a)
+{
+ return f->fun_long.f2 (a.x, a.x2);
+}
+static inline long double
+call_long_d1 (const struct fun *f, struct args_d1 a)
+{
+ return f->fun_long.d1 (a.x);
+}
+static inline long double
+call_long_d2 (const struct fun *f, struct args_d2 a)
+{
+ return f->fun_long.d2 (a.x, a.x2);
+}
+static inline void
+printcall_f1 (const struct fun *f, struct args_f1 a)
+{
+ printf ("%s(%a)", f->name, a.x);
+}
+static inline void
+printcall_f2 (const struct fun *f, struct args_f2 a)
+{
+ printf ("%s(%a, %a)", f->name, a.x, a.x2);
+}
+static inline void
+printcall_d1 (const struct fun *f, struct args_d1 a)
+{
+ printf ("%s(%a)", f->name, a.x);
+}
+static inline void
+printcall_d2 (const struct fun *f, struct args_d2 a)
+{
+ printf ("%s(%a, %a)", f->name, a.x, a.x2);
+}
+static inline void
+printgen_f1 (const struct fun *f, struct gen *gen)
+{
+ printf ("%s in [%a;%a]", f->name, asfloat (gen->start),
+ asfloat (gen->start + gen->len));
+}
+static inline void
+printgen_f2 (const struct fun *f, struct gen *gen)
+{
+ printf ("%s in [%a;%a] x [%a;%a]", f->name, asfloat (gen->start),
+ asfloat (gen->start + gen->len), asfloat (gen->start2),
+ asfloat (gen->start2 + gen->len2));
+}
+static inline void
+printgen_d1 (const struct fun *f, struct gen *gen)
+{
+ printf ("%s in [%a;%a]", f->name, asdouble (gen->start),
+ asdouble (gen->start + gen->len));
+}
+static inline void
+printgen_d2 (const struct fun *f, struct gen *gen)
+{
+ printf ("%s in [%a;%a] x [%a;%a]", f->name, asdouble (gen->start),
+ asdouble (gen->start + gen->len), asdouble (gen->start2),
+ asdouble (gen->start2 + gen->len2));
+}
+
+#define reduce_f1(a, f, op) (f (a.x))
+#define reduce_f2(a, f, op) (f (a.x) op f (a.x2))
+#define reduce_d1(a, f, op) (f (a.x))
+#define reduce_d2(a, f, op) (f (a.x) op f (a.x2))
+
+#ifndef IEEE_754_2008_SNAN
+# define IEEE_754_2008_SNAN 1
+#endif
+static inline int
+issignaling_f (float x)
+{
+ uint32_t ix = asuint (x);
+ if (!IEEE_754_2008_SNAN)
+ return (ix & 0x7fc00000) == 0x7fc00000;
+ return 2 * (ix ^ 0x00400000) > 2u * 0x7fc00000;
+}
+static inline int
+issignaling_d (double x)
+{
+ uint64_t ix = asuint64 (x);
+ if (!IEEE_754_2008_SNAN)
+ return (ix & 0x7ff8000000000000) == 0x7ff8000000000000;
+ return 2 * (ix ^ 0x0008000000000000) > 2 * 0x7ff8000000000000ULL;
+}
+
+#if USE_MPFR
+static mpfr_rnd_t
+rmap (int r)
+{
+ switch (r)
+ {
+ case FE_TONEAREST:
+ return MPFR_RNDN;
+ case FE_TOWARDZERO:
+ return MPFR_RNDZ;
+ case FE_UPWARD:
+ return MPFR_RNDU;
+ case FE_DOWNWARD:
+ return MPFR_RNDD;
+ }
+ return -1;
+}
+
+#define prec_mpfr_f 50
+#define prec_mpfr_d 80
+#define prec_f 24
+#define prec_d 53
+#define emin_f -148
+#define emin_d -1073
+#define emax_f 128
+#define emax_d 1024
+static inline int
+call_mpfr_f1 (mpfr_t y, const struct fun *f, struct args_f1 a, mpfr_rnd_t r)
+{
+ MPFR_DECL_INIT (x, prec_f);
+ mpfr_set_flt (x, a.x, MPFR_RNDN);
+ return f->fun_mpfr.f1 (y, x, r);
+}
+static inline int
+call_mpfr_f2 (mpfr_t y, const struct fun *f, struct args_f2 a, mpfr_rnd_t r)
+{
+ MPFR_DECL_INIT (x, prec_f);
+ MPFR_DECL_INIT (x2, prec_f);
+ mpfr_set_flt (x, a.x, MPFR_RNDN);
+ mpfr_set_flt (x2, a.x2, MPFR_RNDN);
+ return f->fun_mpfr.f2 (y, x, x2, r);
+}
+static inline int
+call_mpfr_d1 (mpfr_t y, const struct fun *f, struct args_d1 a, mpfr_rnd_t r)
+{
+ MPFR_DECL_INIT (x, prec_d);
+ mpfr_set_d (x, a.x, MPFR_RNDN);
+ return f->fun_mpfr.d1 (y, x, r);
+}
+static inline int
+call_mpfr_d2 (mpfr_t y, const struct fun *f, struct args_d2 a, mpfr_rnd_t r)
+{
+ MPFR_DECL_INIT (x, prec_d);
+ MPFR_DECL_INIT (x2, prec_d);
+ mpfr_set_d (x, a.x, MPFR_RNDN);
+ mpfr_set_d (x2, a.x2, MPFR_RNDN);
+ return f->fun_mpfr.d2 (y, x, x2, r);
+}
+#endif
+
+#define float_f float
+#define double_f double
+#define copysign_f copysignf
+#define nextafter_f nextafterf
+#define fabs_f fabsf
+#define asuint_f asuint
+#define asfloat_f asfloat
+#define scalbn_f scalbnf
+#define lscalbn_f scalbn
+#define halfinf_f 0x1p127f
+#define min_normal_f 0x1p-126f
+
+#define float_d double
+#define double_d long double
+#define copysign_d copysign
+#define nextafter_d nextafter
+#define fabs_d fabs
+#define asuint_d asuint64
+#define asfloat_d asdouble
+#define scalbn_d scalbn
+#define lscalbn_d scalbnl
+#define halfinf_d 0x1p1023
+#define min_normal_d 0x1p-1022
+
+#define NEW_RT
+#define RT(x) x##_f
+#define T(x) x##_f1
+#include "ulp.h"
+#undef T
+#define T(x) x##_f2
+#include "ulp.h"
+#undef T
+#undef RT
+
+#define NEW_RT
+#define RT(x) x##_d
+#define T(x) x##_d1
+#include "ulp.h"
+#undef T
+#define T(x) x##_d2
+#include "ulp.h"
+#undef T
+#undef RT
+
+static void
+usage (void)
+{
+ puts ("./ulp [-q] [-m] [-f] [-r nudz] [-l soft-ulplimit] [-e ulplimit] func "
+ "lo [hi [x lo2 hi2] [count]]");
+ puts ("Compares func against a higher precision implementation in [lo; hi].");
+ puts ("-q: quiet.");
+ puts ("-m: use mpfr even if faster method is available.");
+ puts ("-f: disable fenv testing (rounding modes and exceptions).");
+ puts ("Supported func:");
+ for (const struct fun *f = fun; f->name; f++)
+ printf ("\t%s\n", f->name);
+ exit (1);
+}
+
+static int
+cmp (const struct fun *f, struct gen *gen, const struct conf *conf)
+{
+ int r = 1;
+ if (f->arity == 1 && f->singleprec)
+ r = cmp_f1 (f, gen, conf);
+ else if (f->arity == 2 && f->singleprec)
+ r = cmp_f2 (f, gen, conf);
+ else if (f->arity == 1 && !f->singleprec)
+ r = cmp_d1 (f, gen, conf);
+ else if (f->arity == 2 && !f->singleprec)
+ r = cmp_d2 (f, gen, conf);
+ else
+ usage ();
+ return r;
+}
+
+static uint64_t
+getnum (const char *s, int singleprec)
+{
+ // int i;
+ uint64_t sign = 0;
+ // char buf[12];
+
+ if (s[0] == '+')
+ s++;
+ else if (s[0] == '-')
+ {
+ sign = singleprec ? 1ULL << 31 : 1ULL << 63;
+ s++;
+ }
+ /* 0xXXXX is treated as bit representation, '-' flips the sign bit. */
+ if (s[0] == '0' && tolower (s[1]) == 'x' && strchr (s, 'p') == 0)
+ return sign ^ strtoull (s, 0, 0);
+ // /* SNaN, QNaN, NaN, Inf. */
+ // for (i=0; s[i] && i < sizeof buf; i++)
+ // buf[i] = tolower(s[i]);
+ // buf[i] = 0;
+ // if (strcmp(buf, "snan") == 0)
+ // return sign | (singleprec ? 0x7fa00000 : 0x7ff4000000000000);
+ // if (strcmp(buf, "qnan") == 0 || strcmp(buf, "nan") == 0)
+ // return sign | (singleprec ? 0x7fc00000 : 0x7ff8000000000000);
+ // if (strcmp(buf, "inf") == 0 || strcmp(buf, "infinity") == 0)
+ // return sign | (singleprec ? 0x7f800000 : 0x7ff0000000000000);
+ /* Otherwise assume it's a floating-point literal. */
+ return sign
+ | (singleprec ? asuint (strtof (s, 0)) : asuint64 (strtod (s, 0)));
+}
+
+static void
+parsegen (struct gen *g, int argc, char *argv[], const struct fun *f)
+{
+ int singleprec = f->singleprec;
+ int arity = f->arity;
+ uint64_t a, b, a2, b2, n;
+ if (argc < 1)
+ usage ();
+ b = a = getnum (argv[0], singleprec);
+ n = 0;
+ if (argc > 1 && strcmp (argv[1], "x") == 0)
+ {
+ argc -= 2;
+ argv += 2;
+ }
+ else if (argc > 1)
+ {
+ b = getnum (argv[1], singleprec);
+ if (argc > 2 && strcmp (argv[2], "x") == 0)
+ {
+ argc -= 3;
+ argv += 3;
+ }
+ }
+ b2 = a2 = getnum (argv[0], singleprec);
+ if (argc > 1)
+ b2 = getnum (argv[1], singleprec);
+ if (argc > 2)
+ n = strtoull (argv[2], 0, 0);
+ if (argc > 3)
+ usage ();
+ //printf("ab %lx %lx ab2 %lx %lx n %lu\n", a, b, a2, b2, n);
+ if (arity == 1)
+ {
+ g->start = a;
+ g->len = b - a;
+ if (n - 1 > b - a)
+ n = b - a + 1;
+ g->off = 0;
+ g->step = n ? (g->len + 1) / n : 1;
+ g->start2 = g->len2 = 0;
+ g->cnt = n;
+ }
+ else if (arity == 2)
+ {
+ g->start = a;
+ g->len = b - a;
+ g->off = g->step = 0;
+ g->start2 = a2;
+ g->len2 = b2 - a2;
+ g->cnt = n;
+ }
+ else
+ usage ();
+}
+
+int
+main (int argc, char *argv[])
+{
+ const struct fun *f;
+ struct gen gen;
+ struct conf conf;
+ conf.rc = 'n';
+ conf.quiet = 0;
+ conf.mpfr = 0;
+ conf.fenv = 1;
+ conf.softlim = 0;
+ conf.errlim = INFINITY;
+ for (;;)
+ {
+ argc--;
+ argv++;
+ if (argc < 1)
+ usage ();
+ if (argv[0][0] != '-')
+ break;
+ switch (argv[0][1])
+ {
+ case 'e':
+ argc--;
+ argv++;
+ if (argc < 1)
+ usage ();
+ conf.errlim = strtod (argv[0], 0);
+ break;
+ case 'f':
+ conf.fenv = 0;
+ break;
+ case 'l':
+ argc--;
+ argv++;
+ if (argc < 1)
+ usage ();
+ conf.softlim = strtod (argv[0], 0);
+ break;
+ case 'm':
+ conf.mpfr = 1;
+ break;
+ case 'q':
+ conf.quiet = 1;
+ break;
+ case 'r':
+ conf.rc = argv[0][2];
+ if (!conf.rc)
+ {
+ argc--;
+ argv++;
+ if (argc < 1)
+ usage ();
+ conf.rc = argv[0][0];
+ }
+ break;
+ default:
+ usage ();
+ }
+ }
+ switch (conf.rc)
+ {
+ case 'n':
+ conf.r = FE_TONEAREST;
+ break;
+ case 'u':
+ conf.r = FE_UPWARD;
+ break;
+ case 'd':
+ conf.r = FE_DOWNWARD;
+ break;
+ case 'z':
+ conf.r = FE_TOWARDZERO;
+ break;
+ default:
+ usage ();
+ }
+ for (f = fun; f->name; f++)
+ if (strcmp (argv[0], f->name) == 0)
+ break;
+ if (!f->name)
+ usage ();
+ if (!f->singleprec && LDBL_MANT_DIG == DBL_MANT_DIG)
+ conf.mpfr = 1; /* Use mpfr if long double has no extra precision. */
+ if (!USE_MPFR && conf.mpfr)
+ {
+ puts ("mpfr is not available.");
+ return 0;
+ }
+ argc--;
+ argv++;
+ parsegen (&gen, argc, argv, f);
+ conf.n = gen.cnt;
+ return cmp (f, &gen, &conf);
+}
diff --git a/math/test/ulp.h b/math/test/ulp.h
new file mode 100644
index 000000000000..a0c301664321
--- /dev/null
+++ b/math/test/ulp.h
@@ -0,0 +1,362 @@
+/*
+ * Generic functions for ULP error estimation.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* For each different math function type,
+ T(x) should add a different suffix to x.
+ RT(x) should add a return type specific suffix to x. */
+
+#ifdef NEW_RT
+#undef NEW_RT
+
+# if USE_MPFR
+static int RT(ulpscale_mpfr) (mpfr_t x, int t)
+{
+ /* TODO: pow of 2 cases. */
+ if (mpfr_regular_p (x))
+ {
+ mpfr_exp_t e = mpfr_get_exp (x) - RT(prec);
+ if (e < RT(emin))
+ e = RT(emin) - 1;
+ if (e > RT(emax) - RT(prec))
+ e = RT(emax) - RT(prec);
+ return e;
+ }
+ if (mpfr_zero_p (x))
+ return RT(emin) - 1;
+ if (mpfr_inf_p (x))
+ return RT(emax) - RT(prec);
+ /* NaN. */
+ return 0;
+}
+# endif
+
+/* Difference between exact result and closest real number that
+ gets rounded to got, i.e. error before rounding, for a correctly
+ rounded result the difference is 0. */
+static double RT(ulperr) (RT(float) got, const struct RT(ret) * p, int r)
+{
+ RT(float) want = p->y;
+ RT(float) d;
+ double e;
+
+ if (RT(asuint) (got) == RT(asuint) (want))
+ return 0.0;
+ if (signbit (got) != signbit (want))
+ /* May have false positives with NaN. */
+ //return isnan(got) && isnan(want) ? 0 : INFINITY;
+ return INFINITY;
+ if (!isfinite (want) || !isfinite (got))
+ {
+ if (isnan (got) != isnan (want))
+ return INFINITY;
+ if (isnan (want))
+ return 0;
+ if (isinf (got))
+ {
+ got = RT(copysign) (RT(halfinf), got);
+ want *= 0.5f;
+ }
+ if (isinf (want))
+ {
+ want = RT(copysign) (RT(halfinf), want);
+ got *= 0.5f;
+ }
+ }
+ if (r == FE_TONEAREST)
+ {
+ // TODO: incorrect when got vs want cross a powof2 boundary
+ /* error = got > want
+ ? got - want - tail ulp - 0.5 ulp
+ : got - want - tail ulp + 0.5 ulp; */
+ d = got - want;
+ e = d > 0 ? -p->tail - 0.5 : -p->tail + 0.5;
+ }
+ else
+ {
+ if ((r == FE_DOWNWARD && got < want) || (r == FE_UPWARD && got > want)
+ || (r == FE_TOWARDZERO && fabs (got) < fabs (want)))
+ got = RT(nextafter) (got, want);
+ d = got - want;
+ e = -p->tail;
+ }
+ return RT(scalbn) (d, -p->ulpexp) + e;
+}
+
+static int RT(isok) (RT(float) ygot, int exgot, RT(float) ywant, int exwant,
+ int exmay)
+{
+ return RT(asuint) (ygot) == RT(asuint) (ywant)
+ && ((exgot ^ exwant) & ~exmay) == 0;
+}
+
+static int RT(isok_nofenv) (RT(float) ygot, RT(float) ywant)
+{
+ return RT(asuint) (ygot) == RT(asuint) (ywant);
+}
+#endif
+
+static inline void T(call_fenv) (const struct fun *f, struct T(args) a, int r,
+ RT(float) * y, int *ex)
+{
+ if (r != FE_TONEAREST)
+ fesetround (r);
+ feclearexcept (FE_ALL_EXCEPT);
+ *y = T(call) (f, a);
+ *ex = fetestexcept (FE_ALL_EXCEPT);
+ if (r != FE_TONEAREST)
+ fesetround (FE_TONEAREST);
+}
+
+static inline void T(call_nofenv) (const struct fun *f, struct T(args) a,
+ int r, RT(float) * y, int *ex)
+{
+ *y = T(call) (f, a);
+ *ex = 0;
+}
+
+static inline int T(call_long_fenv) (const struct fun *f, struct T(args) a,
+ int r, struct RT(ret) * p,
+ RT(float) ygot, int exgot)
+{
+ if (r != FE_TONEAREST)
+ fesetround (r);
+ feclearexcept (FE_ALL_EXCEPT);
+ volatile struct T(args) va = a; // TODO: barrier
+ a = va;
+ RT(double) yl = T(call_long) (f, a);
+ p->y = (RT(float)) yl;
+ volatile RT(float) vy = p->y; // TODO: barrier
+ (void) vy;
+ p->ex = fetestexcept (FE_ALL_EXCEPT);
+ if (r != FE_TONEAREST)
+ fesetround (FE_TONEAREST);
+ p->ex_may = FE_INEXACT;
+ if (RT(isok) (ygot, exgot, p->y, p->ex, p->ex_may))
+ return 1;
+ p->ulpexp = RT(ulpscale) (p->y);
+ if (isinf (p->y))
+ p->tail = RT(lscalbn) (yl - (RT(double)) 2 * RT(halfinf), -p->ulpexp);
+ else
+ p->tail = RT(lscalbn) (yl - p->y, -p->ulpexp);
+ if (RT(fabs) (p->y) < RT(min_normal))
+ {
+ /* TODO: subnormal result is treated as undeflow even if it's
+ exact since call_long may not raise inexact correctly. */
+ if (p->y != 0 || (p->ex & FE_INEXACT))
+ p->ex |= FE_UNDERFLOW | FE_INEXACT;
+ }
+ return 0;
+}
+static inline int T(call_long_nofenv) (const struct fun *f, struct T(args) a,
+ int r, struct RT(ret) * p,
+ RT(float) ygot, int exgot)
+{
+ RT(double) yl = T(call_long) (f, a);
+ p->y = (RT(float)) yl;
+ if (RT(isok_nofenv) (ygot, p->y))
+ return 1;
+ p->ulpexp = RT(ulpscale) (p->y);
+ if (isinf (p->y))
+ p->tail = RT(lscalbn) (yl - (RT(double)) 2 * RT(halfinf), -p->ulpexp);
+ else
+ p->tail = RT(lscalbn) (yl - p->y, -p->ulpexp);
+ return 0;
+}
+
+/* There are nan input args and all quiet. */
+static inline int T(qnanpropagation) (struct T(args) a)
+{
+ return T(reduce) (a, isnan, ||) && !T(reduce) (a, RT(issignaling), ||);
+}
+static inline RT(float) T(sum) (struct T(args) a)
+{
+ return T(reduce) (a, , +);
+}
+
+/* returns 1 if the got result is ok. */
+static inline int T(call_mpfr_fix) (const struct fun *f, struct T(args) a,
+ int r_fenv, struct RT(ret) * p,
+ RT(float) ygot, int exgot)
+{
+#if USE_MPFR
+ int t, t2;
+ mpfr_rnd_t r = rmap (r_fenv);
+ MPFR_DECL_INIT(my, RT(prec_mpfr));
+ MPFR_DECL_INIT(mr, RT(prec));
+ MPFR_DECL_INIT(me, RT(prec_mpfr));
+ mpfr_clear_flags ();
+ t = T(call_mpfr) (my, f, a, r);
+ /* Double rounding. */
+ t2 = mpfr_set (mr, my, r);
+ if (t2)
+ t = t2;
+ mpfr_set_emin (RT(emin));
+ mpfr_set_emax (RT(emax));
+ t = mpfr_check_range (mr, t, r);
+ t = mpfr_subnormalize (mr, t, r);
+ mpfr_set_emax (MPFR_EMAX_DEFAULT);
+ mpfr_set_emin (MPFR_EMIN_DEFAULT);
+ p->y = mpfr_get_d (mr, r);
+ p->ex = t ? FE_INEXACT : 0;
+ p->ex_may = FE_INEXACT;
+ if (mpfr_underflow_p () && (p->ex & FE_INEXACT))
+ /* TODO: handle before and after rounding uflow cases. */
+ p->ex |= FE_UNDERFLOW;
+ if (mpfr_overflow_p ())
+ p->ex |= FE_OVERFLOW | FE_INEXACT;
+ if (mpfr_divby0_p ())
+ p->ex |= FE_DIVBYZERO;
+ //if (mpfr_erangeflag_p ())
+ // p->ex |= FE_INVALID;
+ if (!mpfr_nanflag_p () && RT(isok) (ygot, exgot, p->y, p->ex, p->ex_may))
+ return 1;
+ if (mpfr_nanflag_p () && !T(qnanpropagation) (a))
+ p->ex |= FE_INVALID;
+ p->ulpexp = RT(ulpscale_mpfr) (my, t);
+ if (!isfinite (p->y))
+ {
+ p->tail = 0;
+ if (isnan (p->y))
+ {
+ /* If an input was nan keep its sign. */
+ p->y = T(sum) (a);
+ if (!isnan (p->y))
+ p->y = (p->y - p->y) / (p->y - p->y);
+ return RT(isok) (ygot, exgot, p->y, p->ex, p->ex_may);
+ }
+ mpfr_set_si_2exp (mr, signbit (p->y) ? -1 : 1, 1024, MPFR_RNDN);
+ if (mpfr_cmpabs (my, mr) >= 0)
+ return RT(isok) (ygot, exgot, p->y, p->ex, p->ex_may);
+ }
+ mpfr_sub (me, my, mr, MPFR_RNDN);
+ mpfr_mul_2si (me, me, -p->ulpexp, MPFR_RNDN);
+ p->tail = mpfr_get_d (me, MPFR_RNDN);
+ return 0;
+#else
+ abort ();
+#endif
+}
+
+static int T(cmp) (const struct fun *f, struct gen *gen,
+ const struct conf *conf)
+{
+ double maxerr = 0;
+ uint64_t cnt = 0;
+ uint64_t cnt1 = 0;
+ uint64_t cnt2 = 0;
+ uint64_t cntfail = 0;
+ int r = conf->r;
+ int use_mpfr = conf->mpfr;
+ int fenv = conf->fenv;
+ for (;;)
+ {
+ struct RT(ret) want;
+ struct T(args) a = T(next) (gen);
+ int exgot;
+ int exgot2;
+ RT(float) ygot;
+ RT(float) ygot2;
+ int fail = 0;
+ if (fenv)
+ T(call_fenv) (f, a, r, &ygot, &exgot);
+ else
+ T(call_nofenv) (f, a, r, &ygot, &exgot);
+ if (f->twice) {
+ secondcall = 1;
+ if (fenv)
+ T(call_fenv) (f, a, r, &ygot2, &exgot2);
+ else
+ T(call_nofenv) (f, a, r, &ygot2, &exgot2);
+ secondcall = 0;
+ if (RT(asuint) (ygot) != RT(asuint) (ygot2))
+ {
+ fail = 1;
+ cntfail++;
+ T(printcall) (f, a);
+ printf (" got %a then %a for same input\n", ygot, ygot2);
+ }
+ }
+ cnt++;
+ int ok = use_mpfr
+ ? T(call_mpfr_fix) (f, a, r, &want, ygot, exgot)
+ : (fenv ? T(call_long_fenv) (f, a, r, &want, ygot, exgot)
+ : T(call_long_nofenv) (f, a, r, &want, ygot, exgot));
+ if (!ok)
+ {
+ int print = 0;
+ double err = RT(ulperr) (ygot, &want, r);
+ double abserr = fabs (err);
+ // TODO: count errors below accuracy limit.
+ if (abserr > 0)
+ cnt1++;
+ if (abserr > 1)
+ cnt2++;
+ if (abserr > conf->errlim)
+ {
+ print = 1;
+ if (!fail)
+ {
+ fail = 1;
+ cntfail++;
+ }
+ }
+ if (abserr > maxerr)
+ {
+ maxerr = abserr;
+ if (!conf->quiet && abserr > conf->softlim)
+ print = 1;
+ }
+ if (print)
+ {
+ T(printcall) (f, a);
+ // TODO: inf ulp handling
+ printf (" got %a want %a %+g ulp err %g\n", ygot, want.y,
+ want.tail, err);
+ }
+ int diff = fenv ? exgot ^ want.ex : 0;
+ if (fenv && (diff & ~want.ex_may))
+ {
+ if (!fail)
+ {
+ fail = 1;
+ cntfail++;
+ }
+ T(printcall) (f, a);
+ printf (" is %a %+g ulp, got except 0x%0x", want.y, want.tail,
+ exgot);
+ if (diff & exgot)
+ printf (" wrongly set: 0x%x", diff & exgot);
+ if (diff & ~exgot)
+ printf (" wrongly clear: 0x%x", diff & ~exgot);
+ putchar ('\n');
+ }
+ }
+ if (cnt >= conf->n)
+ break;
+ if (!conf->quiet && cnt % 0x100000 == 0)
+ printf ("progress: %6.3f%% cnt %llu cnt1 %llu cnt2 %llu cntfail %llu "
+ "maxerr %g\n",
+ 100.0 * cnt / conf->n, (unsigned long long) cnt,
+ (unsigned long long) cnt1, (unsigned long long) cnt2,
+ (unsigned long long) cntfail, maxerr);
+ }
+ double cc = cnt;
+ if (cntfail)
+ printf ("FAIL ");
+ else
+ printf ("PASS ");
+ T(printgen) (f, gen);
+ printf (" round %c errlim %g maxerr %g %s cnt %llu cnt1 %llu %g%% cnt2 %llu "
+ "%g%% cntfail %llu %g%%\n",
+ conf->rc, conf->errlim,
+ maxerr, conf->r == FE_TONEAREST ? "+0.5" : "+1.0",
+ (unsigned long long) cnt,
+ (unsigned long long) cnt1, 100.0 * cnt1 / cc,
+ (unsigned long long) cnt2, 100.0 * cnt2 / cc,
+ (unsigned long long) cntfail, 100.0 * cntfail / cc);
+ return !!cntfail;
+}
diff --git a/math/tools/cos.sollya b/math/tools/cos.sollya
new file mode 100644
index 000000000000..bd72d6b74820
--- /dev/null
+++ b/math/tools/cos.sollya
@@ -0,0 +1,31 @@
+// polynomial for approximating cos(x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 8; // polynomial degree
+a = -pi/4; // interval
+b = pi/4;
+
+// find even polynomial with minimal abs error compared to cos(x)
+
+f = cos(x);
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+ return remez(f(x)-poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = 1;
+for i from 1 to deg/2 do {
+ p = roundcoefficients(approx(poly,2*i), [|D ...|]);
+ poly = poly + x^(2*i)*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/f(x), [a;b], 30));
+print("abs error:", accurateinfnorm(f(x)-poly(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/exp.sollya b/math/tools/exp.sollya
new file mode 100644
index 000000000000..b7a462cda5a4
--- /dev/null
+++ b/math/tools/exp.sollya
@@ -0,0 +1,35 @@
+// polynomial for approximating e^x
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 5; // poly degree
+N = 128; // table entries
+b = log(2)/(2*N); // interval
+b = b + b*0x1p-16; // increase interval for non-nearest rounding (TOINT_NARROW)
+a = -b;
+
+// find polynomial with minimal abs error
+
+// return p that minimizes |exp(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+ return remez(exp(x)-poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first 2 coeffs are fixed, iteratively find optimal double prec coeffs
+poly = 1 + x;
+for i from 2 to deg do {
+ p = roundcoefficients(approx(poly,i), [|D ...|]);
+ poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/exp(x), [a;b], 30));
+print("abs error:", accurateinfnorm(exp(x)-poly(x), [a;b], 30));
+print("in [",a,b,"]");
+// double interval error for non-nearest rounding
+print("rel2 error:", accurateinfnorm(1-poly(x)/exp(x), [2*a;2*b], 30));
+print("abs2 error:", accurateinfnorm(exp(x)-poly(x), [2*a;2*b], 30));
+print("in [",2*a,2*b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/exp2.sollya b/math/tools/exp2.sollya
new file mode 100644
index 000000000000..e760769601d4
--- /dev/null
+++ b/math/tools/exp2.sollya
@@ -0,0 +1,48 @@
+// polynomial for approximating 2^x
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+// exp2f parameters
+deg = 3; // poly degree
+N = 32; // table entries
+b = 1/(2*N); // interval
+a = -b;
+
+//// exp2 parameters
+//deg = 5; // poly degree
+//N = 128; // table entries
+//b = 1/(2*N); // interval
+//a = -b;
+
+// find polynomial with minimal relative error
+
+f = 2^x;
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|/|f(x)|
+approx = proc(poly,d) {
+ return remez(1 - poly(x)/f(x), deg-d, [a;b], x^d/f(x), 1e-10);
+};
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|
+approx_abs = proc(poly,d) {
+ return remez(f(x) - poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = 1;
+for i from 1 to deg do {
+ p = roundcoefficients(approx(poly,i), [|D ...|]);
+// p = roundcoefficients(approx_abs(poly,i), [|D ...|]);
+ poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/2^x, [a;b], 30));
+print("abs error:", accurateinfnorm(2^x-poly(x), [a;b], 30));
+print("in [",a,b,"]");
+// double interval error for non-nearest rounding:
+print("rel2 error:", accurateinfnorm(1-poly(x)/2^x, [2*a;2*b], 30));
+print("abs2 error:", accurateinfnorm(2^x-poly(x), [2*a;2*b], 30));
+print("in [",2*a,2*b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/log.sollya b/math/tools/log.sollya
new file mode 100644
index 000000000000..6df4db44b6f3
--- /dev/null
+++ b/math/tools/log.sollya
@@ -0,0 +1,35 @@
+// polynomial for approximating log(1+x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 12; // poly degree
+// |log(1+x)| > 0x1p-4 outside the interval
+a = -0x1p-4;
+b = 0x1.09p-4;
+
+// find log(1+x)/x polynomial with minimal relative error
+// (minimal relative error polynomial for log(1+x) is the same * x)
+deg = deg-1; // because of /x
+
+// f = log(1+x)/x; using taylor series
+f = 0;
+for i from 0 to 60 do { f = f + (-x)^i/(i+1); };
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|/|f(x)|
+approx = proc(poly,d) {
+ return remez(1 - poly(x)/f(x), deg-d, [a;b], x^d/f(x), 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = 1;
+for i from 1 to deg do {
+ p = roundcoefficients(approx(poly,i), [|D ...|]);
+ poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/f(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/log2.sollya b/math/tools/log2.sollya
new file mode 100644
index 000000000000..4a364c0f111f
--- /dev/null
+++ b/math/tools/log2.sollya
@@ -0,0 +1,42 @@
+// polynomial for approximating log2(1+x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 11; // poly degree
+// |log2(1+x)| > 0x1p-4 outside the interval
+a = -0x1.5b51p-5;
+b = 0x1.6ab2p-5;
+
+ln2 = evaluate(log(2),0);
+invln2hi = double(1/ln2 + 0x1p21) - 0x1p21; // round away last 21 bits
+invln2lo = double(1/ln2 - invln2hi);
+
+// find log2(1+x)/x polynomial with minimal relative error
+// (minimal relative error polynomial for log2(1+x) is the same * x)
+deg = deg-1; // because of /x
+
+// f = log(1+x)/x; using taylor series
+f = 0;
+for i from 0 to 60 do { f = f + (-x)^i/(i+1); };
+f = f/ln2;
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|/|f(x)|
+approx = proc(poly,d) {
+ return remez(1 - poly(x)/f(x), deg-d, [a;b], x^d/f(x), 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = invln2hi + invln2lo;
+for i from 1 to deg do {
+ p = roundcoefficients(approx(poly,i), [|D ...|]);
+ poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("invln2hi:", invln2hi);
+print("invln2lo:", invln2lo);
+print("rel error:", accurateinfnorm(1-poly(x)/f(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/log2_abs.sollya b/math/tools/log2_abs.sollya
new file mode 100644
index 000000000000..82c4dac26fa1
--- /dev/null
+++ b/math/tools/log2_abs.sollya
@@ -0,0 +1,41 @@
+// polynomial for approximating log2(1+x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 7; // poly degree
+// interval ~= 1/(2*N), where N is the table entries
+a= -0x1.f45p-8;
+b= 0x1.f45p-8;
+
+ln2 = evaluate(log(2),0);
+invln2hi = double(1/ln2 + 0x1p21) - 0x1p21; // round away last 21 bits
+invln2lo = double(1/ln2 - invln2hi);
+
+// find log2(1+x) polynomial with minimal absolute error
+f = log(1+x)/ln2;
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+ return remez(f(x) - poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = x*(invln2lo + invln2hi);
+for i from 2 to deg do {
+ p = roundcoefficients(approx(poly,i), [|D ...|]);
+ poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("invln2hi:", invln2hi);
+print("invln2lo:", invln2lo);
+print("abs error:", accurateinfnorm(f(x)-poly(x), [a;b], 30));
+//// relative error computation fails if f(0)==0
+//// g = f(x)/x = log2(1+x)/x; using taylor series
+//g = 0;
+//for i from 0 to 60 do { g = g + (-x)^i/(i+1)/ln2; };
+//print("rel error:", accurateinfnorm(1-(poly(x)/x)/g(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/log_abs.sollya b/math/tools/log_abs.sollya
new file mode 100644
index 000000000000..a2ac190fc497
--- /dev/null
+++ b/math/tools/log_abs.sollya
@@ -0,0 +1,35 @@
+// polynomial for approximating log(1+x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 6; // poly degree
+// interval ~= 1/(2*N), where N is the table entries
+a = -0x1.fp-9;
+b = 0x1.fp-9;
+
+// find log(1+x) polynomial with minimal absolute error
+f = log(1+x);
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+ return remez(f(x) - poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = x;
+for i from 2 to deg do {
+ p = roundcoefficients(approx(poly,i), [|D ...|]);
+ poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("abs error:", accurateinfnorm(f(x)-poly(x), [a;b], 30));
+// relative error computation fails if f(0)==0
+// g = f(x)/x = log(1+x)/x; using taylor series
+g = 0;
+for i from 0 to 60 do { g = g + (-x)^i/(i+1); };
+print("rel error:", accurateinfnorm(1-poly(x)/x/g(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/plot.py b/math/tools/plot.py
new file mode 100755
index 000000000000..6c8b89ff284b
--- /dev/null
+++ b/math/tools/plot.py
@@ -0,0 +1,61 @@
+#!/usr/bin/python
+
+# ULP error plot tool.
+#
+# Copyright (c) 2019, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+import numpy as np
+import matplotlib.pyplot as plt
+import sys
+import re
+
+# example usage:
+# build/bin/ulp -e .0001 log 0.5 2.0 2345678 | math/tools/plot.py
+
+def fhex(s):
+ return float.fromhex(s)
+
+def parse(f):
+ xs = []
+ gs = []
+ ys = []
+ es = []
+ # Has to match the format used in ulp.c
+ r = re.compile(r'[^ (]+\(([^ )]*)\) got ([^ ]+) want ([^ ]+) [^ ]+ ulp err ([^ ]+)')
+ for line in f:
+ m = r.match(line)
+ if m:
+ x = fhex(m.group(1))
+ g = fhex(m.group(2))
+ y = fhex(m.group(3))
+ e = float(m.group(4))
+ xs.append(x)
+ gs.append(g)
+ ys.append(y)
+ es.append(e)
+ elif line.startswith('PASS') or line.startswith('FAIL'):
+ # Print the summary line
+ print(line)
+ return xs, gs, ys, es
+
+def plot(xs, gs, ys, es):
+ if len(xs) < 2:
+ print('not enough samples')
+ return
+ a = min(xs)
+ b = max(xs)
+ fig, (ax0,ax1) = plt.subplots(nrows=2)
+ es = np.abs(es) # ignore the sign
+ emax = max(es)
+ ax0.text(a+(b-a)*0.7, emax*0.8, '%s\n%g'%(emax.hex(),emax))
+ ax0.plot(xs,es,'r.')
+ ax0.grid()
+ ax1.plot(xs,ys,'r.',label='want')
+ ax1.plot(xs,gs,'b.',label='got')
+ ax1.grid()
+ ax1.legend()
+ plt.show()
+
+xs, gs, ys, es = parse(sys.stdin)
+plot(xs, gs, ys, es)
diff --git a/math/tools/remez.jl b/math/tools/remez.jl
new file mode 100755
index 000000000000..2ff436f5287f
--- /dev/null
+++ b/math/tools/remez.jl
@@ -0,0 +1,1334 @@
+#!/usr/bin/env julia
+# -*- julia -*-
+
+# remez.jl - implementation of the Remez algorithm for polynomial approximation
+#
+# Copyright (c) 2015-2019, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+import Base.\
+
+# ----------------------------------------------------------------------
+# Helper functions to cope with different Julia versions.
+if VERSION >= v"0.7.0"
+ array1d(T, d) = Array{T, 1}(undef, d)
+ array2d(T, d1, d2) = Array{T, 2}(undef, d1, d2)
+else
+ array1d(T, d) = Array(T, d)
+ array2d(T, d1, d2) = Array(T, d1, d2)
+end
+if VERSION < v"0.5.0"
+ String = ASCIIString
+end
+if VERSION >= v"0.6.0"
+ # Use Base.invokelatest to run functions made using eval(), to
+ # avoid "world age" error
+ run(f, x...) = Base.invokelatest(f, x...)
+else
+ # Prior to 0.6.0, invokelatest doesn't exist (but fortunately the
+ # world age problem also doesn't seem to exist)
+ run(f, x...) = f(x...)
+end
+
+# ----------------------------------------------------------------------
+# Global variables configured by command-line options.
+floatsuffix = "" # adjusted by --floatsuffix
+xvarname = "x" # adjusted by --variable
+epsbits = 256 # adjusted by --bits
+debug_facilities = Set() # adjusted by --debug
+full_output = false # adjusted by --full
+array_format = false # adjusted by --array
+preliminary_commands = array1d(String, 0) # adjusted by --pre
+
+# ----------------------------------------------------------------------
+# Diagnostic and utility functions.
+
+# Enable debugging printouts from a particular subpart of this
+# program.
+#
+# Arguments:
+# facility Name of the facility to debug. For a list of facility names,
+# look through the code for calls to debug().
+#
+# Return value is a BigFloat.
+function enable_debug(facility)
+ push!(debug_facilities, facility)
+end
+
+# Print a diagnostic.
+#
+# Arguments:
+# facility Name of the facility for which this is a debug message.
+# printargs Arguments to println() if debugging of that facility is
+# enabled.
+macro debug(facility, printargs...)
+ printit = quote
+ print("[", $facility, "] ")
+ end
+ for arg in printargs
+ printit = quote
+ $printit
+ print($(esc(arg)))
+ end
+ end
+ return quote
+ if $facility in debug_facilities
+ $printit
+ println()
+ end
+ end
+end
+
+# Evaluate a polynomial.
+
+# Arguments:
+# coeffs Array of BigFloats giving the coefficients of the polynomial.
+# Starts with the constant term, i.e. coeffs[i] is the
+# coefficient of x^(i-1) (because Julia arrays are 1-based).
+# x Point at which to evaluate the polynomial.
+#
+# Return value is a BigFloat.
+function poly_eval(coeffs::Array{BigFloat}, x::BigFloat)
+ n = length(coeffs)
+ if n == 0
+ return BigFloat(0)
+ elseif n == 1
+ return coeffs[1]
+ else
+ return coeffs[1] + x * poly_eval(coeffs[2:n], x)
+ end
+end
+
+# Evaluate a rational function.
+
+# Arguments:
+# ncoeffs Array of BigFloats giving the coefficients of the numerator.
+# Starts with the constant term, and 1-based, as above.
+# dcoeffs Array of BigFloats giving the coefficients of the denominator.
+# Starts with the constant term, and 1-based, as above.
+# x Point at which to evaluate the function.
+#
+# Return value is a BigFloat.
+function ratfn_eval(ncoeffs::Array{BigFloat}, dcoeffs::Array{BigFloat},
+ x::BigFloat)
+ return poly_eval(ncoeffs, x) / poly_eval(dcoeffs, x)
+end
+
+# Format a BigFloat into an appropriate output format.
+# Arguments:
+# x BigFloat to format.
+#
+# Return value is a string.
+function float_to_str(x)
+ return string(x) * floatsuffix
+end
+
+# Format a polynomial into an arithmetic expression, for pasting into
+# other tools such as gnuplot.
+
+# Arguments:
+# coeffs Array of BigFloats giving the coefficients of the polynomial.
+# Starts with the constant term, and 1-based, as above.
+#
+# Return value is a string.
+function poly_to_string(coeffs::Array{BigFloat})
+ n = length(coeffs)
+ if n == 0
+ return "0"
+ elseif n == 1
+ return float_to_str(coeffs[1])
+ else
+ return string(float_to_str(coeffs[1]), "+", xvarname, "*(",
+ poly_to_string(coeffs[2:n]), ")")
+ end
+end
+
+# Format a rational function into a string.
+
+# Arguments:
+# ncoeffs Array of BigFloats giving the coefficients of the numerator.
+# Starts with the constant term, and 1-based, as above.
+# dcoeffs Array of BigFloats giving the coefficients of the denominator.
+# Starts with the constant term, and 1-based, as above.
+#
+# Return value is a string.
+function ratfn_to_string(ncoeffs::Array{BigFloat}, dcoeffs::Array{BigFloat})
+ if length(dcoeffs) == 1 && dcoeffs[1] == 1
+ # Special case: if the denominator is just 1, leave it out.
+ return poly_to_string(ncoeffs)
+ else
+ return string("(", poly_to_string(ncoeffs), ")/(",
+ poly_to_string(dcoeffs), ")")
+ end
+end
+
+# Format a list of x,y pairs into a string.
+
+# Arguments:
+# xys Array of (x,y) pairs of BigFloats.
+#
+# Return value is a string.
+function format_xylist(xys::Array{Tuple{BigFloat,BigFloat}})
+ return ("[\n" *
+ join([" "*string(x)*" -> "*string(y) for (x,y) in xys], "\n") *
+ "\n]")
+end
+
+# ----------------------------------------------------------------------
+# Matrix-equation solver for matrices of BigFloat.
+#
+# I had hoped that Julia's type-genericity would allow me to solve the
+# matrix equation Mx=V by just writing 'M \ V'. Unfortunately, that
+# works by translating the inputs into double precision and handing
+# off to an optimised library, which misses the point when I have a
+# matrix and vector of BigFloat and want my result in _better_ than
+# double precision. So I have to implement my own specialisation of
+# the \ operator for that case.
+#
+# Fortunately, the point of using BigFloats is that we have precision
+# to burn, so I can do completely naïve Gaussian elimination without
+# worrying about instability.
+
+# Arguments:
+# matrix_in 2-dimensional array of BigFloats, representing a matrix M
+# in row-first order, i.e. matrix_in[r,c] represents the
+# entry in row r col c.
+# vector_in 1-dimensional array of BigFloats, representing a vector V.
+#
+# Return value: a 1-dimensional array X of BigFloats, satisfying M X = V.
+#
+# Expects the input to be an invertible square matrix and a vector of
+# the corresponding size, on pain of failing an assertion.
+function \(matrix_in :: Array{BigFloat,2},
+ vector_in :: Array{BigFloat,1})
+ # Copy the inputs, because we'll be mutating them as we go.
+ M = copy(matrix_in)
+ V = copy(vector_in)
+
+ # Input consistency criteria: matrix is square, and vector has
+ # length to match.
+ n = length(V)
+ @assert(n > 0)
+ @assert(size(M) == (n,n))
+
+ @debug("gausselim", "starting, n=", n)
+
+ for i = 1:1:n
+ # Straightforward Gaussian elimination: find the largest
+ # non-zero entry in column i (and in a row we haven't sorted
+ # out already), swap it into row i, scale that row to
+ # normalise it to 1, then zero out the rest of the column by
+ # subtracting a multiple of that row from each other row.
+
+ @debug("gausselim", "matrix=", repr(M))
+ @debug("gausselim", "vector=", repr(V))
+
+ # Find the best pivot.
+ bestrow = 0
+ bestval = 0
+ for j = i:1:n
+ if abs(M[j,i]) > bestval
+ bestrow = j
+ bestval = M[j,i]
+ end
+ end
+ @assert(bestrow > 0) # make sure we did actually find one
+
+ @debug("gausselim", "bestrow=", bestrow)
+
+ # Swap it into row i.
+ if bestrow != i
+ for k = 1:1:n
+ M[bestrow,k],M[i,k] = M[i,k],M[bestrow,k]
+ end
+ V[bestrow],V[i] = V[i],V[bestrow]
+ end
+
+ # Scale that row so that M[i,i] becomes 1.
+ divisor = M[i,i]
+ for k = 1:1:n
+ M[i,k] = M[i,k] / divisor
+ end
+ V[i] = V[i] / divisor
+ @assert(M[i,i] == 1)
+
+ # Zero out all other entries in column i, by subtracting
+ # multiples of this row.
+ for j = 1:1:n
+ if j != i
+ factor = M[j,i]
+ for k = 1:1:n
+ M[j,k] = M[j,k] - M[i,k] * factor
+ end
+ V[j] = V[j] - V[i] * factor
+ @assert(M[j,i] == 0)
+ end
+ end
+ end
+
+ @debug("gausselim", "matrix=", repr(M))
+ @debug("gausselim", "vector=", repr(V))
+ @debug("gausselim", "done!")
+
+ # Now we're done: M is the identity matrix, so the equation Mx=V
+ # becomes just x=V, i.e. V is already exactly the vector we want
+ # to return.
+ return V
+end
+
+# ----------------------------------------------------------------------
+# Least-squares fitting of a rational function to a set of (x,y)
+# points.
+#
+# We use this to get an initial starting point for the Remez
+# iteration. Therefore, it doesn't really need to be particularly
+# accurate; it only needs to be good enough to wiggle back and forth
+# across the target function the right number of times (so as to give
+# enough error extrema to start optimising from) and not have any
+# poles in the target interval.
+#
+# Least-squares fitting of a _polynomial_ is actually a sensible thing
+# to do, and minimises the rms error. Doing the following trick with a
+# rational function P/Q is less sensible, because it cannot be made to
+# minimise the error function (P/Q-f)^2 that you actually wanted;
+# instead it minimises (P-fQ)^2. But that should be good enough to
+# have the properties described above.
+#
+# Some theory: suppose you're trying to choose a set of parameters a_i
+# so as to minimise the sum of squares of some error function E_i.
+# Basic calculus says, if you do this in one variable, just
+# differentiate and solve for zero. In this case, that works fine even
+# with multiple variables, because you _partially_ differentiate with
+# respect to each a_i, giving a system of equations, and that system
+# turns out to be linear so we just solve it as a matrix.
+#
+# In this case, our parameters are the coefficients of P and Q; to
+# avoid underdetermining the system we'll fix Q's constant term at 1,
+# so that our error function (as described above) is
+#
+# E = \sum (p_0 + p_1 x + ... + p_n x^n - y - y q_1 x - ... - y q_d x^d)^2
+#
+# where the sum is over all (x,y) coordinate pairs. Setting dE/dp_j=0
+# (for each j) gives an equation of the form
+#
+# 0 = \sum 2(p_0 + p_1 x + ... + p_n x^n - y - y q_1 x - ... - y q_d x^d) x^j
+#
+# and setting dE/dq_j=0 gives one of the form
+#
+# 0 = \sum 2(p_0 + p_1 x + ... + p_n x^n - y - y q_1 x - ... - y q_d x^d) y x^j
+#
+# And both of those row types, treated as multivariate linear
+# equations in the p,q values, have each coefficient being a value of
+# the form \sum x^i, \sum y x^i or \sum y^2 x^i, for various i. (Times
+# a factor of 2, but we can throw that away.) So we can go through the
+# list of input coordinates summing all of those things, and then we
+# have enough information to construct our matrix and solve it
+# straight off for the rational function coefficients.
+
+# Arguments:
+# f The function to be approximated. Maps BigFloat -> BigFloat.
+# xvals Array of BigFloats, giving the list of x-coordinates at which
+# to evaluate f.
+# n Degree of the numerator polynomial of the desired rational
+# function.
+# d Degree of the denominator polynomial of the desired rational
+# function.
+# w Error-weighting function. Takes two BigFloat arguments x,y
+# and returns a scaling factor for the error at that location.
+# A larger value indicates that the error should be given
+# greater weight in the square sum we try to minimise.
+# If unspecified, defaults to giving everything the same weight.
+#
+# Return values: a pair of arrays of BigFloats (N,D) giving the
+# coefficients of the returned rational function. N has size n+1; D
+# has size d+1. Both start with the constant term, i.e. N[i] is the
+# coefficient of x^(i-1) (because Julia arrays are 1-based). D[1] will
+# be 1.
+function ratfn_leastsquares(f::Function, xvals::Array{BigFloat}, n, d,
+ w = (x,y)->BigFloat(1))
+ # Accumulate sums of x^i y^j, for j={0,1,2} and a range of x.
+ # Again because Julia arrays are 1-based, we'll have sums[i,j]
+ # being the sum of x^(i-1) y^(j-1).
+ maxpow = max(n,d) * 2 + 1
+ sums = zeros(BigFloat, maxpow, 3)
+ for x = xvals
+ y = f(x)
+ weight = w(x,y)
+ for i = 1:1:maxpow
+ for j = 1:1:3
+ sums[i,j] += x^(i-1) * y^(j-1) * weight
+ end
+ end
+ end
+
+ @debug("leastsquares", "sums=", repr(sums))
+
+ # Build the matrix. We're solving n+d+1 equations in n+d+1
+ # unknowns. (We actually have to return n+d+2 coefficients, but
+ # one of them is hardwired to 1.)
+ matrix = array2d(BigFloat, n+d+1, n+d+1)
+ vector = array1d(BigFloat, n+d+1)
+ for i = 0:1:n
+ # Equation obtained by differentiating with respect to p_i,
+ # i.e. the numerator coefficient of x^i.
+ row = 1+i
+ for j = 0:1:n
+ matrix[row, 1+j] = sums[1+i+j, 1]
+ end
+ for j = 1:1:d
+ matrix[row, 1+n+j] = -sums[1+i+j, 2]
+ end
+ vector[row] = sums[1+i, 2]
+ end
+ for i = 1:1:d
+ # Equation obtained by differentiating with respect to q_i,
+ # i.e. the denominator coefficient of x^i.
+ row = 1+n+i
+ for j = 0:1:n
+ matrix[row, 1+j] = sums[1+i+j, 2]
+ end
+ for j = 1:1:d
+ matrix[row, 1+n+j] = -sums[1+i+j, 3]
+ end
+ vector[row] = sums[1+i, 3]
+ end
+
+ @debug("leastsquares", "matrix=", repr(matrix))
+ @debug("leastsquares", "vector=", repr(vector))
+
+ # Solve the matrix equation.
+ all_coeffs = matrix \ vector
+
+ @debug("leastsquares", "all_coeffs=", repr(all_coeffs))
+
+ # And marshal the results into two separate polynomial vectors to
+ # return.
+ ncoeffs = all_coeffs[1:n+1]
+ dcoeffs = vcat([1], all_coeffs[n+2:n+d+1])
+ return (ncoeffs, dcoeffs)
+end
+
+# ----------------------------------------------------------------------
+# Golden-section search to find a maximum of a function.
+
+# Arguments:
+# f Function to be maximised/minimised. Maps BigFloat -> BigFloat.
+# a,b,c BigFloats bracketing a maximum of the function.
+#
+# Expects:
+# a,b,c are in order (either a<=b<=c or c<=b<=a)
+# a != c (but b can equal one or the other if it wants to)
+# f(a) <= f(b) >= f(c)
+#
+# Return value is an (x,y) pair of BigFloats giving the extremal input
+# and output. (That is, y=f(x).)
+function goldensection(f::Function, a::BigFloat, b::BigFloat, c::BigFloat)
+ # Decide on a 'good enough' threshold.
+ threshold = abs(c-a) * 2^(-epsbits/2)
+
+ # We'll need the golden ratio phi, of course. Or rather, in this
+ # case, we need 1/phi = 0.618...
+ one_over_phi = 2 / (1 + sqrt(BigFloat(5)))
+
+ # Flip round the interval endpoints so that the interval [a,b] is
+ # at least as large as [b,c]. (Then we can always pick our new
+ # point in [a,b] without having to handle lots of special cases.)
+ if abs(b-a) < abs(c-a)
+ a, c = c, a
+ end
+
+ # Evaluate the function at the initial points.
+ fa = f(a)
+ fb = f(b)
+ fc = f(c)
+
+ @debug("goldensection", "starting")
+
+ while abs(c-a) > threshold
+ @debug("goldensection", "a: ", a, " -> ", fa)
+ @debug("goldensection", "b: ", b, " -> ", fb)
+ @debug("goldensection", "c: ", c, " -> ", fc)
+
+ # Check invariants.
+ @assert(a <= b <= c || c <= b <= a)
+ @assert(fa <= fb >= fc)
+
+ # Subdivide the larger of the intervals [a,b] and [b,c]. We've
+ # arranged that this is always [a,b], for simplicity.
+ d = a + (b-a) * one_over_phi
+
+ # Now we have an interval looking like this (possibly
+ # reversed):
+ #
+ # a d b c
+ #
+ # and we know f(b) is bigger than either f(a) or f(c). We have
+ # two cases: either f(d) > f(b), or vice versa. In either
+ # case, we can narrow to an interval of 1/phi the size, and
+ # still satisfy all our invariants (three ordered points,
+ # [a,b] at least the width of [b,c], f(a)<=f(b)>=f(c)).
+ fd = f(d)
+ @debug("goldensection", "d: ", d, " -> ", fd)
+ if fd > fb
+ a, b, c = a, d, b
+ fa, fb, fc = fa, fd, fb
+ @debug("goldensection", "adb case")
+ else
+ a, b, c = c, b, d
+ fa, fb, fc = fc, fb, fd
+ @debug("goldensection", "cbd case")
+ end
+ end
+
+ @debug("goldensection", "done: ", b, " -> ", fb)
+ return (b, fb)
+end
+
+# ----------------------------------------------------------------------
+# Find the extrema of a function within a given interval.
+
+# Arguments:
+# f The function to be approximated. Maps BigFloat -> BigFloat.
+# grid A set of points at which to evaluate f. Must be high enough
+# resolution to make extrema obvious.
+#
+# Returns an array of (x,y) pairs of BigFloats, with each x,y giving
+# the extremum location and its value (i.e. y=f(x)).
+function find_extrema(f::Function, grid::Array{BigFloat})
+ len = length(grid)
+ extrema = array1d(Tuple{BigFloat, BigFloat}, 0)
+ for i = 1:1:len
+ # We have to provide goldensection() with three points
+ # bracketing the extremum. If the extremum is at one end of
+ # the interval, then the only way we can do that is to set two
+ # of the points equal (which goldensection() will cope with).
+ prev = max(1, i-1)
+ next = min(i+1, len)
+
+ # Find our three pairs of (x,y) coordinates.
+ xp, xi, xn = grid[prev], grid[i], grid[next]
+ yp, yi, yn = f(xp), f(xi), f(xn)
+
+ # See if they look like an extremum, and if so, ask
+ # goldensection() to give a more exact location for it.
+ if yp <= yi >= yn
+ push!(extrema, goldensection(f, xp, xi, xn))
+ elseif yp >= yi <= yn
+ x, y = goldensection(x->-f(x), xp, xi, xn)
+ push!(extrema, (x, -y))
+ end
+ end
+ return extrema
+end
+
+# ----------------------------------------------------------------------
+# Winnow a list of a function's extrema to give a subsequence of a
+# specified length, with the extrema in the subsequence alternating
+# signs, and with the smallest absolute value of an extremum in the
+# subsequence as large as possible.
+#
+# We do this using a dynamic-programming approach. We work along the
+# provided array of extrema, and at all times, we track the best set
+# of extrema we have so far seen for each possible (length, sign of
+# last extremum) pair. Each new extremum is evaluated to see whether
+# it can be added to any previously seen best subsequence to make a
+# new subsequence that beats the previous record holder in its slot.
+
+# Arguments:
+# extrema An array of (x,y) pairs of BigFloats giving the input extrema.
+# n Number of extrema required as output.
+#
+# Returns a new array of (x,y) pairs which is a subsequence of the
+# original sequence. (So, in particular, if the input was sorted by x
+# then so will the output be.)
+function winnow_extrema(extrema::Array{Tuple{BigFloat,BigFloat}}, n)
+ # best[i,j] gives the best sequence so far of length i and with
+ # sign j (where signs are coded as 1=positive, 2=negative), in the
+ # form of a tuple (cost, actual array of x,y pairs).
+ best = fill((BigFloat(0), array1d(Tuple{BigFloat,BigFloat}, 0)), n, 2)
+
+ for (x,y) = extrema
+ if y > 0
+ sign = 1
+ elseif y < 0
+ sign = 2
+ else
+ # A zero-valued extremum cannot possibly contribute to any
+ # optimal sequence, so we simply ignore it!
+ continue
+ end
+
+ for i = 1:1:n
+ # See if we can create a new entry for best[i,sign] by
+ # appending our current (x,y) to some previous thing.
+ if i == 1
+ # Special case: we don't store a best zero-length
+ # sequence :-)
+ candidate = (abs(y), [(x,y)])
+ else
+ othersign = 3-sign # map 1->2 and 2->1
+ oldscore, oldlist = best[i-1, othersign]
+ newscore = min(abs(y), oldscore)
+ newlist = vcat(oldlist, [(x,y)])
+ candidate = (newscore, newlist)
+ end
+ # If our new candidate improves on the previous value of
+ # best[i,sign], then replace it.
+ if candidate[1] > best[i,sign][1]
+ best[i,sign] = candidate
+ end
+ end
+ end
+
+ # Our ultimate return value has to be either best[n,1] or
+ # best[n,2], but it could be either. See which one has the higher
+ # score.
+ if best[n,1][1] > best[n,2][1]
+ ret = best[n,1][2]
+ else
+ ret = best[n,2][2]
+ end
+ # Make sure we did actually _find_ a good answer.
+ @assert(length(ret) == n)
+ return ret
+end
+
+# ----------------------------------------------------------------------
+# Construct a rational-function approximation with equal and
+# alternating weighted deviation at a specific set of x-coordinates.
+
+# Arguments:
+# f The function to be approximated. Maps BigFloat -> BigFloat.
+# coords An array of BigFloats giving the x-coordinates. There should
+# be n+d+2 of them.
+# n, d The degrees of the numerator and denominator of the desired
+# approximation.
+# prev_err A plausible value for the alternating weighted deviation.
+# (Required to kickstart a binary search in the nonlinear case;
+# see comments below.)
+# w Error-weighting function. Takes two BigFloat arguments x,y
+# and returns a scaling factor for the error at that location.
+# The returned approximation R should have the minimum possible
+# maximum value of abs((f(x)-R(x)) * w(x,f(x))). Optional
+# parameter, defaulting to the always-return-1 function.
+#
+# Return values: a pair of arrays of BigFloats (N,D) giving the
+# coefficients of the returned rational function. N has size n+1; D
+# has size d+1. Both start with the constant term, i.e. N[i] is the
+# coefficient of x^(i-1) (because Julia arrays are 1-based). D[1] will
+# be 1.
+function ratfn_equal_deviation(f::Function, coords::Array{BigFloat},
+ n, d, prev_err::BigFloat,
+ w = (x,y)->BigFloat(1))
+ @debug("equaldev", "n=", n, " d=", d, " coords=", repr(coords))
+ @assert(length(coords) == n+d+2)
+
+ if d == 0
+ # Special case: we're after a polynomial. In this case, we
+ # have the particularly easy job of just constructing and
+ # solving a system of n+2 linear equations, to find the n+1
+ # coefficients of the polynomial and also the amount of
+ # deviation at the specified coordinates. Each equation is of
+ # the form
+ #
+ # p_0 x^0 + p_1 x^1 + ... + p_n x^n ± e/w(x) = f(x)
+ #
+ # in which the p_i and e are the variables, and the powers of
+ # x and calls to w and f are the coefficients.
+
+ matrix = array2d(BigFloat, n+2, n+2)
+ vector = array1d(BigFloat, n+2)
+ currsign = +1
+ for i = 1:1:n+2
+ x = coords[i]
+ for j = 0:1:n
+ matrix[i,1+j] = x^j
+ end
+ y = f(x)
+ vector[i] = y
+ matrix[i, n+2] = currsign / w(x,y)
+ currsign = -currsign
+ end
+
+ @debug("equaldev", "matrix=", repr(matrix))
+ @debug("equaldev", "vector=", repr(vector))
+
+ outvector = matrix \ vector
+
+ @debug("equaldev", "outvector=", repr(outvector))
+
+ ncoeffs = outvector[1:n+1]
+ dcoeffs = [BigFloat(1)]
+ return ncoeffs, dcoeffs
+ else
+ # For a nontrivial rational function, the system of equations
+ # we need to solve becomes nonlinear, because each equation
+ # now takes the form
+ #
+ # p_0 x^0 + p_1 x^1 + ... + p_n x^n
+ # --------------------------------- ± e/w(x) = f(x)
+ # x^0 + q_1 x^1 + ... + q_d x^d
+ #
+ # and multiplying up by the denominator gives you a lot of
+ # terms containing e × q_i. So we can't do this the really
+ # easy way using a matrix equation as above.
+ #
+ # Fortunately, this is a fairly easy kind of nonlinear system.
+ # The equations all become linear if you switch to treating e
+ # as a constant, so a reasonably sensible approach is to pick
+ # a candidate value of e, solve all but one of the equations
+ # for the remaining unknowns, and then see what the error
+ # turns out to be in the final equation. The Chebyshev
+ # alternation theorem guarantees that that error in the last
+ # equation will be anti-monotonic in the input e, so we can
+ # just binary-search until we get the two as close to equal as
+ # we need them.
+
+ function try_e(e)
+ # Try a given value of e, derive the coefficients of the
+ # resulting rational function by setting up equations
+ # based on the first n+d+1 of the n+d+2 coordinates, and
+ # see what the error turns out to be at the final
+ # coordinate.
+ matrix = array2d(BigFloat, n+d+1, n+d+1)
+ vector = array1d(BigFloat, n+d+1)
+ currsign = +1
+ for i = 1:1:n+d+1
+ x = coords[i]
+ y = f(x)
+ y_adj = y - currsign * e / w(x,y)
+ for j = 0:1:n
+ matrix[i,1+j] = x^j
+ end
+ for j = 1:1:d
+ matrix[i,1+n+j] = -x^j * y_adj
+ end
+ vector[i] = y_adj
+ currsign = -currsign
+ end
+
+ @debug("equaldev", "trying e=", e)
+ @debug("equaldev", "matrix=", repr(matrix))
+ @debug("equaldev", "vector=", repr(vector))
+
+ outvector = matrix \ vector
+
+ @debug("equaldev", "outvector=", repr(outvector))
+
+ ncoeffs = outvector[1:n+1]
+ dcoeffs = vcat([BigFloat(1)], outvector[n+2:n+d+1])
+
+ x = coords[n+d+2]
+ y = f(x)
+ last_e = (ratfn_eval(ncoeffs, dcoeffs, x) - y) * w(x,y) * -currsign
+
+ @debug("equaldev", "last e=", last_e)
+
+ return ncoeffs, dcoeffs, last_e
+ end
+
+ threshold = 2^(-epsbits/2) # convergence threshold
+
+ # Start by trying our previous iteration's error value. This
+ # value (e0) will be one end of our binary-search interval,
+ # and whatever it caused the last point's error to be, that
+ # (e1) will be the other end.
+ e0 = prev_err
+ @debug("equaldev", "e0 = ", e0)
+ nc, dc, e1 = try_e(e0)
+ @debug("equaldev", "e1 = ", e1)
+ if abs(e1-e0) <= threshold
+ # If we're _really_ lucky, we hit the error right on the
+ # nose just by doing that!
+ return nc, dc
+ end
+ s = sign(e1-e0)
+ @debug("equaldev", "s = ", s)
+
+ # Verify by assertion that trying our other interval endpoint
+ # e1 gives a value that's wrong in the other direction.
+ # (Otherwise our binary search won't get a sensible answer at
+ # all.)
+ nc, dc, e2 = try_e(e1)
+ @debug("equaldev", "e2 = ", e2)
+ @assert(sign(e2-e1) == -s)
+
+ # Now binary-search until our two endpoints narrow enough.
+ local emid
+ while abs(e1-e0) > threshold
+ emid = (e1+e0)/2
+ nc, dc, enew = try_e(emid)
+ if sign(enew-emid) == s
+ e0 = emid
+ else
+ e1 = emid
+ end
+ end
+
+ @debug("equaldev", "final e=", emid)
+ return nc, dc
+ end
+end
+
+# ----------------------------------------------------------------------
+# Top-level function to find a minimax rational-function approximation.
+
+# Arguments:
+# f The function to be approximated. Maps BigFloat -> BigFloat.
+# interval A pair of BigFloats giving the endpoints of the interval
+# (in either order) on which to approximate f.
+# n, d The degrees of the numerator and denominator of the desired
+# approximation.
+# w Error-weighting function. Takes two BigFloat arguments x,y
+# and returns a scaling factor for the error at that location.
+# The returned approximation R should have the minimum possible
+# maximum value of abs((f(x)-R(x)) * w(x,f(x))). Optional
+# parameter, defaulting to the always-return-1 function.
+#
+# Return values: a tuple (N,D,E,X), where
+
+# N,D A pair of arrays of BigFloats giving the coefficients
+# of the returned rational function. N has size n+1; D
+# has size d+1. Both start with the constant term, i.e.
+# N[i] is the coefficient of x^(i-1) (because Julia
+# arrays are 1-based). D[1] will be 1.
+# E The maximum weighted error (BigFloat).
+# X An array of pairs of BigFloats giving the locations of n+2
+# points and the weighted error at each of those points. The
+# weighted error values will have alternating signs, which
+# means that the Chebyshev alternation theorem guarantees
+# that any other function of the same degree must exceed
+# the error of this one at at least one of those points.
+function ratfn_minimax(f::Function, interval::Tuple{BigFloat,BigFloat}, n, d,
+ w = (x,y)->BigFloat(1))
+ # We start off by finding a least-squares approximation. This
+ # doesn't need to be perfect, but if we can get it reasonably good
+ # then it'll save iterations in the refining stage.
+ #
+ # Least-squares approximations tend to look nicer in a minimax
+ # sense if you evaluate the function at a big pile of Chebyshev
+ # nodes rather than uniformly spaced points. These values will
+ # also make a good grid to use for the initial search for error
+ # extrema, so we'll keep them around for that reason too.
+
+ # Construct the grid.
+ lo, hi = minimum(interval), maximum(interval)
+ local grid
+ let
+ mid = (hi+lo)/2
+ halfwid = (hi-lo)/2
+ nnodes = 16 * (n+d+1)
+ pi = 2*asin(BigFloat(1))
+ grid = [ mid - halfwid * cos(pi*i/nnodes) for i=0:1:nnodes ]
+ end
+
+ # Find the initial least-squares approximation.
+ (nc, dc) = ratfn_leastsquares(f, grid, n, d, w)
+ @debug("minimax", "initial leastsquares approx = ",
+ ratfn_to_string(nc, dc))
+
+ # Threshold of convergence. We stop when the relative difference
+ # between the min and max (winnowed) error extrema is less than
+ # this.
+ #
+ # This is set to the cube root of machine epsilon on a more or
+ # less empirical basis, because the rational-function case will
+ # not converge reliably if you set it to only the square root.
+ # (Repeatable by using the --test mode.) On the assumption that
+ # input and output error in each iteration can be expected to be
+ # related by a simple power law (because it'll just be down to how
+ # many leading terms of a Taylor series are zero), the cube root
+ # was the next thing to try.
+ threshold = 2^(-epsbits/3)
+
+ # Main loop.
+ while true
+ # Find all the error extrema we can.
+ function compute_error(x)
+ real_y = f(x)
+ approx_y = ratfn_eval(nc, dc, x)
+ return (approx_y - real_y) * w(x, real_y)
+ end
+ extrema = find_extrema(compute_error, grid)
+ @debug("minimax", "all extrema = ", format_xylist(extrema))
+
+ # Winnow the extrema down to the right number, and ensure they
+ # have alternating sign.
+ extrema = winnow_extrema(extrema, n+d+2)
+ @debug("minimax", "winnowed extrema = ", format_xylist(extrema))
+
+ # See if we've finished.
+ min_err = minimum([abs(y) for (x,y) = extrema])
+ max_err = maximum([abs(y) for (x,y) = extrema])
+ variation = (max_err - min_err) / max_err
+ @debug("minimax", "extremum variation = ", variation)
+ if variation < threshold
+ @debug("minimax", "done!")
+ return nc, dc, max_err, extrema
+ end
+
+ # If not, refine our function by equalising the error at the
+ # extrema points, and go round again.
+ (nc, dc) = ratfn_equal_deviation(f, map(x->x[1], extrema),
+ n, d, max_err, w)
+ @debug("minimax", "refined approx = ", ratfn_to_string(nc, dc))
+ end
+end
+
+# ----------------------------------------------------------------------
+# Check if a polynomial is well-conditioned for accurate evaluation in
+# a given interval by Horner's rule.
+#
+# This is true if at every step where Horner's rule computes
+# (coefficient + x*value_so_far), the constant coefficient you're
+# adding on is of larger magnitude than the x*value_so_far operand.
+# And this has to be true for every x in the interval.
+#
+# Arguments:
+# coeffs The coefficients of the polynomial under test. Starts with
+# the constant term, i.e. coeffs[i] is the coefficient of
+# x^(i-1) (because Julia arrays are 1-based).
+# lo, hi The bounds of the interval.
+#
+# Return value: the largest ratio (x*value_so_far / coefficient), at
+# any step of evaluation, for any x in the interval. If this is less
+# than 1, the polynomial is at least somewhat well-conditioned;
+# ideally you want it to be more like 1/8 or 1/16 or so, so that the
+# relative rounding error accumulated at each step are reduced by
+# several factors of 2 when the next coefficient is added on.
+
+function wellcond(coeffs, lo, hi)
+ x = max(abs(lo), abs(hi))
+ worst = 0
+ so_far = 0
+ for i = length(coeffs):-1:1
+ coeff = abs(coeffs[i])
+ so_far *= x
+ if coeff != 0
+ thisval = so_far / coeff
+ worst = max(worst, thisval)
+ so_far += coeff
+ end
+ end
+ return worst
+end
+
+# ----------------------------------------------------------------------
+# Small set of unit tests.
+
+function test()
+ passes = 0
+ fails = 0
+
+ function approx_eq(x, y, limit=1e-6)
+ return abs(x - y) < limit
+ end
+
+ function test(condition)
+ if condition
+ passes += 1
+ else
+ println("fail")
+ fails += 1
+ end
+ end
+
+ # Test Gaussian elimination.
+ println("Gaussian test 1:")
+ m = BigFloat[1 1 2; 3 5 8; 13 34 21]
+ v = BigFloat[1, -1, 2]
+ ret = m \ v
+ println(" ",repr(ret))
+ test(approx_eq(ret[1], 109/26))
+ test(approx_eq(ret[2], -105/130))
+ test(approx_eq(ret[3], -31/26))
+
+ # Test leastsquares rational functions.
+ println("Leastsquares test 1:")
+ n = 10000
+ a = array1d(BigFloat, n+1)
+ for i = 0:1:n
+ a[1+i] = i/BigFloat(n)
+ end
+ (nc, dc) = ratfn_leastsquares(x->exp(x), a, 2, 2)
+ println(" ",ratfn_to_string(nc, dc))
+ for x = a
+ test(approx_eq(exp(x), ratfn_eval(nc, dc, x), 1e-4))
+ end
+
+ # Test golden section search.
+ println("Golden section test 1:")
+ x, y = goldensection(x->sin(x),
+ BigFloat(0), BigFloat(1)/10, BigFloat(4))
+ println(" ", x, " -> ", y)
+ test(approx_eq(x, asin(BigFloat(1))))
+ test(approx_eq(y, 1))
+
+ # Test extrema-winnowing algorithm.
+ println("Winnow test 1:")
+ extrema = [(x, sin(20*x)*sin(197*x))
+ for x in BigFloat(0):BigFloat(1)/1000:BigFloat(1)]
+ winnowed = winnow_extrema(extrema, 12)
+ println(" ret = ", format_xylist(winnowed))
+ prevx, prevy = -1, 0
+ for (x,y) = winnowed
+ test(x > prevx)
+ test(y != 0)
+ test(prevy * y <= 0) # tolerates initial prevx having no sign
+ test(abs(y) > 0.9)
+ prevx, prevy = x, y
+ end
+
+ # Test actual minimax approximation.
+ println("Minimax test 1 (polynomial):")
+ (nc, dc, e, x) = ratfn_minimax(x->exp(x), (BigFloat(0), BigFloat(1)), 4, 0)
+ println(" ",e)
+ println(" ",ratfn_to_string(nc, dc))
+ test(0 < e < 1e-3)
+ for x = 0:BigFloat(1)/1000:1
+ test(abs(ratfn_eval(nc, dc, x) - exp(x)) <= e * 1.0000001)
+ end
+
+ println("Minimax test 2 (rational):")
+ (nc, dc, e, x) = ratfn_minimax(x->exp(x), (BigFloat(0), BigFloat(1)), 2, 2)
+ println(" ",e)
+ println(" ",ratfn_to_string(nc, dc))
+ test(0 < e < 1e-3)
+ for x = 0:BigFloat(1)/1000:1
+ test(abs(ratfn_eval(nc, dc, x) - exp(x)) <= e * 1.0000001)
+ end
+
+ println("Minimax test 3 (polynomial, weighted):")
+ (nc, dc, e, x) = ratfn_minimax(x->exp(x), (BigFloat(0), BigFloat(1)), 4, 0,
+ (x,y)->1/y)
+ println(" ",e)
+ println(" ",ratfn_to_string(nc, dc))
+ test(0 < e < 1e-3)
+ for x = 0:BigFloat(1)/1000:1
+ test(abs(ratfn_eval(nc, dc, x) - exp(x))/exp(x) <= e * 1.0000001)
+ end
+
+ println("Minimax test 4 (rational, weighted):")
+ (nc, dc, e, x) = ratfn_minimax(x->exp(x), (BigFloat(0), BigFloat(1)), 2, 2,
+ (x,y)->1/y)
+ println(" ",e)
+ println(" ",ratfn_to_string(nc, dc))
+ test(0 < e < 1e-3)
+ for x = 0:BigFloat(1)/1000:1
+ test(abs(ratfn_eval(nc, dc, x) - exp(x))/exp(x) <= e * 1.0000001)
+ end
+
+ println("Minimax test 5 (rational, weighted, odd degree):")
+ (nc, dc, e, x) = ratfn_minimax(x->exp(x), (BigFloat(0), BigFloat(1)), 2, 1,
+ (x,y)->1/y)
+ println(" ",e)
+ println(" ",ratfn_to_string(nc, dc))
+ test(0 < e < 1e-3)
+ for x = 0:BigFloat(1)/1000:1
+ test(abs(ratfn_eval(nc, dc, x) - exp(x))/exp(x) <= e * 1.0000001)
+ end
+
+ total = passes + fails
+ println(passes, " passes ", fails, " fails ", total, " total")
+end
+
+# ----------------------------------------------------------------------
+# Online help.
+function help()
+ print("""
+Usage:
+
+ remez.jl [options] <lo> <hi> <n> <d> <expr> [<weight>]
+
+Arguments:
+
+ <lo>, <hi>
+
+ Bounds of the interval on which to approximate the target
+ function. These are parsed and evaluated as Julia expressions,
+ so you can write things like '1/BigFloat(6)' to get an
+ accurate representation of 1/6, or '4*atan(BigFloat(1))' to
+ get pi. (Unfortunately, the obvious 'BigFloat(pi)' doesn't
+ work in Julia.)
+
+ <n>, <d>
+
+ The desired degree of polynomial(s) you want for your
+ approximation. These should be non-negative integers. If you
+ want a rational function as output, set <n> to the degree of
+ the numerator, and <d> the denominator. If you just want an
+ ordinary polynomial, set <d> to 0, and <n> to the degree of
+ the polynomial you want.
+
+ <expr>
+
+ A Julia expression giving the function to be approximated on
+ the interval. The input value is predefined as 'x' when this
+ expression is evaluated, so you should write something along
+ the lines of 'sin(x)' or 'sqrt(1+tan(x)^2)' etc.
+
+ <weight>
+
+ If provided, a Julia expression giving the weighting factor
+ for the approximation error. The output polynomial will
+ minimise the largest absolute value of (P-f) * w at any point
+ in the interval, where P is the value of the polynomial, f is
+ the value of the target function given by <expr>, and w is the
+ weight given by this function.
+
+ When this expression is evaluated, the input value to P and f
+ is predefined as 'x', and also the true output value f(x) is
+ predefined as 'y'. So you can minimise the relative error by
+ simply writing '1/y'.
+
+ If the <weight> argument is not provided, the default
+ weighting function always returns 1, so that the polynomial
+ will minimise the maximum absolute error |P-f|.
+
+Computation options:
+
+ --pre=<predef_expr>
+
+ Evaluate the Julia expression <predef_expr> before starting
+ the computation. This permits you to pre-define variables or
+ functions which the Julia expressions in your main arguments
+ can refer to. All of <lo>, <hi>, <expr> and <weight> can make
+ use of things defined by <predef_expr>.
+
+ One internal remez.jl function that you might sometimes find
+ useful in this expression is 'goldensection', which finds the
+ location and value of a maximum of a function. For example,
+ one implementation strategy for the gamma function involves
+ translating it to put its unique local minimum at the origin,
+ in which case you can write something like this
+
+ --pre='(m,my) = goldensection(x -> -gamma(x),
+ BigFloat(1), BigFloat(1.5), BigFloat(2))'
+
+ to predefine 'm' as the location of gamma's minimum, and 'my'
+ as the (negated) value that gamma actually takes at that
+ point, i.e. -gamma(m).
+
+ (Since 'goldensection' always finds a maximum, we had to
+ negate gamma in the input function to make it find a minimum
+ instead. Consult the comments in the source for more details
+ on the use of this function.)
+
+ If you use this option more than once, all the expressions you
+ provide will be run in sequence.
+
+ --bits=<bits>
+
+ Specify the accuracy to which you want the output polynomial,
+ in bits. Default 256, which should be more than enough.
+
+ --bigfloatbits=<bits>
+
+ Turn up the precision used by Julia for its BigFloat
+ evaluation. Default is Julia's default (also 256). You might
+ want to try setting this higher than the --bits value if the
+ algorithm is failing to converge for some reason.
+
+Output options:
+
+ --full
+
+ Instead of just printing the approximation function itself,
+ also print auxiliary information:
+ - the locations of the error extrema, and the actual
+ (weighted) error at each of those locations
+ - the overall maximum error of the function
+ - a 'well-conditioning quotient', giving the worst-case ratio
+ between any polynomial coefficient and the largest possible
+ value of the higher-order terms it will be added to.
+
+ The well-conditioning quotient should be less than 1, ideally
+ by several factors of two, for accurate evaluation in the
+ target precision. If you request a rational function, a
+ separate well-conditioning quotient will be printed for the
+ numerator and denominator.
+
+ Use this option when deciding how wide an interval to
+ approximate your function on, and what degree of polynomial
+ you need.
+
+ --variable=<identifier>
+
+ When writing the output polynomial or rational function in its
+ usual form as an arithmetic expression, use <identifier> as
+ the name of the input variable. Default is 'x'.
+
+ --suffix=<suffix>
+
+ When writing the output polynomial or rational function in its
+ usual form as an arithmetic expression, write <suffix> after
+ every floating-point literal. For example, '--suffix=F' will
+ generate a C expression in which the coefficients are literals
+ of type 'float' rather than 'double'.
+
+ --array
+
+ Instead of writing the output polynomial as an arithmetic
+ expression in Horner's rule form, write out just its
+ coefficients, one per line, each with a trailing comma.
+ Suitable for pasting into a C array declaration.
+
+ This option is not currently supported if the output is a
+ rational function, because you'd need two separate arrays for
+ the numerator and denominator coefficients and there's no
+ obviously right way to provide both of those together.
+
+Debug and test options:
+
+ --debug=<facility>
+
+ Enable debugging output from various parts of the Remez
+ calculation. <facility> should be the name of one of the
+ classes of diagnostic output implemented in the program.
+ Useful values include 'gausselim', 'leastsquares',
+ 'goldensection', 'equaldev', 'minimax'. This is probably
+ mostly useful to people debugging problems with the script, so
+ consult the source code for more information about what the
+ diagnostic output for each of those facilities will be.
+
+ If you want diagnostics from more than one facility, specify
+ this option multiple times with different arguments.
+
+ --test
+
+ Run remez.jl's internal test suite. No arguments needed.
+
+Miscellaneous options:
+
+ --help
+
+ Display this text and exit. No arguments needed.
+
+""")
+end
+
+# ----------------------------------------------------------------------
+# Main program.
+
+function main()
+ nargs = length(argwords)
+ if nargs != 5 && nargs != 6
+ error("usage: remez.jl <lo> <hi> <n> <d> <expr> [<weight>]\n" *
+ " run 'remez.jl --help' for more help")
+ end
+
+ for preliminary_command in preliminary_commands
+ eval(Meta.parse(preliminary_command))
+ end
+
+ lo = BigFloat(eval(Meta.parse(argwords[1])))
+ hi = BigFloat(eval(Meta.parse(argwords[2])))
+ n = parse(Int,argwords[3])
+ d = parse(Int,argwords[4])
+ f = eval(Meta.parse("x -> " * argwords[5]))
+
+ # Wrap the user-provided function with a function of our own. This
+ # arranges to detect silly FP values (inf,nan) early and diagnose
+ # them sensibly, and also lets us log all evaluations of the
+ # function in case you suspect it's doing the wrong thing at some
+ # special-case point.
+ function func(x)
+ y = run(f,x)
+ @debug("f", x, " -> ", y)
+ if !isfinite(y)
+ error("f(" * string(x) * ") returned non-finite value " * string(y))
+ end
+ return y
+ end
+
+ if nargs == 6
+ # Wrap the user-provided weight function similarly.
+ w = eval(Meta.parse("(x,y) -> " * argwords[6]))
+ function wrapped_weight(x,y)
+ ww = run(w,x,y)
+ if !isfinite(ww)
+ error("w(" * string(x) * "," * string(y) *
+ ") returned non-finite value " * string(ww))
+ end
+ return ww
+ end
+ weight = wrapped_weight
+ else
+ weight = (x,y)->BigFloat(1)
+ end
+
+ (nc, dc, e, extrema) = ratfn_minimax(func, (lo, hi), n, d, weight)
+ if array_format
+ if d == 0
+ functext = join([string(x)*",\n" for x=nc],"")
+ else
+ # It's unclear how you should best format an array of
+ # coefficients for a rational function, so I'll leave
+ # implementing this option until I have a use case.
+ error("--array unsupported for rational functions")
+ end
+ else
+ functext = ratfn_to_string(nc, dc) * "\n"
+ end
+ if full_output
+ # Print everything you might want to know about the function
+ println("extrema = ", format_xylist(extrema))
+ println("maxerror = ", string(e))
+ if length(dc) > 1
+ println("wellconditioning_numerator = ",
+ string(wellcond(nc, lo, hi)))
+ println("wellconditioning_denominator = ",
+ string(wellcond(dc, lo, hi)))
+ else
+ println("wellconditioning = ", string(wellcond(nc, lo, hi)))
+ end
+ print("function = ", functext)
+ else
+ # Just print the text people will want to paste into their code
+ print(functext)
+ end
+end
+
+# ----------------------------------------------------------------------
+# Top-level code: parse the argument list and decide what to do.
+
+what_to_do = main
+
+doing_opts = true
+argwords = array1d(String, 0)
+for arg = ARGS
+ global doing_opts, what_to_do, argwords
+ global full_output, array_format, xvarname, floatsuffix, epsbits
+ if doing_opts && startswith(arg, "-")
+ if arg == "--"
+ doing_opts = false
+ elseif arg == "--help"
+ what_to_do = help
+ elseif arg == "--test"
+ what_to_do = test
+ elseif arg == "--full"
+ full_output = true
+ elseif arg == "--array"
+ array_format = true
+ elseif startswith(arg, "--debug=")
+ enable_debug(arg[length("--debug=")+1:end])
+ elseif startswith(arg, "--variable=")
+ xvarname = arg[length("--variable=")+1:end]
+ elseif startswith(arg, "--suffix=")
+ floatsuffix = arg[length("--suffix=")+1:end]
+ elseif startswith(arg, "--bits=")
+ epsbits = parse(Int,arg[length("--bits=")+1:end])
+ elseif startswith(arg, "--bigfloatbits=")
+ set_bigfloat_precision(
+ parse(Int,arg[length("--bigfloatbits=")+1:end]))
+ elseif startswith(arg, "--pre=")
+ push!(preliminary_commands, arg[length("--pre=")+1:end])
+ else
+ error("unrecognised option: ", arg)
+ end
+ else
+ push!(argwords, arg)
+ end
+end
+
+what_to_do()
diff --git a/math/tools/sin.sollya b/math/tools/sin.sollya
new file mode 100644
index 000000000000..a6e851145c11
--- /dev/null
+++ b/math/tools/sin.sollya
@@ -0,0 +1,37 @@
+// polynomial for approximating sin(x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 7; // polynomial degree
+a = -pi/4; // interval
+b = pi/4;
+
+// find even polynomial with minimal abs error compared to sin(x)/x
+
+// account for /x
+deg = deg-1;
+
+// f = sin(x)/x;
+f = 1;
+c = 1;
+for i from 1 to 60 do { c = 2*i*(2*i + 1)*c; f = f + (-1)^i*x^(2*i)/c; };
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+ return remez(f(x)-poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = 1;
+for i from 1 to deg/2 do {
+ p = roundcoefficients(approx(poly,2*i), [|D ...|]);
+ poly = poly + x^(2*i)*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/f(x), [a;b], 30));
+print("abs error:", accurateinfnorm(sin(x)-x*poly(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/v_exp.sollya b/math/tools/v_exp.sollya
new file mode 100644
index 000000000000..c0abb63fb642
--- /dev/null
+++ b/math/tools/v_exp.sollya
@@ -0,0 +1,30 @@
+// polynomial for approximating e^x
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 4; // poly degree
+N = 128; // table entries
+b = log(2)/(2*N); // interval
+a = -b;
+
+// find polynomial with minimal abs error
+
+// return p that minimizes |exp(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+ return remez(exp(x)-poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first 2 coeffs are fixed, iteratively find optimal double prec coeffs
+poly = 1 + x;
+for i from 2 to deg do {
+ p = roundcoefficients(approx(poly,i), [|D ...|]);
+ poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/exp(x), [a;b], 30));
+print("abs error:", accurateinfnorm(exp(x)-poly(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/v_log.sollya b/math/tools/v_log.sollya
new file mode 100644
index 000000000000..cc3d2c4ae72a
--- /dev/null
+++ b/math/tools/v_log.sollya
@@ -0,0 +1,34 @@
+// polynomial used for __v_log(x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 6; // poly degree
+a = -0x1.fc1p-9;
+b = 0x1.009p-8;
+
+// find log(1+x)/x polynomial with minimal relative error
+// (minimal relative error polynomial for log(1+x) is the same * x)
+deg = deg-1; // because of /x
+
+// f = log(1+x)/x; using taylor series
+f = 0;
+for i from 0 to 60 do { f = f + (-x)^i/(i+1); };
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|/|f(x)|
+approx = proc(poly,d) {
+ return remez(1 - poly(x)/f(x), deg-d, [a;b], x^d/f(x), 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = 1;
+for i from 1 to deg do {
+ p = roundcoefficients(approx(poly,i), [|D ...|]);
+ poly = poly + x^i*coeff(p,0);
+};
+
+display = hexadecimal;
+print("rel error:", accurateinfnorm(1-poly(x)/f(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/tools/v_sin.sollya b/math/tools/v_sin.sollya
new file mode 100644
index 000000000000..65cc9957c624
--- /dev/null
+++ b/math/tools/v_sin.sollya
@@ -0,0 +1,36 @@
+// polynomial for approximating sin(x)
+//
+// Copyright (c) 2019, Arm Limited.
+// SPDX-License-Identifier: MIT
+
+deg = 15; // polynomial degree
+a = -pi/2; // interval
+b = pi/2;
+
+// find even polynomial with minimal abs error compared to sin(x)/x
+
+// account for /x
+deg = deg-1;
+
+// f = sin(x)/x;
+f = 1;
+c = 1;
+for i from 1 to 60 do { c = 2*i*(2*i + 1)*c; f = f + (-1)^i*x^(2*i)/c; };
+
+// return p that minimizes |f(x) - poly(x) - x^d*p(x)|
+approx = proc(poly,d) {
+ return remez(f(x)-poly(x), deg-d, [a;b], x^d, 1e-10);
+};
+
+// first coeff is fixed, iteratively find optimal double prec coeffs
+poly = 1;
+for i from 1 to deg/2 do {
+ p = roundcoefficients(approx(poly,2*i), [|D ...|]);
+ poly = poly + x^(2*i)*coeff(p,0);
+};
+
+display = hexadecimal;
+print("abs error:", accurateinfnorm(sin(x)-x*poly(x), [a;b], 30));
+print("in [",a,b,"]");
+print("coeffs:");
+for i from 0 to deg do coeff(poly,i);
diff --git a/math/v_cos.c b/math/v_cos.c
new file mode 100644
index 000000000000..20ba6bd0d0d9
--- /dev/null
+++ b/math/v_cos.c
@@ -0,0 +1,87 @@
+/*
+ * Double-precision vector cos function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+
+static const double Poly[] = {
+/* worst-case error is 3.5 ulp.
+ abs error: 0x1.be222a58p-53 in [-pi/2, pi/2]. */
+-0x1.9f4a9c8b21dc9p-41,
+ 0x1.60e88a10163f2p-33,
+-0x1.ae6361b7254e7p-26,
+ 0x1.71de382e8d62bp-19,
+-0x1.a01a019aeb4ffp-13,
+ 0x1.111111110b25ep-7,
+-0x1.55555555554c3p-3,
+};
+
+#define C7 v_f64 (Poly[0])
+#define C6 v_f64 (Poly[1])
+#define C5 v_f64 (Poly[2])
+#define C4 v_f64 (Poly[3])
+#define C3 v_f64 (Poly[4])
+#define C2 v_f64 (Poly[5])
+#define C1 v_f64 (Poly[6])
+
+#define InvPi v_f64 (0x1.45f306dc9c883p-2)
+#define HalfPi v_f64 (0x1.921fb54442d18p+0)
+#define Pi1 v_f64 (0x1.921fb54442d18p+1)
+#define Pi2 v_f64 (0x1.1a62633145c06p-53)
+#define Pi3 v_f64 (0x1.c1cd129024e09p-106)
+#define Shift v_f64 (0x1.8p52)
+#define RangeVal v_f64 (0x1p23)
+#define AbsMask v_u64 (0x7fffffffffffffff)
+
+VPCS_ATTR
+__attribute__ ((noinline)) static v_f64_t
+specialcase (v_f64_t x, v_f64_t y, v_u64_t cmp)
+{
+ return v_call_f64 (cos, x, y, cmp);
+}
+
+VPCS_ATTR
+v_f64_t
+V_NAME(cos) (v_f64_t x)
+{
+ v_f64_t n, r, r2, y;
+ v_u64_t odd, cmp;
+
+ r = v_as_f64_u64 (v_as_u64_f64 (x) & AbsMask);
+ cmp = v_cond_u64 (v_as_u64_f64 (r) >= v_as_u64_f64 (RangeVal));
+
+ /* n = rint((|x|+pi/2)/pi) - 0.5. */
+ n = v_fma_f64 (InvPi, r + HalfPi, Shift);
+ odd = v_as_u64_f64 (n) << 63;
+ n -= Shift;
+ n -= v_f64 (0.5);
+
+ /* r = |x| - n*pi (range reduction into -pi/2 .. pi/2). */
+ r = v_fma_f64 (-Pi1, n, r);
+ r = v_fma_f64 (-Pi2, n, r);
+ r = v_fma_f64 (-Pi3, n, r);
+
+ /* sin(r) poly approx. */
+ r2 = r * r;
+ y = v_fma_f64 (C7, r2, C6);
+ y = v_fma_f64 (y, r2, C5);
+ y = v_fma_f64 (y, r2, C4);
+ y = v_fma_f64 (y, r2, C3);
+ y = v_fma_f64 (y, r2, C2);
+ y = v_fma_f64 (y, r2, C1);
+ y = v_fma_f64 (y * r2, r, r);
+
+ /* sign. */
+ y = v_as_f64_u64 (v_as_u64_f64 (y) ^ odd);
+
+ if (unlikely (v_any_u64 (cmp)))
+ return specialcase (x, y, cmp);
+ return y;
+}
+VPCS_ALIAS
+#endif
diff --git a/math/v_cosf.c b/math/v_cosf.c
new file mode 100644
index 000000000000..150294b8845e
--- /dev/null
+++ b/math/v_cosf.c
@@ -0,0 +1,76 @@
+/*
+ * Single-precision vector cos function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+
+static const float Poly[] = {
+ /* 1.886 ulp error */
+ 0x1.5b2e76p-19f,
+ -0x1.9f42eap-13f,
+ 0x1.110df4p-7f,
+ -0x1.555548p-3f,
+};
+#define Pi1 v_f32 (0x1.921fb6p+1f)
+#define Pi2 v_f32 (-0x1.777a5cp-24f)
+#define Pi3 v_f32 (-0x1.ee59dap-49f)
+#define A3 v_f32 (Poly[3])
+#define A5 v_f32 (Poly[2])
+#define A7 v_f32 (Poly[1])
+#define A9 v_f32 (Poly[0])
+#define RangeVal v_f32 (0x1p20f)
+#define InvPi v_f32 (0x1.45f306p-2f)
+#define Shift v_f32 (0x1.8p+23f)
+#define AbsMask v_u32 (0x7fffffff)
+#define HalfPi v_f32 (0x1.921fb6p0f)
+
+VPCS_ATTR
+static v_f32_t
+specialcase (v_f32_t x, v_f32_t y, v_u32_t cmp)
+{
+ /* Fall back to scalar code. */
+ return v_call_f32 (cosf, x, y, cmp);
+}
+
+VPCS_ATTR
+v_f32_t
+V_NAME(cosf) (v_f32_t x)
+{
+ v_f32_t n, r, r2, y;
+ v_u32_t odd, cmp;
+
+ r = v_as_f32_u32 (v_as_u32_f32 (x) & AbsMask);
+ cmp = v_cond_u32 (v_as_u32_f32 (r) >= v_as_u32_f32 (RangeVal));
+
+ /* n = rint((|x|+pi/2)/pi) - 0.5 */
+ n = v_fma_f32 (InvPi, r + HalfPi, Shift);
+ odd = v_as_u32_f32 (n) << 31;
+ n -= Shift;
+ n -= v_f32 (0.5f);
+
+ /* r = |x| - n*pi (range reduction into -pi/2 .. pi/2) */
+ r = v_fma_f32 (-Pi1, n, r);
+ r = v_fma_f32 (-Pi2, n, r);
+ r = v_fma_f32 (-Pi3, n, r);
+
+ /* y = sin(r) */
+ r2 = r * r;
+ y = v_fma_f32 (A9, r2, A7);
+ y = v_fma_f32 (y, r2, A5);
+ y = v_fma_f32 (y, r2, A3);
+ y = v_fma_f32 (y * r2, r, r);
+
+ /* sign fix */
+ y = v_as_f32_u32 (v_as_u32_f32 (y) ^ odd);
+
+ if (unlikely (v_any_u32 (cmp)))
+ return specialcase (x, y, cmp);
+ return y;
+}
+VPCS_ALIAS
+#endif
diff --git a/math/v_exp.c b/math/v_exp.c
new file mode 100644
index 000000000000..e459d53fddd2
--- /dev/null
+++ b/math/v_exp.c
@@ -0,0 +1,94 @@
+/*
+ * Double-precision vector e^x function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+#include "v_exp.h"
+
+#if V_EXP_TABLE_BITS == 7
+/* maxerr: 1.88 +0.5 ulp
+ rel error: 1.4337*2^-53
+ abs error: 1.4299*2^-53 in [ -ln2/256, ln2/256 ]. */
+#define C1 v_f64 (0x1.ffffffffffd43p-2)
+#define C2 v_f64 (0x1.55555c75adbb2p-3)
+#define C3 v_f64 (0x1.55555da646206p-5)
+#define InvLn2 v_f64 (0x1.71547652b82fep7) /* N/ln2. */
+#define Ln2hi v_f64 (0x1.62e42fefa39efp-8) /* ln2/N. */
+#define Ln2lo v_f64 (0x1.abc9e3b39803f3p-63)
+#elif V_EXP_TABLE_BITS == 8
+/* maxerr: 0.54 +0.5 ulp
+ rel error: 1.4318*2^-58
+ abs error: 1.4299*2^-58 in [ -ln2/512, ln2/512 ]. */
+#define C1 v_f64 (0x1.fffffffffffd4p-2)
+#define C2 v_f64 (0x1.5555571d6b68cp-3)
+#define C3 v_f64 (0x1.5555576a59599p-5)
+#define InvLn2 v_f64 (0x1.71547652b82fep8)
+#define Ln2hi v_f64 (0x1.62e42fefa39efp-9)
+#define Ln2lo v_f64 (0x1.abc9e3b39803f3p-64)
+#endif
+
+#define N (1 << V_EXP_TABLE_BITS)
+#define Tab __v_exp_data
+#define IndexMask v_u64 (N - 1)
+#define Shift v_f64 (0x1.8p+52)
+#define Thres v_f64 (704.0)
+
+VPCS_ATTR
+static v_f64_t
+specialcase (v_f64_t s, v_f64_t y, v_f64_t n)
+{
+ v_f64_t absn = v_abs_f64 (n);
+
+ /* 2^(n/N) may overflow, break it up into s1*s2. */
+ v_u64_t b = v_cond_u64 (n <= v_f64 (0.0)) & v_u64 (0x6000000000000000);
+ v_f64_t s1 = v_as_f64_u64 (v_u64 (0x7000000000000000) - b);
+ v_f64_t s2 = v_as_f64_u64 (v_as_u64_f64 (s) - v_u64 (0x3010000000000000) + b);
+ v_u64_t cmp = v_cond_u64 (absn > v_f64 (1280.0 * N));
+ v_f64_t r1 = s1 * s1;
+ v_f64_t r0 = v_fma_f64 (y, s2, s2) * s1;
+ return v_as_f64_u64 ((cmp & v_as_u64_f64 (r1)) | (~cmp & v_as_u64_f64 (r0)));
+}
+
+VPCS_ATTR
+v_f64_t
+V_NAME(exp) (v_f64_t x)
+{
+ v_f64_t n, r, r2, s, y, z;
+ v_u64_t cmp, u, e, i;
+
+ cmp = v_cond_u64 (v_abs_f64 (x) > Thres);
+
+ /* n = round(x/(ln2/N)). */
+ z = v_fma_f64 (x, InvLn2, Shift);
+ u = v_as_u64_f64 (z);
+ n = z - Shift;
+
+ /* r = x - n*ln2/N. */
+ r = x;
+ r = v_fma_f64 (-Ln2hi, n, r);
+ r = v_fma_f64 (-Ln2lo, n, r);
+
+ e = u << (52 - V_EXP_TABLE_BITS);
+ i = u & IndexMask;
+
+ /* y = exp(r) - 1 ~= r + C1 r^2 + C2 r^3 + C3 r^4. */
+ r2 = r * r;
+ y = v_fma_f64 (C2, r, C1);
+ y = v_fma_f64 (C3, r2, y);
+ y = v_fma_f64 (y, r2, r);
+
+ /* s = 2^(n/N). */
+ u = v_lookup_u64 (Tab, i);
+ s = v_as_f64_u64 (u + e);
+
+ if (unlikely (v_any_u64 (cmp)))
+ return specialcase (s, y, n);
+ return v_fma_f64 (y, s, s);
+}
+VPCS_ALIAS
+#endif
diff --git a/math/v_exp.h b/math/v_exp.h
new file mode 100644
index 000000000000..305da19c0a53
--- /dev/null
+++ b/math/v_exp.h
@@ -0,0 +1,14 @@
+/*
+ * Declarations for double-precision e^x vector function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "v_math.h"
+#if WANT_VMATH
+
+#define V_EXP_TABLE_BITS 7
+
+extern const u64_t __v_exp_data[1 << V_EXP_TABLE_BITS] HIDDEN;
+#endif
diff --git a/math/v_exp2f.c b/math/v_exp2f.c
new file mode 100644
index 000000000000..e3ea5af3414d
--- /dev/null
+++ b/math/v_exp2f.c
@@ -0,0 +1,78 @@
+/*
+ * Single-precision vector 2^x function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+
+static const float Poly[] = {
+ /* maxerr: 1.962 ulp. */
+ 0x1.59977ap-10f,
+ 0x1.3ce9e4p-7f,
+ 0x1.c6bd32p-5f,
+ 0x1.ebf9bcp-3f,
+ 0x1.62e422p-1f,
+};
+#define C0 v_f32 (Poly[0])
+#define C1 v_f32 (Poly[1])
+#define C2 v_f32 (Poly[2])
+#define C3 v_f32 (Poly[3])
+#define C4 v_f32 (Poly[4])
+
+#define Shift v_f32 (0x1.8p23f)
+
+VPCS_ATTR
+static v_f32_t
+specialcase (v_f32_t poly, v_f32_t n, v_u32_t e, v_f32_t absn, v_u32_t cmp1, v_f32_t scale)
+{
+ /* 2^n may overflow, break it up into s1*s2. */
+ v_u32_t b = v_cond_u32 (n <= v_f32 (0.0f)) & v_u32 (0x82000000);
+ v_f32_t s1 = v_as_f32_u32 (v_u32 (0x7f000000) + b);
+ v_f32_t s2 = v_as_f32_u32 (e - b);
+ v_u32_t cmp2 = v_cond_u32 (absn > v_f32 (192.0f));
+ v_u32_t r2 = v_as_u32_f32 (s1 * s1);
+ v_u32_t r1 = v_as_u32_f32 (v_fma_f32 (poly, s2, s2) * s1);
+ /* Similar to r1 but avoids double rounding in the subnormal range. */
+ v_u32_t r0 = v_as_u32_f32 (v_fma_f32 (poly, scale, scale));
+ return v_as_f32_u32 ((cmp2 & r2) | (~cmp2 & cmp1 & r1) | (~cmp1 & r0));
+}
+
+VPCS_ATTR
+v_f32_t
+V_NAME(exp2f) (v_f32_t x)
+{
+ v_f32_t n, r, r2, scale, p, q, poly, absn;
+ v_u32_t cmp, e;
+
+ /* exp2(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]
+ x = n + r, with r in [-1/2, 1/2]. */
+#if 0
+ v_f32_t z;
+ z = x + Shift;
+ n = z - Shift;
+ r = x - n;
+ e = v_as_u32_f32 (z) << 23;
+#else
+ n = v_round_f32 (x);
+ r = x - n;
+ e = v_as_u32_s32 (v_round_s32 (x)) << 23;
+#endif
+ scale = v_as_f32_u32 (e + v_u32 (0x3f800000));
+ absn = v_abs_f32 (n);
+ cmp = v_cond_u32 (absn > v_f32 (126.0f));
+ r2 = r * r;
+ p = v_fma_f32 (C0, r, C1);
+ q = v_fma_f32 (C2, r, C3);
+ q = v_fma_f32 (p, r2, q);
+ p = C4 * r;
+ poly = v_fma_f32 (q, r2, p);
+ if (unlikely (v_any_u32 (cmp)))
+ return specialcase (poly, n, e, absn, cmp, scale);
+ return v_fma_f32 (poly, scale, scale);
+}
+VPCS_ALIAS
+#endif
diff --git a/math/v_exp2f_1u.c b/math/v_exp2f_1u.c
new file mode 100644
index 000000000000..1caa14d9bfff
--- /dev/null
+++ b/math/v_exp2f_1u.c
@@ -0,0 +1,75 @@
+/*
+ * Single-precision vector 2^x function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+
+static const float Poly[] = {
+ /* maxerr: 0.878 ulp. */
+ 0x1.416b5ep-13f, 0x1.5f082ep-10f, 0x1.3b2dep-7f, 0x1.c6af7cp-5f, 0x1.ebfbdcp-3f, 0x1.62e43p-1f
+};
+#define C0 v_f32 (Poly[0])
+#define C1 v_f32 (Poly[1])
+#define C2 v_f32 (Poly[2])
+#define C3 v_f32 (Poly[3])
+#define C4 v_f32 (Poly[4])
+#define C5 v_f32 (Poly[5])
+
+#define Shift v_f32 (0x1.8p23f)
+#define InvLn2 v_f32 (0x1.715476p+0f)
+#define Ln2hi v_f32 (0x1.62e4p-1f)
+#define Ln2lo v_f32 (0x1.7f7d1cp-20f)
+
+VPCS_ATTR
+static v_f32_t
+specialcase (v_f32_t poly, v_f32_t n, v_u32_t e, v_f32_t absn)
+{
+ /* 2^n may overflow, break it up into s1*s2. */
+ v_u32_t b = v_cond_u32 (n <= v_f32 (0.0f)) & v_u32 (0x83000000);
+ v_f32_t s1 = v_as_f32_u32 (v_u32 (0x7f000000) + b);
+ v_f32_t s2 = v_as_f32_u32 (e - b);
+ v_u32_t cmp = v_cond_u32 (absn > v_f32 (192.0f));
+ v_f32_t r1 = s1 * s1;
+ v_f32_t r0 = poly * s1 * s2;
+ return v_as_f32_u32 ((cmp & v_as_u32_f32 (r1)) | (~cmp & v_as_u32_f32 (r0)));
+}
+
+VPCS_ATTR
+v_f32_t
+V_NAME(exp2f_1u) (v_f32_t x)
+{
+ v_f32_t n, r, scale, poly, absn;
+ v_u32_t cmp, e;
+
+ /* exp2(x) = 2^n * poly(r), with poly(r) in [1/sqrt(2),sqrt(2)]
+ x = n + r, with r in [-1/2, 1/2]. */
+#if 0
+ v_f32_t z;
+ z = x + Shift;
+ n = z - Shift;
+ r = x - n;
+ e = v_as_u32_f32 (z) << 23;
+#else
+ n = v_round_f32 (x);
+ r = x - n;
+ e = v_as_u32_s32 (v_round_s32 (x)) << 23;
+#endif
+ scale = v_as_f32_u32 (e + v_u32 (0x3f800000));
+ absn = v_abs_f32 (n);
+ cmp = v_cond_u32 (absn > v_f32 (126.0f));
+ poly = v_fma_f32 (C0, r, C1);
+ poly = v_fma_f32 (poly, r, C2);
+ poly = v_fma_f32 (poly, r, C3);
+ poly = v_fma_f32 (poly, r, C4);
+ poly = v_fma_f32 (poly, r, C5);
+ poly = v_fma_f32 (poly, r, v_f32 (1.0f));
+ if (unlikely (v_any_u32 (cmp)))
+ return specialcase (poly, n, e, absn);
+ return scale * poly;
+}
+#endif
diff --git a/math/v_exp_data.c b/math/v_exp_data.c
new file mode 100644
index 000000000000..365355497e95
--- /dev/null
+++ b/math/v_exp_data.c
@@ -0,0 +1,403 @@
+/*
+ * Lookup table for double-precision e^x vector function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "v_exp.h"
+#if WANT_VMATH
+
+#define N (1 << V_EXP_TABLE_BITS)
+
+/* 2^(j/N), j=0..N. */
+const u64_t __v_exp_data[] = {
+#if N == 128
+0x3ff0000000000000,
+0x3feff63da9fb3335,
+0x3fefec9a3e778061,
+0x3fefe315e86e7f85,
+0x3fefd9b0d3158574,
+0x3fefd06b29ddf6de,
+0x3fefc74518759bc8,
+0x3fefbe3ecac6f383,
+0x3fefb5586cf9890f,
+0x3fefac922b7247f7,
+0x3fefa3ec32d3d1a2,
+0x3fef9b66affed31b,
+0x3fef9301d0125b51,
+0x3fef8abdc06c31cc,
+0x3fef829aaea92de0,
+0x3fef7a98c8a58e51,
+0x3fef72b83c7d517b,
+0x3fef6af9388c8dea,
+0x3fef635beb6fcb75,
+0x3fef5be084045cd4,
+0x3fef54873168b9aa,
+0x3fef4d5022fcd91d,
+0x3fef463b88628cd6,
+0x3fef3f49917ddc96,
+0x3fef387a6e756238,
+0x3fef31ce4fb2a63f,
+0x3fef2b4565e27cdd,
+0x3fef24dfe1f56381,
+0x3fef1e9df51fdee1,
+0x3fef187fd0dad990,
+0x3fef1285a6e4030b,
+0x3fef0cafa93e2f56,
+0x3fef06fe0a31b715,
+0x3fef0170fc4cd831,
+0x3feefc08b26416ff,
+0x3feef6c55f929ff1,
+0x3feef1a7373aa9cb,
+0x3feeecae6d05d866,
+0x3feee7db34e59ff7,
+0x3feee32dc313a8e5,
+0x3feedea64c123422,
+0x3feeda4504ac801c,
+0x3feed60a21f72e2a,
+0x3feed1f5d950a897,
+0x3feece086061892d,
+0x3feeca41ed1d0057,
+0x3feec6a2b5c13cd0,
+0x3feec32af0d7d3de,
+0x3feebfdad5362a27,
+0x3feebcb299fddd0d,
+0x3feeb9b2769d2ca7,
+0x3feeb6daa2cf6642,
+0x3feeb42b569d4f82,
+0x3feeb1a4ca5d920f,
+0x3feeaf4736b527da,
+0x3feead12d497c7fd,
+0x3feeab07dd485429,
+0x3feea9268a5946b7,
+0x3feea76f15ad2148,
+0x3feea5e1b976dc09,
+0x3feea47eb03a5585,
+0x3feea34634ccc320,
+0x3feea23882552225,
+0x3feea155d44ca973,
+0x3feea09e667f3bcd,
+0x3feea012750bdabf,
+0x3fee9fb23c651a2f,
+0x3fee9f7df9519484,
+0x3fee9f75e8ec5f74,
+0x3fee9f9a48a58174,
+0x3fee9feb564267c9,
+0x3feea0694fde5d3f,
+0x3feea11473eb0187,
+0x3feea1ed0130c132,
+0x3feea2f336cf4e62,
+0x3feea427543e1a12,
+0x3feea589994cce13,
+0x3feea71a4623c7ad,
+0x3feea8d99b4492ed,
+0x3feeaac7d98a6699,
+0x3feeace5422aa0db,
+0x3feeaf3216b5448c,
+0x3feeb1ae99157736,
+0x3feeb45b0b91ffc6,
+0x3feeb737b0cdc5e5,
+0x3feeba44cbc8520f,
+0x3feebd829fde4e50,
+0x3feec0f170ca07ba,
+0x3feec49182a3f090,
+0x3feec86319e32323,
+0x3feecc667b5de565,
+0x3feed09bec4a2d33,
+0x3feed503b23e255d,
+0x3feed99e1330b358,
+0x3feede6b5579fdbf,
+0x3feee36bbfd3f37a,
+0x3feee89f995ad3ad,
+0x3feeee07298db666,
+0x3feef3a2b84f15fb,
+0x3feef9728de5593a,
+0x3feeff76f2fb5e47,
+0x3fef05b030a1064a,
+0x3fef0c1e904bc1d2,
+0x3fef12c25bd71e09,
+0x3fef199bdd85529c,
+0x3fef20ab5fffd07a,
+0x3fef27f12e57d14b,
+0x3fef2f6d9406e7b5,
+0x3fef3720dcef9069,
+0x3fef3f0b555dc3fa,
+0x3fef472d4a07897c,
+0x3fef4f87080d89f2,
+0x3fef5818dcfba487,
+0x3fef60e316c98398,
+0x3fef69e603db3285,
+0x3fef7321f301b460,
+0x3fef7c97337b9b5f,
+0x3fef864614f5a129,
+0x3fef902ee78b3ff6,
+0x3fef9a51fbc74c83,
+0x3fefa4afa2a490da,
+0x3fefaf482d8e67f1,
+0x3fefba1bee615a27,
+0x3fefc52b376bba97,
+0x3fefd0765b6e4540,
+0x3fefdbfdad9cbe14,
+0x3fefe7c1819e90d8,
+0x3feff3c22b8f71f1,
+#elif N == 256
+0x3ff0000000000000,
+0x3feffb1afa5abcbf,
+0x3feff63da9fb3335,
+0x3feff168143b0281,
+0x3fefec9a3e778061,
+0x3fefe7d42e11bbcc,
+0x3fefe315e86e7f85,
+0x3fefde5f72f654b1,
+0x3fefd9b0d3158574,
+0x3fefd50a0e3c1f89,
+0x3fefd06b29ddf6de,
+0x3fefcbd42b72a836,
+0x3fefc74518759bc8,
+0x3fefc2bdf66607e0,
+0x3fefbe3ecac6f383,
+0x3fefb9c79b1f3919,
+0x3fefb5586cf9890f,
+0x3fefb0f145e46c85,
+0x3fefac922b7247f7,
+0x3fefa83b23395dec,
+0x3fefa3ec32d3d1a2,
+0x3fef9fa55fdfa9c5,
+0x3fef9b66affed31b,
+0x3fef973028d7233e,
+0x3fef9301d0125b51,
+0x3fef8edbab5e2ab6,
+0x3fef8abdc06c31cc,
+0x3fef86a814f204ab,
+0x3fef829aaea92de0,
+0x3fef7e95934f312e,
+0x3fef7a98c8a58e51,
+0x3fef76a45471c3c2,
+0x3fef72b83c7d517b,
+0x3fef6ed48695bbc0,
+0x3fef6af9388c8dea,
+0x3fef672658375d2f,
+0x3fef635beb6fcb75,
+0x3fef5f99f8138a1c,
+0x3fef5be084045cd4,
+0x3fef582f95281c6b,
+0x3fef54873168b9aa,
+0x3fef50e75eb44027,
+0x3fef4d5022fcd91d,
+0x3fef49c18438ce4d,
+0x3fef463b88628cd6,
+0x3fef42be3578a819,
+0x3fef3f49917ddc96,
+0x3fef3bdda27912d1,
+0x3fef387a6e756238,
+0x3fef351ffb82140a,
+0x3fef31ce4fb2a63f,
+0x3fef2e85711ece75,
+0x3fef2b4565e27cdd,
+0x3fef280e341ddf29,
+0x3fef24dfe1f56381,
+0x3fef21ba7591bb70,
+0x3fef1e9df51fdee1,
+0x3fef1b8a66d10f13,
+0x3fef187fd0dad990,
+0x3fef157e39771b2f,
+0x3fef1285a6e4030b,
+0x3fef0f961f641589,
+0x3fef0cafa93e2f56,
+0x3fef09d24abd886b,
+0x3fef06fe0a31b715,
+0x3fef0432edeeb2fd,
+0x3fef0170fc4cd831,
+0x3feefeb83ba8ea32,
+0x3feefc08b26416ff,
+0x3feef96266e3fa2d,
+0x3feef6c55f929ff1,
+0x3feef431a2de883b,
+0x3feef1a7373aa9cb,
+0x3feeef26231e754a,
+0x3feeecae6d05d866,
+0x3feeea401b7140ef,
+0x3feee7db34e59ff7,
+0x3feee57fbfec6cf4,
+0x3feee32dc313a8e5,
+0x3feee0e544ede173,
+0x3feedea64c123422,
+0x3feedc70df1c5175,
+0x3feeda4504ac801c,
+0x3feed822c367a024,
+0x3feed60a21f72e2a,
+0x3feed3fb2709468a,
+0x3feed1f5d950a897,
+0x3feecffa3f84b9d4,
+0x3feece086061892d,
+0x3feecc2042a7d232,
+0x3feeca41ed1d0057,
+0x3feec86d668b3237,
+0x3feec6a2b5c13cd0,
+0x3feec4e1e192aed2,
+0x3feec32af0d7d3de,
+0x3feec17dea6db7d7,
+0x3feebfdad5362a27,
+0x3feebe41b817c114,
+0x3feebcb299fddd0d,
+0x3feebb2d81d8abff,
+0x3feeb9b2769d2ca7,
+0x3feeb8417f4531ee,
+0x3feeb6daa2cf6642,
+0x3feeb57de83f4eef,
+0x3feeb42b569d4f82,
+0x3feeb2e2f4f6ad27,
+0x3feeb1a4ca5d920f,
+0x3feeb070dde910d2,
+0x3feeaf4736b527da,
+0x3feeae27dbe2c4cf,
+0x3feead12d497c7fd,
+0x3feeac0827ff07cc,
+0x3feeab07dd485429,
+0x3feeaa11fba87a03,
+0x3feea9268a5946b7,
+0x3feea84590998b93,
+0x3feea76f15ad2148,
+0x3feea6a320dceb71,
+0x3feea5e1b976dc09,
+0x3feea52ae6cdf6f4,
+0x3feea47eb03a5585,
+0x3feea3dd1d1929fd,
+0x3feea34634ccc320,
+0x3feea2b9febc8fb7,
+0x3feea23882552225,
+0x3feea1c1c70833f6,
+0x3feea155d44ca973,
+0x3feea0f4b19e9538,
+0x3feea09e667f3bcd,
+0x3feea052fa75173e,
+0x3feea012750bdabf,
+0x3fee9fdcddd47645,
+0x3fee9fb23c651a2f,
+0x3fee9f9298593ae5,
+0x3fee9f7df9519484,
+0x3fee9f7466f42e87,
+0x3fee9f75e8ec5f74,
+0x3fee9f8286ead08a,
+0x3fee9f9a48a58174,
+0x3fee9fbd35d7cbfd,
+0x3fee9feb564267c9,
+0x3feea024b1ab6e09,
+0x3feea0694fde5d3f,
+0x3feea0b938ac1cf6,
+0x3feea11473eb0187,
+0x3feea17b0976cfdb,
+0x3feea1ed0130c132,
+0x3feea26a62ff86f0,
+0x3feea2f336cf4e62,
+0x3feea3878491c491,
+0x3feea427543e1a12,
+0x3feea4d2add106d9,
+0x3feea589994cce13,
+0x3feea64c1eb941f7,
+0x3feea71a4623c7ad,
+0x3feea7f4179f5b21,
+0x3feea8d99b4492ed,
+0x3feea9cad931a436,
+0x3feeaac7d98a6699,
+0x3feeabd0a478580f,
+0x3feeace5422aa0db,
+0x3feeae05bad61778,
+0x3feeaf3216b5448c,
+0x3feeb06a5e0866d9,
+0x3feeb1ae99157736,
+0x3feeb2fed0282c8a,
+0x3feeb45b0b91ffc6,
+0x3feeb5c353aa2fe2,
+0x3feeb737b0cdc5e5,
+0x3feeb8b82b5f98e5,
+0x3feeba44cbc8520f,
+0x3feebbdd9a7670b3,
+0x3feebd829fde4e50,
+0x3feebf33e47a22a2,
+0x3feec0f170ca07ba,
+0x3feec2bb4d53fe0d,
+0x3feec49182a3f090,
+0x3feec674194bb8d5,
+0x3feec86319e32323,
+0x3feeca5e8d07f29e,
+0x3feecc667b5de565,
+0x3feece7aed8eb8bb,
+0x3feed09bec4a2d33,
+0x3feed2c980460ad8,
+0x3feed503b23e255d,
+0x3feed74a8af46052,
+0x3feed99e1330b358,
+0x3feedbfe53c12e59,
+0x3feede6b5579fdbf,
+0x3feee0e521356eba,
+0x3feee36bbfd3f37a,
+0x3feee5ff3a3c2774,
+0x3feee89f995ad3ad,
+0x3feeeb4ce622f2ff,
+0x3feeee07298db666,
+0x3feef0ce6c9a8952,
+0x3feef3a2b84f15fb,
+0x3feef68415b749b1,
+0x3feef9728de5593a,
+0x3feefc6e29f1c52a,
+0x3feeff76f2fb5e47,
+0x3fef028cf22749e4,
+0x3fef05b030a1064a,
+0x3fef08e0b79a6f1f,
+0x3fef0c1e904bc1d2,
+0x3fef0f69c3f3a207,
+0x3fef12c25bd71e09,
+0x3fef16286141b33d,
+0x3fef199bdd85529c,
+0x3fef1d1cd9fa652c,
+0x3fef20ab5fffd07a,
+0x3fef244778fafb22,
+0x3fef27f12e57d14b,
+0x3fef2ba88988c933,
+0x3fef2f6d9406e7b5,
+0x3fef33405751c4db,
+0x3fef3720dcef9069,
+0x3fef3b0f2e6d1675,
+0x3fef3f0b555dc3fa,
+0x3fef43155b5bab74,
+0x3fef472d4a07897c,
+0x3fef4b532b08c968,
+0x3fef4f87080d89f2,
+0x3fef53c8eacaa1d6,
+0x3fef5818dcfba487,
+0x3fef5c76e862e6d3,
+0x3fef60e316c98398,
+0x3fef655d71ff6075,
+0x3fef69e603db3285,
+0x3fef6e7cd63a8315,
+0x3fef7321f301b460,
+0x3fef77d5641c0658,
+0x3fef7c97337b9b5f,
+0x3fef81676b197d17,
+0x3fef864614f5a129,
+0x3fef8b333b16ee12,
+0x3fef902ee78b3ff6,
+0x3fef953924676d76,
+0x3fef9a51fbc74c83,
+0x3fef9f7977cdb740,
+0x3fefa4afa2a490da,
+0x3fefa9f4867cca6e,
+0x3fefaf482d8e67f1,
+0x3fefb4aaa2188510,
+0x3fefba1bee615a27,
+0x3fefbf9c1cb6412a,
+0x3fefc52b376bba97,
+0x3fefcac948dd7274,
+0x3fefd0765b6e4540,
+0x3fefd632798844f8,
+0x3fefdbfdad9cbe14,
+0x3fefe1d802243c89,
+0x3fefe7c1819e90d8,
+0x3fefedba3692d514,
+0x3feff3c22b8f71f1,
+0x3feff9d96b2a23d9,
+#endif
+};
+#endif
diff --git a/math/v_expf.c b/math/v_expf.c
new file mode 100644
index 000000000000..d403e00534f0
--- /dev/null
+++ b/math/v_expf.c
@@ -0,0 +1,83 @@
+/*
+ * Single-precision vector e^x function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+
+static const float Poly[] = {
+ /* maxerr: 1.45358 +0.5 ulp. */
+ 0x1.0e4020p-7f,
+ 0x1.573e2ep-5f,
+ 0x1.555e66p-3f,
+ 0x1.fffdb6p-2f,
+ 0x1.ffffecp-1f,
+};
+#define C0 v_f32 (Poly[0])
+#define C1 v_f32 (Poly[1])
+#define C2 v_f32 (Poly[2])
+#define C3 v_f32 (Poly[3])
+#define C4 v_f32 (Poly[4])
+
+#define Shift v_f32 (0x1.8p23f)
+#define InvLn2 v_f32 (0x1.715476p+0f)
+#define Ln2hi v_f32 (0x1.62e4p-1f)
+#define Ln2lo v_f32 (0x1.7f7d1cp-20f)
+
+VPCS_ATTR
+static v_f32_t
+specialcase (v_f32_t poly, v_f32_t n, v_u32_t e, v_f32_t absn, v_u32_t cmp1, v_f32_t scale)
+{
+ /* 2^n may overflow, break it up into s1*s2. */
+ v_u32_t b = v_cond_u32 (n <= v_f32 (0.0f)) & v_u32 (0x82000000);
+ v_f32_t s1 = v_as_f32_u32 (v_u32 (0x7f000000) + b);
+ v_f32_t s2 = v_as_f32_u32 (e - b);
+ v_u32_t cmp2 = v_cond_u32 (absn > v_f32 (192.0f));
+ v_u32_t r2 = v_as_u32_f32 (s1 * s1);
+ v_u32_t r1 = v_as_u32_f32 (v_fma_f32 (poly, s2, s2) * s1);
+ /* Similar to r1 but avoids double rounding in the subnormal range. */
+ v_u32_t r0 = v_as_u32_f32 (v_fma_f32 (poly, scale, scale));
+ return v_as_f32_u32 ((cmp2 & r2) | (~cmp2 & cmp1 & r1) | (~cmp1 & r0));
+}
+
+VPCS_ATTR
+v_f32_t
+V_NAME(expf) (v_f32_t x)
+{
+ v_f32_t n, r, r2, scale, p, q, poly, absn, z;
+ v_u32_t cmp, e;
+
+ /* exp(x) = 2^n (1 + poly(r)), with 1 + poly(r) in [1/sqrt(2),sqrt(2)]
+ x = ln2*n + r, with r in [-ln2/2, ln2/2]. */
+#if 1
+ z = v_fma_f32 (x, InvLn2, Shift);
+ n = z - Shift;
+ r = v_fma_f32 (n, -Ln2hi, x);
+ r = v_fma_f32 (n, -Ln2lo, r);
+ e = v_as_u32_f32 (z) << 23;
+#else
+ z = x * InvLn2;
+ n = v_round_f32 (z);
+ r = v_fma_f32 (n, -Ln2hi, x);
+ r = v_fma_f32 (n, -Ln2lo, r);
+ e = v_as_u32_s32 (v_round_s32 (z)) << 23;
+#endif
+ scale = v_as_f32_u32 (e + v_u32 (0x3f800000));
+ absn = v_abs_f32 (n);
+ cmp = v_cond_u32 (absn > v_f32 (126.0f));
+ r2 = r * r;
+ p = v_fma_f32 (C0, r, C1);
+ q = v_fma_f32 (C2, r, C3);
+ q = v_fma_f32 (p, r2, q);
+ p = C4 * r;
+ poly = v_fma_f32 (q, r2, p);
+ if (unlikely (v_any_u32 (cmp)))
+ return specialcase (poly, n, e, absn, cmp, scale);
+ return v_fma_f32 (poly, scale, scale);
+}
+VPCS_ALIAS
+#endif
diff --git a/math/v_expf_1u.c b/math/v_expf_1u.c
new file mode 100644
index 000000000000..023bd248c9ac
--- /dev/null
+++ b/math/v_expf_1u.c
@@ -0,0 +1,80 @@
+/*
+ * Single-precision vector e^x function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+
+static const float Poly[] = {
+ /* maxerr: 0.36565 +0.5 ulp. */
+ 0x1.6a6000p-10f,
+ 0x1.12718ep-7f,
+ 0x1.555af0p-5f,
+ 0x1.555430p-3f,
+ 0x1.fffff4p-2f,
+};
+#define C0 v_f32 (Poly[0])
+#define C1 v_f32 (Poly[1])
+#define C2 v_f32 (Poly[2])
+#define C3 v_f32 (Poly[3])
+#define C4 v_f32 (Poly[4])
+
+#define Shift v_f32 (0x1.8p23f)
+#define InvLn2 v_f32 (0x1.715476p+0f)
+#define Ln2hi v_f32 (0x1.62e4p-1f)
+#define Ln2lo v_f32 (0x1.7f7d1cp-20f)
+
+VPCS_ATTR
+static v_f32_t
+specialcase (v_f32_t poly, v_f32_t n, v_u32_t e, v_f32_t absn)
+{
+ /* 2^n may overflow, break it up into s1*s2. */
+ v_u32_t b = v_cond_u32 (n <= v_f32 (0.0f)) & v_u32 (0x83000000);
+ v_f32_t s1 = v_as_f32_u32 (v_u32 (0x7f000000) + b);
+ v_f32_t s2 = v_as_f32_u32 (e - b);
+ v_u32_t cmp = v_cond_u32 (absn > v_f32 (192.0f));
+ v_f32_t r1 = s1 * s1;
+ v_f32_t r0 = poly * s1 * s2;
+ return v_as_f32_u32 ((cmp & v_as_u32_f32 (r1)) | (~cmp & v_as_u32_f32 (r0)));
+}
+
+VPCS_ATTR
+v_f32_t
+V_NAME(expf_1u) (v_f32_t x)
+{
+ v_f32_t n, r, scale, poly, absn, z;
+ v_u32_t cmp, e;
+
+ /* exp(x) = 2^n * poly(r), with poly(r) in [1/sqrt(2),sqrt(2)]
+ x = ln2*n + r, with r in [-ln2/2, ln2/2]. */
+#if 1
+ z = v_fma_f32 (x, InvLn2, Shift);
+ n = z - Shift;
+ r = v_fma_f32 (n, -Ln2hi, x);
+ r = v_fma_f32 (n, -Ln2lo, r);
+ e = v_as_u32_f32 (z) << 23;
+#else
+ z = x * InvLn2;
+ n = v_round_f32 (z);
+ r = v_fma_f32 (n, -Ln2hi, x);
+ r = v_fma_f32 (n, -Ln2lo, r);
+ e = v_as_u32_s32 (v_round_s32 (z)) << 23;
+#endif
+ scale = v_as_f32_u32 (e + v_u32 (0x3f800000));
+ absn = v_abs_f32 (n);
+ cmp = v_cond_u32 (absn > v_f32 (126.0f));
+ poly = v_fma_f32 (C0, r, C1);
+ poly = v_fma_f32 (poly, r, C2);
+ poly = v_fma_f32 (poly, r, C3);
+ poly = v_fma_f32 (poly, r, C4);
+ poly = v_fma_f32 (poly, r, v_f32 (1.0f));
+ poly = v_fma_f32 (poly, r, v_f32 (1.0f));
+ if (unlikely (v_any_u32 (cmp)))
+ return specialcase (poly, n, e, absn);
+ return scale * poly;
+}
+#endif
diff --git a/math/v_log.c b/math/v_log.c
new file mode 100644
index 000000000000..d84c740d2b6b
--- /dev/null
+++ b/math/v_log.c
@@ -0,0 +1,104 @@
+/*
+ * Double-precision vector log(x) function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#include "v_log.h"
+#if V_SUPPORTED
+
+/* Worst-case error: 1.17 + 0.5 ulp. */
+
+static const f64_t Poly[] = {
+ /* rel error: 0x1.6272e588p-56 in [ -0x1.fc1p-9 0x1.009p-8 ]. */
+ -0x1.ffffffffffff7p-2,
+ 0x1.55555555170d4p-2,
+ -0x1.0000000399c27p-2,
+ 0x1.999b2e90e94cap-3,
+ -0x1.554e550bd501ep-3,
+};
+
+#define A0 v_f64 (Poly[0])
+#define A1 v_f64 (Poly[1])
+#define A2 v_f64 (Poly[2])
+#define A3 v_f64 (Poly[3])
+#define A4 v_f64 (Poly[4])
+#define Ln2 v_f64 (0x1.62e42fefa39efp-1)
+#define N (1 << V_LOG_TABLE_BITS)
+#define OFF v_u64 (0x3fe6900900000000)
+
+struct entry
+{
+ v_f64_t invc;
+ v_f64_t logc;
+};
+
+static inline struct entry
+lookup (v_u64_t i)
+{
+ struct entry e;
+#ifdef SCALAR
+ e.invc = __v_log_data[i].invc;
+ e.logc = __v_log_data[i].logc;
+#else
+ e.invc[0] = __v_log_data[i[0]].invc;
+ e.logc[0] = __v_log_data[i[0]].logc;
+ e.invc[1] = __v_log_data[i[1]].invc;
+ e.logc[1] = __v_log_data[i[1]].logc;
+#endif
+ return e;
+}
+
+VPCS_ATTR
+__attribute__ ((noinline)) static v_f64_t
+specialcase (v_f64_t x, v_f64_t y, v_u64_t cmp)
+{
+ return v_call_f64 (log, x, y, cmp);
+}
+
+VPCS_ATTR
+v_f64_t
+V_NAME(log) (v_f64_t x)
+{
+ v_f64_t z, r, r2, p, y, kd, hi;
+ v_u64_t ix, iz, tmp, top, i, cmp;
+ v_s64_t k;
+ struct entry e;
+
+ ix = v_as_u64_f64 (x);
+ top = ix >> 48;
+ cmp = v_cond_u64 (top - v_u64 (0x0010) >= v_u64 (0x7ff0 - 0x0010));
+
+ /* x = 2^k z; where z is in range [OFF,2*OFF) and exact.
+ The range is split into N subintervals.
+ The ith subinterval contains z and c is near its center. */
+ tmp = ix - OFF;
+ i = (tmp >> (52 - V_LOG_TABLE_BITS)) % N;
+ k = v_as_s64_u64 (tmp) >> 52; /* arithmetic shift */
+ iz = ix - (tmp & v_u64 (0xfffULL << 52));
+ z = v_as_f64_u64 (iz);
+ e = lookup (i);
+
+ /* log(x) = log1p(z/c-1) + log(c) + k*Ln2. */
+ r = v_fma_f64 (z, e.invc, v_f64 (-1.0));
+ kd = v_to_f64_s64 (k);
+
+ /* hi = r + log(c) + k*Ln2. */
+ hi = v_fma_f64 (kd, Ln2, e.logc + r);
+ /* y = r2*(A0 + r*A1 + r2*(A2 + r*A3 + r2*A4)) + hi. */
+ r2 = r * r;
+ y = v_fma_f64 (A3, r, A2);
+ p = v_fma_f64 (A1, r, A0);
+ y = v_fma_f64 (A4, r2, y);
+ y = v_fma_f64 (y, r2, p);
+ y = v_fma_f64 (y, r2, hi);
+
+ if (unlikely (v_any_u64 (cmp)))
+ return specialcase (x, y, cmp);
+ return y;
+}
+VPCS_ALIAS
+#endif
diff --git a/math/v_log.h b/math/v_log.h
new file mode 100644
index 000000000000..bcc2fa6fa930
--- /dev/null
+++ b/math/v_log.h
@@ -0,0 +1,18 @@
+/*
+ * Declarations for double-precision log(x) vector function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "v_math.h"
+#if WANT_VMATH
+
+#define V_LOG_TABLE_BITS 7
+
+extern const struct v_log_data
+{
+ f64_t invc;
+ f64_t logc;
+} __v_log_data[1 << V_LOG_TABLE_BITS] HIDDEN;
+#endif
diff --git a/math/v_log_data.c b/math/v_log_data.c
new file mode 100644
index 000000000000..97ee5b09c6a9
--- /dev/null
+++ b/math/v_log_data.c
@@ -0,0 +1,158 @@
+/*
+ * Lookup table for double-precision log(x) vector function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "v_log.h"
+#if WANT_VMATH
+
+#define N (1 << V_LOG_TABLE_BITS)
+
+/* Algorithm:
+
+ x = 2^k z
+ log(x) = k ln2 + log(c) + poly(z/c - 1)
+
+where z is in [a;2a) which is split into N subintervals (a=0x1.69009p-1,N=128)
+and log(c) and 1/c for the ith subinterval comes from a lookup table:
+
+ tab[i].invc = 1/c
+ tab[i].logc = (double)log(c)
+
+where c is near the center of the subinterval and is chosen by trying several
+floating point invc candidates around 1/center and selecting one for which
+the error in (double)log(c) is minimized (< 0x1p-74), except the subinterval
+that contains 1 and the previous one got tweaked to avoid cancellation. */
+const struct v_log_data __v_log_data[N] = {
+{0x1.6a133d0dec120p+0, -0x1.62fe995eb963ap-2},
+{0x1.6815f2f3e42edp+0, -0x1.5d5a48dad6b67p-2},
+{0x1.661e39be1ac9ep+0, -0x1.57bde257d2769p-2},
+{0x1.642bfa30ac371p+0, -0x1.52294fbf2af55p-2},
+{0x1.623f1d916f323p+0, -0x1.4c9c7b598aa38p-2},
+{0x1.60578da220f65p+0, -0x1.47174fc5ff560p-2},
+{0x1.5e75349dea571p+0, -0x1.4199b7fa7b5cap-2},
+{0x1.5c97fd387a75ap+0, -0x1.3c239f48cfb99p-2},
+{0x1.5abfd2981f200p+0, -0x1.36b4f154d2aebp-2},
+{0x1.58eca051dc99cp+0, -0x1.314d9a0ff32fbp-2},
+{0x1.571e526d9df12p+0, -0x1.2bed85cca3cffp-2},
+{0x1.5554d555b3fcbp+0, -0x1.2694a11421af9p-2},
+{0x1.539015e2a20cdp+0, -0x1.2142d8d014fb2p-2},
+{0x1.51d0014ee0164p+0, -0x1.1bf81a2c77776p-2},
+{0x1.50148538cd9eep+0, -0x1.16b452a39c6a4p-2},
+{0x1.4e5d8f9f698a1p+0, -0x1.11776ffa6c67ep-2},
+{0x1.4cab0edca66bep+0, -0x1.0c416035020e0p-2},
+{0x1.4afcf1a9db874p+0, -0x1.071211aa10fdap-2},
+{0x1.495327136e16fp+0, -0x1.01e972e293b1bp-2},
+{0x1.47ad9e84af28fp+0, -0x1.f98ee587fd434p-3},
+{0x1.460c47b39ae15p+0, -0x1.ef5800ad716fbp-3},
+{0x1.446f12b278001p+0, -0x1.e52e160484698p-3},
+{0x1.42d5efdd720ecp+0, -0x1.db1104b19352ep-3},
+{0x1.4140cfe001a0fp+0, -0x1.d100ac59e0bd6p-3},
+{0x1.3fafa3b421f69p+0, -0x1.c6fced287c3bdp-3},
+{0x1.3e225c9c8ece5p+0, -0x1.bd05a7b317c29p-3},
+{0x1.3c98ec29a211ap+0, -0x1.b31abd229164fp-3},
+{0x1.3b13442a413fep+0, -0x1.a93c0edadb0a3p-3},
+{0x1.399156baa3c54p+0, -0x1.9f697ee30d7ddp-3},
+{0x1.38131639b4cdbp+0, -0x1.95a2efa9aa40ap-3},
+{0x1.36987540fbf53p+0, -0x1.8be843d796044p-3},
+{0x1.352166b648f61p+0, -0x1.82395ecc477edp-3},
+{0x1.33adddb3eb575p+0, -0x1.7896240966422p-3},
+{0x1.323dcd99fc1d3p+0, -0x1.6efe77aca8c55p-3},
+{0x1.30d129fefc7d2p+0, -0x1.65723e117ec5cp-3},
+{0x1.2f67e6b72fe7dp+0, -0x1.5bf15c0955706p-3},
+{0x1.2e01f7cf8b187p+0, -0x1.527bb6c111da1p-3},
+{0x1.2c9f518ddc86ep+0, -0x1.491133c939f8fp-3},
+{0x1.2b3fe86e5f413p+0, -0x1.3fb1b90c7fc58p-3},
+{0x1.29e3b1211b25cp+0, -0x1.365d2cc485f8dp-3},
+{0x1.288aa08b373cfp+0, -0x1.2d13758970de7p-3},
+{0x1.2734abcaa8467p+0, -0x1.23d47a721fd47p-3},
+{0x1.25e1c82459b81p+0, -0x1.1aa0229f25ec2p-3},
+{0x1.2491eb1ad59c5p+0, -0x1.117655ddebc3bp-3},
+{0x1.23450a54048b5p+0, -0x1.0856fbf83ab6bp-3},
+{0x1.21fb1bb09e578p+0, -0x1.fe83fabbaa106p-4},
+{0x1.20b415346d8f7p+0, -0x1.ec6e8507a56cdp-4},
+{0x1.1f6fed179a1acp+0, -0x1.da6d68c7cc2eap-4},
+{0x1.1e2e99b93c7b3p+0, -0x1.c88078462be0cp-4},
+{0x1.1cf011a7a882ap+0, -0x1.b6a786a423565p-4},
+{0x1.1bb44b97dba5ap+0, -0x1.a4e2676ac7f85p-4},
+{0x1.1a7b3e66cdd4fp+0, -0x1.9330eea777e76p-4},
+{0x1.1944e11dc56cdp+0, -0x1.8192f134d5ad9p-4},
+{0x1.18112aebb1a6ep+0, -0x1.70084464f0538p-4},
+{0x1.16e013231b7e9p+0, -0x1.5e90bdec5cb1fp-4},
+{0x1.15b1913f156cfp+0, -0x1.4d2c3433c5536p-4},
+{0x1.14859cdedde13p+0, -0x1.3bda7e219879ap-4},
+{0x1.135c2dc68cfa4p+0, -0x1.2a9b732d27194p-4},
+{0x1.12353bdb01684p+0, -0x1.196eeb2b10807p-4},
+{0x1.1110bf25b85b4p+0, -0x1.0854be8ef8a7ep-4},
+{0x1.0feeafd2f8577p+0, -0x1.ee998cb277432p-5},
+{0x1.0ecf062c51c3bp+0, -0x1.ccadb79919fb9p-5},
+{0x1.0db1baa076c8bp+0, -0x1.aae5b1d8618b0p-5},
+{0x1.0c96c5bb3048ep+0, -0x1.89413015d7442p-5},
+{0x1.0b7e20263e070p+0, -0x1.67bfe7bf158dep-5},
+{0x1.0a67c2acd0ce3p+0, -0x1.46618f83941bep-5},
+{0x1.0953a6391e982p+0, -0x1.2525df1b0618ap-5},
+{0x1.0841c3caea380p+0, -0x1.040c8e2f77c6ap-5},
+{0x1.07321489b13eap+0, -0x1.c62aad39f738ap-6},
+{0x1.062491aee9904p+0, -0x1.847fe3bdead9cp-6},
+{0x1.05193497a7cc5p+0, -0x1.43183683400acp-6},
+{0x1.040ff6b5f5e9fp+0, -0x1.01f31c4e1d544p-6},
+{0x1.0308d19aa6127p+0, -0x1.82201d1e6b69ap-7},
+{0x1.0203beedb0c67p+0, -0x1.00dd0f3e1bfd6p-7},
+{0x1.010037d38bcc2p+0, -0x1.ff6fe1feb4e53p-9},
+{1.0, 0.0},
+{0x1.fc06d493cca10p-1, 0x1.fe91885ec8e20p-8},
+{0x1.f81e6ac3b918fp-1, 0x1.fc516f716296dp-7},
+{0x1.f44546ef18996p-1, 0x1.7bb4dd70a015bp-6},
+{0x1.f07b10382c84bp-1, 0x1.f84c99b34b674p-6},
+{0x1.ecbf7070e59d4p-1, 0x1.39f9ce4fb2d71p-5},
+{0x1.e91213f715939p-1, 0x1.7756c0fd22e78p-5},
+{0x1.e572a9a75f7b7p-1, 0x1.b43ee82db8f3ap-5},
+{0x1.e1e0e2c530207p-1, 0x1.f0b3fced60034p-5},
+{0x1.de5c72d8a8be3p-1, 0x1.165bd78d4878ep-4},
+{0x1.dae50fa5658ccp-1, 0x1.3425d2715ebe6p-4},
+{0x1.d77a71145a2dap-1, 0x1.51b8bd91b7915p-4},
+{0x1.d41c51166623ep-1, 0x1.6f15632c76a47p-4},
+{0x1.d0ca6ba0bb29fp-1, 0x1.8c3c88ecbe503p-4},
+{0x1.cd847e8e59681p-1, 0x1.a92ef077625dap-4},
+{0x1.ca4a499693e00p-1, 0x1.c5ed5745fa006p-4},
+{0x1.c71b8e399e821p-1, 0x1.e27876de1c993p-4},
+{0x1.c3f80faf19077p-1, 0x1.fed104fce4cdcp-4},
+{0x1.c0df92dc2b0ecp-1, 0x1.0d7bd9c17d78bp-3},
+{0x1.bdd1de3cbb542p-1, 0x1.1b76986cef97bp-3},
+{0x1.baceb9e1007a3p-1, 0x1.295913d24f750p-3},
+{0x1.b7d5ef543e55ep-1, 0x1.37239fa295d17p-3},
+{0x1.b4e749977d953p-1, 0x1.44d68dd78714bp-3},
+{0x1.b20295155478ep-1, 0x1.52722ebe5d780p-3},
+{0x1.af279f8e82be2p-1, 0x1.5ff6d12671f98p-3},
+{0x1.ac5638197fdf3p-1, 0x1.6d64c2389484bp-3},
+{0x1.a98e2f102e087p-1, 0x1.7abc4da40fddap-3},
+{0x1.a6cf5606d05c1p-1, 0x1.87fdbda1e8452p-3},
+{0x1.a4197fc04d746p-1, 0x1.95295b06a5f37p-3},
+{0x1.a16c80293dc01p-1, 0x1.a23f6d34abbc5p-3},
+{0x1.9ec82c4dc5bc9p-1, 0x1.af403a28e04f2p-3},
+{0x1.9c2c5a491f534p-1, 0x1.bc2c06a85721ap-3},
+{0x1.9998e1480b618p-1, 0x1.c903161240163p-3},
+{0x1.970d9977c6c2dp-1, 0x1.d5c5aa93287ebp-3},
+{0x1.948a5c023d212p-1, 0x1.e274051823fa9p-3},
+{0x1.920f0303d6809p-1, 0x1.ef0e656300c16p-3},
+{0x1.8f9b698a98b45p-1, 0x1.fb9509f05aa2ap-3},
+{0x1.8d2f6b81726f6p-1, 0x1.04041821f37afp-2},
+{0x1.8acae5bb55badp-1, 0x1.0a340a49b3029p-2},
+{0x1.886db5d9275b8p-1, 0x1.105a7918a126dp-2},
+{0x1.8617ba567c13cp-1, 0x1.1677819812b84p-2},
+{0x1.83c8d27487800p-1, 0x1.1c8b405b40c0ep-2},
+{0x1.8180de3c5dbe7p-1, 0x1.2295d16cfa6b1p-2},
+{0x1.7f3fbe71cdb71p-1, 0x1.28975066318a2p-2},
+{0x1.7d055498071c1p-1, 0x1.2e8fd855d86fcp-2},
+{0x1.7ad182e54f65ap-1, 0x1.347f83d605e59p-2},
+{0x1.78a42c3c90125p-1, 0x1.3a666d1244588p-2},
+{0x1.767d342f76944p-1, 0x1.4044adb6f8ec4p-2},
+{0x1.745c7ef26b00ap-1, 0x1.461a5f077558cp-2},
+{0x1.7241f15769d0fp-1, 0x1.4be799e20b9c8p-2},
+{0x1.702d70d396e41p-1, 0x1.51ac76a6b79dfp-2},
+{0x1.6e1ee3700cd11p-1, 0x1.57690d5744a45p-2},
+{0x1.6c162fc9cbe02p-1, 0x1.5d1d758e45217p-2},
+};
+#endif
diff --git a/math/v_logf.c b/math/v_logf.c
new file mode 100644
index 000000000000..7373192f03fa
--- /dev/null
+++ b/math/v_logf.c
@@ -0,0 +1,73 @@
+/*
+ * Single-precision vector log function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+
+static const float Poly[] = {
+ /* 3.34 ulp error */
+ -0x1.3e737cp-3f, 0x1.5a9aa2p-3f, -0x1.4f9934p-3f, 0x1.961348p-3f,
+ -0x1.00187cp-2f, 0x1.555d7cp-2f, -0x1.ffffc8p-2f,
+};
+#define P7 v_f32 (Poly[0])
+#define P6 v_f32 (Poly[1])
+#define P5 v_f32 (Poly[2])
+#define P4 v_f32 (Poly[3])
+#define P3 v_f32 (Poly[4])
+#define P2 v_f32 (Poly[5])
+#define P1 v_f32 (Poly[6])
+
+#define Ln2 v_f32 (0x1.62e43p-1f) /* 0x3f317218 */
+#define Min v_u32 (0x00800000)
+#define Max v_u32 (0x7f800000)
+#define Mask v_u32 (0x007fffff)
+#define Off v_u32 (0x3f2aaaab) /* 0.666667 */
+
+VPCS_ATTR
+__attribute__ ((noinline)) static v_f32_t
+specialcase (v_f32_t x, v_f32_t y, v_u32_t cmp)
+{
+ /* Fall back to scalar code. */
+ return v_call_f32 (logf, x, y, cmp);
+}
+
+VPCS_ATTR
+v_f32_t
+V_NAME(logf) (v_f32_t x)
+{
+ v_f32_t n, p, q, r, r2, y;
+ v_u32_t u, cmp;
+
+ u = v_as_u32_f32 (x);
+ cmp = v_cond_u32 (u - Min >= Max - Min);
+
+ /* x = 2^n * (1+r), where 2/3 < 1+r < 4/3 */
+ u -= Off;
+ n = v_to_f32_s32 (v_as_s32_u32 (u) >> 23); /* signextend */
+ u &= Mask;
+ u += Off;
+ r = v_as_f32_u32 (u) - v_f32 (1.0f);
+
+ /* y = log(1+r) + n*ln2. */
+ r2 = r * r;
+ /* n*ln2 + r + r2*(P1 + r*P2 + r2*(P3 + r*P4 + r2*(P5 + r*P6 + r2*P7))). */
+ p = v_fma_f32 (P6, r, P5);
+ q = v_fma_f32 (P4, r, P3);
+ y = v_fma_f32 (P2, r, P1);
+ p = v_fma_f32 (P7, r2, p);
+ q = v_fma_f32 (p, r2, q);
+ y = v_fma_f32 (q, r2, y);
+ p = v_fma_f32 (Ln2, n, r);
+ y = v_fma_f32 (y, r2, p);
+
+ if (unlikely (v_any_u32 (cmp)))
+ return specialcase (x, y, cmp);
+ return y;
+}
+VPCS_ALIAS
+#endif
diff --git a/math/v_math.h b/math/v_math.h
new file mode 100644
index 000000000000..f2cc4670bb9b
--- /dev/null
+++ b/math/v_math.h
@@ -0,0 +1,641 @@
+/*
+ * Vector math abstractions.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef _V_MATH_H
+#define _V_MATH_H
+
+#ifndef WANT_VMATH
+/* Enable the build of vector math code. */
+# define WANT_VMATH 1
+#endif
+#if WANT_VMATH
+
+/* The goal of this header is to allow vector and scalar
+ build of the same algorithm, the provided intrinsic
+ wrappers are also vector length agnostic so they can
+ be implemented for SVE too (or other simd architectures)
+ and then the code should work on those targets too. */
+
+#if SCALAR
+#define V_NAME(x) __s_##x
+#elif VPCS && __aarch64__
+#define V_NAME(x) __vn_##x
+#define VPCS_ATTR __attribute__ ((aarch64_vector_pcs))
+#else
+#define V_NAME(x) __v_##x
+#endif
+
+#ifndef VPCS_ATTR
+#define VPCS_ATTR
+#endif
+#ifndef VPCS_ALIAS
+#define VPCS_ALIAS
+#endif
+
+#include <stdint.h>
+#include "math_config.h"
+
+typedef float f32_t;
+typedef uint32_t u32_t;
+typedef int32_t s32_t;
+typedef double f64_t;
+typedef uint64_t u64_t;
+typedef int64_t s64_t;
+
+/* reinterpret as type1 from type2. */
+static inline u32_t
+as_u32_f32 (f32_t x)
+{
+ union { f32_t f; u32_t u; } r = {x};
+ return r.u;
+}
+static inline f32_t
+as_f32_u32 (u32_t x)
+{
+ union { u32_t u; f32_t f; } r = {x};
+ return r.f;
+}
+static inline s32_t
+as_s32_u32 (u32_t x)
+{
+ union { u32_t u; s32_t i; } r = {x};
+ return r.i;
+}
+static inline u32_t
+as_u32_s32 (s32_t x)
+{
+ union { s32_t i; u32_t u; } r = {x};
+ return r.u;
+}
+static inline u64_t
+as_u64_f64 (f64_t x)
+{
+ union { f64_t f; u64_t u; } r = {x};
+ return r.u;
+}
+static inline f64_t
+as_f64_u64 (u64_t x)
+{
+ union { u64_t u; f64_t f; } r = {x};
+ return r.f;
+}
+static inline s64_t
+as_s64_u64 (u64_t x)
+{
+ union { u64_t u; s64_t i; } r = {x};
+ return r.i;
+}
+static inline u64_t
+as_u64_s64 (s64_t x)
+{
+ union { s64_t i; u64_t u; } r = {x};
+ return r.u;
+}
+
+#if SCALAR
+#define V_SUPPORTED 1
+typedef f32_t v_f32_t;
+typedef u32_t v_u32_t;
+typedef s32_t v_s32_t;
+typedef f64_t v_f64_t;
+typedef u64_t v_u64_t;
+typedef s64_t v_s64_t;
+
+static inline int
+v_lanes32 (void)
+{
+ return 1;
+}
+
+static inline v_f32_t
+v_f32 (f32_t x)
+{
+ return x;
+}
+static inline v_u32_t
+v_u32 (u32_t x)
+{
+ return x;
+}
+static inline v_s32_t
+v_s32 (s32_t x)
+{
+ return x;
+}
+
+static inline f32_t
+v_get_f32 (v_f32_t x, int i)
+{
+ return x;
+}
+static inline u32_t
+v_get_u32 (v_u32_t x, int i)
+{
+ return x;
+}
+static inline s32_t
+v_get_s32 (v_s32_t x, int i)
+{
+ return x;
+}
+
+static inline void
+v_set_f32 (v_f32_t *x, int i, f32_t v)
+{
+ *x = v;
+}
+static inline void
+v_set_u32 (v_u32_t *x, int i, u32_t v)
+{
+ *x = v;
+}
+static inline void
+v_set_s32 (v_s32_t *x, int i, s32_t v)
+{
+ *x = v;
+}
+
+/* true if any elements of a v_cond result is non-zero. */
+static inline int
+v_any_u32 (v_u32_t x)
+{
+ return x != 0;
+}
+/* to wrap the result of relational operators. */
+static inline v_u32_t
+v_cond_u32 (v_u32_t x)
+{
+ return x ? -1 : 0;
+}
+static inline v_f32_t
+v_abs_f32 (v_f32_t x)
+{
+ return __builtin_fabsf (x);
+}
+static inline v_f32_t
+v_fma_f32 (v_f32_t x, v_f32_t y, v_f32_t z)
+{
+ return __builtin_fmaf (x, y, z);
+}
+static inline v_f32_t
+v_round_f32 (v_f32_t x)
+{
+ return __builtin_roundf (x);
+}
+static inline v_s32_t
+v_round_s32 (v_f32_t x)
+{
+ return __builtin_lroundf (x); /* relies on -fno-math-errno. */
+}
+/* convert to type1 from type2. */
+static inline v_f32_t
+v_to_f32_s32 (v_s32_t x)
+{
+ return x;
+}
+static inline v_f32_t
+v_to_f32_u32 (v_u32_t x)
+{
+ return x;
+}
+/* reinterpret as type1 from type2. */
+static inline v_u32_t
+v_as_u32_f32 (v_f32_t x)
+{
+ union { v_f32_t f; v_u32_t u; } r = {x};
+ return r.u;
+}
+static inline v_f32_t
+v_as_f32_u32 (v_u32_t x)
+{
+ union { v_u32_t u; v_f32_t f; } r = {x};
+ return r.f;
+}
+static inline v_s32_t
+v_as_s32_u32 (v_u32_t x)
+{
+ union { v_u32_t u; v_s32_t i; } r = {x};
+ return r.i;
+}
+static inline v_u32_t
+v_as_u32_s32 (v_s32_t x)
+{
+ union { v_s32_t i; v_u32_t u; } r = {x};
+ return r.u;
+}
+static inline v_f32_t
+v_lookup_f32 (const f32_t *tab, v_u32_t idx)
+{
+ return tab[idx];
+}
+static inline v_u32_t
+v_lookup_u32 (const u32_t *tab, v_u32_t idx)
+{
+ return tab[idx];
+}
+static inline v_f32_t
+v_call_f32 (f32_t (*f) (f32_t), v_f32_t x, v_f32_t y, v_u32_t p)
+{
+ return f (x);
+}
+static inline v_f32_t
+v_call2_f32 (f32_t (*f) (f32_t, f32_t), v_f32_t x1, v_f32_t x2, v_f32_t y,
+ v_u32_t p)
+{
+ return f (x1, x2);
+}
+
+static inline int
+v_lanes64 (void)
+{
+ return 1;
+}
+static inline v_f64_t
+v_f64 (f64_t x)
+{
+ return x;
+}
+static inline v_u64_t
+v_u64 (u64_t x)
+{
+ return x;
+}
+static inline v_s64_t
+v_s64 (s64_t x)
+{
+ return x;
+}
+static inline f64_t
+v_get_f64 (v_f64_t x, int i)
+{
+ return x;
+}
+static inline void
+v_set_f64 (v_f64_t *x, int i, f64_t v)
+{
+ *x = v;
+}
+/* true if any elements of a v_cond result is non-zero. */
+static inline int
+v_any_u64 (v_u64_t x)
+{
+ return x != 0;
+}
+/* to wrap the result of relational operators. */
+static inline v_u64_t
+v_cond_u64 (v_u64_t x)
+{
+ return x ? -1 : 0;
+}
+static inline v_f64_t
+v_abs_f64 (v_f64_t x)
+{
+ return __builtin_fabs (x);
+}
+static inline v_f64_t
+v_fma_f64 (v_f64_t x, v_f64_t y, v_f64_t z)
+{
+ return __builtin_fma (x, y, z);
+}
+static inline v_f64_t
+v_round_f64 (v_f64_t x)
+{
+ return __builtin_round (x);
+}
+static inline v_s64_t
+v_round_s64 (v_f64_t x)
+{
+ return __builtin_lround (x); /* relies on -fno-math-errno. */
+}
+/* convert to type1 from type2. */
+static inline v_f64_t
+v_to_f64_s64 (v_s64_t x)
+{
+ return x;
+}
+static inline v_f64_t
+v_to_f64_u64 (v_u64_t x)
+{
+ return x;
+}
+/* reinterpret as type1 from type2. */
+static inline v_u64_t
+v_as_u64_f64 (v_f64_t x)
+{
+ union { v_f64_t f; v_u64_t u; } r = {x};
+ return r.u;
+}
+static inline v_f64_t
+v_as_f64_u64 (v_u64_t x)
+{
+ union { v_u64_t u; v_f64_t f; } r = {x};
+ return r.f;
+}
+static inline v_s64_t
+v_as_s64_u64 (v_u64_t x)
+{
+ union { v_u64_t u; v_s64_t i; } r = {x};
+ return r.i;
+}
+static inline v_u64_t
+v_as_u64_s64 (v_s64_t x)
+{
+ union { v_s64_t i; v_u64_t u; } r = {x};
+ return r.u;
+}
+static inline v_f64_t
+v_lookup_f64 (const f64_t *tab, v_u64_t idx)
+{
+ return tab[idx];
+}
+static inline v_u64_t
+v_lookup_u64 (const u64_t *tab, v_u64_t idx)
+{
+ return tab[idx];
+}
+static inline v_f64_t
+v_call_f64 (f64_t (*f) (f64_t), v_f64_t x, v_f64_t y, v_u64_t p)
+{
+ return f (x);
+}
+
+#elif __aarch64__
+#define V_SUPPORTED 1
+#include <arm_neon.h>
+typedef float32x4_t v_f32_t;
+typedef uint32x4_t v_u32_t;
+typedef int32x4_t v_s32_t;
+typedef float64x2_t v_f64_t;
+typedef uint64x2_t v_u64_t;
+typedef int64x2_t v_s64_t;
+
+static inline int
+v_lanes32 (void)
+{
+ return 4;
+}
+
+static inline v_f32_t
+v_f32 (f32_t x)
+{
+ return (v_f32_t){x, x, x, x};
+}
+static inline v_u32_t
+v_u32 (u32_t x)
+{
+ return (v_u32_t){x, x, x, x};
+}
+static inline v_s32_t
+v_s32 (s32_t x)
+{
+ return (v_s32_t){x, x, x, x};
+}
+
+static inline f32_t
+v_get_f32 (v_f32_t x, int i)
+{
+ return x[i];
+}
+static inline u32_t
+v_get_u32 (v_u32_t x, int i)
+{
+ return x[i];
+}
+static inline s32_t
+v_get_s32 (v_s32_t x, int i)
+{
+ return x[i];
+}
+
+static inline void
+v_set_f32 (v_f32_t *x, int i, f32_t v)
+{
+ (*x)[i] = v;
+}
+static inline void
+v_set_u32 (v_u32_t *x, int i, u32_t v)
+{
+ (*x)[i] = v;
+}
+static inline void
+v_set_s32 (v_s32_t *x, int i, s32_t v)
+{
+ (*x)[i] = v;
+}
+
+/* true if any elements of a v_cond result is non-zero. */
+static inline int
+v_any_u32 (v_u32_t x)
+{
+ /* assume elements in x are either 0 or -1u. */
+ return vpaddd_u64 (vreinterpretq_u64_u32 (x)) != 0;
+}
+/* to wrap the result of relational operators. */
+static inline v_u32_t
+v_cond_u32 (v_u32_t x)
+{
+ return x;
+}
+static inline v_f32_t
+v_abs_f32 (v_f32_t x)
+{
+ return vabsq_f32 (x);
+}
+static inline v_f32_t
+v_fma_f32 (v_f32_t x, v_f32_t y, v_f32_t z)
+{
+ return vfmaq_f32 (z, x, y);
+}
+static inline v_f32_t
+v_round_f32 (v_f32_t x)
+{
+ return vrndaq_f32 (x);
+}
+static inline v_s32_t
+v_round_s32 (v_f32_t x)
+{
+ return vcvtaq_s32_f32 (x);
+}
+/* convert to type1 from type2. */
+static inline v_f32_t
+v_to_f32_s32 (v_s32_t x)
+{
+ return (v_f32_t){x[0], x[1], x[2], x[3]};
+}
+static inline v_f32_t
+v_to_f32_u32 (v_u32_t x)
+{
+ return (v_f32_t){x[0], x[1], x[2], x[3]};
+}
+/* reinterpret as type1 from type2. */
+static inline v_u32_t
+v_as_u32_f32 (v_f32_t x)
+{
+ union { v_f32_t f; v_u32_t u; } r = {x};
+ return r.u;
+}
+static inline v_f32_t
+v_as_f32_u32 (v_u32_t x)
+{
+ union { v_u32_t u; v_f32_t f; } r = {x};
+ return r.f;
+}
+static inline v_s32_t
+v_as_s32_u32 (v_u32_t x)
+{
+ union { v_u32_t u; v_s32_t i; } r = {x};
+ return r.i;
+}
+static inline v_u32_t
+v_as_u32_s32 (v_s32_t x)
+{
+ union { v_s32_t i; v_u32_t u; } r = {x};
+ return r.u;
+}
+static inline v_f32_t
+v_lookup_f32 (const f32_t *tab, v_u32_t idx)
+{
+ return (v_f32_t){tab[idx[0]], tab[idx[1]], tab[idx[2]], tab[idx[3]]};
+}
+static inline v_u32_t
+v_lookup_u32 (const u32_t *tab, v_u32_t idx)
+{
+ return (v_u32_t){tab[idx[0]], tab[idx[1]], tab[idx[2]], tab[idx[3]]};
+}
+static inline v_f32_t
+v_call_f32 (f32_t (*f) (f32_t), v_f32_t x, v_f32_t y, v_u32_t p)
+{
+ return (v_f32_t){p[0] ? f (x[0]) : y[0], p[1] ? f (x[1]) : y[1],
+ p[2] ? f (x[2]) : y[2], p[3] ? f (x[3]) : y[3]};
+}
+static inline v_f32_t
+v_call2_f32 (f32_t (*f) (f32_t, f32_t), v_f32_t x1, v_f32_t x2, v_f32_t y,
+ v_u32_t p)
+{
+ return (
+ v_f32_t){p[0] ? f (x1[0], x2[0]) : y[0], p[1] ? f (x1[1], x2[1]) : y[1],
+ p[2] ? f (x1[2], x2[2]) : y[2], p[3] ? f (x1[3], x2[3]) : y[3]};
+}
+
+static inline int
+v_lanes64 (void)
+{
+ return 2;
+}
+static inline v_f64_t
+v_f64 (f64_t x)
+{
+ return (v_f64_t){x, x};
+}
+static inline v_u64_t
+v_u64 (u64_t x)
+{
+ return (v_u64_t){x, x};
+}
+static inline v_s64_t
+v_s64 (s64_t x)
+{
+ return (v_s64_t){x, x};
+}
+static inline f64_t
+v_get_f64 (v_f64_t x, int i)
+{
+ return x[i];
+}
+static inline void
+v_set_f64 (v_f64_t *x, int i, f64_t v)
+{
+ (*x)[i] = v;
+}
+/* true if any elements of a v_cond result is non-zero. */
+static inline int
+v_any_u64 (v_u64_t x)
+{
+ /* assume elements in x are either 0 or -1u. */
+ return vpaddd_u64 (x) != 0;
+}
+/* to wrap the result of relational operators. */
+static inline v_u64_t
+v_cond_u64 (v_u64_t x)
+{
+ return x;
+}
+static inline v_f64_t
+v_abs_f64 (v_f64_t x)
+{
+ return vabsq_f64 (x);
+}
+static inline v_f64_t
+v_fma_f64 (v_f64_t x, v_f64_t y, v_f64_t z)
+{
+ return vfmaq_f64 (z, x, y);
+}
+static inline v_f64_t
+v_round_f64 (v_f64_t x)
+{
+ return vrndaq_f64 (x);
+}
+static inline v_s64_t
+v_round_s64 (v_f64_t x)
+{
+ return vcvtaq_s64_f64 (x);
+}
+/* convert to type1 from type2. */
+static inline v_f64_t
+v_to_f64_s64 (v_s64_t x)
+{
+ return (v_f64_t){x[0], x[1]};
+}
+static inline v_f64_t
+v_to_f64_u64 (v_u64_t x)
+{
+ return (v_f64_t){x[0], x[1]};
+}
+/* reinterpret as type1 from type2. */
+static inline v_u64_t
+v_as_u64_f64 (v_f64_t x)
+{
+ union { v_f64_t f; v_u64_t u; } r = {x};
+ return r.u;
+}
+static inline v_f64_t
+v_as_f64_u64 (v_u64_t x)
+{
+ union { v_u64_t u; v_f64_t f; } r = {x};
+ return r.f;
+}
+static inline v_s64_t
+v_as_s64_u64 (v_u64_t x)
+{
+ union { v_u64_t u; v_s64_t i; } r = {x};
+ return r.i;
+}
+static inline v_u64_t
+v_as_u64_s64 (v_s64_t x)
+{
+ union { v_s64_t i; v_u64_t u; } r = {x};
+ return r.u;
+}
+static inline v_f64_t
+v_lookup_f64 (const f64_t *tab, v_u64_t idx)
+{
+ return (v_f64_t){tab[idx[0]], tab[idx[1]]};
+}
+static inline v_u64_t
+v_lookup_u64 (const u64_t *tab, v_u64_t idx)
+{
+ return (v_u64_t){tab[idx[0]], tab[idx[1]]};
+}
+static inline v_f64_t
+v_call_f64 (f64_t (*f) (f64_t), v_f64_t x, v_f64_t y, v_u64_t p)
+{
+ return (v_f64_t){p[0] ? f (x[0]) : y[0], p[1] ? f (x[1]) : y[1]};
+}
+#endif
+
+#endif
+#endif
diff --git a/math/v_pow.c b/math/v_pow.c
new file mode 100644
index 000000000000..a209d57f41ce
--- /dev/null
+++ b/math/v_pow.c
@@ -0,0 +1,27 @@
+/*
+ * Double-precision vector pow function.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+
+VPCS_ATTR
+v_f64_t
+V_NAME(pow) (v_f64_t x, v_f64_t y)
+{
+ v_f64_t z;
+ for (int lane = 0; lane < v_lanes64 (); lane++)
+ {
+ f64_t sx = v_get_f64 (x, lane);
+ f64_t sy = v_get_f64 (y, lane);
+ f64_t sz = pow (sx, sy);
+ v_set_f64 (&z, lane, sz);
+ }
+ return z;
+}
+VPCS_ALIAS
+#endif
diff --git a/math/v_powf.c b/math/v_powf.c
new file mode 100644
index 000000000000..fb80fa6f1846
--- /dev/null
+++ b/math/v_powf.c
@@ -0,0 +1,235 @@
+/*
+ * Single-precision vector powf function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+
+#define Min v_u32 (0x00800000)
+#define Max v_u32 (0x7f800000)
+#define SBITS 5
+#define Tlog v__powf_log2_data.tab
+#define Texp v__exp2f_data.tab
+#define A v__powf_log2_data.poly
+#define C v__exp2f_data.poly
+#define LOGDEG 4
+
+#if LOGDEG == 5
+/* 1.01 ulp */
+#define OFF v_u32 (0x3f330000)
+#define TBITS 4
+#elif LOGDEG == 4
+/* 2.6 ulp ~ 0.5 + 2^24 (128*Ln2*relerr_log2 + relerr_exp2) */
+#define OFF v_u32 (0x3f35d000)
+#define TBITS 5
+#endif
+
+#define V_EXP2F_TABLE_BITS SBITS
+#define V_EXP2F_POLY_ORDER 3
+struct v_exp2f_data
+{
+ uint64_t tab[1 << V_EXP2F_TABLE_BITS];
+ double poly[V_EXP2F_POLY_ORDER];
+};
+
+#define V_POWF_LOG2_TABLE_BITS TBITS
+#define V_POWF_LOG2_POLY_ORDER LOGDEG
+#define SCALE ((double) (1 << SBITS))
+struct v_powf_log2_data
+{
+ struct
+ {
+ double invc, logc;
+ } tab[1 << V_POWF_LOG2_TABLE_BITS];
+ double poly[V_POWF_LOG2_POLY_ORDER];
+};
+
+static const struct v_powf_log2_data v__powf_log2_data = {
+#if LOGDEG == 5
+ .tab = {
+{ 0x1.661ec79f8f3bep+0, -0x1.efec65b963019p-2 * SCALE },
+{ 0x1.571ed4aaf883dp+0, -0x1.b0b6832d4fca4p-2 * SCALE },
+{ 0x1.49539f0f010bp+0, -0x1.7418b0a1fb77bp-2 * SCALE },
+{ 0x1.3c995b0b80385p+0, -0x1.39de91a6dcf7bp-2 * SCALE },
+{ 0x1.30d190c8864a5p+0, -0x1.01d9bf3f2b631p-2 * SCALE },
+{ 0x1.25e227b0b8eap+0, -0x1.97c1d1b3b7afp-3 * SCALE },
+{ 0x1.1bb4a4a1a343fp+0, -0x1.2f9e393af3c9fp-3 * SCALE },
+{ 0x1.12358f08ae5bap+0, -0x1.960cbbf788d5cp-4 * SCALE },
+{ 0x1.0953f419900a7p+0, -0x1.a6f9db6475fcep-5 * SCALE },
+{ 0x1p+0, 0x0p+0 * SCALE },
+{ 0x1.e608cfd9a47acp-1, 0x1.338ca9f24f53dp-4 * SCALE },
+{ 0x1.ca4b31f026aap-1, 0x1.476a9543891bap-3 * SCALE },
+{ 0x1.b2036576afce6p-1, 0x1.e840b4ac4e4d2p-3 * SCALE },
+{ 0x1.9c2d163a1aa2dp-1, 0x1.40645f0c6651cp-2 * SCALE },
+{ 0x1.886e6037841edp-1, 0x1.88e9c2c1b9ff8p-2 * SCALE },
+{ 0x1.767dcf5534862p-1, 0x1.ce0a44eb17bccp-2 * SCALE },
+ },
+/* rel err: 1.46 * 2^-32 */
+ .poly = {
+0x1.27616c9496e0bp-2 * SCALE, -0x1.71969a075c67ap-2 * SCALE,
+0x1.ec70a6ca7baddp-2 * SCALE, -0x1.7154748bef6c8p-1 * SCALE,
+0x1.71547652ab82bp0 * SCALE,
+ }
+#elif LOGDEG == 4
+ .tab = {
+{0x1.6489890582816p+0, -0x1.e960f97b22702p-2 * SCALE},
+{0x1.5cf19b35e3472p+0, -0x1.c993406cd4db6p-2 * SCALE},
+{0x1.55aac0e956d65p+0, -0x1.aa711d9a7d0f3p-2 * SCALE},
+{0x1.4eb0022977e01p+0, -0x1.8bf37bacdce9bp-2 * SCALE},
+{0x1.47fcccda1dd1fp+0, -0x1.6e13b3519946ep-2 * SCALE},
+{0x1.418ceabab68c1p+0, -0x1.50cb8281e4089p-2 * SCALE},
+{0x1.3b5c788f1edb3p+0, -0x1.341504a237e2bp-2 * SCALE},
+{0x1.3567de48e9c9ap+0, -0x1.17eaab624ffbbp-2 * SCALE},
+{0x1.2fabc80fd19bap+0, -0x1.f88e708f8c853p-3 * SCALE},
+{0x1.2a25200ce536bp+0, -0x1.c24b6da113914p-3 * SCALE},
+{0x1.24d108e0152e3p+0, -0x1.8d02ee397cb1dp-3 * SCALE},
+{0x1.1facd8ab2fbe1p+0, -0x1.58ac1223408b3p-3 * SCALE},
+{0x1.1ab614a03efdfp+0, -0x1.253e6fd190e89p-3 * SCALE},
+{0x1.15ea6d03af9ffp+0, -0x1.e5641882c12ffp-4 * SCALE},
+{0x1.1147b994bb776p+0, -0x1.81fea712926f7p-4 * SCALE},
+{0x1.0ccbf650593aap+0, -0x1.203e240de64a3p-4 * SCALE},
+{0x1.0875408477302p+0, -0x1.8029b86a78281p-5 * SCALE},
+{0x1.0441d42a93328p+0, -0x1.85d713190fb9p-6 * SCALE},
+{0x1p+0, 0x0p+0 * SCALE},
+{0x1.f1d006c855e86p-1, 0x1.4c1cc07312997p-5 * SCALE},
+{0x1.e28c3341aa301p-1, 0x1.5e1848ccec948p-4 * SCALE},
+{0x1.d4bdf9aa64747p-1, 0x1.04cfcb7f1196fp-3 * SCALE},
+{0x1.c7b45a24e5803p-1, 0x1.582813d463c21p-3 * SCALE},
+{0x1.bb5f5eb2ed60ap-1, 0x1.a936fa68760ccp-3 * SCALE},
+{0x1.afb0bff8fe6b4p-1, 0x1.f81bc31d6cc4ep-3 * SCALE},
+{0x1.a49badf7ab1f5p-1, 0x1.2279a09fae6b1p-2 * SCALE},
+{0x1.9a14a111fc4c9p-1, 0x1.47ec0b6df5526p-2 * SCALE},
+{0x1.901131f5b2fdcp-1, 0x1.6c71762280f1p-2 * SCALE},
+{0x1.8687f73f6d865p-1, 0x1.90155070798dap-2 * SCALE},
+{0x1.7d7067eb77986p-1, 0x1.b2e23b1d3068cp-2 * SCALE},
+{0x1.74c2c1cf97b65p-1, 0x1.d4e21b0daa86ap-2 * SCALE},
+{0x1.6c77f37cff2a1p-1, 0x1.f61e2a2f67f3fp-2 * SCALE},
+ },
+/* rel err: 1.5 * 2^-30 */
+ .poly = {
+ -0x1.6ff5daa3b3d7cp-2 * SCALE,
+ 0x1.ec81d03c01aebp-2 * SCALE,
+ -0x1.71547bb43f101p-1 * SCALE,
+ 0x1.7154764a815cbp0 * SCALE,
+ }
+#endif
+};
+
+static const struct v_exp2f_data v__exp2f_data = {
+ .tab = {
+0x3ff0000000000000, 0x3fefd9b0d3158574, 0x3fefb5586cf9890f, 0x3fef9301d0125b51,
+0x3fef72b83c7d517b, 0x3fef54873168b9aa, 0x3fef387a6e756238, 0x3fef1e9df51fdee1,
+0x3fef06fe0a31b715, 0x3feef1a7373aa9cb, 0x3feedea64c123422, 0x3feece086061892d,
+0x3feebfdad5362a27, 0x3feeb42b569d4f82, 0x3feeab07dd485429, 0x3feea47eb03a5585,
+0x3feea09e667f3bcd, 0x3fee9f75e8ec5f74, 0x3feea11473eb0187, 0x3feea589994cce13,
+0x3feeace5422aa0db, 0x3feeb737b0cdc5e5, 0x3feec49182a3f090, 0x3feed503b23e255d,
+0x3feee89f995ad3ad, 0x3feeff76f2fb5e47, 0x3fef199bdd85529c, 0x3fef3720dcef9069,
+0x3fef5818dcfba487, 0x3fef7c97337b9b5f, 0x3fefa4afa2a490da, 0x3fefd0765b6e4540,
+ },
+/* rel err: 1.69 * 2^-34 */
+ .poly = {
+0x1.c6af84b912394p-5/SCALE/SCALE/SCALE, 0x1.ebfce50fac4f3p-3/SCALE/SCALE, 0x1.62e42ff0c52d6p-1/SCALE
+ },
+};
+
+VPCS_ATTR
+__attribute__ ((noinline)) static v_f32_t
+specialcase (v_f32_t x, v_f32_t y, v_f32_t ret, v_u32_t cmp)
+{
+ return v_call2_f32 (powf, x, y, ret, cmp);
+}
+
+VPCS_ATTR
+v_f32_t
+V_NAME(powf) (v_f32_t x, v_f32_t y)
+{
+ v_u32_t u, tmp, cmp, i, top, iz;
+ v_s32_t k;
+ v_f32_t ret;
+
+ u = v_as_u32_f32 (x);
+ cmp = v_cond_u32 (u - Min >= Max - Min);
+ tmp = u - OFF;
+ i = (tmp >> (23 - TBITS)) % (1 << TBITS);
+ top = tmp & 0xff800000;
+ iz = u - top;
+ k = v_as_s32_u32 (top) >> (23 - SBITS); /* arithmetic shift */
+
+ for (int lane = 0; lane < v_lanes32 (); lane++)
+ {
+ uint32_t si, siz;
+ int32_t sk;
+ float sy;
+
+ /* Use double precision for each lane. */
+ double invc, logc, z, r, p, y0, logx, ylogx, kd, s;
+ uint64_t ki, t;
+
+ si = v_get_u32 (i, lane);
+ siz = v_get_u32 (iz, lane);
+ sk = v_get_s32 (k, lane);
+ sy = v_get_f32 (y, lane);
+
+ invc = Tlog[si].invc;
+ logc = Tlog[si].logc;
+ z = (double) as_f32_u32 (siz);
+
+ /* log2(x) = log1p(z/c-1)/ln2 + log2(c) + k */
+ r = __builtin_fma (z, invc, -1.0);
+ y0 = logc + (double) sk;
+
+ /* Polynomial to approximate log1p(r)/ln2. */
+#if LOGDEG == 5
+ logx = A[0];
+ logx = r * logx + A[1];
+ logx = r * logx + A[2];
+ logx = r * logx + A[3];
+ logx = r * logx + A[4];
+ logx = r * logx + y0;
+#elif LOGDEG == 4
+ logx = A[0];
+ logx = r * logx + A[1];
+ logx = r * logx + A[2];
+ logx = r * logx + A[3];
+ logx = r * logx + y0;
+#endif
+ ylogx = sy * logx;
+ v_set_u32 (&cmp, lane,
+ (as_u64_f64 (ylogx) >> 47 & 0xffff)
+ >= as_u64_f64 (126.0 * (1 << SBITS)) >> 47
+ ? 1
+ : v_get_u32 (cmp, lane));
+
+ /* N*x = k + r with r in [-1/2, 1/2] */
+#if TOINT_INTRINSICS
+ kd = roundtoint (ylogx); /* k */
+ ki = converttoint (ylogx);
+#else
+# define SHIFT 0x1.8p52
+ kd = eval_as_double (ylogx + SHIFT);
+ ki = asuint64 (kd);
+ kd -= SHIFT;
+#endif
+ r = ylogx - kd;
+
+ /* exp2(x) = 2^(k/N) * 2^r ~= s * (C0*r^3 + C1*r^2 + C2*r + 1) */
+ t = Texp[ki % (1 << SBITS)];
+ t += ki << (52 - SBITS);
+ s = as_f64_u64 (t);
+ p = C[0];
+ p = __builtin_fma (p, r, C[1]);
+ p = __builtin_fma (p, r, C[2]);
+ p = __builtin_fma (p, s * r, s);
+
+ v_set_f32 (&ret, lane, p);
+ }
+ if (unlikely (v_any_u32 (cmp)))
+ return specialcase (x, y, ret, cmp);
+ return ret;
+}
+VPCS_ALIAS
+#endif
diff --git a/math/v_sin.c b/math/v_sin.c
new file mode 100644
index 000000000000..2b9ed059189c
--- /dev/null
+++ b/math/v_sin.c
@@ -0,0 +1,86 @@
+/*
+ * Double-precision vector sin function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+
+static const double Poly[] = {
+/* worst-case error is 3.5 ulp.
+ abs error: 0x1.be222a58p-53 in [-pi/2, pi/2]. */
+-0x1.9f4a9c8b21dc9p-41,
+ 0x1.60e88a10163f2p-33,
+-0x1.ae6361b7254e7p-26,
+ 0x1.71de382e8d62bp-19,
+-0x1.a01a019aeb4ffp-13,
+ 0x1.111111110b25ep-7,
+-0x1.55555555554c3p-3,
+};
+
+#define C7 v_f64 (Poly[0])
+#define C6 v_f64 (Poly[1])
+#define C5 v_f64 (Poly[2])
+#define C4 v_f64 (Poly[3])
+#define C3 v_f64 (Poly[4])
+#define C2 v_f64 (Poly[5])
+#define C1 v_f64 (Poly[6])
+
+#define InvPi v_f64 (0x1.45f306dc9c883p-2)
+#define Pi1 v_f64 (0x1.921fb54442d18p+1)
+#define Pi2 v_f64 (0x1.1a62633145c06p-53)
+#define Pi3 v_f64 (0x1.c1cd129024e09p-106)
+#define Shift v_f64 (0x1.8p52)
+#define RangeVal v_f64 (0x1p23)
+#define AbsMask v_u64 (0x7fffffffffffffff)
+
+VPCS_ATTR
+__attribute__ ((noinline)) static v_f64_t
+specialcase (v_f64_t x, v_f64_t y, v_u64_t cmp)
+{
+ return v_call_f64 (sin, x, y, cmp);
+}
+
+VPCS_ATTR
+v_f64_t
+V_NAME(sin) (v_f64_t x)
+{
+ v_f64_t n, r, r2, y;
+ v_u64_t sign, odd, cmp;
+
+ r = v_as_f64_u64 (v_as_u64_f64 (x) & AbsMask);
+ sign = v_as_u64_f64 (x) & ~AbsMask;
+ cmp = v_cond_u64 (v_as_u64_f64 (r) >= v_as_u64_f64 (RangeVal));
+
+ /* n = rint(|x|/pi). */
+ n = v_fma_f64 (InvPi, r, Shift);
+ odd = v_as_u64_f64 (n) << 63;
+ n -= Shift;
+
+ /* r = |x| - n*pi (range reduction into -pi/2 .. pi/2). */
+ r = v_fma_f64 (-Pi1, n, r);
+ r = v_fma_f64 (-Pi2, n, r);
+ r = v_fma_f64 (-Pi3, n, r);
+
+ /* sin(r) poly approx. */
+ r2 = r * r;
+ y = v_fma_f64 (C7, r2, C6);
+ y = v_fma_f64 (y, r2, C5);
+ y = v_fma_f64 (y, r2, C4);
+ y = v_fma_f64 (y, r2, C3);
+ y = v_fma_f64 (y, r2, C2);
+ y = v_fma_f64 (y, r2, C1);
+ y = v_fma_f64 (y * r2, r, r);
+
+ /* sign. */
+ y = v_as_f64_u64 (v_as_u64_f64 (y) ^ sign ^ odd);
+
+ if (unlikely (v_any_u64 (cmp)))
+ return specialcase (x, y, cmp);
+ return y;
+}
+VPCS_ALIAS
+#endif
diff --git a/math/v_sinf.c b/math/v_sinf.c
new file mode 100644
index 000000000000..e66bfce6d8aa
--- /dev/null
+++ b/math/v_sinf.c
@@ -0,0 +1,75 @@
+/*
+ * Single-precision vector sin function.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "mathlib.h"
+#include "v_math.h"
+#if V_SUPPORTED
+
+static const float Poly[] = {
+ /* 1.886 ulp error */
+ 0x1.5b2e76p-19f,
+ -0x1.9f42eap-13f,
+ 0x1.110df4p-7f,
+ -0x1.555548p-3f,
+};
+#define Pi1 v_f32 (0x1.921fb6p+1f)
+#define Pi2 v_f32 (-0x1.777a5cp-24f)
+#define Pi3 v_f32 (-0x1.ee59dap-49f)
+#define A3 v_f32 (Poly[3])
+#define A5 v_f32 (Poly[2])
+#define A7 v_f32 (Poly[1])
+#define A9 v_f32 (Poly[0])
+#define RangeVal v_f32 (0x1p20f)
+#define InvPi v_f32 (0x1.45f306p-2f)
+#define Shift v_f32 (0x1.8p+23f)
+#define AbsMask v_u32 (0x7fffffff)
+
+VPCS_ATTR
+static v_f32_t
+specialcase (v_f32_t x, v_f32_t y, v_u32_t cmp)
+{
+ /* Fall back to scalar code. */
+ return v_call_f32 (sinf, x, y, cmp);
+}
+
+VPCS_ATTR
+v_f32_t
+V_NAME(sinf) (v_f32_t x)
+{
+ v_f32_t n, r, r2, y;
+ v_u32_t sign, odd, cmp;
+
+ r = v_as_f32_u32 (v_as_u32_f32 (x) & AbsMask);
+ sign = v_as_u32_f32 (x) & ~AbsMask;
+ cmp = v_cond_u32 (v_as_u32_f32 (r) >= v_as_u32_f32 (RangeVal));
+
+ /* n = rint(|x|/pi) */
+ n = v_fma_f32 (InvPi, r, Shift);
+ odd = v_as_u32_f32 (n) << 31;
+ n -= Shift;
+
+ /* r = |x| - n*pi (range reduction into -pi/2 .. pi/2) */
+ r = v_fma_f32 (-Pi1, n, r);
+ r = v_fma_f32 (-Pi2, n, r);
+ r = v_fma_f32 (-Pi3, n, r);
+
+ /* y = sin(r) */
+ r2 = r * r;
+ y = v_fma_f32 (A9, r2, A7);
+ y = v_fma_f32 (y, r2, A5);
+ y = v_fma_f32 (y, r2, A3);
+ y = v_fma_f32 (y * r2, r, r);
+
+ /* sign fix */
+ y = v_as_f32_u32 (v_as_u32_f32 (y) ^ sign ^ odd);
+
+ if (unlikely (v_any_u32 (cmp)))
+ return specialcase (x, y, cmp);
+ return y;
+}
+VPCS_ALIAS
+#endif
diff --git a/math/vn_cos.c b/math/vn_cos.c
new file mode 100644
index 000000000000..b57a549eba68
--- /dev/null
+++ b/math/vn_cos.c
@@ -0,0 +1,12 @@
+/*
+ * AdvSIMD vector PCS variant of __v_cos.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#define VPCS_ALIAS strong_alias (__vn_cos, _ZGVnN2v_cos)
+#include "v_cos.c"
+#endif
diff --git a/math/vn_cosf.c b/math/vn_cosf.c
new file mode 100644
index 000000000000..6321d4620fa7
--- /dev/null
+++ b/math/vn_cosf.c
@@ -0,0 +1,12 @@
+/*
+ * AdvSIMD vector PCS variant of __v_cosf.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#define VPCS_ALIAS strong_alias (__vn_cosf, _ZGVnN4v_cosf)
+#include "v_cosf.c"
+#endif
diff --git a/math/vn_exp.c b/math/vn_exp.c
new file mode 100644
index 000000000000..06e269d41766
--- /dev/null
+++ b/math/vn_exp.c
@@ -0,0 +1,12 @@
+/*
+ * AdvSIMD vector PCS variant of __v_exp.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#define VPCS_ALIAS strong_alias (__vn_exp, _ZGVnN2v_exp)
+#include "v_exp.c"
+#endif
diff --git a/math/vn_exp2f.c b/math/vn_exp2f.c
new file mode 100644
index 000000000000..db9707e86f16
--- /dev/null
+++ b/math/vn_exp2f.c
@@ -0,0 +1,12 @@
+/*
+ * AdvSIMD vector PCS variant of __v_exp2f.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#define VPCS_ALIAS strong_alias (__vn_exp2f, _ZGVnN4v_exp2f)
+#include "v_exp2f.c"
+#endif
diff --git a/math/vn_exp2f_1u.c b/math/vn_exp2f_1u.c
new file mode 100644
index 000000000000..17bd0abd7a60
--- /dev/null
+++ b/math/vn_exp2f_1u.c
@@ -0,0 +1,11 @@
+/*
+ * AdvSIMD vector PCS variant of __v_exp2f_1u.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#include "v_exp2f_1u.c"
+#endif
diff --git a/math/vn_expf.c b/math/vn_expf.c
new file mode 100644
index 000000000000..0652907225d9
--- /dev/null
+++ b/math/vn_expf.c
@@ -0,0 +1,12 @@
+/*
+ * AdvSIMD vector PCS variant of __v_expf.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#define VPCS_ALIAS strong_alias (__vn_expf, _ZGVnN4v_expf)
+#include "v_expf.c"
+#endif
diff --git a/math/vn_expf_1u.c b/math/vn_expf_1u.c
new file mode 100644
index 000000000000..3be776814822
--- /dev/null
+++ b/math/vn_expf_1u.c
@@ -0,0 +1,11 @@
+/*
+ * AdvSIMD vector PCS variant of __v_expf_1u.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#include "v_expf_1u.c"
+#endif
diff --git a/math/vn_log.c b/math/vn_log.c
new file mode 100644
index 000000000000..b58fe8ff820a
--- /dev/null
+++ b/math/vn_log.c
@@ -0,0 +1,12 @@
+/*
+ * AdvSIMD vector PCS variant of __v_log.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#define VPCS_ALIAS strong_alias (__vn_log, _ZGVnN2v_log)
+#include "v_log.c"
+#endif
diff --git a/math/vn_logf.c b/math/vn_logf.c
new file mode 100644
index 000000000000..cc5b8ae3ed55
--- /dev/null
+++ b/math/vn_logf.c
@@ -0,0 +1,12 @@
+/*
+ * AdvSIMD vector PCS variant of __v_logf.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#define VPCS_ALIAS strong_alias (__vn_logf, _ZGVnN4v_logf)
+#include "v_logf.c"
+#endif
diff --git a/math/vn_pow.c b/math/vn_pow.c
new file mode 100644
index 000000000000..260950113b04
--- /dev/null
+++ b/math/vn_pow.c
@@ -0,0 +1,12 @@
+/*
+ * AdvSIMD vector PCS variant of __v_pow.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#define VPCS_ALIAS strong_alias (__vn_pow, _ZGVnN2vv_pow)
+#include "v_pow.c"
+#endif
diff --git a/math/vn_powf.c b/math/vn_powf.c
new file mode 100644
index 000000000000..095d07e337ad
--- /dev/null
+++ b/math/vn_powf.c
@@ -0,0 +1,12 @@
+/*
+ * AdvSIMD vector PCS variant of __v_powf.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#define VPCS_ALIAS strong_alias (__vn_powf, _ZGVnN4vv_powf)
+#include "v_powf.c"
+#endif
diff --git a/math/vn_sin.c b/math/vn_sin.c
new file mode 100644
index 000000000000..905c79623350
--- /dev/null
+++ b/math/vn_sin.c
@@ -0,0 +1,12 @@
+/*
+ * AdvSIMD vector PCS variant of __v_sin.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#define VPCS_ALIAS strong_alias (__vn_sin, _ZGVnN2v_sin)
+#include "v_sin.c"
+#endif
diff --git a/math/vn_sinf.c b/math/vn_sinf.c
new file mode 100644
index 000000000000..1214e1a55638
--- /dev/null
+++ b/math/vn_sinf.c
@@ -0,0 +1,12 @@
+/*
+ * AdvSIMD vector PCS variant of __v_sinf.
+ *
+ * Copyright (c) 2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+#include "mathlib.h"
+#ifdef __vpcs
+#define VPCS 1
+#define VPCS_ALIAS strong_alias (__vn_sinf, _ZGVnN4v_sinf)
+#include "v_sinf.c"
+#endif
diff --git a/networking/Dir.mk b/networking/Dir.mk
new file mode 100644
index 000000000000..b49610341171
--- /dev/null
+++ b/networking/Dir.mk
@@ -0,0 +1,76 @@
+# Makefile fragment - requires GNU make
+#
+# Copyright (c) 2019-2020, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+S := $(srcdir)/networking
+B := build/networking
+
+ifeq ($(ARCH),)
+all-networking check-networking install-networking clean-networking:
+ @echo "*** Please set ARCH in config.mk. ***"
+ @exit 1
+else
+
+networking-lib-srcs := $(wildcard $(S)/*.[cS]) $(wildcard $(S)/$(ARCH)/*.[cS])
+networking-test-srcs := $(wildcard $(S)/test/*.c)
+
+networking-includes := $(patsubst $(S)/%,build/%,$(wildcard $(S)/include/*.h))
+
+networking-libs := \
+ build/lib/libnetworking.so \
+ build/lib/libnetworking.a \
+
+networking-tools := \
+ build/bin/test/chksum
+
+networking-lib-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(networking-lib-srcs)))
+networking-test-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(networking-test-srcs)))
+
+networking-objs := \
+ $(networking-lib-objs) \
+ $(networking-lib-objs:%.o=%.os) \
+ $(networking-test-objs) \
+
+networking-files := \
+ $(networking-objs) \
+ $(networking-libs) \
+ $(networking-tools) \
+ $(networking-includes) \
+
+all-networking: $(networking-libs) $(networking-tools) $(networking-includes)
+
+$(networking-objs): $(networking-includes)
+$(networking-objs): CFLAGS_ALL += $(networking-cflags)
+
+build/lib/libnetworking.so: $(networking-lib-objs:%.o=%.os)
+ $(CC) $(CFLAGS_ALL) $(LDFLAGS) -shared -o $@ $^
+
+build/lib/libnetworkinglib.a: $(networking-lib-objs)
+ rm -f $@
+ $(AR) rc $@ $^
+ $(RANLIB) $@
+
+build/bin/test/%: $(B)/test/%.o build/lib/libnetworkinglib.a
+ $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
+
+build/include/%.h: $(S)/include/%.h
+ cp $< $@
+
+build/bin/%.sh: $(S)/test/%.sh
+ cp $< $@
+
+check-networking: $(networking-tools)
+ $(EMULATOR) build/bin/test/chksum -i simple
+ $(EMULATOR) build/bin/test/chksum -i scalar
+ $(EMULATOR) build/bin/test/chksum -i simd || true # simd is not always available
+
+install-networking: \
+ $(networking-libs:build/lib/%=$(DESTDIR)$(libdir)/%) \
+ $(networking-includes:build/include/%=$(DESTDIR)$(includedir)/%)
+
+clean-networking:
+ rm -f $(networking-files)
+endif
+
+.PHONY: all-networking check-networking install-networking clean-networking
diff --git a/networking/aarch64/chksum_simd.c b/networking/aarch64/chksum_simd.c
new file mode 100644
index 000000000000..6d5be58b1f32
--- /dev/null
+++ b/networking/aarch64/chksum_simd.c
@@ -0,0 +1,146 @@
+/*
+ * AArch64-specific checksum implementation using NEON
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "networking.h"
+#include "../chksum_common.h"
+
+#ifndef __ARM_NEON
+#pragma GCC target("+simd")
+#endif
+
+#include <arm_neon.h>
+
+always_inline
+static inline uint64_t
+slurp_head64(const void **pptr, uint32_t *nbytes)
+{
+ Assert(*nbytes >= 8);
+ uint64_t sum = 0;
+ uint32_t off = (uintptr_t) *pptr % 8;
+ if (likely(off != 0))
+ {
+ /* Get rid of bytes 0..off-1 */
+ const unsigned char *ptr64 = align_ptr(*pptr, 8);
+ uint64_t mask = ALL_ONES << (CHAR_BIT * off);
+ uint64_t val = load64(ptr64) & mask;
+ /* Fold 64-bit sum to 33 bits */
+ sum = val >> 32;
+ sum += (uint32_t) val;
+ *pptr = ptr64 + 8;
+ *nbytes -= 8 - off;
+ }
+ return sum;
+}
+
+always_inline
+static inline uint64_t
+slurp_tail64(uint64_t sum, const void *ptr, uint32_t nbytes)
+{
+ Assert(nbytes < 8);
+ if (likely(nbytes != 0))
+ {
+ /* Get rid of bytes 7..nbytes */
+ uint64_t mask = ALL_ONES >> (CHAR_BIT * (8 - nbytes));
+ Assert(__builtin_popcountl(mask) / CHAR_BIT == nbytes);
+ uint64_t val = load64(ptr) & mask;
+ sum += val >> 32;
+ sum += (uint32_t) val;
+ nbytes = 0;
+ }
+ Assert(nbytes == 0);
+ return sum;
+}
+
+unsigned short
+__chksum_aarch64_simd(const void *ptr, unsigned int nbytes)
+{
+ bool swap = (uintptr_t) ptr & 1;
+ uint64_t sum;
+
+ if (unlikely(nbytes < 50))
+ {
+ sum = slurp_small(ptr, nbytes);
+ swap = false;
+ goto fold;
+ }
+
+ /* 8-byte align pointer */
+ Assert(nbytes >= 8);
+ sum = slurp_head64(&ptr, &nbytes);
+ Assert(((uintptr_t) ptr & 7) == 0);
+
+ const uint32_t *may_alias ptr32 = ptr;
+
+ uint64x2_t vsum0 = { 0, 0 };
+ uint64x2_t vsum1 = { 0, 0 };
+ uint64x2_t vsum2 = { 0, 0 };
+ uint64x2_t vsum3 = { 0, 0 };
+
+ /* Sum groups of 64 bytes */
+ for (uint32_t i = 0; i < nbytes / 64; i++)
+ {
+ uint32x4_t vtmp0 = vld1q_u32(ptr32);
+ uint32x4_t vtmp1 = vld1q_u32(ptr32 + 4);
+ uint32x4_t vtmp2 = vld1q_u32(ptr32 + 8);
+ uint32x4_t vtmp3 = vld1q_u32(ptr32 + 12);
+ vsum0 = vpadalq_u32(vsum0, vtmp0);
+ vsum1 = vpadalq_u32(vsum1, vtmp1);
+ vsum2 = vpadalq_u32(vsum2, vtmp2);
+ vsum3 = vpadalq_u32(vsum3, vtmp3);
+ ptr32 += 16;
+ }
+ nbytes %= 64;
+
+ /* Fold vsum2 and vsum3 into vsum0 and vsum1 */
+ vsum0 = vpadalq_u32(vsum0, vreinterpretq_u32_u64(vsum2));
+ vsum1 = vpadalq_u32(vsum1, vreinterpretq_u32_u64(vsum3));
+
+ /* Add any trailing group of 32 bytes */
+ if (nbytes & 32)
+ {
+ uint32x4_t vtmp0 = vld1q_u32(ptr32);
+ uint32x4_t vtmp1 = vld1q_u32(ptr32 + 4);
+ vsum0 = vpadalq_u32(vsum0, vtmp0);
+ vsum1 = vpadalq_u32(vsum1, vtmp1);
+ ptr32 += 8;
+ nbytes -= 32;
+ }
+ Assert(nbytes < 32);
+
+ /* Fold vsum1 into vsum0 */
+ vsum0 = vpadalq_u32(vsum0, vreinterpretq_u32_u64(vsum1));
+
+ /* Add any trailing group of 16 bytes */
+ if (nbytes & 16)
+ {
+ uint32x4_t vtmp = vld1q_u32(ptr32);
+ vsum0 = vpadalq_u32(vsum0, vtmp);
+ ptr32 += 4;
+ nbytes -= 16;
+ }
+ Assert(nbytes < 16);
+
+ /* Add any trailing group of 8 bytes */
+ if (nbytes & 8)
+ {
+ uint32x2_t vtmp = vld1_u32(ptr32);
+ vsum0 = vaddw_u32(vsum0, vtmp);
+ ptr32 += 2;
+ nbytes -= 8;
+ }
+ Assert(nbytes < 8);
+
+ uint64_t val = vaddlvq_u32(vreinterpretq_u32_u64(vsum0));
+ sum += val >> 32;
+ sum += (uint32_t) val;
+
+ /* Handle any trailing 0..7 bytes */
+ sum = slurp_tail64(sum, ptr32, nbytes);
+
+fold:
+ return fold_and_swap(sum, swap);
+}
diff --git a/networking/arm/chksum_simd.c b/networking/arm/chksum_simd.c
new file mode 100644
index 000000000000..7f69adfc963c
--- /dev/null
+++ b/networking/arm/chksum_simd.c
@@ -0,0 +1,149 @@
+/*
+ * Armv7-A specific checksum implementation using NEON
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "networking.h"
+#include "../chksum_common.h"
+
+#ifndef __ARM_NEON
+#pragma GCC target("+simd")
+#endif
+
+#include <arm_neon.h>
+
+unsigned short
+__chksum_arm_simd(const void *ptr, unsigned int nbytes)
+{
+ bool swap = (uintptr_t) ptr & 1;
+ uint64x1_t vsum = { 0 };
+
+ if (unlikely(nbytes < 40))
+ {
+ uint64_t sum = slurp_small(ptr, nbytes);
+ return fold_and_swap(sum, false);
+ }
+
+ /* 8-byte align pointer */
+ /* Inline slurp_head-like code since we use NEON here */
+ Assert(nbytes >= 8);
+ uint32_t off = (uintptr_t) ptr & 7;
+ if (likely(off != 0))
+ {
+ const uint64_t *may_alias ptr64 = align_ptr(ptr, 8);
+ uint64x1_t vword64 = vld1_u64(ptr64);
+ /* Get rid of bytes 0..off-1 */
+ uint64x1_t vmask = vdup_n_u64(ALL_ONES);
+ int64x1_t vshiftl = vdup_n_s64(CHAR_BIT * off);
+ vmask = vshl_u64(vmask, vshiftl);
+ vword64 = vand_u64(vword64, vmask);
+ uint32x2_t vtmp = vreinterpret_u32_u64(vword64);
+ /* Set accumulator */
+ vsum = vpaddl_u32(vtmp);
+ /* Update pointer and remaining size */
+ ptr = (char *) ptr64 + 8;
+ nbytes -= 8 - off;
+ }
+ Assert(((uintptr_t) ptr & 7) == 0);
+
+ /* Sum groups of 64 bytes */
+ uint64x2_t vsum0 = { 0, 0 };
+ uint64x2_t vsum1 = { 0, 0 };
+ uint64x2_t vsum2 = { 0, 0 };
+ uint64x2_t vsum3 = { 0, 0 };
+ const uint32_t *may_alias ptr32 = ptr;
+ for (uint32_t i = 0; i < nbytes / 64; i++)
+ {
+ uint32x4_t vtmp0 = vld1q_u32(ptr32);
+ uint32x4_t vtmp1 = vld1q_u32(ptr32 + 4);
+ uint32x4_t vtmp2 = vld1q_u32(ptr32 + 8);
+ uint32x4_t vtmp3 = vld1q_u32(ptr32 + 12);
+ vsum0 = vpadalq_u32(vsum0, vtmp0);
+ vsum1 = vpadalq_u32(vsum1, vtmp1);
+ vsum2 = vpadalq_u32(vsum2, vtmp2);
+ vsum3 = vpadalq_u32(vsum3, vtmp3);
+ ptr32 += 16;
+ }
+ nbytes %= 64;
+
+ /* Fold vsum1/vsum2/vsum3 into vsum0 */
+ vsum0 = vpadalq_u32(vsum0, vreinterpretq_u32_u64(vsum2));
+ vsum1 = vpadalq_u32(vsum1, vreinterpretq_u32_u64(vsum3));
+ vsum0 = vpadalq_u32(vsum0, vreinterpretq_u32_u64(vsum1));
+
+ /* Add any trailing 16-byte groups */
+ while (likely(nbytes >= 16))
+ {
+ uint32x4_t vtmp0 = vld1q_u32(ptr32);
+ vsum0 = vpadalq_u32(vsum0, vtmp0);
+ ptr32 += 4;
+ nbytes -= 16;
+ }
+ Assert(nbytes < 16);
+
+ /* Fold vsum0 into vsum */
+ {
+ /* 4xu32 (4x32b) -> 2xu64 (2x33b) */
+ vsum0 = vpaddlq_u32(vreinterpretq_u32_u64(vsum0));
+ /* 4xu32 (2x(1b+32b)) -> 2xu64 (2x(0b+32b)) */
+ vsum0 = vpaddlq_u32(vreinterpretq_u32_u64(vsum0));
+ /* 4xu32 (4x32b) -> 2xu64 (2x33b) */
+ Assert((vgetq_lane_u64(vsum0, 0) >> 32) == 0);
+ Assert((vgetq_lane_u64(vsum0, 1) >> 32) == 0);
+ uint32x2_t vtmp = vmovn_u64(vsum0);
+ /* Add to accumulator */
+ vsum = vpadal_u32(vsum, vtmp);
+ }
+
+ /* Add any trailing group of 8 bytes */
+ if (nbytes & 8)
+ {
+ uint32x2_t vtmp = vld1_u32(ptr32);
+ /* Add to accumulator */
+ vsum = vpadal_u32(vsum, vtmp);
+ ptr32 += 2;
+ nbytes -= 8;
+ }
+ Assert(nbytes < 8);
+
+ /* Handle any trailing 1..7 bytes */
+ if (likely(nbytes != 0))
+ {
+ Assert(((uintptr_t) ptr32 & 7) == 0);
+ Assert(nbytes < 8);
+ uint64x1_t vword64 = vld1_u64((const uint64_t *) ptr32);
+ /* Get rid of bytes 7..nbytes */
+ uint64x1_t vmask = vdup_n_u64(ALL_ONES);
+ int64x1_t vshiftr = vdup_n_s64(-CHAR_BIT * (8 - nbytes));
+ vmask = vshl_u64(vmask, vshiftr);/* Shift right */
+ vword64 = vand_u64(vword64, vmask);
+ /* Fold 64-bit sum to 33 bits */
+ vword64 = vpaddl_u32(vreinterpret_u32_u64(vword64));
+ /* Add to accumulator */
+ vsum = vpadal_u32(vsum, vreinterpret_u32_u64(vword64));
+ }
+
+ /* Fold 64-bit vsum to 32 bits */
+ vsum = vpaddl_u32(vreinterpret_u32_u64(vsum));
+ vsum = vpaddl_u32(vreinterpret_u32_u64(vsum));
+ Assert(vget_lane_u32(vreinterpret_u32_u64(vsum), 1) == 0);
+
+ /* Fold 32-bit vsum to 16 bits */
+ uint32x2_t vsum32 = vreinterpret_u32_u64(vsum);
+ vsum32 = vpaddl_u16(vreinterpret_u16_u32(vsum32));
+ vsum32 = vpaddl_u16(vreinterpret_u16_u32(vsum32));
+ Assert(vget_lane_u16(vreinterpret_u16_u32(vsum32), 1) == 0);
+ Assert(vget_lane_u16(vreinterpret_u16_u32(vsum32), 2) == 0);
+ Assert(vget_lane_u16(vreinterpret_u16_u32(vsum32), 3) == 0);
+
+ /* Convert to 16-bit scalar */
+ uint16_t sum = vget_lane_u16(vreinterpret_u16_u32(vsum32), 0);
+
+ if (unlikely(swap))/* Odd base pointer is unexpected */
+ {
+ sum = bswap16(sum);
+ }
+ return sum;
+}
diff --git a/networking/chksum.c b/networking/chksum.c
new file mode 100644
index 000000000000..95ce5baa94e4
--- /dev/null
+++ b/networking/chksum.c
@@ -0,0 +1,81 @@
+/*
+ * Compute 16-bit sum in ones' complement arithmetic (with end-around carry).
+ * This sum is often used as a simple checksum in networking.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "networking.h"
+#include "chksum_common.h"
+
+always_inline
+static inline uint32_t
+slurp_head32(const void **pptr, uint32_t *nbytes)
+{
+ uint32_t sum = 0;
+ Assert(*nbytes >= 4);
+ uint32_t off = (uintptr_t) *pptr % 4;
+ if (likely(off != 0))
+ {
+ /* Get rid of bytes 0..off-1 */
+ const unsigned char *ptr32 = align_ptr(*pptr, 4);
+ uint32_t mask = ~0U << (CHAR_BIT * off);
+ sum = load32(ptr32) & mask;
+ *pptr = ptr32 + 4;
+ *nbytes -= 4 - off;
+ }
+ return sum;
+}
+
+/* Additional loop unrolling would help when not auto-vectorizing */
+unsigned short
+__chksum(const void *ptr, unsigned int nbytes)
+{
+ bool swap = false;
+ uint64_t sum = 0;
+
+ if (nbytes > 300)
+ {
+ /* 4-byte align pointer */
+ swap = (uintptr_t) ptr & 1;
+ sum = slurp_head32(&ptr, &nbytes);
+ }
+ /* Else benefit of aligning not worth the overhead */
+
+ /* Sum all 16-byte chunks */
+ const char *cptr = ptr;
+ for (uint32_t nquads = nbytes / 16; nquads != 0; nquads--)
+ {
+ uint64_t h0 = load32(cptr + 0);
+ uint64_t h1 = load32(cptr + 4);
+ uint64_t h2 = load32(cptr + 8);
+ uint64_t h3 = load32(cptr + 12);
+ sum += h0 + h1 + h2 + h3;
+ cptr += 16;
+ }
+ nbytes %= 16;
+ Assert(nbytes < 16);
+
+ /* Handle any trailing 4-byte chunks */
+ while (nbytes >= 4)
+ {
+ sum += load32(cptr);
+ cptr += 4;
+ nbytes -= 4;
+ }
+ Assert(nbytes < 4);
+
+ if (nbytes & 2)
+ {
+ sum += load16(cptr);
+ cptr += 2;
+ }
+
+ if (nbytes & 1)
+ {
+ sum += *(uint8_t *)cptr;
+ }
+
+ return fold_and_swap(sum, swap);
+}
diff --git a/networking/chksum_common.h b/networking/chksum_common.h
new file mode 100644
index 000000000000..958c8cc0742e
--- /dev/null
+++ b/networking/chksum_common.h
@@ -0,0 +1,132 @@
+/*
+ * Common code for checksum implementations
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef CHKSUM_COMMON_H
+#define CHKSUM_COMMON_H
+
+#if __BYTE_ORDER__ != __ORDER_LITTLE_ENDIAN__
+#error Only little endian supported
+#endif
+
+#include <limits.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <string.h>
+
+/* Assertions must be explicitly enabled */
+#if WANT_ASSERT
+#undef NDEBUG
+#include <assert.h>
+#define Assert(exp) assert(exp)
+#else
+#define Assert(exp) (void) (exp)
+#endif
+
+#ifdef __GNUC__
+#define likely(x) __builtin_expect(!!(x), 1)
+#define unlikely(x) __builtin_expect(!!(x), 0)
+#define may_alias __attribute__((__may_alias__))
+#define always_inline __attribute__((always_inline))
+#ifdef __clang__
+#define no_unroll_loops
+#else
+#define no_unroll_loops __attribute__((optimize("no-unroll-loops")))
+#endif
+#define bswap16(x) __builtin_bswap16((x))
+#else
+#define likely(x) (x)
+#define unlikely(x) (x)
+#define may_alias
+#define always_inline
+#define no_unroll_loops
+#define bswap16(x) ((uint8_t)((x) >> 8) | ((uint8_t)(x) << 8))
+#endif
+
+#define ALL_ONES ~UINT64_C(0)
+
+static inline
+uint64_t load64(const void *ptr)
+{
+ /* GCC will optimise this to a normal load instruction */
+ uint64_t v;
+ memcpy(&v, ptr, sizeof v);
+ return v;
+}
+
+static inline
+uint32_t load32(const void *ptr)
+{
+ /* GCC will optimise this to a normal load instruction */
+ uint32_t v;
+ memcpy(&v, ptr, sizeof v);
+ return v;
+}
+
+static inline
+uint16_t load16(const void *ptr)
+{
+ /* GCC will optimise this to a normal load instruction */
+ uint16_t v;
+ memcpy(&v, ptr, sizeof v);
+ return v;
+}
+
+/* slurp_small() is for small buffers, don't waste cycles on alignment */
+no_unroll_loops
+always_inline
+static inline uint64_t
+slurp_small(const void *ptr, uint32_t nbytes)
+{
+ const unsigned char *cptr = ptr;
+ uint64_t sum = 0;
+ while (nbytes >= 4)
+ {
+ sum += load32(cptr);
+ cptr += 4;
+ nbytes -= 4;
+ }
+ if (nbytes & 2)
+ {
+ sum += load16(cptr);
+ cptr += 2;
+ }
+ if (nbytes & 1)
+ {
+ sum += (uint8_t) *cptr;
+ }
+ return sum;
+}
+
+static inline const void *
+align_ptr(const void *ptr, size_t bytes)
+{
+ return (void *) ((uintptr_t) ptr & -(uintptr_t) bytes);
+}
+
+always_inline
+static inline uint16_t
+fold_and_swap(uint64_t sum, bool swap)
+{
+ /* Fold 64-bit sum to 32 bits */
+ sum = (sum & 0xffffffff) + (sum >> 32);
+ sum = (sum & 0xffffffff) + (sum >> 32);
+ Assert(sum == (uint32_t) sum);
+
+ /* Fold 32-bit sum to 16 bits */
+ sum = (sum & 0xffff) + (sum >> 16);
+ sum = (sum & 0xffff) + (sum >> 16);
+ Assert(sum == (uint16_t) sum);
+
+ if (unlikely(swap)) /* Odd base pointer is unexpected */
+ {
+ sum = bswap16(sum);
+ }
+
+ return (uint16_t) sum;
+}
+
+#endif
diff --git a/networking/include/networking.h b/networking/include/networking.h
new file mode 100644
index 000000000000..a88feff88339
--- /dev/null
+++ b/networking/include/networking.h
@@ -0,0 +1,14 @@
+/*
+ * Public API.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+unsigned short __chksum (const void *, unsigned int);
+#if __aarch64__ && __ARM_NEON
+unsigned short __chksum_aarch64_simd (const void *, unsigned int);
+#endif
+#if __arm__ && __ARM_NEON
+unsigned short __chksum_arm_simd (const void *, unsigned int);
+#endif
diff --git a/networking/test/chksum.c b/networking/test/chksum.c
new file mode 100644
index 000000000000..41b98120f275
--- /dev/null
+++ b/networking/test/chksum.c
@@ -0,0 +1,381 @@
+/*
+ * Ones' complement checksum test & benchmark
+ *
+ * Copyright (c) 2016-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#define _GNU_SOURCE
+#include <inttypes.h>
+#include <stdbool.h>
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <time.h>
+#include <unistd.h>
+#include "../include/networking.h"
+
+#if WANT_ASSERT
+#undef NDEBUG
+#include <assert.h>
+#define Assert(exp) assert(exp)
+#else
+#define Assert(exp) (void) (exp)
+#endif
+
+#ifdef __GNUC__
+#define may_alias __attribute__((__may_alias__))
+#else
+#define may_alias
+#endif
+
+#define CACHE_LINE 64
+#define ALIGN(x, y) (((x) + (y) - 1) & ~((y) - 1))
+
+/* Reference implementation - do not modify! */
+static uint16_t
+checksum_simple(const void *ptr, uint32_t nbytes)
+{
+ const uint16_t *may_alias hptr = ptr;
+ uint64_t sum = 0;/* Need 64-bit accumulator when nbytes > 64K */
+
+ /* Sum all halfwords, assume misaligned accesses are handled in HW */
+ for (uint32_t nhalfs = nbytes >> 1; nhalfs != 0; nhalfs--)
+ {
+ sum += *hptr++;
+ }
+
+ /* Add any trailing odd byte */
+ if ((nbytes & 0x01) != 0)
+ {
+ sum += *(uint8_t *) hptr;
+ }
+
+ /* Fold 64-bit sum to 32 bits */
+ sum = (sum & 0xffffffff) + (sum >> 32);
+ sum = (sum & 0xffffffff) + (sum >> 32);
+ Assert(sum == (uint32_t) sum);
+
+ /* Fold 32-bit sum to 16 bits */
+ sum = (sum & 0xffff) + (sum >> 16);
+ sum = (sum & 0xffff) + (sum >> 16);
+ Assert(sum == (uint16_t) sum);
+
+ return (uint16_t) sum;
+}
+
+static struct
+{
+ uint16_t (*cksum_fp)(const void *, uint32_t);
+ const char *name;
+} implementations[] =
+{
+ { checksum_simple, "simple"},
+ { __chksum, "scalar"},
+#if __arm__
+ { __chksum_arm_simd, "simd" },
+#elif __aarch64__
+ { __chksum_aarch64_simd, "simd" },
+#endif
+ { NULL, NULL}
+};
+
+static int
+find_impl(const char *name)
+{
+ for (int i = 0; implementations[i].name != NULL; i++)
+ {
+ if (strcmp(implementations[i].name, name) == 0)
+ {
+ return i;
+ }
+ }
+ return -1;
+}
+
+static uint16_t (*CKSUM_FP)(const void *, uint32_t);
+static volatile uint16_t SINK;
+
+static bool
+verify(const void *data, uint32_t offset, uint32_t size)
+{
+
+ uint16_t csum_expected = checksum_simple(data, size);
+ uint16_t csum_actual = CKSUM_FP(data, size);
+ if (csum_actual != csum_expected)
+ {
+ fprintf(stderr, "\nInvalid checksum for offset %u size %u: "
+ "actual %04x expected %04x (valid)",
+ offset, size, csum_actual, csum_expected);
+ if (size < 65536)
+ {
+ /* Fatal error */
+ exit(EXIT_FAILURE);
+ }
+ /* Else some implementations only support sizes up to 2^16 */
+ return false;
+ }
+ return true;
+}
+
+static uint64_t
+clock_get_ns(void)
+{
+ struct timespec ts;
+ clock_gettime(CLOCK_MONOTONIC, &ts);
+ return ts.tv_sec * (uint64_t) 1000000000 + ts.tv_nsec;
+}
+
+static void
+benchmark(const uint8_t *base,
+ size_t poolsize,
+ uint32_t blksize,
+ uint32_t numops,
+ uint64_t cpufreq)
+{
+ printf("%11u ", (unsigned int) blksize); fflush(stdout);
+
+ uint64_t start = clock_get_ns();
+ for (uint32_t i = 0; i < numops; i ++)
+ {
+ /* Read a random value from the pool */
+ uint32_t random = ((uint32_t *) base)[i % (poolsize / 4)];
+ /* Generate a random starting address */
+ const void *data = &base[random % (poolsize - blksize)];
+ SINK = CKSUM_FP(data, blksize);
+ }
+ uint64_t end = clock_get_ns();
+
+#define MEGABYTE 1000000 /* Decimal megabyte (MB) */
+ uint64_t elapsed_ns = end - start;
+ uint64_t elapsed_ms = elapsed_ns / 1000000;
+ uint32_t blks_per_s = (uint32_t) ((numops / elapsed_ms) * 1000);
+ uint64_t accbytes = (uint64_t) numops * blksize;
+ printf("%11ju ", (uintmax_t) ((accbytes / elapsed_ms) * 1000) / MEGABYTE);
+ unsigned int cyc_per_blk = cpufreq / blks_per_s;
+ printf("%11u ", cyc_per_blk);
+ if (blksize != 0)
+ {
+ unsigned int cyc_per_byte = 1000 * cyc_per_blk / blksize;
+ printf("%7u.%03u ",
+ cyc_per_byte / 1000, cyc_per_byte % 1000);
+ }
+ printf("\n");
+}
+
+int main(int argc, char *argv[])
+{
+ int c;
+ bool DUMP = false;
+ uint32_t IMPL = 0;/* Simple implementation */
+ uint64_t CPUFREQ = 0;
+ uint32_t BLKSIZE = 0;
+ uint32_t NUMOPS = 1000000;
+ uint32_t POOLSIZE = 512 * 1024;/* Typical ARM L2 cache size */
+
+ setvbuf(stdout, NULL, _IOLBF, 160);
+ while ((c = getopt(argc, argv, "b:df:i:n:p:")) != -1)
+ {
+ switch (c)
+ {
+ case 'b' :
+ {
+ int blksize = atoi(optarg);
+ if (blksize < 1 || blksize > POOLSIZE / 2)
+ {
+ fprintf(stderr, "Invalid block size %d\n", blksize);
+ exit(EXIT_FAILURE);
+ }
+ BLKSIZE = (unsigned) blksize;
+ break;
+ }
+ case 'd' :
+ DUMP = true;
+ break;
+ case 'f' :
+ {
+ int64_t cpufreq = atoll(optarg);
+ if (cpufreq < 1)
+ {
+ fprintf(stderr, "Invalid CPU frequency %"PRId64"\n",
+ cpufreq);
+ exit(EXIT_FAILURE);
+ }
+ CPUFREQ = cpufreq;
+ break;
+ }
+ case 'i' :
+ {
+ int impl = find_impl(optarg);
+ if (impl < 0)
+ {
+ fprintf(stderr, "Invalid implementation %s\n", optarg);
+ goto usage;
+ }
+ IMPL = (unsigned) impl;
+ break;
+ }
+ case 'n' :
+ {
+ int numops = atoi(optarg);
+ if (numops < 1)
+ {
+ fprintf(stderr, "Invalid number of operations %d\n", numops);
+ exit(EXIT_FAILURE);
+ }
+ NUMOPS = (unsigned) numops;
+ break;
+ }
+ case 'p' :
+ {
+ int poolsize = atoi(optarg);
+ if (poolsize < 4096)
+ {
+ fprintf(stderr, "Invalid pool size %d\n", poolsize);
+ exit(EXIT_FAILURE);
+ }
+ char c = optarg[strlen(optarg) - 1];
+ if (c == 'M')
+ {
+ POOLSIZE = (unsigned) poolsize * 1024 * 1024;
+ }
+ else if (c == 'K')
+ {
+ POOLSIZE = (unsigned) poolsize * 1024;
+ }
+ else
+ {
+ POOLSIZE = (unsigned) poolsize;
+ }
+ break;
+ }
+ default :
+usage :
+ fprintf(stderr, "Usage: checksum <options>\n"
+ "-b <blksize> Block size\n"
+ "-d Dump first 96 bytes of data\n"
+ "-f <cpufreq> CPU frequency (Hz)\n"
+ "-i <impl> Implementation\n"
+ "-n <numops> Number of operations\n"
+ "-p <poolsize> Pool size (K or M suffix)\n"
+ );
+ printf("Implementations:");
+ for (int i = 0; implementations[i].name != NULL; i++)
+ {
+ printf(" %s", implementations[i].name);
+ }
+ printf("\n");
+ exit(EXIT_FAILURE);
+ }
+ }
+ if (optind > argc)
+ {
+ goto usage;
+ }
+
+ CKSUM_FP = implementations[IMPL].cksum_fp;
+ POOLSIZE = ALIGN(POOLSIZE, CACHE_LINE);
+ uint8_t *base = mmap(0, POOLSIZE, PROT_READ|PROT_WRITE,
+ MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+ if (base == MAP_FAILED)
+ {
+ perror("aligned_alloc"), exit(EXIT_FAILURE);
+ }
+ for (size_t i = 0; i < POOLSIZE / 4; i++)
+ {
+ ((uint32_t *) base)[i] = rand();
+ }
+
+ printf("Implementation: %s\n", implementations[IMPL].name);
+ printf("numops %u, poolsize ", NUMOPS);
+ if (POOLSIZE % (1024 * 1024) == 0)
+ {
+ printf("%uMiB", POOLSIZE / (1024 * 1024));
+ }
+ else if (POOLSIZE % 1024 == 0)
+ {
+ printf("%uKiB", POOLSIZE / 1024);
+ }
+ else
+ {
+ printf("%uB", POOLSIZE);
+ }
+ printf(", blocksize %u, CPU frequency %juMHz\n",
+ BLKSIZE, (uintmax_t) (CPUFREQ / 1000000));
+#if WANT_ASSERT
+ printf("Warning: assertions are enabled\n");
+#endif
+
+ if (DUMP)
+ {
+ /* Print out first 96 bytes of data for human debugging */
+ for (int i = 0; i < 96; i++)
+ {
+ if (i % 8 == 0)
+ printf("%2u:", i);
+ printf(" %02x", base[i]);
+ if (i % 8 == 7)
+ printf("\n");
+ }
+ }
+
+ /* Verify that chosen algorithm handles all combinations of offsets and sizes */
+ printf("Verifying..."); fflush(stdout);
+ bool success = true;
+ /* Check all (relevant) combinations of size and offset */
+ for (int size = 0; size <= 256; size++)
+ {
+ for (int offset = 0; offset < 255; offset++)
+ {
+ /* Check at start of mapped memory */
+ success &= verify(&base[offset], offset, size);
+ /* Check at end of mapped memory */
+ uint8_t *p = base + POOLSIZE - (size + offset);
+ success &= verify(p, (uintptr_t) p % 64, size);
+ }
+ }
+ /* Check increasingly larger sizes */
+ for (size_t size = 1; size < POOLSIZE; size *= 2)
+ {
+ success &= verify(base, 0, size);
+ }
+ /* Check the full size, this can detect accumulator overflows */
+ success &= verify(base, 0, POOLSIZE);
+ printf("%s\n", success ? "OK" : "failure");
+
+ /* Print throughput in decimal megabyte (1000000B) per second */
+ if (CPUFREQ != 0)
+ {
+ printf("%11s %11s %11s %11s\n",
+ "block size", "MB/s", "cycles/blk", "cycles/byte");
+ }
+ else
+ {
+ printf("%11s %11s %11s %11s\n",
+ "block size", "MB/s", "ns/blk", "ns/byte");
+ CPUFREQ = 1000000000;
+ }
+ if (BLKSIZE != 0)
+ {
+ benchmark(base, POOLSIZE, BLKSIZE, NUMOPS, CPUFREQ);
+ }
+ else
+ {
+ static const uint16_t sizes[] =
+ { 20, 42, 102, 250, 612, 1500, 3674, 9000, 0 };
+ for (int i = 0; sizes[i] != 0; i++)
+ {
+ uint32_t numops = NUMOPS * 10000 / (40 + sizes[i]);
+ benchmark(base, POOLSIZE, sizes[i], numops, CPUFREQ);
+ }
+ }
+
+ if (munmap(base, POOLSIZE) != 0)
+ {
+ perror("munmap"), exit(EXIT_FAILURE);
+ }
+
+ return success ? EXIT_SUCCESS : EXIT_FAILURE;
+}
diff --git a/string/Dir.mk b/string/Dir.mk
new file mode 100644
index 000000000000..cf3453f7580d
--- /dev/null
+++ b/string/Dir.mk
@@ -0,0 +1,113 @@
+# Makefile fragment - requires GNU make
+#
+# Copyright (c) 2019-2021, Arm Limited.
+# SPDX-License-Identifier: MIT
+
+S := $(srcdir)/string
+B := build/string
+
+ifeq ($(ARCH),)
+all-string bench-string check-string install-string clean-string:
+ @echo "*** Please set ARCH in config.mk. ***"
+ @exit 1
+else
+
+string-lib-srcs := $(wildcard $(S)/$(ARCH)/*.[cS])
+string-test-srcs := $(wildcard $(S)/test/*.c)
+string-bench-srcs := $(wildcard $(S)/bench/*.c)
+
+string-includes := $(patsubst $(S)/%,build/%,$(wildcard $(S)/include/*.h))
+
+string-libs := \
+ build/lib/libstringlib.so \
+ build/lib/libstringlib.a \
+
+string-tests := \
+ build/bin/test/memcpy \
+ build/bin/test/memmove \
+ build/bin/test/memset \
+ build/bin/test/memchr \
+ build/bin/test/memrchr \
+ build/bin/test/memcmp \
+ build/bin/test/__mtag_tag_region \
+ build/bin/test/__mtag_tag_zero_region \
+ build/bin/test/strcpy \
+ build/bin/test/stpcpy \
+ build/bin/test/strcmp \
+ build/bin/test/strchr \
+ build/bin/test/strrchr \
+ build/bin/test/strchrnul \
+ build/bin/test/strlen \
+ build/bin/test/strnlen \
+ build/bin/test/strncmp
+
+string-benches := \
+ build/bin/bench/memcpy \
+ build/bin/bench/strlen
+
+string-lib-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(string-lib-srcs)))
+string-test-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(string-test-srcs)))
+string-bench-objs := $(patsubst $(S)/%,$(B)/%.o,$(basename $(string-bench-srcs)))
+
+string-objs := \
+ $(string-lib-objs) \
+ $(string-lib-objs:%.o=%.os) \
+ $(string-test-objs) \
+ $(string-bench-objs)
+
+string-files := \
+ $(string-objs) \
+ $(string-libs) \
+ $(string-tests) \
+ $(string-benches) \
+ $(string-includes) \
+
+all-string: $(string-libs) $(string-tests) $(string-benches) $(string-includes)
+
+$(string-objs): $(string-includes)
+$(string-objs): CFLAGS_ALL += $(string-cflags)
+
+$(string-test-objs): CFLAGS_ALL += -D_GNU_SOURCE
+
+build/lib/libstringlib.so: $(string-lib-objs:%.o=%.os)
+ $(CC) $(CFLAGS_ALL) $(LDFLAGS) -shared -o $@ $^
+
+build/lib/libstringlib.a: $(string-lib-objs)
+ rm -f $@
+ $(AR) rc $@ $^
+ $(RANLIB) $@
+
+build/bin/test/%: $(B)/test/%.o build/lib/libstringlib.a
+ $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
+
+build/bin/bench/%: $(B)/bench/%.o build/lib/libstringlib.a
+ $(CC) $(CFLAGS_ALL) $(LDFLAGS) -static -o $@ $^ $(LDLIBS)
+
+build/include/%.h: $(S)/include/%.h
+ cp $< $@
+
+build/bin/%.sh: $(S)/test/%.sh
+ cp $< $@
+
+string-tests-out = $(string-tests:build/bin/test/%=build/string/test/%.out)
+
+build/string/test/%.out: build/bin/test/%
+ $(EMULATOR) $^ | tee $@.tmp
+ mv $@.tmp $@
+
+check-string: $(string-tests-out)
+ ! grep FAIL $^
+
+bench-string: $(string-benches)
+ $(EMULATOR) build/bin/bench/strlen
+ $(EMULATOR) build/bin/bench/memcpy
+
+install-string: \
+ $(string-libs:build/lib/%=$(DESTDIR)$(libdir)/%) \
+ $(string-includes:build/include/%=$(DESTDIR)$(includedir)/%)
+
+clean-string:
+ rm -f $(string-files)
+endif
+
+.PHONY: all-string bench-string check-string install-string clean-string
diff --git a/string/aarch64/__mtag_tag_region.S b/string/aarch64/__mtag_tag_region.S
new file mode 100644
index 000000000000..84339f73cf23
--- /dev/null
+++ b/string/aarch64/__mtag_tag_region.S
@@ -0,0 +1,100 @@
+/*
+ * __mtag_tag_region - tag memory
+ *
+ * Copyright (c) 2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, MTE, LP64 ABI.
+ *
+ * Interface contract:
+ * Address is 16 byte aligned and size is multiple of 16.
+ * Returns the passed pointer.
+ * The memory region may remain untagged if tagging is not enabled.
+ */
+
+#include "../asmdefs.h"
+
+#if __ARM_FEATURE_MEMORY_TAGGING
+
+#define dstin x0
+#define count x1
+#define dst x2
+#define dstend x3
+#define tmp x4
+#define zva_val x4
+
+ENTRY (__mtag_tag_region)
+ PTR_ARG (0)
+ SIZE_ARG (1)
+
+ add dstend, dstin, count
+
+ cmp count, 96
+ b.hi L(set_long)
+
+ tbnz count, 6, L(set96)
+
+ /* Set 0, 16, 32, or 48 bytes. */
+ lsr tmp, count, 5
+ add tmp, dstin, tmp, lsl 4
+ cbz count, L(end)
+ stg dstin, [dstin]
+ stg dstin, [tmp]
+ stg dstin, [dstend, -16]
+L(end):
+ ret
+
+ .p2align 4
+ /* Set 64..96 bytes. Write 64 bytes from the start and
+ 32 bytes from the end. */
+L(set96):
+ st2g dstin, [dstin]
+ st2g dstin, [dstin, 32]
+ st2g dstin, [dstend, -32]
+ ret
+
+ .p2align 4
+ /* Size is > 96 bytes. */
+L(set_long):
+ cmp count, 160
+ b.lo L(no_zva)
+
+#ifndef SKIP_ZVA_CHECK
+ mrs zva_val, dczid_el0
+ and zva_val, zva_val, 31
+ cmp zva_val, 4 /* ZVA size is 64 bytes. */
+ b.ne L(no_zva)
+#endif
+ st2g dstin, [dstin]
+ st2g dstin, [dstin, 32]
+ bic dst, dstin, 63
+ sub count, dstend, dst /* Count is now 64 too large. */
+ sub count, count, 128 /* Adjust count and bias for loop. */
+
+ .p2align 4
+L(zva_loop):
+ add dst, dst, 64
+ dc gva, dst
+ subs count, count, 64
+ b.hi L(zva_loop)
+ st2g dstin, [dstend, -64]
+ st2g dstin, [dstend, -32]
+ ret
+
+L(no_zva):
+ sub dst, dstin, 32 /* Dst is biased by -32. */
+ sub count, count, 64 /* Adjust count for loop. */
+L(no_zva_loop):
+ st2g dstin, [dst, 32]
+ st2g dstin, [dst, 64]!
+ subs count, count, 64
+ b.hi L(no_zva_loop)
+ st2g dstin, [dstend, -64]
+ st2g dstin, [dstend, -32]
+ ret
+
+END (__mtag_tag_region)
+#endif
diff --git a/string/aarch64/__mtag_tag_zero_region.S b/string/aarch64/__mtag_tag_zero_region.S
new file mode 100644
index 000000000000..f58364ca6fcb
--- /dev/null
+++ b/string/aarch64/__mtag_tag_zero_region.S
@@ -0,0 +1,100 @@
+/*
+ * __mtag_tag_zero_region - tag memory and fill it with zero bytes
+ *
+ * Copyright (c) 2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, MTE, LP64 ABI.
+ *
+ * Interface contract:
+ * Address is 16 byte aligned and size is multiple of 16.
+ * Returns the passed pointer.
+ * The memory region may remain untagged if tagging is not enabled.
+ */
+
+#include "../asmdefs.h"
+
+#if __ARM_FEATURE_MEMORY_TAGGING
+
+#define dstin x0
+#define count x1
+#define dst x2
+#define dstend x3
+#define tmp x4
+#define zva_val x4
+
+ENTRY (__mtag_tag_zero_region)
+ PTR_ARG (0)
+ SIZE_ARG (1)
+
+ add dstend, dstin, count
+
+ cmp count, 96
+ b.hi L(set_long)
+
+ tbnz count, 6, L(set96)
+
+ /* Set 0, 16, 32, or 48 bytes. */
+ lsr tmp, count, 5
+ add tmp, dstin, tmp, lsl 4
+ cbz count, L(end)
+ stzg dstin, [dstin]
+ stzg dstin, [tmp]
+ stzg dstin, [dstend, -16]
+L(end):
+ ret
+
+ .p2align 4
+ /* Set 64..96 bytes. Write 64 bytes from the start and
+ 32 bytes from the end. */
+L(set96):
+ stz2g dstin, [dstin]
+ stz2g dstin, [dstin, 32]
+ stz2g dstin, [dstend, -32]
+ ret
+
+ .p2align 4
+ /* Size is > 96 bytes. */
+L(set_long):
+ cmp count, 160
+ b.lo L(no_zva)
+
+#ifndef SKIP_ZVA_CHECK
+ mrs zva_val, dczid_el0
+ and zva_val, zva_val, 31
+ cmp zva_val, 4 /* ZVA size is 64 bytes. */
+ b.ne L(no_zva)
+#endif
+ stz2g dstin, [dstin]
+ stz2g dstin, [dstin, 32]
+ bic dst, dstin, 63
+ sub count, dstend, dst /* Count is now 64 too large. */
+ sub count, count, 128 /* Adjust count and bias for loop. */
+
+ .p2align 4
+L(zva_loop):
+ add dst, dst, 64
+ dc gzva, dst
+ subs count, count, 64
+ b.hi L(zva_loop)
+ stz2g dstin, [dstend, -64]
+ stz2g dstin, [dstend, -32]
+ ret
+
+L(no_zva):
+ sub dst, dstin, 32 /* Dst is biased by -32. */
+ sub count, count, 64 /* Adjust count for loop. */
+L(no_zva_loop):
+ stz2g dstin, [dst, 32]
+ stz2g dstin, [dst, 64]!
+ subs count, count, 64
+ b.hi L(no_zva_loop)
+ stz2g dstin, [dstend, -64]
+ stz2g dstin, [dstend, -32]
+ ret
+
+END (__mtag_tag_zero_region)
+#endif
diff --git a/string/aarch64/check-arch.S b/string/aarch64/check-arch.S
new file mode 100644
index 000000000000..5a54242d7de6
--- /dev/null
+++ b/string/aarch64/check-arch.S
@@ -0,0 +1,13 @@
+/*
+ * check ARCH setting.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#if !__aarch64__
+# error ARCH setting does not match the compiler.
+#endif
+
+/* Include for GNU property notes. */
+#include "../asmdefs.h"
diff --git a/string/aarch64/memchr-mte.S b/string/aarch64/memchr-mte.S
new file mode 100644
index 000000000000..c2e967d1004e
--- /dev/null
+++ b/string/aarch64/memchr-mte.S
@@ -0,0 +1,116 @@
+/*
+ * memchr - find a character in a memory zone
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, Advanced SIMD.
+ * MTE compatible.
+ */
+
+#include "../asmdefs.h"
+
+#define srcin x0
+#define chrin w1
+#define cntin x2
+#define result x0
+
+#define src x3
+#define cntrem x4
+#define synd x5
+#define shift x6
+#define tmp x7
+#define wtmp w7
+
+#define vrepchr v0
+#define qdata q1
+#define vdata v1
+#define vhas_chr v2
+#define vrepmask v3
+#define vend v4
+#define dend d4
+
+/*
+ Core algorithm:
+
+ For each 16-byte chunk we calculate a 64-bit syndrome value with four bits
+ per byte. For even bytes, bits 0-3 are set if the relevant byte matched the
+ requested character or the byte is NUL. Bits 4-7 must be zero. Bits 4-7 are
+ set likewise for odd bytes so that adjacent bytes can be merged. Since the
+ bits in the syndrome reflect the order in which things occur in the original
+ string, counting trailing zeros identifies exactly which byte matched. */
+
+ENTRY (__memchr_aarch64_mte)
+ PTR_ARG (0)
+ SIZE_ARG (2)
+ bic src, srcin, 15
+ cbz cntin, L(nomatch)
+ ld1 {vdata.16b}, [src]
+ dup vrepchr.16b, chrin
+ mov wtmp, 0xf00f
+ dup vrepmask.8h, wtmp
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ lsl shift, srcin, 2
+ and vhas_chr.16b, vhas_chr.16b, vrepmask.16b
+ addp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov synd, dend
+ lsr synd, synd, shift
+ cbz synd, L(start_loop)
+
+ rbit synd, synd
+ clz synd, synd
+ add result, srcin, synd, lsr 2
+ cmp cntin, synd, lsr 2
+ csel result, result, xzr, hi
+ ret
+
+L(start_loop):
+ sub tmp, src, srcin
+ add tmp, tmp, 16
+ subs cntrem, cntin, tmp
+ b.ls L(nomatch)
+
+ /* Make sure that it won't overread by a 16-byte chunk */
+ add tmp, cntrem, 15
+ tbnz tmp, 4, L(loop32_2)
+
+ .p2align 4
+L(loop32):
+ ldr qdata, [src, 16]!
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ umaxp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov synd, dend
+ cbnz synd, L(end)
+
+L(loop32_2):
+ ldr qdata, [src, 16]!
+ subs cntrem, cntrem, 32
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ b.ls L(end)
+ umaxp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov synd, dend
+ cbz synd, L(loop32)
+L(end):
+ and vhas_chr.16b, vhas_chr.16b, vrepmask.16b
+ addp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov synd, dend
+ add tmp, srcin, cntin
+ sub cntrem, tmp, src
+#ifndef __AARCH64EB__
+ rbit synd, synd
+#endif
+ clz synd, synd
+ cmp cntrem, synd, lsr 2
+ add result, src, synd, lsr 2
+ csel result, result, xzr, hi
+ ret
+
+L(nomatch):
+ mov result, 0
+ ret
+
+END (__memchr_aarch64_mte)
+
diff --git a/string/aarch64/memchr-sve.S b/string/aarch64/memchr-sve.S
new file mode 100644
index 000000000000..c22e6596f19b
--- /dev/null
+++ b/string/aarch64/memchr-sve.S
@@ -0,0 +1,64 @@
+/*
+ * memchr - find a character in a memory zone
+ *
+ * Copyright (c) 2018-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "../asmdefs.h"
+
+#if __ARM_FEATURE_SVE
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * SVE Available.
+ */
+
+ENTRY (__memchr_aarch64_sve)
+ PTR_ARG (0)
+ SIZE_ARG (2)
+ dup z1.b, w1 /* duplicate c to a vector */
+ setffr /* initialize FFR */
+ mov x3, 0 /* initialize off */
+
+ .p2align 4
+0: whilelo p1.b, x3, x2 /* make sure off < max */
+ b.none 9f
+
+ /* Read a vector's worth of bytes, bounded by max,
+ stopping on first fault. */
+ ldff1b z0.b, p1/z, [x0, x3]
+ rdffrs p0.b, p1/z
+ b.nlast 2f
+
+ /* First fault did not fail: the vector bounded by max is valid.
+ Avoid depending on the contents of FFR beyond the branch. */
+ incb x3 /* speculate increment */
+ cmpeq p2.b, p1/z, z0.b, z1.b /* search for c */
+ b.none 0b
+ decb x3 /* undo speculate */
+
+ /* Found C. */
+1: brkb p2.b, p1/z, p2.b /* find the first c */
+ add x0, x0, x3 /* form partial pointer */
+ incp x0, p2.b /* form final pointer to c */
+ ret
+
+ /* First fault failed: only some of the vector is valid.
+ Perform the comparision only on the valid bytes. */
+2: cmpeq p2.b, p0/z, z0.b, z1.b
+ b.any 1b
+
+ /* No C found. Re-init FFR, increment, and loop. */
+ setffr
+ incp x3, p0.b
+ b 0b
+
+ /* Found end of count. */
+9: mov x0, 0 /* return null */
+ ret
+
+END (__memchr_aarch64_sve)
+
+#endif
+
diff --git a/string/aarch64/memchr.S b/string/aarch64/memchr.S
new file mode 100644
index 000000000000..353f0d1eac53
--- /dev/null
+++ b/string/aarch64/memchr.S
@@ -0,0 +1,146 @@
+/*
+ * memchr - find a character in a memory zone
+ *
+ * Copyright (c) 2014-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * Neon Available.
+ */
+
+#include "../asmdefs.h"
+
+/* Arguments and results. */
+#define srcin x0
+#define chrin w1
+#define cntin x2
+
+#define result x0
+
+#define src x3
+#define tmp x4
+#define wtmp2 w5
+#define synd x6
+#define soff x9
+#define cntrem x10
+
+#define vrepchr v0
+#define vdata1 v1
+#define vdata2 v2
+#define vhas_chr1 v3
+#define vhas_chr2 v4
+#define vrepmask v5
+#define vend v6
+
+/*
+ * Core algorithm:
+ *
+ * For each 32-byte chunk we calculate a 64-bit syndrome value, with two bits
+ * per byte. For each tuple, bit 0 is set if the relevant byte matched the
+ * requested character and bit 1 is not used (faster than using a 32bit
+ * syndrome). Since the bits in the syndrome reflect exactly the order in which
+ * things occur in the original string, counting trailing zeros allows to
+ * identify exactly which byte has matched.
+ */
+
+ENTRY (__memchr_aarch64)
+ PTR_ARG (0)
+ SIZE_ARG (2)
+ /* Do not dereference srcin if no bytes to compare. */
+ cbz cntin, L(zero_length)
+ /*
+ * Magic constant 0x40100401 allows us to identify which lane matches
+ * the requested byte.
+ */
+ mov wtmp2, #0x0401
+ movk wtmp2, #0x4010, lsl #16
+ dup vrepchr.16b, chrin
+ /* Work with aligned 32-byte chunks */
+ bic src, srcin, #31
+ dup vrepmask.4s, wtmp2
+ ands soff, srcin, #31
+ and cntrem, cntin, #31
+ b.eq L(loop)
+
+ /*
+ * Input string is not 32-byte aligned. We calculate the syndrome
+ * value for the aligned 32 bytes block containing the first bytes
+ * and mask the irrelevant part.
+ */
+
+ ld1 {vdata1.16b, vdata2.16b}, [src], #32
+ sub tmp, soff, #32
+ adds cntin, cntin, tmp
+ cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b
+ cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b
+ and vhas_chr1.16b, vhas_chr1.16b, vrepmask.16b
+ and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b
+ addp vend.16b, vhas_chr1.16b, vhas_chr2.16b /* 256->128 */
+ addp vend.16b, vend.16b, vend.16b /* 128->64 */
+ mov synd, vend.d[0]
+ /* Clear the soff*2 lower bits */
+ lsl tmp, soff, #1
+ lsr synd, synd, tmp
+ lsl synd, synd, tmp
+ /* The first block can also be the last */
+ b.ls L(masklast)
+ /* Have we found something already? */
+ cbnz synd, L(tail)
+
+L(loop):
+ ld1 {vdata1.16b, vdata2.16b}, [src], #32
+ subs cntin, cntin, #32
+ cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b
+ cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b
+ /* If we're out of data we finish regardless of the result */
+ b.ls L(end)
+ /* Use a fast check for the termination condition */
+ orr vend.16b, vhas_chr1.16b, vhas_chr2.16b
+ addp vend.2d, vend.2d, vend.2d
+ mov synd, vend.d[0]
+ /* We're not out of data, loop if we haven't found the character */
+ cbz synd, L(loop)
+
+L(end):
+ /* Termination condition found, let's calculate the syndrome value */
+ and vhas_chr1.16b, vhas_chr1.16b, vrepmask.16b
+ and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b
+ addp vend.16b, vhas_chr1.16b, vhas_chr2.16b /* 256->128 */
+ addp vend.16b, vend.16b, vend.16b /* 128->64 */
+ mov synd, vend.d[0]
+ /* Only do the clear for the last possible block */
+ b.hs L(tail)
+
+L(masklast):
+ /* Clear the (32 - ((cntrem + soff) % 32)) * 2 upper bits */
+ add tmp, cntrem, soff
+ and tmp, tmp, #31
+ sub tmp, tmp, #32
+ neg tmp, tmp, lsl #1
+ lsl synd, synd, tmp
+ lsr synd, synd, tmp
+
+L(tail):
+ /* Count the trailing zeros using bit reversing */
+ rbit synd, synd
+ /* Compensate the last post-increment */
+ sub src, src, #32
+ /* Check that we have found a character */
+ cmp synd, #0
+ /* And count the leading zeros */
+ clz synd, synd
+ /* Compute the potential result */
+ add result, src, synd, lsr #1
+ /* Select result or NULL */
+ csel result, xzr, result, eq
+ ret
+
+L(zero_length):
+ mov result, #0
+ ret
+
+END (__memchr_aarch64)
+
diff --git a/string/aarch64/memcmp-sve.S b/string/aarch64/memcmp-sve.S
new file mode 100644
index 000000000000..78c5ecaa4cdc
--- /dev/null
+++ b/string/aarch64/memcmp-sve.S
@@ -0,0 +1,51 @@
+/*
+ * memcmp - compare memory
+ *
+ * Copyright (c) 2018-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "../asmdefs.h"
+
+#if __ARM_FEATURE_SVE
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * SVE Available.
+ */
+
+ENTRY (__memcmp_aarch64_sve)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ SIZE_ARG (2)
+ mov x3, 0 /* initialize off */
+
+0: whilelo p0.b, x3, x2 /* while off < max */
+ b.none 9f
+
+ ld1b z0.b, p0/z, [x0, x3] /* read vectors bounded by max. */
+ ld1b z1.b, p0/z, [x1, x3]
+
+ /* Increment for a whole vector, even if we've only read a partial.
+ This is significantly cheaper than INCP, and since OFF is not
+ used after the loop it is ok to increment OFF past MAX. */
+ incb x3
+
+ cmpne p1.b, p0/z, z0.b, z1.b /* while no inequalities */
+ b.none 0b
+
+ /* Found inequality. */
+1: brkb p1.b, p0/z, p1.b /* find first such */
+ lasta w0, p1, z0.b /* extract each byte */
+ lasta w1, p1, z1.b
+ sub x0, x0, x1 /* return comparison */
+ ret
+
+ /* Found end-of-count. */
+9: mov x0, 0 /* return equality */
+ ret
+
+END (__memcmp_aarch64_sve)
+
+#endif
+
diff --git a/string/aarch64/memcmp.S b/string/aarch64/memcmp.S
new file mode 100644
index 000000000000..3b1026642eee
--- /dev/null
+++ b/string/aarch64/memcmp.S
@@ -0,0 +1,137 @@
+/* memcmp - compare memory
+ *
+ * Copyright (c) 2013-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, unaligned accesses.
+ */
+
+#include "../asmdefs.h"
+
+/* Parameters and result. */
+#define src1 x0
+#define src2 x1
+#define limit x2
+#define result w0
+
+/* Internal variables. */
+#define data1 x3
+#define data1w w3
+#define data1h x4
+#define data2 x5
+#define data2w w5
+#define data2h x6
+#define tmp1 x7
+#define tmp2 x8
+
+ENTRY (__memcmp_aarch64)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ SIZE_ARG (2)
+ subs limit, limit, 8
+ b.lo L(less8)
+
+ ldr data1, [src1], 8
+ ldr data2, [src2], 8
+ cmp data1, data2
+ b.ne L(return)
+
+ subs limit, limit, 8
+ b.gt L(more16)
+
+ ldr data1, [src1, limit]
+ ldr data2, [src2, limit]
+ b L(return)
+
+L(more16):
+ ldr data1, [src1], 8
+ ldr data2, [src2], 8
+ cmp data1, data2
+ bne L(return)
+
+ /* Jump directly to comparing the last 16 bytes for 32 byte (or less)
+ strings. */
+ subs limit, limit, 16
+ b.ls L(last_bytes)
+
+ /* We overlap loads between 0-32 bytes at either side of SRC1 when we
+ try to align, so limit it only to strings larger than 128 bytes. */
+ cmp limit, 96
+ b.ls L(loop16)
+
+ /* Align src1 and adjust src2 with bytes not yet done. */
+ and tmp1, src1, 15
+ add limit, limit, tmp1
+ sub src1, src1, tmp1
+ sub src2, src2, tmp1
+
+ /* Loop performing 16 bytes per iteration using aligned src1.
+ Limit is pre-decremented by 16 and must be larger than zero.
+ Exit if <= 16 bytes left to do or if the data is not equal. */
+ .p2align 4
+L(loop16):
+ ldp data1, data1h, [src1], 16
+ ldp data2, data2h, [src2], 16
+ subs limit, limit, 16
+ ccmp data1, data2, 0, hi
+ ccmp data1h, data2h, 0, eq
+ b.eq L(loop16)
+
+ cmp data1, data2
+ bne L(return)
+ mov data1, data1h
+ mov data2, data2h
+ cmp data1, data2
+ bne L(return)
+
+ /* Compare last 1-16 bytes using unaligned access. */
+L(last_bytes):
+ add src1, src1, limit
+ add src2, src2, limit
+ ldp data1, data1h, [src1]
+ ldp data2, data2h, [src2]
+ cmp data1, data2
+ bne L(return)
+ mov data1, data1h
+ mov data2, data2h
+ cmp data1, data2
+
+ /* Compare data bytes and set return value to 0, -1 or 1. */
+L(return):
+#ifndef __AARCH64EB__
+ rev data1, data1
+ rev data2, data2
+#endif
+ cmp data1, data2
+L(ret_eq):
+ cset result, ne
+ cneg result, result, lo
+ ret
+
+ .p2align 4
+ /* Compare up to 8 bytes. Limit is [-8..-1]. */
+L(less8):
+ adds limit, limit, 4
+ b.lo L(less4)
+ ldr data1w, [src1], 4
+ ldr data2w, [src2], 4
+ cmp data1w, data2w
+ b.ne L(return)
+ sub limit, limit, 4
+L(less4):
+ adds limit, limit, 4
+ beq L(ret_eq)
+L(byte_loop):
+ ldrb data1w, [src1], 1
+ ldrb data2w, [src2], 1
+ subs limit, limit, 1
+ ccmp data1w, data2w, 0, ne /* NZCV = 0b0000. */
+ b.eq L(byte_loop)
+ sub result, data1w, data2w
+ ret
+
+END (__memcmp_aarch64)
+
diff --git a/string/aarch64/memcpy-advsimd.S b/string/aarch64/memcpy-advsimd.S
new file mode 100644
index 000000000000..f97f2c3047b9
--- /dev/null
+++ b/string/aarch64/memcpy-advsimd.S
@@ -0,0 +1,206 @@
+/*
+ * memcpy - copy memory area
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, Advanced SIMD, unaligned accesses.
+ *
+ */
+
+#include "../asmdefs.h"
+
+#define dstin x0
+#define src x1
+#define count x2
+#define dst x3
+#define srcend x4
+#define dstend x5
+#define A_l x6
+#define A_lw w6
+#define A_h x7
+#define B_l x8
+#define B_lw w8
+#define B_h x9
+#define C_lw w10
+#define tmp1 x14
+
+#define A_q q0
+#define B_q q1
+#define C_q q2
+#define D_q q3
+#define E_q q4
+#define F_q q5
+#define G_q q6
+#define H_q q7
+
+/* This implementation handles overlaps and supports both memcpy and memmove
+ from a single entry point. It uses unaligned accesses and branchless
+ sequences to keep the code small, simple and improve performance.
+
+ Copies are split into 3 main cases: small copies of up to 32 bytes, medium
+ copies of up to 128 bytes, and large copies. The overhead of the overlap
+ check is negligible since it is only required for large copies.
+
+ Large copies use a software pipelined loop processing 64 bytes per iteration.
+ The source pointer is 16-byte aligned to minimize unaligned accesses.
+ The loop tail is handled by always copying 64 bytes from the end.
+*/
+
+ENTRY_ALIAS (__memmove_aarch64_simd)
+ENTRY (__memcpy_aarch64_simd)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ SIZE_ARG (2)
+ add srcend, src, count
+ add dstend, dstin, count
+ cmp count, 128
+ b.hi L(copy_long)
+ cmp count, 32
+ b.hi L(copy32_128)
+
+ /* Small copies: 0..32 bytes. */
+ cmp count, 16
+ b.lo L(copy16)
+ ldr A_q, [src]
+ ldr B_q, [srcend, -16]
+ str A_q, [dstin]
+ str B_q, [dstend, -16]
+ ret
+
+ /* Copy 8-15 bytes. */
+L(copy16):
+ tbz count, 3, L(copy8)
+ ldr A_l, [src]
+ ldr A_h, [srcend, -8]
+ str A_l, [dstin]
+ str A_h, [dstend, -8]
+ ret
+
+ .p2align 3
+ /* Copy 4-7 bytes. */
+L(copy8):
+ tbz count, 2, L(copy4)
+ ldr A_lw, [src]
+ ldr B_lw, [srcend, -4]
+ str A_lw, [dstin]
+ str B_lw, [dstend, -4]
+ ret
+
+ /* Copy 0..3 bytes using a branchless sequence. */
+L(copy4):
+ cbz count, L(copy0)
+ lsr tmp1, count, 1
+ ldrb A_lw, [src]
+ ldrb C_lw, [srcend, -1]
+ ldrb B_lw, [src, tmp1]
+ strb A_lw, [dstin]
+ strb B_lw, [dstin, tmp1]
+ strb C_lw, [dstend, -1]
+L(copy0):
+ ret
+
+ .p2align 4
+ /* Medium copies: 33..128 bytes. */
+L(copy32_128):
+ ldp A_q, B_q, [src]
+ ldp C_q, D_q, [srcend, -32]
+ cmp count, 64
+ b.hi L(copy128)
+ stp A_q, B_q, [dstin]
+ stp C_q, D_q, [dstend, -32]
+ ret
+
+ .p2align 4
+ /* Copy 65..128 bytes. */
+L(copy128):
+ ldp E_q, F_q, [src, 32]
+ cmp count, 96
+ b.ls L(copy96)
+ ldp G_q, H_q, [srcend, -64]
+ stp G_q, H_q, [dstend, -64]
+L(copy96):
+ stp A_q, B_q, [dstin]
+ stp E_q, F_q, [dstin, 32]
+ stp C_q, D_q, [dstend, -32]
+ ret
+
+ /* Copy more than 128 bytes. */
+L(copy_long):
+ /* Use backwards copy if there is an overlap. */
+ sub tmp1, dstin, src
+ cmp tmp1, count
+ b.lo L(copy_long_backwards)
+
+ /* Copy 16 bytes and then align src to 16-byte alignment. */
+ ldr D_q, [src]
+ and tmp1, src, 15
+ bic src, src, 15
+ sub dst, dstin, tmp1
+ add count, count, tmp1 /* Count is now 16 too large. */
+ ldp A_q, B_q, [src, 16]
+ str D_q, [dstin]
+ ldp C_q, D_q, [src, 48]
+ subs count, count, 128 + 16 /* Test and readjust count. */
+ b.ls L(copy64_from_end)
+L(loop64):
+ stp A_q, B_q, [dst, 16]
+ ldp A_q, B_q, [src, 80]
+ stp C_q, D_q, [dst, 48]
+ ldp C_q, D_q, [src, 112]
+ add src, src, 64
+ add dst, dst, 64
+ subs count, count, 64
+ b.hi L(loop64)
+
+ /* Write the last iteration and copy 64 bytes from the end. */
+L(copy64_from_end):
+ ldp E_q, F_q, [srcend, -64]
+ stp A_q, B_q, [dst, 16]
+ ldp A_q, B_q, [srcend, -32]
+ stp C_q, D_q, [dst, 48]
+ stp E_q, F_q, [dstend, -64]
+ stp A_q, B_q, [dstend, -32]
+ ret
+
+ /* Large backwards copy for overlapping copies.
+ Copy 16 bytes and then align srcend to 16-byte alignment. */
+L(copy_long_backwards):
+ cbz tmp1, L(copy0)
+ ldr D_q, [srcend, -16]
+ and tmp1, srcend, 15
+ bic srcend, srcend, 15
+ sub count, count, tmp1
+ ldp A_q, B_q, [srcend, -32]
+ str D_q, [dstend, -16]
+ ldp C_q, D_q, [srcend, -64]
+ sub dstend, dstend, tmp1
+ subs count, count, 128
+ b.ls L(copy64_from_start)
+
+L(loop64_backwards):
+ str B_q, [dstend, -16]
+ str A_q, [dstend, -32]
+ ldp A_q, B_q, [srcend, -96]
+ str D_q, [dstend, -48]
+ str C_q, [dstend, -64]!
+ ldp C_q, D_q, [srcend, -128]
+ sub srcend, srcend, 64
+ subs count, count, 64
+ b.hi L(loop64_backwards)
+
+ /* Write the last iteration and copy 64 bytes from the start. */
+L(copy64_from_start):
+ ldp E_q, F_q, [src, 32]
+ stp A_q, B_q, [dstend, -32]
+ ldp A_q, B_q, [src]
+ stp C_q, D_q, [dstend, -64]
+ stp E_q, F_q, [dstin, 32]
+ stp A_q, B_q, [dstin]
+ ret
+
+END (__memcpy_aarch64_simd)
+
diff --git a/string/aarch64/memcpy.S b/string/aarch64/memcpy.S
new file mode 100644
index 000000000000..dd254f6f9929
--- /dev/null
+++ b/string/aarch64/memcpy.S
@@ -0,0 +1,243 @@
+/*
+ * memcpy - copy memory area
+ *
+ * Copyright (c) 2012-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, unaligned accesses.
+ *
+ */
+
+#include "../asmdefs.h"
+
+#define dstin x0
+#define src x1
+#define count x2
+#define dst x3
+#define srcend x4
+#define dstend x5
+#define A_l x6
+#define A_lw w6
+#define A_h x7
+#define B_l x8
+#define B_lw w8
+#define B_h x9
+#define C_l x10
+#define C_lw w10
+#define C_h x11
+#define D_l x12
+#define D_h x13
+#define E_l x14
+#define E_h x15
+#define F_l x16
+#define F_h x17
+#define G_l count
+#define G_h dst
+#define H_l src
+#define H_h srcend
+#define tmp1 x14
+
+/* This implementation handles overlaps and supports both memcpy and memmove
+ from a single entry point. It uses unaligned accesses and branchless
+ sequences to keep the code small, simple and improve performance.
+
+ Copies are split into 3 main cases: small copies of up to 32 bytes, medium
+ copies of up to 128 bytes, and large copies. The overhead of the overlap
+ check is negligible since it is only required for large copies.
+
+ Large copies use a software pipelined loop processing 64 bytes per iteration.
+ The destination pointer is 16-byte aligned to minimize unaligned accesses.
+ The loop tail is handled by always copying 64 bytes from the end.
+*/
+
+ENTRY_ALIAS (__memmove_aarch64)
+ENTRY (__memcpy_aarch64)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ SIZE_ARG (2)
+ add srcend, src, count
+ add dstend, dstin, count
+ cmp count, 128
+ b.hi L(copy_long)
+ cmp count, 32
+ b.hi L(copy32_128)
+
+ /* Small copies: 0..32 bytes. */
+ cmp count, 16
+ b.lo L(copy16)
+ ldp A_l, A_h, [src]
+ ldp D_l, D_h, [srcend, -16]
+ stp A_l, A_h, [dstin]
+ stp D_l, D_h, [dstend, -16]
+ ret
+
+ /* Copy 8-15 bytes. */
+L(copy16):
+ tbz count, 3, L(copy8)
+ ldr A_l, [src]
+ ldr A_h, [srcend, -8]
+ str A_l, [dstin]
+ str A_h, [dstend, -8]
+ ret
+
+ .p2align 3
+ /* Copy 4-7 bytes. */
+L(copy8):
+ tbz count, 2, L(copy4)
+ ldr A_lw, [src]
+ ldr B_lw, [srcend, -4]
+ str A_lw, [dstin]
+ str B_lw, [dstend, -4]
+ ret
+
+ /* Copy 0..3 bytes using a branchless sequence. */
+L(copy4):
+ cbz count, L(copy0)
+ lsr tmp1, count, 1
+ ldrb A_lw, [src]
+ ldrb C_lw, [srcend, -1]
+ ldrb B_lw, [src, tmp1]
+ strb A_lw, [dstin]
+ strb B_lw, [dstin, tmp1]
+ strb C_lw, [dstend, -1]
+L(copy0):
+ ret
+
+ .p2align 4
+ /* Medium copies: 33..128 bytes. */
+L(copy32_128):
+ ldp A_l, A_h, [src]
+ ldp B_l, B_h, [src, 16]
+ ldp C_l, C_h, [srcend, -32]
+ ldp D_l, D_h, [srcend, -16]
+ cmp count, 64
+ b.hi L(copy128)
+ stp A_l, A_h, [dstin]
+ stp B_l, B_h, [dstin, 16]
+ stp C_l, C_h, [dstend, -32]
+ stp D_l, D_h, [dstend, -16]
+ ret
+
+ .p2align 4
+ /* Copy 65..128 bytes. */
+L(copy128):
+ ldp E_l, E_h, [src, 32]
+ ldp F_l, F_h, [src, 48]
+ cmp count, 96
+ b.ls L(copy96)
+ ldp G_l, G_h, [srcend, -64]
+ ldp H_l, H_h, [srcend, -48]
+ stp G_l, G_h, [dstend, -64]
+ stp H_l, H_h, [dstend, -48]
+L(copy96):
+ stp A_l, A_h, [dstin]
+ stp B_l, B_h, [dstin, 16]
+ stp E_l, E_h, [dstin, 32]
+ stp F_l, F_h, [dstin, 48]
+ stp C_l, C_h, [dstend, -32]
+ stp D_l, D_h, [dstend, -16]
+ ret
+
+ .p2align 4
+ /* Copy more than 128 bytes. */
+L(copy_long):
+ /* Use backwards copy if there is an overlap. */
+ sub tmp1, dstin, src
+ cbz tmp1, L(copy0)
+ cmp tmp1, count
+ b.lo L(copy_long_backwards)
+
+ /* Copy 16 bytes and then align dst to 16-byte alignment. */
+
+ ldp D_l, D_h, [src]
+ and tmp1, dstin, 15
+ bic dst, dstin, 15
+ sub src, src, tmp1
+ add count, count, tmp1 /* Count is now 16 too large. */
+ ldp A_l, A_h, [src, 16]
+ stp D_l, D_h, [dstin]
+ ldp B_l, B_h, [src, 32]
+ ldp C_l, C_h, [src, 48]
+ ldp D_l, D_h, [src, 64]!
+ subs count, count, 128 + 16 /* Test and readjust count. */
+ b.ls L(copy64_from_end)
+
+L(loop64):
+ stp A_l, A_h, [dst, 16]
+ ldp A_l, A_h, [src, 16]
+ stp B_l, B_h, [dst, 32]
+ ldp B_l, B_h, [src, 32]
+ stp C_l, C_h, [dst, 48]
+ ldp C_l, C_h, [src, 48]
+ stp D_l, D_h, [dst, 64]!
+ ldp D_l, D_h, [src, 64]!
+ subs count, count, 64
+ b.hi L(loop64)
+
+ /* Write the last iteration and copy 64 bytes from the end. */
+L(copy64_from_end):
+ ldp E_l, E_h, [srcend, -64]
+ stp A_l, A_h, [dst, 16]
+ ldp A_l, A_h, [srcend, -48]
+ stp B_l, B_h, [dst, 32]
+ ldp B_l, B_h, [srcend, -32]
+ stp C_l, C_h, [dst, 48]
+ ldp C_l, C_h, [srcend, -16]
+ stp D_l, D_h, [dst, 64]
+ stp E_l, E_h, [dstend, -64]
+ stp A_l, A_h, [dstend, -48]
+ stp B_l, B_h, [dstend, -32]
+ stp C_l, C_h, [dstend, -16]
+ ret
+
+ .p2align 4
+
+ /* Large backwards copy for overlapping copies.
+ Copy 16 bytes and then align dst to 16-byte alignment. */
+L(copy_long_backwards):
+ ldp D_l, D_h, [srcend, -16]
+ and tmp1, dstend, 15
+ sub srcend, srcend, tmp1
+ sub count, count, tmp1
+ ldp A_l, A_h, [srcend, -16]
+ stp D_l, D_h, [dstend, -16]
+ ldp B_l, B_h, [srcend, -32]
+ ldp C_l, C_h, [srcend, -48]
+ ldp D_l, D_h, [srcend, -64]!
+ sub dstend, dstend, tmp1
+ subs count, count, 128
+ b.ls L(copy64_from_start)
+
+L(loop64_backwards):
+ stp A_l, A_h, [dstend, -16]
+ ldp A_l, A_h, [srcend, -16]
+ stp B_l, B_h, [dstend, -32]
+ ldp B_l, B_h, [srcend, -32]
+ stp C_l, C_h, [dstend, -48]
+ ldp C_l, C_h, [srcend, -48]
+ stp D_l, D_h, [dstend, -64]!
+ ldp D_l, D_h, [srcend, -64]!
+ subs count, count, 64
+ b.hi L(loop64_backwards)
+
+ /* Write the last iteration and copy 64 bytes from the start. */
+L(copy64_from_start):
+ ldp G_l, G_h, [src, 48]
+ stp A_l, A_h, [dstend, -16]
+ ldp A_l, A_h, [src, 32]
+ stp B_l, B_h, [dstend, -32]
+ ldp B_l, B_h, [src, 16]
+ stp C_l, C_h, [dstend, -48]
+ ldp C_l, C_h, [src]
+ stp D_l, D_h, [dstend, -64]
+ stp G_l, G_h, [dstin, 48]
+ stp A_l, A_h, [dstin, 32]
+ stp B_l, B_h, [dstin, 16]
+ stp C_l, C_h, [dstin]
+ ret
+
+END (__memcpy_aarch64)
+
diff --git a/string/aarch64/memrchr.S b/string/aarch64/memrchr.S
new file mode 100644
index 000000000000..7b4be847cecb
--- /dev/null
+++ b/string/aarch64/memrchr.S
@@ -0,0 +1,117 @@
+/*
+ * memrchr - find last character in a memory zone.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, Advanced SIMD.
+ * MTE compatible.
+ */
+
+#include "../asmdefs.h"
+
+#define srcin x0
+#define chrin w1
+#define cntin x2
+#define result x0
+
+#define src x3
+#define cntrem x4
+#define synd x5
+#define shift x6
+#define tmp x7
+#define wtmp w7
+#define end x8
+#define endm1 x9
+
+#define vrepchr v0
+#define qdata q1
+#define vdata v1
+#define vhas_chr v2
+#define vrepmask v3
+#define vend v4
+#define dend d4
+
+/*
+ Core algorithm:
+
+ For each 16-byte chunk we calculate a 64-bit syndrome value with four bits
+ per byte. For even bytes, bits 0-3 are set if the relevant byte matched the
+ requested character or the byte is NUL. Bits 4-7 must be zero. Bits 4-7 are
+ set likewise for odd bytes so that adjacent bytes can be merged. Since the
+ bits in the syndrome reflect the order in which things occur in the original
+ string, counting trailing zeros identifies exactly which byte matched. */
+
+ENTRY (__memrchr_aarch64)
+ PTR_ARG (0)
+ add end, srcin, cntin
+ sub endm1, end, 1
+ bic src, endm1, 15
+ cbz cntin, L(nomatch)
+ ld1 {vdata.16b}, [src]
+ dup vrepchr.16b, chrin
+ mov wtmp, 0xf00f
+ dup vrepmask.8h, wtmp
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ neg shift, end, lsl 2
+ and vhas_chr.16b, vhas_chr.16b, vrepmask.16b
+ addp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov synd, dend
+ lsl synd, synd, shift
+ cbz synd, L(start_loop)
+
+ clz synd, synd
+ sub result, endm1, synd, lsr 2
+ cmp cntin, synd, lsr 2
+ csel result, result, xzr, hi
+ ret
+
+L(start_loop):
+ sub tmp, end, src
+ subs cntrem, cntin, tmp
+ b.ls L(nomatch)
+
+ /* Make sure that it won't overread by a 16-byte chunk */
+ add tmp, cntrem, 15
+ tbnz tmp, 4, L(loop32_2)
+
+ .p2align 4
+L(loop32):
+ ldr qdata, [src, -16]!
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ umaxp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov synd, dend
+ cbnz synd, L(end)
+
+L(loop32_2):
+ ldr qdata, [src, -16]!
+ subs cntrem, cntrem, 32
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ b.ls L(end)
+ umaxp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov synd, dend
+ cbz synd, L(loop32)
+L(end):
+ and vhas_chr.16b, vhas_chr.16b, vrepmask.16b
+ addp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov synd, dend
+
+ add tmp, src, 15
+#ifdef __AARCH64EB__
+ rbit synd, synd
+#endif
+ clz synd, synd
+ sub tmp, tmp, synd, lsr 2
+ cmp tmp, srcin
+ csel result, tmp, xzr, hs
+ ret
+
+L(nomatch):
+ mov result, 0
+ ret
+
+END (__memrchr_aarch64)
+
diff --git a/string/aarch64/memset.S b/string/aarch64/memset.S
new file mode 100644
index 000000000000..9fcd97579913
--- /dev/null
+++ b/string/aarch64/memset.S
@@ -0,0 +1,117 @@
+/*
+ * memset - fill memory with a constant byte
+ *
+ * Copyright (c) 2012-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, Advanced SIMD, unaligned accesses.
+ *
+ */
+
+#include "../asmdefs.h"
+
+#define dstin x0
+#define val x1
+#define valw w1
+#define count x2
+#define dst x3
+#define dstend x4
+#define zva_val x5
+
+ENTRY (__memset_aarch64)
+ PTR_ARG (0)
+ SIZE_ARG (2)
+
+ dup v0.16B, valw
+ add dstend, dstin, count
+
+ cmp count, 96
+ b.hi L(set_long)
+ cmp count, 16
+ b.hs L(set_medium)
+ mov val, v0.D[0]
+
+ /* Set 0..15 bytes. */
+ tbz count, 3, 1f
+ str val, [dstin]
+ str val, [dstend, -8]
+ ret
+ .p2align 4
+1: tbz count, 2, 2f
+ str valw, [dstin]
+ str valw, [dstend, -4]
+ ret
+2: cbz count, 3f
+ strb valw, [dstin]
+ tbz count, 1, 3f
+ strh valw, [dstend, -2]
+3: ret
+
+ /* Set 17..96 bytes. */
+L(set_medium):
+ str q0, [dstin]
+ tbnz count, 6, L(set96)
+ str q0, [dstend, -16]
+ tbz count, 5, 1f
+ str q0, [dstin, 16]
+ str q0, [dstend, -32]
+1: ret
+
+ .p2align 4
+ /* Set 64..96 bytes. Write 64 bytes from the start and
+ 32 bytes from the end. */
+L(set96):
+ str q0, [dstin, 16]
+ stp q0, q0, [dstin, 32]
+ stp q0, q0, [dstend, -32]
+ ret
+
+ .p2align 4
+L(set_long):
+ and valw, valw, 255
+ bic dst, dstin, 15
+ str q0, [dstin]
+ cmp count, 160
+ ccmp valw, 0, 0, hs
+ b.ne L(no_zva)
+
+#ifndef SKIP_ZVA_CHECK
+ mrs zva_val, dczid_el0
+ and zva_val, zva_val, 31
+ cmp zva_val, 4 /* ZVA size is 64 bytes. */
+ b.ne L(no_zva)
+#endif
+ str q0, [dst, 16]
+ stp q0, q0, [dst, 32]
+ bic dst, dst, 63
+ sub count, dstend, dst /* Count is now 64 too large. */
+ sub count, count, 128 /* Adjust count and bias for loop. */
+
+ .p2align 4
+L(zva_loop):
+ add dst, dst, 64
+ dc zva, dst
+ subs count, count, 64
+ b.hi L(zva_loop)
+ stp q0, q0, [dstend, -64]
+ stp q0, q0, [dstend, -32]
+ ret
+
+L(no_zva):
+ sub count, dstend, dst /* Count is 16 too large. */
+ sub dst, dst, 16 /* Dst is biased by -32. */
+ sub count, count, 64 + 16 /* Adjust count and bias for loop. */
+L(no_zva_loop):
+ stp q0, q0, [dst, 32]
+ stp q0, q0, [dst, 64]!
+ subs count, count, 64
+ b.hi L(no_zva_loop)
+ stp q0, q0, [dstend, -64]
+ stp q0, q0, [dstend, -32]
+ ret
+
+END (__memset_aarch64)
+
diff --git a/string/aarch64/stpcpy-mte.S b/string/aarch64/stpcpy-mte.S
new file mode 100644
index 000000000000..f1c711906515
--- /dev/null
+++ b/string/aarch64/stpcpy-mte.S
@@ -0,0 +1,10 @@
+/*
+ * stpcpy - copy a string returning pointer to end.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#define BUILD_STPCPY 1
+
+#include "strcpy-mte.S"
diff --git a/string/aarch64/stpcpy-sve.S b/string/aarch64/stpcpy-sve.S
new file mode 100644
index 000000000000..82dd9717b0a0
--- /dev/null
+++ b/string/aarch64/stpcpy-sve.S
@@ -0,0 +1,10 @@
+/*
+ * stpcpy - copy a string returning pointer to end.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#define BUILD_STPCPY 1
+
+#include "strcpy-sve.S"
diff --git a/string/aarch64/stpcpy.S b/string/aarch64/stpcpy.S
new file mode 100644
index 000000000000..4f62aa462389
--- /dev/null
+++ b/string/aarch64/stpcpy.S
@@ -0,0 +1,10 @@
+/*
+ * stpcpy - copy a string returning pointer to end.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#define BUILD_STPCPY 1
+
+#include "strcpy.S"
diff --git a/string/aarch64/strchr-mte.S b/string/aarch64/strchr-mte.S
new file mode 100644
index 000000000000..dcb0e4625870
--- /dev/null
+++ b/string/aarch64/strchr-mte.S
@@ -0,0 +1,105 @@
+/*
+ * strchr - find a character in a string
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, Advanced SIMD.
+ * MTE compatible.
+ */
+
+#include "../asmdefs.h"
+
+#define srcin x0
+#define chrin w1
+#define result x0
+
+#define src x2
+#define tmp1 x1
+#define wtmp2 w3
+#define tmp3 x3
+
+#define vrepchr v0
+#define vdata v1
+#define qdata q1
+#define vhas_nul v2
+#define vhas_chr v3
+#define vrepmask v4
+#define vrepmask2 v5
+#define vend v6
+#define dend d6
+
+/* Core algorithm.
+
+ For each 16-byte chunk we calculate a 64-bit syndrome value with four bits
+ per byte. For even bytes, bits 0-1 are set if the relevant byte matched the
+ requested character, bits 2-3 are set if the byte is NUL (or matched), and
+ bits 4-7 are not used and must be zero if none of bits 0-3 are set). Odd
+ bytes set bits 4-7 so that adjacent bytes can be merged. Since the bits
+ in the syndrome reflect the order in which things occur in the original
+ string, counting trailing zeros identifies exactly which byte matched. */
+
+ENTRY (__strchr_aarch64_mte)
+ PTR_ARG (0)
+ bic src, srcin, 15
+ dup vrepchr.16b, chrin
+ ld1 {vdata.16b}, [src]
+ mov wtmp2, 0x3003
+ dup vrepmask.8h, wtmp2
+ cmeq vhas_nul.16b, vdata.16b, 0
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ mov wtmp2, 0xf00f
+ dup vrepmask2.8h, wtmp2
+
+ bit vhas_nul.16b, vhas_chr.16b, vrepmask.16b
+ and vhas_nul.16b, vhas_nul.16b, vrepmask2.16b
+ lsl tmp3, srcin, 2
+ addp vend.16b, vhas_nul.16b, vhas_nul.16b /* 128->64 */
+
+ fmov tmp1, dend
+ lsr tmp1, tmp1, tmp3
+ cbz tmp1, L(loop)
+
+ rbit tmp1, tmp1
+ clz tmp1, tmp1
+ /* Tmp1 is an even multiple of 2 if the target character was
+ found first. Otherwise we've found the end of string. */
+ tst tmp1, 2
+ add result, srcin, tmp1, lsr 2
+ csel result, result, xzr, eq
+ ret
+
+ .p2align 4
+L(loop):
+ ldr qdata, [src, 16]!
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ cmhs vhas_nul.16b, vhas_chr.16b, vdata.16b
+ umaxp vend.16b, vhas_nul.16b, vhas_nul.16b
+ fmov tmp1, dend
+ cbz tmp1, L(loop)
+
+#ifdef __AARCH64EB__
+ bif vhas_nul.16b, vhas_chr.16b, vrepmask.16b
+ and vhas_nul.16b, vhas_nul.16b, vrepmask2.16b
+ addp vend.16b, vhas_nul.16b, vhas_nul.16b /* 128->64 */
+ fmov tmp1, dend
+#else
+ bit vhas_nul.16b, vhas_chr.16b, vrepmask.16b
+ and vhas_nul.16b, vhas_nul.16b, vrepmask2.16b
+ addp vend.16b, vhas_nul.16b, vhas_nul.16b /* 128->64 */
+ fmov tmp1, dend
+ rbit tmp1, tmp1
+#endif
+ clz tmp1, tmp1
+ /* Tmp1 is an even multiple of 2 if the target character was
+ found first. Otherwise we've found the end of string. */
+ tst tmp1, 2
+ add result, src, tmp1, lsr 2
+ csel result, result, xzr, eq
+ ret
+
+END (__strchr_aarch64_mte)
+
diff --git a/string/aarch64/strchr-sve.S b/string/aarch64/strchr-sve.S
new file mode 100644
index 000000000000..13ba9f44f9c5
--- /dev/null
+++ b/string/aarch64/strchr-sve.S
@@ -0,0 +1,70 @@
+/*
+ * strchr/strchrnul - find a character in a string
+ *
+ * Copyright (c) 2018-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "../asmdefs.h"
+
+#if __ARM_FEATURE_SVE
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * SVE Available.
+ */
+
+/* To build as strchrnul, define BUILD_STRCHRNUL before compiling this file. */
+#ifdef BUILD_STRCHRNUL
+#define FUNC __strchrnul_aarch64_sve
+#else
+#define FUNC __strchr_aarch64_sve
+#endif
+
+ENTRY (FUNC)
+ PTR_ARG (0)
+ dup z1.b, w1 /* replicate byte across vector */
+ setffr /* initialize FFR */
+ ptrue p1.b /* all ones; loop invariant */
+
+ .p2align 4
+ /* Read a vector's worth of bytes, stopping on first fault. */
+0: ldff1b z0.b, p1/z, [x0, xzr]
+ rdffrs p0.b, p1/z
+ b.nlast 2f
+
+ /* First fault did not fail: the whole vector is valid.
+ Avoid depending on the contents of FFR beyond the branch. */
+ incb x0 /* speculate increment */
+ cmpeq p2.b, p1/z, z0.b, z1.b /* search for c */
+ cmpeq p3.b, p1/z, z0.b, 0 /* search for 0 */
+ orrs p4.b, p1/z, p2.b, p3.b /* c | 0 */
+ b.none 0b
+ decb x0 /* undo speculate */
+
+ /* Found C or 0. */
+1: brka p4.b, p1/z, p4.b /* find first such */
+ sub x0, x0, 1 /* adjust pointer for that byte */
+ incp x0, p4.b
+#ifndef BUILD_STRCHRNUL
+ ptest p4, p2.b /* was first in c? */
+ csel x0, xzr, x0, none /* if there was no c, return null */
+#endif
+ ret
+
+ /* First fault failed: only some of the vector is valid.
+ Perform the comparision only on the valid bytes. */
+2: cmpeq p2.b, p0/z, z0.b, z1.b /* search for c */
+ cmpeq p3.b, p0/z, z0.b, 0 /* search for 0 */
+ orrs p4.b, p0/z, p2.b, p3.b /* c | 0 */
+ b.any 1b
+
+ /* No C or 0 found. Re-init FFR, increment, and loop. */
+ setffr
+ incp x0, p0.b
+ b 0b
+
+END (FUNC)
+
+#endif
+
diff --git a/string/aarch64/strchr.S b/string/aarch64/strchr.S
new file mode 100644
index 000000000000..1063cbfd77aa
--- /dev/null
+++ b/string/aarch64/strchr.S
@@ -0,0 +1,126 @@
+/*
+ * strchr - find a character in a string
+ *
+ * Copyright (c) 2014-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * Neon Available.
+ */
+
+#include "../asmdefs.h"
+
+/* Arguments and results. */
+#define srcin x0
+#define chrin w1
+
+#define result x0
+
+#define src x2
+#define tmp1 x3
+#define wtmp2 w4
+#define tmp3 x5
+
+#define vrepchr v0
+#define vdata1 v1
+#define vdata2 v2
+#define vhas_nul1 v3
+#define vhas_nul2 v4
+#define vhas_chr1 v5
+#define vhas_chr2 v6
+#define vrepmask_0 v7
+#define vrepmask_c v16
+#define vend1 v17
+#define vend2 v18
+
+/* Core algorithm.
+
+ For each 32-byte hunk we calculate a 64-bit syndrome value, with
+ two bits per byte (LSB is always in bits 0 and 1, for both big
+ and little-endian systems). For each tuple, bit 0 is set iff
+ the relevant byte matched the requested character; bit 1 is set
+ iff the relevant byte matched the NUL end of string (we trigger
+ off bit0 for the special case of looking for NUL). Since the bits
+ in the syndrome reflect exactly the order in which things occur
+ in the original string a count_trailing_zeros() operation will
+ identify exactly which byte is causing the termination, and why. */
+
+/* Locals and temporaries. */
+
+ENTRY (__strchr_aarch64)
+ PTR_ARG (0)
+ /* Magic constant 0xc0300c03 to allow us to identify which lane
+ matches the requested byte. Even bits are set if the character
+ matches, odd bits if either the char is NUL or matches. */
+ mov wtmp2, 0x0c03
+ movk wtmp2, 0xc030, lsl 16
+ dup vrepchr.16b, chrin
+ bic src, srcin, #31 /* Work with aligned 32-byte hunks. */
+ dup vrepmask_c.4s, wtmp2
+ ands tmp1, srcin, #31
+ add vrepmask_0.4s, vrepmask_c.4s, vrepmask_c.4s /* equiv: lsl #1 */
+ b.eq L(loop)
+
+ /* Input string is not 32-byte aligned. Rather than forcing
+ the padding bytes to a safe value, we calculate the syndrome
+ for all the bytes, but then mask off those bits of the
+ syndrome that are related to the padding. */
+ ld1 {vdata1.16b, vdata2.16b}, [src], #32
+ neg tmp1, tmp1
+ cmeq vhas_nul1.16b, vdata1.16b, #0
+ cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b
+ cmeq vhas_nul2.16b, vdata2.16b, #0
+ cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b
+ bif vhas_nul1.16b, vhas_chr1.16b, vrepmask_0.16b
+ bif vhas_nul2.16b, vhas_chr2.16b, vrepmask_0.16b
+ and vend1.16b, vhas_nul1.16b, vrepmask_c.16b
+ and vend2.16b, vhas_nul2.16b, vrepmask_c.16b
+ lsl tmp1, tmp1, #1
+ addp vend1.16b, vend1.16b, vend2.16b // 256->128
+ mov tmp3, #~0
+ addp vend1.16b, vend1.16b, vend2.16b // 128->64
+ lsr tmp1, tmp3, tmp1
+
+ mov tmp3, vend1.d[0]
+ bic tmp1, tmp3, tmp1 // Mask padding bits.
+ cbnz tmp1, L(tail)
+
+ .p2align 4
+L(loop):
+ ld1 {vdata1.16b, vdata2.16b}, [src], #32
+ cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b
+ cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b
+ cmhs vhas_nul1.16b, vhas_chr1.16b, vdata1.16b
+ cmhs vhas_nul2.16b, vhas_chr2.16b, vdata2.16b
+ orr vend1.16b, vhas_nul1.16b, vhas_nul2.16b
+ umaxp vend1.16b, vend1.16b, vend1.16b
+ mov tmp1, vend1.d[0]
+ cbz tmp1, L(loop)
+
+ /* Termination condition found. Now need to establish exactly why
+ we terminated. */
+ bif vhas_nul1.16b, vhas_chr1.16b, vrepmask_0.16b
+ bif vhas_nul2.16b, vhas_chr2.16b, vrepmask_0.16b
+ and vend1.16b, vhas_nul1.16b, vrepmask_c.16b
+ and vend2.16b, vhas_nul2.16b, vrepmask_c.16b
+ addp vend1.16b, vend1.16b, vend2.16b // 256->128
+ addp vend1.16b, vend1.16b, vend2.16b // 128->64
+ mov tmp1, vend1.d[0]
+L(tail):
+ /* Count the trailing zeros, by bit reversing... */
+ rbit tmp1, tmp1
+ /* Re-bias source. */
+ sub src, src, #32
+ clz tmp1, tmp1 /* And counting the leading zeros. */
+ /* Tmp1 is even if the target charager was found first. Otherwise
+ we've found the end of string and we weren't looking for NUL. */
+ tst tmp1, #1
+ add result, src, tmp1, lsr #1
+ csel result, result, xzr, eq
+ ret
+
+END (__strchr_aarch64)
+
diff --git a/string/aarch64/strchrnul-mte.S b/string/aarch64/strchrnul-mte.S
new file mode 100644
index 000000000000..1b0d0a63094c
--- /dev/null
+++ b/string/aarch64/strchrnul-mte.S
@@ -0,0 +1,84 @@
+/*
+ * strchrnul - find a character or nul in a string
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, Advanced SIMD.
+ * MTE compatible.
+ */
+
+#include "../asmdefs.h"
+
+#define srcin x0
+#define chrin w1
+#define result x0
+
+#define src x2
+#define tmp1 x1
+#define tmp2 x3
+#define tmp2w w3
+
+#define vrepchr v0
+#define vdata v1
+#define qdata q1
+#define vhas_nul v2
+#define vhas_chr v3
+#define vrepmask v4
+#define vend v5
+#define dend d5
+
+/* Core algorithm:
+
+ For each 16-byte chunk we calculate a 64-bit syndrome value with four bits
+ per byte. For even bytes, bits 0-3 are set if the relevant byte matched the
+ requested character or the byte is NUL. Bits 4-7 must be zero. Bits 4-7 are
+ set likewise for odd bytes so that adjacent bytes can be merged. Since the
+ bits in the syndrome reflect the order in which things occur in the original
+ string, counting trailing zeros identifies exactly which byte matched. */
+
+ENTRY (__strchrnul_aarch64_mte)
+ PTR_ARG (0)
+ bic src, srcin, 15
+ dup vrepchr.16b, chrin
+ ld1 {vdata.16b}, [src]
+ mov tmp2w, 0xf00f
+ dup vrepmask.8h, tmp2w
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ cmhs vhas_chr.16b, vhas_chr.16b, vdata.16b
+ lsl tmp2, srcin, 2
+ and vhas_chr.16b, vhas_chr.16b, vrepmask.16b
+ addp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov tmp1, dend
+ lsr tmp1, tmp1, tmp2 /* Mask padding bits. */
+ cbz tmp1, L(loop)
+
+ rbit tmp1, tmp1
+ clz tmp1, tmp1
+ add result, srcin, tmp1, lsr 2
+ ret
+
+ .p2align 4
+L(loop):
+ ldr qdata, [src, 16]!
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ cmhs vhas_chr.16b, vhas_chr.16b, vdata.16b
+ umaxp vend.16b, vhas_chr.16b, vhas_chr.16b
+ fmov tmp1, dend
+ cbz tmp1, L(loop)
+
+ and vhas_chr.16b, vhas_chr.16b, vrepmask.16b
+ addp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov tmp1, dend
+#ifndef __AARCH64EB__
+ rbit tmp1, tmp1
+#endif
+ clz tmp1, tmp1
+ add result, src, tmp1, lsr 2
+ ret
+
+END (__strchrnul_aarch64_mte)
+
diff --git a/string/aarch64/strchrnul-sve.S b/string/aarch64/strchrnul-sve.S
new file mode 100644
index 000000000000..428ff1a3d008
--- /dev/null
+++ b/string/aarch64/strchrnul-sve.S
@@ -0,0 +1,9 @@
+/*
+ * strchrnul - find a character or nul in a string
+ *
+ * Copyright (c) 2018-2019, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#define BUILD_STRCHRNUL
+#include "strchr-sve.S"
diff --git a/string/aarch64/strchrnul.S b/string/aarch64/strchrnul.S
new file mode 100644
index 000000000000..a4230d919b47
--- /dev/null
+++ b/string/aarch64/strchrnul.S
@@ -0,0 +1,114 @@
+/*
+ * strchrnul - find a character or nul in a string
+ *
+ * Copyright (c) 2014-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * Neon Available.
+ */
+
+#include "../asmdefs.h"
+
+/* Arguments and results. */
+#define srcin x0
+#define chrin w1
+
+#define result x0
+
+#define src x2
+#define tmp1 x3
+#define wtmp2 w4
+#define tmp3 x5
+
+#define vrepchr v0
+#define vdata1 v1
+#define vdata2 v2
+#define vhas_nul1 v3
+#define vhas_nul2 v4
+#define vhas_chr1 v5
+#define vhas_chr2 v6
+#define vrepmask v7
+#define vend1 v16
+
+/* Core algorithm.
+
+ For each 32-byte hunk we calculate a 64-bit syndrome value, with
+ two bits per byte (LSB is always in bits 0 and 1, for both big
+ and little-endian systems). For each tuple, bit 0 is set iff
+ the relevant byte matched the requested character or nul. Since the
+ bits in the syndrome reflect exactly the order in which things occur
+ in the original string a count_trailing_zeros() operation will
+ identify exactly which byte is causing the termination. */
+
+/* Locals and temporaries. */
+
+ENTRY (__strchrnul_aarch64)
+ PTR_ARG (0)
+ /* Magic constant 0x40100401 to allow us to identify which lane
+ matches the termination condition. */
+ mov wtmp2, #0x0401
+ movk wtmp2, #0x4010, lsl #16
+ dup vrepchr.16b, chrin
+ bic src, srcin, #31 /* Work with aligned 32-byte hunks. */
+ dup vrepmask.4s, wtmp2
+ ands tmp1, srcin, #31
+ b.eq L(loop)
+
+ /* Input string is not 32-byte aligned. Rather than forcing
+ the padding bytes to a safe value, we calculate the syndrome
+ for all the bytes, but then mask off those bits of the
+ syndrome that are related to the padding. */
+ ld1 {vdata1.16b, vdata2.16b}, [src], #32
+ neg tmp1, tmp1
+ cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b
+ cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b
+ cmhs vhas_nul1.16b, vhas_chr1.16b, vdata1.16b
+ cmhs vhas_nul2.16b, vhas_chr2.16b, vdata2.16b
+ and vhas_chr1.16b, vhas_nul1.16b, vrepmask.16b
+ and vhas_chr2.16b, vhas_nul2.16b, vrepmask.16b
+ lsl tmp1, tmp1, #1
+ addp vend1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128
+ mov tmp3, #~0
+ addp vend1.16b, vend1.16b, vend1.16b // 128->64
+ lsr tmp1, tmp3, tmp1
+
+ mov tmp3, vend1.d[0]
+ bic tmp1, tmp3, tmp1 // Mask padding bits.
+ cbnz tmp1, L(tail)
+
+ .p2align 4
+L(loop):
+ ld1 {vdata1.16b, vdata2.16b}, [src], #32
+ cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b
+ cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b
+ cmhs vhas_nul1.16b, vhas_chr1.16b, vdata1.16b
+ cmhs vhas_nul2.16b, vhas_chr2.16b, vdata2.16b
+ orr vend1.16b, vhas_nul1.16b, vhas_nul2.16b
+ umaxp vend1.16b, vend1.16b, vend1.16b
+ mov tmp1, vend1.d[0]
+ cbz tmp1, L(loop)
+
+ /* Termination condition found. Now need to establish exactly why
+ we terminated. */
+ and vhas_chr1.16b, vhas_nul1.16b, vrepmask.16b
+ and vhas_chr2.16b, vhas_nul2.16b, vrepmask.16b
+ addp vend1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128
+ addp vend1.16b, vend1.16b, vend1.16b // 128->64
+
+ mov tmp1, vend1.d[0]
+L(tail):
+ /* Count the trailing zeros, by bit reversing... */
+ rbit tmp1, tmp1
+ /* Re-bias source. */
+ sub src, src, #32
+ clz tmp1, tmp1 /* ... and counting the leading zeros. */
+ /* tmp1 is twice the offset into the fragment. */
+ add result, src, tmp1, lsr #1
+ ret
+
+END (__strchrnul_aarch64)
+
diff --git a/string/aarch64/strcmp-mte.S b/string/aarch64/strcmp-mte.S
new file mode 100644
index 000000000000..12d1a6b51dd3
--- /dev/null
+++ b/string/aarch64/strcmp-mte.S
@@ -0,0 +1,189 @@
+/*
+ * strcmp - compare two strings
+ *
+ * Copyright (c) 2012-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64.
+ * MTE compatible.
+ */
+
+#include "../asmdefs.h"
+
+#define REP8_01 0x0101010101010101
+#define REP8_7f 0x7f7f7f7f7f7f7f7f
+
+#define src1 x0
+#define src2 x1
+#define result x0
+
+#define data1 x2
+#define data1w w2
+#define data2 x3
+#define data2w w3
+#define has_nul x4
+#define diff x5
+#define off1 x5
+#define syndrome x6
+#define tmp x6
+#define data3 x7
+#define zeroones x8
+#define shift x9
+#define off2 x10
+
+/* On big-endian early bytes are at MSB and on little-endian LSB.
+ LS_FW means shifting towards early bytes. */
+#ifdef __AARCH64EB__
+# define LS_FW lsl
+#else
+# define LS_FW lsr
+#endif
+
+/* NUL detection works on the principle that (X - 1) & (~X) & 0x80
+ (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and
+ can be done in parallel across the entire word.
+ Since carry propagation makes 0x1 bytes before a NUL byte appear
+ NUL too in big-endian, byte-reverse the data before the NUL check. */
+
+
+ENTRY (__strcmp_aarch64_mte)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ sub off2, src2, src1
+ mov zeroones, REP8_01
+ and tmp, src1, 7
+ tst off2, 7
+ b.ne L(misaligned8)
+ cbnz tmp, L(mutual_align)
+
+ .p2align 4
+
+L(loop_aligned):
+ ldr data2, [src1, off2]
+ ldr data1, [src1], 8
+L(start_realigned):
+#ifdef __AARCH64EB__
+ rev tmp, data1
+ sub has_nul, tmp, zeroones
+ orr tmp, tmp, REP8_7f
+#else
+ sub has_nul, data1, zeroones
+ orr tmp, data1, REP8_7f
+#endif
+ bics has_nul, has_nul, tmp /* Non-zero if NUL terminator. */
+ ccmp data1, data2, 0, eq
+ b.eq L(loop_aligned)
+#ifdef __AARCH64EB__
+ rev has_nul, has_nul
+#endif
+ eor diff, data1, data2
+ orr syndrome, diff, has_nul
+L(end):
+#ifndef __AARCH64EB__
+ rev syndrome, syndrome
+ rev data1, data1
+ rev data2, data2
+#endif
+ clz shift, syndrome
+ /* The most-significant-non-zero bit of the syndrome marks either the
+ first bit that is different, or the top bit of the first zero byte.
+ Shifting left now will bring the critical information into the
+ top bits. */
+ lsl data1, data1, shift
+ lsl data2, data2, shift
+ /* But we need to zero-extend (char is unsigned) the value and then
+ perform a signed 32-bit subtraction. */
+ lsr data1, data1, 56
+ sub result, data1, data2, lsr 56
+ ret
+
+ .p2align 4
+
+L(mutual_align):
+ /* Sources are mutually aligned, but are not currently at an
+ alignment boundary. Round down the addresses and then mask off
+ the bytes that precede the start point. */
+ bic src1, src1, 7
+ ldr data2, [src1, off2]
+ ldr data1, [src1], 8
+ neg shift, src2, lsl 3 /* Bits to alignment -64. */
+ mov tmp, -1
+ LS_FW tmp, tmp, shift
+ orr data1, data1, tmp
+ orr data2, data2, tmp
+ b L(start_realigned)
+
+L(misaligned8):
+ /* Align SRC1 to 8 bytes and then compare 8 bytes at a time, always
+ checking to make sure that we don't access beyond the end of SRC2. */
+ cbz tmp, L(src1_aligned)
+L(do_misaligned):
+ ldrb data1w, [src1], 1
+ ldrb data2w, [src2], 1
+ cmp data1w, 0
+ ccmp data1w, data2w, 0, ne /* NZCV = 0b0000. */
+ b.ne L(done)
+ tst src1, 7
+ b.ne L(do_misaligned)
+
+L(src1_aligned):
+ neg shift, src2, lsl 3
+ bic src2, src2, 7
+ ldr data3, [src2], 8
+#ifdef __AARCH64EB__
+ rev data3, data3
+#endif
+ lsr tmp, zeroones, shift
+ orr data3, data3, tmp
+ sub has_nul, data3, zeroones
+ orr tmp, data3, REP8_7f
+ bics has_nul, has_nul, tmp
+ b.ne L(tail)
+
+ sub off1, src2, src1
+
+ .p2align 4
+
+L(loop_unaligned):
+ ldr data3, [src1, off1]
+ ldr data2, [src1, off2]
+#ifdef __AARCH64EB__
+ rev data3, data3
+#endif
+ sub has_nul, data3, zeroones
+ orr tmp, data3, REP8_7f
+ ldr data1, [src1], 8
+ bics has_nul, has_nul, tmp
+ ccmp data1, data2, 0, eq
+ b.eq L(loop_unaligned)
+
+ lsl tmp, has_nul, shift
+#ifdef __AARCH64EB__
+ rev tmp, tmp
+#endif
+ eor diff, data1, data2
+ orr syndrome, diff, tmp
+ cbnz syndrome, L(end)
+L(tail):
+ ldr data1, [src1]
+ neg shift, shift
+ lsr data2, data3, shift
+ lsr has_nul, has_nul, shift
+#ifdef __AARCH64EB__
+ rev data2, data2
+ rev has_nul, has_nul
+#endif
+ eor diff, data1, data2
+ orr syndrome, diff, has_nul
+ b L(end)
+
+L(done):
+ sub result, data1, data2
+ ret
+
+END (__strcmp_aarch64_mte)
+
diff --git a/string/aarch64/strcmp-sve.S b/string/aarch64/strcmp-sve.S
new file mode 100644
index 000000000000..e6d2da5411ca
--- /dev/null
+++ b/string/aarch64/strcmp-sve.S
@@ -0,0 +1,59 @@
+/*
+ * __strcmp_aarch64_sve - compare two strings
+ *
+ * Copyright (c) 2018-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "../asmdefs.h"
+
+#if __ARM_FEATURE_SVE
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * SVE Available.
+ */
+
+ENTRY (__strcmp_aarch64_sve)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ setffr /* initialize FFR */
+ ptrue p1.b, all /* all ones; loop invariant */
+ mov x2, 0 /* initialize offset */
+
+ /* Read a vector's worth of bytes, stopping on first fault. */
+ .p2align 4
+0: ldff1b z0.b, p1/z, [x0, x2]
+ ldff1b z1.b, p1/z, [x1, x2]
+ rdffrs p0.b, p1/z
+ b.nlast 2f
+
+ /* First fault did not fail: the whole vector is valid.
+ Avoid depending on the contents of FFR beyond the branch. */
+ incb x2, all /* skip bytes for next round */
+ cmpeq p2.b, p1/z, z0.b, z1.b /* compare strings */
+ cmpne p3.b, p1/z, z0.b, 0 /* search for ~zero */
+ nands p2.b, p1/z, p2.b, p3.b /* ~(eq & ~zero) -> ne | zero */
+ b.none 0b
+
+ /* Found end-of-string or inequality. */
+1: brkb p2.b, p1/z, p2.b /* find first such */
+ lasta w0, p2, z0.b /* extract each char */
+ lasta w1, p2, z1.b
+ sub x0, x0, x1 /* return comparison */
+ ret
+
+ /* First fault failed: only some of the vector is valid.
+ Perform the comparison only on the valid bytes. */
+2: incp x2, p0.b /* skip bytes for next round */
+ setffr /* re-init FFR for next round */
+ cmpeq p2.b, p0/z, z0.b, z1.b /* compare strings, as above */
+ cmpne p3.b, p0/z, z0.b, 0
+ nands p2.b, p0/z, p2.b, p3.b
+ b.none 0b
+ b 1b
+
+END (__strcmp_aarch64_sve)
+
+#endif
+
diff --git a/string/aarch64/strcmp.S b/string/aarch64/strcmp.S
new file mode 100644
index 000000000000..7714ebf5577d
--- /dev/null
+++ b/string/aarch64/strcmp.S
@@ -0,0 +1,173 @@
+/*
+ * strcmp - compare two strings
+ *
+ * Copyright (c) 2012-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ */
+
+#include "../asmdefs.h"
+
+#define REP8_01 0x0101010101010101
+#define REP8_7f 0x7f7f7f7f7f7f7f7f
+#define REP8_80 0x8080808080808080
+
+/* Parameters and result. */
+#define src1 x0
+#define src2 x1
+#define result x0
+
+/* Internal variables. */
+#define data1 x2
+#define data1w w2
+#define data2 x3
+#define data2w w3
+#define has_nul x4
+#define diff x5
+#define syndrome x6
+#define tmp1 x7
+#define tmp2 x8
+#define tmp3 x9
+#define zeroones x10
+#define pos x11
+
+ /* Start of performance-critical section -- one 64B cache line. */
+ENTRY (__strcmp_aarch64)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ eor tmp1, src1, src2
+ mov zeroones, #REP8_01
+ tst tmp1, #7
+ b.ne L(misaligned8)
+ ands tmp1, src1, #7
+ b.ne L(mutual_align)
+ /* NUL detection works on the principle that (X - 1) & (~X) & 0x80
+ (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and
+ can be done in parallel across the entire word. */
+L(loop_aligned):
+ ldr data1, [src1], #8
+ ldr data2, [src2], #8
+L(start_realigned):
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, #REP8_7f
+ eor diff, data1, data2 /* Non-zero if differences found. */
+ bic has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */
+ orr syndrome, diff, has_nul
+ cbz syndrome, L(loop_aligned)
+ /* End of performance-critical section -- one 64B cache line. */
+
+L(end):
+#ifndef __AARCH64EB__
+ rev syndrome, syndrome
+ rev data1, data1
+ /* The MS-non-zero bit of the syndrome marks either the first bit
+ that is different, or the top bit of the first zero byte.
+ Shifting left now will bring the critical information into the
+ top bits. */
+ clz pos, syndrome
+ rev data2, data2
+ lsl data1, data1, pos
+ lsl data2, data2, pos
+ /* But we need to zero-extend (char is unsigned) the value and then
+ perform a signed 32-bit subtraction. */
+ lsr data1, data1, #56
+ sub result, data1, data2, lsr #56
+ ret
+#else
+ /* For big-endian we cannot use the trick with the syndrome value
+ as carry-propagation can corrupt the upper bits if the trailing
+ bytes in the string contain 0x01. */
+ /* However, if there is no NUL byte in the dword, we can generate
+ the result directly. We can't just subtract the bytes as the
+ MSB might be significant. */
+ cbnz has_nul, 1f
+ cmp data1, data2
+ cset result, ne
+ cneg result, result, lo
+ ret
+1:
+ /* Re-compute the NUL-byte detection, using a byte-reversed value. */
+ rev tmp3, data1
+ sub tmp1, tmp3, zeroones
+ orr tmp2, tmp3, #REP8_7f
+ bic has_nul, tmp1, tmp2
+ rev has_nul, has_nul
+ orr syndrome, diff, has_nul
+ clz pos, syndrome
+ /* The MS-non-zero bit of the syndrome marks either the first bit
+ that is different, or the top bit of the first zero byte.
+ Shifting left now will bring the critical information into the
+ top bits. */
+ lsl data1, data1, pos
+ lsl data2, data2, pos
+ /* But we need to zero-extend (char is unsigned) the value and then
+ perform a signed 32-bit subtraction. */
+ lsr data1, data1, #56
+ sub result, data1, data2, lsr #56
+ ret
+#endif
+
+L(mutual_align):
+ /* Sources are mutually aligned, but are not currently at an
+ alignment boundary. Round down the addresses and then mask off
+ the bytes that preceed the start point. */
+ bic src1, src1, #7
+ bic src2, src2, #7
+ lsl tmp1, tmp1, #3 /* Bytes beyond alignment -> bits. */
+ ldr data1, [src1], #8
+ neg tmp1, tmp1 /* Bits to alignment -64. */
+ ldr data2, [src2], #8
+ mov tmp2, #~0
+#ifdef __AARCH64EB__
+ /* Big-endian. Early bytes are at MSB. */
+ lsl tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */
+#else
+ /* Little-endian. Early bytes are at LSB. */
+ lsr tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */
+#endif
+ orr data1, data1, tmp2
+ orr data2, data2, tmp2
+ b L(start_realigned)
+
+L(misaligned8):
+ /* Align SRC1 to 8 bytes and then compare 8 bytes at a time, always
+ checking to make sure that we don't access beyond page boundary in
+ SRC2. */
+ tst src1, #7
+ b.eq L(loop_misaligned)
+L(do_misaligned):
+ ldrb data1w, [src1], #1
+ ldrb data2w, [src2], #1
+ cmp data1w, #1
+ ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */
+ b.ne L(done)
+ tst src1, #7
+ b.ne L(do_misaligned)
+
+L(loop_misaligned):
+ /* Test if we are within the last dword of the end of a 4K page. If
+ yes then jump back to the misaligned loop to copy a byte at a time. */
+ and tmp1, src2, #0xff8
+ eor tmp1, tmp1, #0xff8
+ cbz tmp1, L(do_misaligned)
+ ldr data1, [src1], #8
+ ldr data2, [src2], #8
+
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, #REP8_7f
+ eor diff, data1, data2 /* Non-zero if differences found. */
+ bic has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */
+ orr syndrome, diff, has_nul
+ cbz syndrome, L(loop_misaligned)
+ b L(end)
+
+L(done):
+ sub result, data1, data2
+ ret
+
+END (__strcmp_aarch64)
+
diff --git a/string/aarch64/strcpy-mte.S b/string/aarch64/strcpy-mte.S
new file mode 100644
index 000000000000..88c222d61e53
--- /dev/null
+++ b/string/aarch64/strcpy-mte.S
@@ -0,0 +1,161 @@
+/*
+ * strcpy/stpcpy - copy a string returning pointer to start/end.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, Advanced SIMD.
+ * MTE compatible.
+ */
+
+#include "../asmdefs.h"
+
+#define dstin x0
+#define srcin x1
+#define result x0
+
+#define src x2
+#define dst x3
+#define len x4
+#define synd x4
+#define tmp x5
+#define wtmp w5
+#define shift x5
+#define data1 x6
+#define dataw1 w6
+#define data2 x7
+#define dataw2 w7
+
+#define dataq q0
+#define vdata v0
+#define vhas_nul v1
+#define vrepmask v2
+#define vend v3
+#define dend d3
+#define dataq2 q1
+
+#ifdef BUILD_STPCPY
+# define STRCPY __stpcpy_aarch64_mte
+# define IFSTPCPY(X,...) X,__VA_ARGS__
+#else
+# define STRCPY __strcpy_aarch64_mte
+# define IFSTPCPY(X,...)
+#endif
+
+/* Core algorithm:
+
+ For each 16-byte chunk we calculate a 64-bit syndrome value with four bits
+ per byte. For even bytes, bits 0-3 are set if the relevant byte matched the
+ requested character or the byte is NUL. Bits 4-7 must be zero. Bits 4-7 are
+ set likewise for odd bytes so that adjacent bytes can be merged. Since the
+ bits in the syndrome reflect the order in which things occur in the original
+ string, counting trailing zeros identifies exactly which byte matched. */
+
+ENTRY (STRCPY)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ bic src, srcin, 15
+ mov wtmp, 0xf00f
+ ld1 {vdata.16b}, [src]
+ dup vrepmask.8h, wtmp
+ cmeq vhas_nul.16b, vdata.16b, 0
+ lsl shift, srcin, 2
+ and vhas_nul.16b, vhas_nul.16b, vrepmask.16b
+ addp vend.16b, vhas_nul.16b, vhas_nul.16b
+ fmov synd, dend
+ lsr synd, synd, shift
+ cbnz synd, L(tail)
+
+ ldr dataq, [src, 16]!
+ cmeq vhas_nul.16b, vdata.16b, 0
+ and vhas_nul.16b, vhas_nul.16b, vrepmask.16b
+ addp vend.16b, vhas_nul.16b, vhas_nul.16b
+ fmov synd, dend
+ cbz synd, L(start_loop)
+
+#ifndef __AARCH64EB__
+ rbit synd, synd
+#endif
+ sub tmp, src, srcin
+ clz len, synd
+ add len, tmp, len, lsr 2
+ tbz len, 4, L(less16)
+ sub tmp, len, 15
+ ldr dataq, [srcin]
+ ldr dataq2, [srcin, tmp]
+ str dataq, [dstin]
+ str dataq2, [dstin, tmp]
+ IFSTPCPY (add result, dstin, len)
+ ret
+
+ .p2align 4,,8
+L(tail):
+ rbit synd, synd
+ clz len, synd
+ lsr len, len, 2
+
+ .p2align 4
+L(less16):
+ tbz len, 3, L(less8)
+ sub tmp, len, 7
+ ldr data1, [srcin]
+ ldr data2, [srcin, tmp]
+ str data1, [dstin]
+ str data2, [dstin, tmp]
+ IFSTPCPY (add result, dstin, len)
+ ret
+
+ .p2align 4
+L(less8):
+ subs tmp, len, 3
+ b.lo L(less4)
+ ldr dataw1, [srcin]
+ ldr dataw2, [srcin, tmp]
+ str dataw1, [dstin]
+ str dataw2, [dstin, tmp]
+ IFSTPCPY (add result, dstin, len)
+ ret
+
+L(less4):
+ cbz len, L(zerobyte)
+ ldrh dataw1, [srcin]
+ strh dataw1, [dstin]
+L(zerobyte):
+ strb wzr, [dstin, len]
+ IFSTPCPY (add result, dstin, len)
+ ret
+
+ .p2align 4
+L(start_loop):
+ sub len, src, srcin
+ ldr dataq2, [srcin]
+ add dst, dstin, len
+ str dataq2, [dstin]
+
+ .p2align 5
+L(loop):
+ str dataq, [dst], 16
+ ldr dataq, [src, 16]!
+ cmeq vhas_nul.16b, vdata.16b, 0
+ umaxp vend.16b, vhas_nul.16b, vhas_nul.16b
+ fmov synd, dend
+ cbz synd, L(loop)
+
+ and vhas_nul.16b, vhas_nul.16b, vrepmask.16b
+ addp vend.16b, vhas_nul.16b, vhas_nul.16b /* 128->64 */
+ fmov synd, dend
+#ifndef __AARCH64EB__
+ rbit synd, synd
+#endif
+ clz len, synd
+ lsr len, len, 2
+ sub tmp, len, 15
+ ldr dataq, [src, tmp]
+ str dataq, [dst, tmp]
+ IFSTPCPY (add result, dst, len)
+ ret
+
+END (STRCPY)
diff --git a/string/aarch64/strcpy-sve.S b/string/aarch64/strcpy-sve.S
new file mode 100644
index 000000000000..f515462e09ae
--- /dev/null
+++ b/string/aarch64/strcpy-sve.S
@@ -0,0 +1,71 @@
+/*
+ * strcpy/stpcpy - copy a string returning pointer to start/end.
+ *
+ * Copyright (c) 2018-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "../asmdefs.h"
+
+#if __ARM_FEATURE_SVE
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * SVE Available.
+ */
+
+/* To build as stpcpy, define BUILD_STPCPY before compiling this file. */
+#ifdef BUILD_STPCPY
+#define FUNC __stpcpy_aarch64_sve
+#else
+#define FUNC __strcpy_aarch64_sve
+#endif
+
+ENTRY (FUNC)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ setffr /* initialize FFR */
+ ptrue p2.b, all /* all ones; loop invariant */
+ mov x2, 0 /* initialize offset */
+
+ .p2align 4
+ /* Read a vector's worth of bytes, stopping on first fault. */
+0: ldff1b z0.b, p2/z, [x1, x2]
+ rdffrs p0.b, p2/z
+ b.nlast 1f
+
+ /* First fault did not fail: the whole vector is valid.
+ Avoid depending on the contexts of FFR beyond the branch. */
+ cmpeq p1.b, p2/z, z0.b, 0 /* search for zeros */
+ b.any 2f
+
+ /* No zero found. Store the whole vector and loop. */
+ st1b z0.b, p2, [x0, x2]
+ incb x2, all
+ b 0b
+
+ /* First fault failed: only some of the vector is valid.
+ Perform the comparison only on the valid bytes. */
+1: cmpeq p1.b, p0/z, z0.b, 0 /* search for zeros */
+ b.any 2f
+
+ /* No zero found. Store the valid portion of the vector and loop. */
+ setffr /* re-init FFR */
+ st1b z0.b, p0, [x0, x2]
+ incp x2, p0.b
+ b 0b
+
+ /* Zero found. Crop the vector to the found zero and finish. */
+2: brka p0.b, p2/z, p1.b
+ st1b z0.b, p0, [x0, x2]
+#ifdef BUILD_STPCPY
+ add x0, x0, x2
+ sub x0, x0, 1
+ incp x0, p0.b
+#endif
+ ret
+
+END (FUNC)
+
+#endif
+
diff --git a/string/aarch64/strcpy.S b/string/aarch64/strcpy.S
new file mode 100644
index 000000000000..6e9ed424b693
--- /dev/null
+++ b/string/aarch64/strcpy.S
@@ -0,0 +1,311 @@
+/*
+ * strcpy/stpcpy - copy a string returning pointer to start/end.
+ *
+ * Copyright (c) 2013-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, unaligned accesses, min page size 4k.
+ */
+
+#include "../asmdefs.h"
+
+/* To build as stpcpy, define BUILD_STPCPY before compiling this file.
+
+ To test the page crossing code path more thoroughly, compile with
+ -DSTRCPY_TEST_PAGE_CROSS - this will force all copies through the slower
+ entry path. This option is not intended for production use. */
+
+/* Arguments and results. */
+#define dstin x0
+#define srcin x1
+
+/* Locals and temporaries. */
+#define src x2
+#define dst x3
+#define data1 x4
+#define data1w w4
+#define data2 x5
+#define data2w w5
+#define has_nul1 x6
+#define has_nul2 x7
+#define tmp1 x8
+#define tmp2 x9
+#define tmp3 x10
+#define tmp4 x11
+#define zeroones x12
+#define data1a x13
+#define data2a x14
+#define pos x15
+#define len x16
+#define to_align x17
+
+#ifdef BUILD_STPCPY
+#define STRCPY __stpcpy_aarch64
+#else
+#define STRCPY __strcpy_aarch64
+#endif
+
+ /* NUL detection works on the principle that (X - 1) & (~X) & 0x80
+ (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and
+ can be done in parallel across the entire word. */
+
+#define REP8_01 0x0101010101010101
+#define REP8_7f 0x7f7f7f7f7f7f7f7f
+#define REP8_80 0x8080808080808080
+
+ /* AArch64 systems have a minimum page size of 4k. We can do a quick
+ page size check for crossing this boundary on entry and if we
+ do not, then we can short-circuit much of the entry code. We
+ expect early page-crossing strings to be rare (probability of
+ 16/MIN_PAGE_SIZE ~= 0.4%), so the branch should be quite
+ predictable, even with random strings.
+
+ We don't bother checking for larger page sizes, the cost of setting
+ up the correct page size is just not worth the extra gain from
+ a small reduction in the cases taking the slow path. Note that
+ we only care about whether the first fetch, which may be
+ misaligned, crosses a page boundary - after that we move to aligned
+ fetches for the remainder of the string. */
+
+#ifdef STRCPY_TEST_PAGE_CROSS
+ /* Make everything that isn't Qword aligned look like a page cross. */
+#define MIN_PAGE_P2 4
+#else
+#define MIN_PAGE_P2 12
+#endif
+
+#define MIN_PAGE_SIZE (1 << MIN_PAGE_P2)
+
+ENTRY (STRCPY)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ /* For moderately short strings, the fastest way to do the copy is to
+ calculate the length of the string in the same way as strlen, then
+ essentially do a memcpy of the result. This avoids the need for
+ multiple byte copies and further means that by the time we
+ reach the bulk copy loop we know we can always use DWord
+ accesses. We expect __strcpy_aarch64 to rarely be called repeatedly
+ with the same source string, so branch prediction is likely to
+ always be difficult - we mitigate against this by preferring
+ conditional select operations over branches whenever this is
+ feasible. */
+ and tmp2, srcin, #(MIN_PAGE_SIZE - 1)
+ mov zeroones, #REP8_01
+ and to_align, srcin, #15
+ cmp tmp2, #(MIN_PAGE_SIZE - 16)
+ neg tmp1, to_align
+ /* The first fetch will straddle a (possible) page boundary iff
+ srcin + 15 causes bit[MIN_PAGE_P2] to change value. A 16-byte
+ aligned string will never fail the page align check, so will
+ always take the fast path. */
+ b.gt L(page_cross)
+
+L(page_cross_ok):
+ ldp data1, data2, [srcin]
+#ifdef __AARCH64EB__
+ /* Because we expect the end to be found within 16 characters
+ (profiling shows this is the most common case), it's worth
+ swapping the bytes now to save having to recalculate the
+ termination syndrome later. We preserve data1 and data2
+ so that we can re-use the values later on. */
+ rev tmp2, data1
+ sub tmp1, tmp2, zeroones
+ orr tmp2, tmp2, #REP8_7f
+ bics has_nul1, tmp1, tmp2
+ b.ne L(fp_le8)
+ rev tmp4, data2
+ sub tmp3, tmp4, zeroones
+ orr tmp4, tmp4, #REP8_7f
+#else
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, #REP8_7f
+ bics has_nul1, tmp1, tmp2
+ b.ne L(fp_le8)
+ sub tmp3, data2, zeroones
+ orr tmp4, data2, #REP8_7f
+#endif
+ bics has_nul2, tmp3, tmp4
+ b.eq L(bulk_entry)
+
+ /* The string is short (<=16 bytes). We don't know exactly how
+ short though, yet. Work out the exact length so that we can
+ quickly select the optimal copy strategy. */
+L(fp_gt8):
+ rev has_nul2, has_nul2
+ clz pos, has_nul2
+ mov tmp2, #56
+ add dst, dstin, pos, lsr #3 /* Bits to bytes. */
+ sub pos, tmp2, pos
+#ifdef __AARCH64EB__
+ lsr data2, data2, pos
+#else
+ lsl data2, data2, pos
+#endif
+ str data2, [dst, #1]
+ str data1, [dstin]
+#ifdef BUILD_STPCPY
+ add dstin, dst, #8
+#endif
+ ret
+
+L(fp_le8):
+ rev has_nul1, has_nul1
+ clz pos, has_nul1
+ add dst, dstin, pos, lsr #3 /* Bits to bytes. */
+ subs tmp2, pos, #24 /* Pos in bits. */
+ b.lt L(fp_lt4)
+#ifdef __AARCH64EB__
+ mov tmp2, #56
+ sub pos, tmp2, pos
+ lsr data2, data1, pos
+ lsr data1, data1, #32
+#else
+ lsr data2, data1, tmp2
+#endif
+ /* 4->7 bytes to copy. */
+ str data2w, [dst, #-3]
+ str data1w, [dstin]
+#ifdef BUILD_STPCPY
+ mov dstin, dst
+#endif
+ ret
+L(fp_lt4):
+ cbz pos, L(fp_lt2)
+ /* 2->3 bytes to copy. */
+#ifdef __AARCH64EB__
+ lsr data1, data1, #48
+#endif
+ strh data1w, [dstin]
+ /* Fall-through, one byte (max) to go. */
+L(fp_lt2):
+ /* Null-terminated string. Last character must be zero! */
+ strb wzr, [dst]
+#ifdef BUILD_STPCPY
+ mov dstin, dst
+#endif
+ ret
+
+ .p2align 6
+ /* Aligning here ensures that the entry code and main loop all lies
+ within one 64-byte cache line. */
+L(bulk_entry):
+ sub to_align, to_align, #16
+ stp data1, data2, [dstin]
+ sub src, srcin, to_align
+ sub dst, dstin, to_align
+ b L(entry_no_page_cross)
+
+ /* The inner loop deals with two Dwords at a time. This has a
+ slightly higher start-up cost, but we should win quite quickly,
+ especially on cores with a high number of issue slots per
+ cycle, as we get much better parallelism out of the operations. */
+L(main_loop):
+ stp data1, data2, [dst], #16
+L(entry_no_page_cross):
+ ldp data1, data2, [src], #16
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, #REP8_7f
+ sub tmp3, data2, zeroones
+ orr tmp4, data2, #REP8_7f
+ bic has_nul1, tmp1, tmp2
+ bics has_nul2, tmp3, tmp4
+ ccmp has_nul1, #0, #0, eq /* NZCV = 0000 */
+ b.eq L(main_loop)
+
+ /* Since we know we are copying at least 16 bytes, the fastest way
+ to deal with the tail is to determine the location of the
+ trailing NUL, then (re)copy the 16 bytes leading up to that. */
+ cmp has_nul1, #0
+#ifdef __AARCH64EB__
+ /* For big-endian, carry propagation (if the final byte in the
+ string is 0x01) means we cannot use has_nul directly. The
+ easiest way to get the correct byte is to byte-swap the data
+ and calculate the syndrome a second time. */
+ csel data1, data1, data2, ne
+ rev data1, data1
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, #REP8_7f
+ bic has_nul1, tmp1, tmp2
+#else
+ csel has_nul1, has_nul1, has_nul2, ne
+#endif
+ rev has_nul1, has_nul1
+ clz pos, has_nul1
+ add tmp1, pos, #72
+ add pos, pos, #8
+ csel pos, pos, tmp1, ne
+ add src, src, pos, lsr #3
+ add dst, dst, pos, lsr #3
+ ldp data1, data2, [src, #-32]
+ stp data1, data2, [dst, #-16]
+#ifdef BUILD_STPCPY
+ sub dstin, dst, #1
+#endif
+ ret
+
+L(page_cross):
+ bic src, srcin, #15
+ /* Start by loading two words at [srcin & ~15], then forcing the
+ bytes that precede srcin to 0xff. This means they never look
+ like termination bytes. */
+ ldp data1, data2, [src]
+ lsl tmp1, tmp1, #3 /* Bytes beyond alignment -> bits. */
+ tst to_align, #7
+ csetm tmp2, ne
+#ifdef __AARCH64EB__
+ lsl tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */
+#else
+ lsr tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */
+#endif
+ orr data1, data1, tmp2
+ orr data2a, data2, tmp2
+ cmp to_align, #8
+ csinv data1, data1, xzr, lt
+ csel data2, data2, data2a, lt
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, #REP8_7f
+ sub tmp3, data2, zeroones
+ orr tmp4, data2, #REP8_7f
+ bic has_nul1, tmp1, tmp2
+ bics has_nul2, tmp3, tmp4
+ ccmp has_nul1, #0, #0, eq /* NZCV = 0000 */
+ b.eq L(page_cross_ok)
+ /* We now need to make data1 and data2 look like they've been
+ loaded directly from srcin. Do a rotate on the 128-bit value. */
+ lsl tmp1, to_align, #3 /* Bytes->bits. */
+ neg tmp2, to_align, lsl #3
+#ifdef __AARCH64EB__
+ lsl data1a, data1, tmp1
+ lsr tmp4, data2, tmp2
+ lsl data2, data2, tmp1
+ orr tmp4, tmp4, data1a
+ cmp to_align, #8
+ csel data1, tmp4, data2, lt
+ rev tmp2, data1
+ rev tmp4, data2
+ sub tmp1, tmp2, zeroones
+ orr tmp2, tmp2, #REP8_7f
+ sub tmp3, tmp4, zeroones
+ orr tmp4, tmp4, #REP8_7f
+#else
+ lsr data1a, data1, tmp1
+ lsl tmp4, data2, tmp2
+ lsr data2, data2, tmp1
+ orr tmp4, tmp4, data1a
+ cmp to_align, #8
+ csel data1, tmp4, data2, lt
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, #REP8_7f
+ sub tmp3, data2, zeroones
+ orr tmp4, data2, #REP8_7f
+#endif
+ bic has_nul1, tmp1, tmp2
+ cbnz has_nul1, L(fp_le8)
+ bic has_nul2, tmp3, tmp4
+ b L(fp_gt8)
+
+END (STRCPY)
+
diff --git a/string/aarch64/strlen-mte.S b/string/aarch64/strlen-mte.S
new file mode 100644
index 000000000000..7cf41d5c1eac
--- /dev/null
+++ b/string/aarch64/strlen-mte.S
@@ -0,0 +1,80 @@
+/*
+ * strlen - calculate the length of a string.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, Advanced SIMD.
+ * MTE compatible.
+ */
+
+#include "../asmdefs.h"
+
+#define srcin x0
+#define result x0
+
+#define src x1
+#define synd x2
+#define tmp x3
+#define wtmp w3
+#define shift x4
+
+#define data q0
+#define vdata v0
+#define vhas_nul v1
+#define vrepmask v2
+#define vend v3
+#define dend d3
+
+/* Core algorithm:
+
+ For each 16-byte chunk we calculate a 64-bit syndrome value with four bits
+ per byte. For even bytes, bits 0-3 are set if the relevant byte matched the
+ requested character or the byte is NUL. Bits 4-7 must be zero. Bits 4-7 are
+ set likewise for odd bytes so that adjacent bytes can be merged. Since the
+ bits in the syndrome reflect the order in which things occur in the original
+ string, counting trailing zeros identifies exactly which byte matched. */
+
+ENTRY (__strlen_aarch64_mte)
+ PTR_ARG (0)
+ bic src, srcin, 15
+ mov wtmp, 0xf00f
+ ld1 {vdata.16b}, [src]
+ dup vrepmask.8h, wtmp
+ cmeq vhas_nul.16b, vdata.16b, 0
+ lsl shift, srcin, 2
+ and vhas_nul.16b, vhas_nul.16b, vrepmask.16b
+ addp vend.16b, vhas_nul.16b, vhas_nul.16b /* 128->64 */
+ fmov synd, dend
+ lsr synd, synd, shift
+ cbz synd, L(loop)
+
+ rbit synd, synd
+ clz result, synd
+ lsr result, result, 2
+ ret
+
+ .p2align 5
+L(loop):
+ ldr data, [src, 16]!
+ cmeq vhas_nul.16b, vdata.16b, 0
+ umaxp vend.16b, vhas_nul.16b, vhas_nul.16b
+ fmov synd, dend
+ cbz synd, L(loop)
+
+ and vhas_nul.16b, vhas_nul.16b, vrepmask.16b
+ addp vend.16b, vhas_nul.16b, vhas_nul.16b /* 128->64 */
+ sub result, src, srcin
+ fmov synd, dend
+#ifndef __AARCH64EB__
+ rbit synd, synd
+#endif
+ clz tmp, synd
+ add result, result, tmp, lsr 2
+ ret
+
+END (__strlen_aarch64_mte)
+
diff --git a/string/aarch64/strlen-sve.S b/string/aarch64/strlen-sve.S
new file mode 100644
index 000000000000..2392493f1a3c
--- /dev/null
+++ b/string/aarch64/strlen-sve.S
@@ -0,0 +1,55 @@
+/*
+ * __strlen_aarch64_sve - compute the length of a string
+ *
+ * Copyright (c) 2018-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "../asmdefs.h"
+
+#if __ARM_FEATURE_SVE
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * SVE Available.
+ */
+
+ENTRY (__strlen_aarch64_sve)
+ PTR_ARG (0)
+ setffr /* initialize FFR */
+ ptrue p2.b /* all ones; loop invariant */
+ mov x1, 0 /* initialize length */
+
+ /* Read a vector's worth of bytes, stopping on first fault. */
+ .p2align 4
+0: ldff1b z0.b, p2/z, [x0, x1]
+ rdffrs p0.b, p2/z
+ b.nlast 2f
+
+ /* First fault did not fail: the whole vector is valid.
+ Avoid depending on the contents of FFR beyond the branch. */
+ incb x1, all /* speculate increment */
+ cmpeq p1.b, p2/z, z0.b, 0 /* loop if no zeros */
+ b.none 0b
+ decb x1, all /* undo speculate */
+
+ /* Zero found. Select the bytes before the first and count them. */
+1: brkb p0.b, p2/z, p1.b
+ incp x1, p0.b
+ mov x0, x1
+ ret
+
+ /* First fault failed: only some of the vector is valid.
+ Perform the comparison only on the valid bytes. */
+2: cmpeq p1.b, p0/z, z0.b, 0
+ b.any 1b
+
+ /* No zero found. Re-init FFR, increment, and loop. */
+ setffr
+ incp x1, p0.b
+ b 0b
+
+END (__strlen_aarch64_sve)
+
+#endif
+
diff --git a/string/aarch64/strlen.S b/string/aarch64/strlen.S
new file mode 100644
index 000000000000..a1b164a49238
--- /dev/null
+++ b/string/aarch64/strlen.S
@@ -0,0 +1,200 @@
+/*
+ * strlen - calculate the length of a string.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, Advanced SIMD, unaligned accesses.
+ * Not MTE compatible.
+ */
+
+#include "../asmdefs.h"
+
+#define srcin x0
+#define len x0
+
+#define src x1
+#define data1 x2
+#define data2 x3
+#define has_nul1 x4
+#define has_nul2 x5
+#define tmp1 x4
+#define tmp2 x5
+#define tmp3 x6
+#define tmp4 x7
+#define zeroones x8
+
+#define maskv v0
+#define maskd d0
+#define dataq1 q1
+#define dataq2 q2
+#define datav1 v1
+#define datav2 v2
+#define tmp x2
+#define tmpw w2
+#define synd x3
+#define shift x4
+
+/* For the first 32 bytes, NUL detection works on the principle that
+ (X - 1) & (~X) & 0x80 (=> (X - 1) & ~(X | 0x7f)) is non-zero if a
+ byte is zero, and can be done in parallel across the entire word. */
+
+#define REP8_01 0x0101010101010101
+#define REP8_7f 0x7f7f7f7f7f7f7f7f
+
+/* To test the page crossing code path more thoroughly, compile with
+ -DTEST_PAGE_CROSS - this will force all calls through the slower
+ entry path. This option is not intended for production use. */
+
+#ifdef TEST_PAGE_CROSS
+# define MIN_PAGE_SIZE 32
+#else
+# define MIN_PAGE_SIZE 4096
+#endif
+
+/* Core algorithm:
+
+ Since strings are short on average, we check the first 32 bytes of the
+ string for a NUL character without aligning the string. In order to use
+ unaligned loads safely we must do a page cross check first.
+
+ If there is a NUL byte we calculate the length from the 2 8-byte words
+ using conditional select to reduce branch mispredictions (it is unlikely
+ strlen will be repeatedly called on strings with the same length).
+
+ If the string is longer than 32 bytes, align src so we don't need further
+ page cross checks, and process 32 bytes per iteration using a fast SIMD
+ loop.
+
+ If the page cross check fails, we read 32 bytes from an aligned address,
+ and ignore any characters before the string. If it contains a NUL
+ character, return the length, if not, continue in the main loop. */
+
+ENTRY (__strlen_aarch64)
+ PTR_ARG (0)
+ and tmp1, srcin, MIN_PAGE_SIZE - 1
+ cmp tmp1, MIN_PAGE_SIZE - 32
+ b.hi L(page_cross)
+
+ /* Look for a NUL byte in the first 16 bytes. */
+ ldp data1, data2, [srcin]
+ mov zeroones, REP8_01
+
+#ifdef __AARCH64EB__
+ /* For big-endian, carry propagation (if the final byte in the
+ string is 0x01) means we cannot use has_nul1/2 directly.
+ Since we expect strings to be small and early-exit,
+ byte-swap the data now so has_null1/2 will be correct. */
+ rev data1, data1
+ rev data2, data2
+#endif
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, REP8_7f
+ sub tmp3, data2, zeroones
+ orr tmp4, data2, REP8_7f
+ bics has_nul1, tmp1, tmp2
+ bic has_nul2, tmp3, tmp4
+ ccmp has_nul2, 0, 0, eq
+ b.eq L(bytes16_31)
+
+ /* Find the exact offset of the first NUL byte in the first 16 bytes
+ from the string start. Enter with C = has_nul1 == 0. */
+ csel has_nul1, has_nul1, has_nul2, cc
+ mov len, 8
+ rev has_nul1, has_nul1
+ csel len, xzr, len, cc
+ clz tmp1, has_nul1
+ add len, len, tmp1, lsr 3
+ ret
+
+ .p2align 3
+ /* Look for a NUL byte at offset 16..31 in the string. */
+L(bytes16_31):
+ ldp data1, data2, [srcin, 16]
+#ifdef __AARCH64EB__
+ rev data1, data1
+ rev data2, data2
+#endif
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, REP8_7f
+ sub tmp3, data2, zeroones
+ orr tmp4, data2, REP8_7f
+ bics has_nul1, tmp1, tmp2
+ bic has_nul2, tmp3, tmp4
+ ccmp has_nul2, 0, 0, eq
+ b.eq L(loop_entry)
+
+ /* Find the exact offset of the first NUL byte at offset 16..31 from
+ the string start. Enter with C = has_nul1 == 0. */
+ csel has_nul1, has_nul1, has_nul2, cc
+ mov len, 24
+ rev has_nul1, has_nul1
+ mov tmp3, 16
+ clz tmp1, has_nul1
+ csel len, tmp3, len, cc
+ add len, len, tmp1, lsr 3
+ ret
+
+L(loop_entry):
+ bic src, srcin, 31
+
+ .p2align 5
+L(loop):
+ ldp dataq1, dataq2, [src, 32]!
+ uminp maskv.16b, datav1.16b, datav2.16b
+ uminp maskv.16b, maskv.16b, maskv.16b
+ cmeq maskv.8b, maskv.8b, 0
+ fmov synd, maskd
+ cbz synd, L(loop)
+
+ /* Low 32 bits of synd are non-zero if a NUL was found in datav1. */
+ cmeq maskv.16b, datav1.16b, 0
+ sub len, src, srcin
+ tst synd, 0xffffffff
+ b.ne 1f
+ cmeq maskv.16b, datav2.16b, 0
+ add len, len, 16
+1:
+ /* Generate a bitmask and compute correct byte offset. */
+#ifdef __AARCH64EB__
+ bic maskv.8h, 0xf0
+#else
+ bic maskv.8h, 0x0f, lsl 8
+#endif
+ umaxp maskv.16b, maskv.16b, maskv.16b
+ fmov synd, maskd
+#ifndef __AARCH64EB__
+ rbit synd, synd
+#endif
+ clz tmp, synd
+ add len, len, tmp, lsr 2
+ ret
+
+ .p2align 4
+
+L(page_cross):
+ bic src, srcin, 31
+ mov tmpw, 0x0c03
+ movk tmpw, 0xc030, lsl 16
+ ld1 {datav1.16b, datav2.16b}, [src]
+ dup maskv.4s, tmpw
+ cmeq datav1.16b, datav1.16b, 0
+ cmeq datav2.16b, datav2.16b, 0
+ and datav1.16b, datav1.16b, maskv.16b
+ and datav2.16b, datav2.16b, maskv.16b
+ addp maskv.16b, datav1.16b, datav2.16b
+ addp maskv.16b, maskv.16b, maskv.16b
+ fmov synd, maskd
+ lsl shift, srcin, 1
+ lsr synd, synd, shift
+ cbz synd, L(loop)
+
+ rbit synd, synd
+ clz len, synd
+ lsr len, len, 1
+ ret
+
+END (__strlen_aarch64)
diff --git a/string/aarch64/strncmp-mte.S b/string/aarch64/strncmp-mte.S
new file mode 100644
index 000000000000..c9d6fc8a158b
--- /dev/null
+++ b/string/aarch64/strncmp-mte.S
@@ -0,0 +1,307 @@
+/*
+ * strncmp - compare two strings
+ *
+ * Copyright (c) 2013-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ */
+
+#include "../asmdefs.h"
+
+#define REP8_01 0x0101010101010101
+#define REP8_7f 0x7f7f7f7f7f7f7f7f
+
+/* Parameters and result. */
+#define src1 x0
+#define src2 x1
+#define limit x2
+#define result x0
+
+/* Internal variables. */
+#define data1 x3
+#define data1w w3
+#define data2 x4
+#define data2w w4
+#define has_nul x5
+#define diff x6
+#define syndrome x7
+#define tmp1 x8
+#define tmp2 x9
+#define tmp3 x10
+#define zeroones x11
+#define pos x12
+#define mask x13
+#define endloop x14
+#define count mask
+#define offset pos
+#define neg_offset x15
+
+/* Define endian dependent shift operations.
+ On big-endian early bytes are at MSB and on little-endian LSB.
+ LS_FW means shifting towards early bytes.
+ LS_BK means shifting towards later bytes.
+ */
+#ifdef __AARCH64EB__
+#define LS_FW lsl
+#define LS_BK lsr
+#else
+#define LS_FW lsr
+#define LS_BK lsl
+#endif
+
+ENTRY (__strncmp_aarch64_mte)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ SIZE_ARG (2)
+ cbz limit, L(ret0)
+ eor tmp1, src1, src2
+ mov zeroones, #REP8_01
+ tst tmp1, #7
+ and count, src1, #7
+ b.ne L(misaligned8)
+ cbnz count, L(mutual_align)
+
+ /* NUL detection works on the principle that (X - 1) & (~X) & 0x80
+ (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and
+ can be done in parallel across the entire word. */
+ .p2align 4
+L(loop_aligned):
+ ldr data1, [src1], #8
+ ldr data2, [src2], #8
+L(start_realigned):
+ subs limit, limit, #8
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, #REP8_7f
+ eor diff, data1, data2 /* Non-zero if differences found. */
+ csinv endloop, diff, xzr, hi /* Last Dword or differences. */
+ bics has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */
+ ccmp endloop, #0, #0, eq
+ b.eq L(loop_aligned)
+ /* End of main loop */
+
+L(full_check):
+#ifndef __AARCH64EB__
+ orr syndrome, diff, has_nul
+ add limit, limit, 8 /* Rewind limit to before last subs. */
+L(syndrome_check):
+ /* Limit was reached. Check if the NUL byte or the difference
+ is before the limit. */
+ rev syndrome, syndrome
+ rev data1, data1
+ clz pos, syndrome
+ rev data2, data2
+ lsl data1, data1, pos
+ cmp limit, pos, lsr #3
+ lsl data2, data2, pos
+ /* But we need to zero-extend (char is unsigned) the value and then
+ perform a signed 32-bit subtraction. */
+ lsr data1, data1, #56
+ sub result, data1, data2, lsr #56
+ csel result, result, xzr, hi
+ ret
+#else
+ /* Not reached the limit, must have found the end or a diff. */
+ tbz limit, #63, L(not_limit)
+ add tmp1, limit, 8
+ cbz limit, L(not_limit)
+
+ lsl limit, tmp1, #3 /* Bits -> bytes. */
+ mov mask, #~0
+ lsr mask, mask, limit
+ bic data1, data1, mask
+ bic data2, data2, mask
+
+ /* Make sure that the NUL byte is marked in the syndrome. */
+ orr has_nul, has_nul, mask
+
+L(not_limit):
+ /* For big-endian we cannot use the trick with the syndrome value
+ as carry-propagation can corrupt the upper bits if the trailing
+ bytes in the string contain 0x01. */
+ /* However, if there is no NUL byte in the dword, we can generate
+ the result directly. We can't just subtract the bytes as the
+ MSB might be significant. */
+ cbnz has_nul, 1f
+ cmp data1, data2
+ cset result, ne
+ cneg result, result, lo
+ ret
+1:
+ /* Re-compute the NUL-byte detection, using a byte-reversed value. */
+ rev tmp3, data1
+ sub tmp1, tmp3, zeroones
+ orr tmp2, tmp3, #REP8_7f
+ bic has_nul, tmp1, tmp2
+ rev has_nul, has_nul
+ orr syndrome, diff, has_nul
+ clz pos, syndrome
+ /* The most-significant-non-zero bit of the syndrome marks either the
+ first bit that is different, or the top bit of the first zero byte.
+ Shifting left now will bring the critical information into the
+ top bits. */
+L(end_quick):
+ lsl data1, data1, pos
+ lsl data2, data2, pos
+ /* But we need to zero-extend (char is unsigned) the value and then
+ perform a signed 32-bit subtraction. */
+ lsr data1, data1, #56
+ sub result, data1, data2, lsr #56
+ ret
+#endif
+
+L(mutual_align):
+ /* Sources are mutually aligned, but are not currently at an
+ alignment boundary. Round down the addresses and then mask off
+ the bytes that precede the start point.
+ We also need to adjust the limit calculations, but without
+ overflowing if the limit is near ULONG_MAX. */
+ bic src1, src1, #7
+ bic src2, src2, #7
+ ldr data1, [src1], #8
+ neg tmp3, count, lsl #3 /* 64 - bits(bytes beyond align). */
+ ldr data2, [src2], #8
+ mov tmp2, #~0
+ LS_FW tmp2, tmp2, tmp3 /* Shift (count & 63). */
+ /* Adjust the limit and ensure it doesn't overflow. */
+ adds limit, limit, count
+ csinv limit, limit, xzr, lo
+ orr data1, data1, tmp2
+ orr data2, data2, tmp2
+ b L(start_realigned)
+
+ .p2align 4
+ /* Don't bother with dwords for up to 16 bytes. */
+L(misaligned8):
+ cmp limit, #16
+ b.hs L(try_misaligned_words)
+
+L(byte_loop):
+ /* Perhaps we can do better than this. */
+ ldrb data1w, [src1], #1
+ ldrb data2w, [src2], #1
+ subs limit, limit, #1
+ ccmp data1w, #1, #0, hi /* NZCV = 0b0000. */
+ ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */
+ b.eq L(byte_loop)
+L(done):
+ sub result, data1, data2
+ ret
+ /* Align the SRC1 to a dword by doing a bytewise compare and then do
+ the dword loop. */
+L(try_misaligned_words):
+ cbz count, L(src1_aligned)
+
+ neg count, count
+ and count, count, #7
+ sub limit, limit, count
+
+L(page_end_loop):
+ ldrb data1w, [src1], #1
+ ldrb data2w, [src2], #1
+ cmp data1w, #1
+ ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */
+ b.ne L(done)
+ subs count, count, #1
+ b.hi L(page_end_loop)
+
+ /* The following diagram explains the comparison of misaligned strings.
+ The bytes are shown in natural order. For little-endian, it is
+ reversed in the registers. The "x" bytes are before the string.
+ The "|" separates data that is loaded at one time.
+ src1 | a a a a a a a a | b b b c c c c c | . . .
+ src2 | x x x x x a a a a a a a a b b b | c c c c c . . .
+
+ After shifting in each step, the data looks like this:
+ STEP_A STEP_B STEP_C
+ data1 a a a a a a a a b b b c c c c c b b b c c c c c
+ data2 a a a a a a a a b b b 0 0 0 0 0 0 0 0 c c c c c
+
+ The bytes with "0" are eliminated from the syndrome via mask.
+
+ Align SRC2 down to 16 bytes. This way we can read 16 bytes at a
+ time from SRC2. The comparison happens in 3 steps. After each step
+ the loop can exit, or read from SRC1 or SRC2. */
+L(src1_aligned):
+ /* Calculate offset from 8 byte alignment to string start in bits. No
+ need to mask offset since shifts are ignoring upper bits. */
+ lsl offset, src2, #3
+ bic src2, src2, #0xf
+ mov mask, -1
+ neg neg_offset, offset
+ ldr data1, [src1], #8
+ ldp tmp1, tmp2, [src2], #16
+ LS_BK mask, mask, neg_offset
+ and neg_offset, neg_offset, #63 /* Need actual value for cmp later. */
+ /* Skip the first compare if data in tmp1 is irrelevant. */
+ tbnz offset, 6, L(misaligned_mid_loop)
+
+L(loop_misaligned):
+ /* STEP_A: Compare full 8 bytes when there is enough data from SRC2.*/
+ LS_FW data2, tmp1, offset
+ LS_BK tmp1, tmp2, neg_offset
+ subs limit, limit, #8
+ orr data2, data2, tmp1 /* 8 bytes from SRC2 combined from two regs.*/
+ sub has_nul, data1, zeroones
+ eor diff, data1, data2 /* Non-zero if differences found. */
+ orr tmp3, data1, #REP8_7f
+ csinv endloop, diff, xzr, hi /* If limit, set to all ones. */
+ bic has_nul, has_nul, tmp3 /* Non-zero if NUL byte found in SRC1. */
+ orr tmp3, endloop, has_nul
+ cbnz tmp3, L(full_check)
+
+ ldr data1, [src1], #8
+L(misaligned_mid_loop):
+ /* STEP_B: Compare first part of data1 to second part of tmp2. */
+ LS_FW data2, tmp2, offset
+#ifdef __AARCH64EB__
+ /* For big-endian we do a byte reverse to avoid carry-propagation
+ problem described above. This way we can reuse the has_nul in the
+ next step and also use syndrome value trick at the end. */
+ rev tmp3, data1
+ #define data1_fixed tmp3
+#else
+ #define data1_fixed data1
+#endif
+ sub has_nul, data1_fixed, zeroones
+ orr tmp3, data1_fixed, #REP8_7f
+ eor diff, data2, data1 /* Non-zero if differences found. */
+ bic has_nul, has_nul, tmp3 /* Non-zero if NUL terminator. */
+#ifdef __AARCH64EB__
+ rev has_nul, has_nul
+#endif
+ cmp limit, neg_offset, lsr #3
+ orr syndrome, diff, has_nul
+ bic syndrome, syndrome, mask /* Ignore later bytes. */
+ csinv tmp3, syndrome, xzr, hi /* If limit, set to all ones. */
+ cbnz tmp3, L(syndrome_check)
+
+ /* STEP_C: Compare second part of data1 to first part of tmp1. */
+ ldp tmp1, tmp2, [src2], #16
+ cmp limit, #8
+ LS_BK data2, tmp1, neg_offset
+ eor diff, data2, data1 /* Non-zero if differences found. */
+ orr syndrome, diff, has_nul
+ and syndrome, syndrome, mask /* Ignore earlier bytes. */
+ csinv tmp3, syndrome, xzr, hi /* If limit, set to all ones. */
+ cbnz tmp3, L(syndrome_check)
+
+ ldr data1, [src1], #8
+ sub limit, limit, #8
+ b L(loop_misaligned)
+
+#ifdef __AARCH64EB__
+L(syndrome_check):
+ clz pos, syndrome
+ cmp pos, limit, lsl #3
+ b.lo L(end_quick)
+#endif
+
+L(ret0):
+ mov result, #0
+ ret
+END(__strncmp_aarch64_mte)
+
diff --git a/string/aarch64/strncmp-sve.S b/string/aarch64/strncmp-sve.S
new file mode 100644
index 000000000000..234190e245b0
--- /dev/null
+++ b/string/aarch64/strncmp-sve.S
@@ -0,0 +1,69 @@
+/*
+ * strncmp - compare two strings with limit
+ *
+ * Copyright (c) 2018-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "../asmdefs.h"
+
+#if __ARM_FEATURE_SVE
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * SVE Available.
+ */
+
+ENTRY (__strncmp_aarch64_sve)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ SIZE_ARG (2)
+ setffr /* initialize FFR */
+ mov x3, 0 /* initialize off */
+
+0: whilelo p0.b, x3, x2 /* while off < max */
+ b.none 9f
+
+ ldff1b z0.b, p0/z, [x0, x3]
+ ldff1b z1.b, p0/z, [x1, x3]
+ rdffrs p1.b, p0/z
+ b.nlast 2f
+
+ /* First fault did not fail: the vector up to max is valid.
+ Avoid depending on the contents of FFR beyond the branch.
+ Increment for a whole vector, even if we've only read a partial.
+ This is significantly cheaper than INCP, and since OFF is not
+ used after the loop it is ok to increment OFF past MAX. */
+ incb x3
+ cmpeq p1.b, p0/z, z0.b, z1.b /* compare strings */
+ cmpne p2.b, p0/z, z0.b, 0 /* search for ~zero */
+ nands p2.b, p0/z, p1.b, p2.b /* ~(eq & ~zero) -> ne | zero */
+ b.none 0b
+
+ /* Found end-of-string or inequality. */
+1: brkb p2.b, p0/z, p2.b /* find first such */
+ lasta w0, p2, z0.b /* extract each char */
+ lasta w1, p2, z1.b
+ sub x0, x0, x1 /* return comparison */
+ ret
+
+ /* First fault failed: only some of the vector is valid.
+ Perform the comparison only on the valid bytes. */
+2: cmpeq p2.b, p1/z, z0.b, z1.b /* compare strings, as above */
+ cmpne p3.b, p1/z, z0.b, 0
+ nands p2.b, p1/z, p2.b, p3.b
+ b.any 1b
+
+ /* No inequality or zero found. Re-init FFR, incr and loop. */
+ setffr
+ incp x3, p1.b
+ b 0b
+
+ /* Found end-of-count. */
+9: mov x0, 0 /* return equal */
+ ret
+
+END (__strncmp_aarch64_sve)
+
+#endif
+
diff --git a/string/aarch64/strncmp.S b/string/aarch64/strncmp.S
new file mode 100644
index 000000000000..738b6539cab6
--- /dev/null
+++ b/string/aarch64/strncmp.S
@@ -0,0 +1,260 @@
+/*
+ * strncmp - compare two strings
+ *
+ * Copyright (c) 2013-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ */
+
+#include "../asmdefs.h"
+
+#define REP8_01 0x0101010101010101
+#define REP8_7f 0x7f7f7f7f7f7f7f7f
+#define REP8_80 0x8080808080808080
+
+/* Parameters and result. */
+#define src1 x0
+#define src2 x1
+#define limit x2
+#define result x0
+
+/* Internal variables. */
+#define data1 x3
+#define data1w w3
+#define data2 x4
+#define data2w w4
+#define has_nul x5
+#define diff x6
+#define syndrome x7
+#define tmp1 x8
+#define tmp2 x9
+#define tmp3 x10
+#define zeroones x11
+#define pos x12
+#define limit_wd x13
+#define mask x14
+#define endloop x15
+#define count mask
+
+ENTRY (__strncmp_aarch64)
+ PTR_ARG (0)
+ PTR_ARG (1)
+ SIZE_ARG (2)
+ cbz limit, L(ret0)
+ eor tmp1, src1, src2
+ mov zeroones, #REP8_01
+ tst tmp1, #7
+ and count, src1, #7
+ b.ne L(misaligned8)
+ cbnz count, L(mutual_align)
+ /* Calculate the number of full and partial words -1. */
+ sub limit_wd, limit, #1 /* limit != 0, so no underflow. */
+ lsr limit_wd, limit_wd, #3 /* Convert to Dwords. */
+
+ /* NUL detection works on the principle that (X - 1) & (~X) & 0x80
+ (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and
+ can be done in parallel across the entire word. */
+ .p2align 4
+L(loop_aligned):
+ ldr data1, [src1], #8
+ ldr data2, [src2], #8
+L(start_realigned):
+ subs limit_wd, limit_wd, #1
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, #REP8_7f
+ eor diff, data1, data2 /* Non-zero if differences found. */
+ csinv endloop, diff, xzr, pl /* Last Dword or differences. */
+ bics has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */
+ ccmp endloop, #0, #0, eq
+ b.eq L(loop_aligned)
+ /* End of main loop */
+
+ /* Not reached the limit, must have found the end or a diff. */
+ tbz limit_wd, #63, L(not_limit)
+
+ /* Limit % 8 == 0 => all bytes significant. */
+ ands limit, limit, #7
+ b.eq L(not_limit)
+
+ lsl limit, limit, #3 /* Bits -> bytes. */
+ mov mask, #~0
+#ifdef __AARCH64EB__
+ lsr mask, mask, limit
+#else
+ lsl mask, mask, limit
+#endif
+ bic data1, data1, mask
+ bic data2, data2, mask
+
+ /* Make sure that the NUL byte is marked in the syndrome. */
+ orr has_nul, has_nul, mask
+
+L(not_limit):
+ orr syndrome, diff, has_nul
+
+#ifndef __AARCH64EB__
+ rev syndrome, syndrome
+ rev data1, data1
+ /* The MS-non-zero bit of the syndrome marks either the first bit
+ that is different, or the top bit of the first zero byte.
+ Shifting left now will bring the critical information into the
+ top bits. */
+ clz pos, syndrome
+ rev data2, data2
+ lsl data1, data1, pos
+ lsl data2, data2, pos
+ /* But we need to zero-extend (char is unsigned) the value and then
+ perform a signed 32-bit subtraction. */
+ lsr data1, data1, #56
+ sub result, data1, data2, lsr #56
+ ret
+#else
+ /* For big-endian we cannot use the trick with the syndrome value
+ as carry-propagation can corrupt the upper bits if the trailing
+ bytes in the string contain 0x01. */
+ /* However, if there is no NUL byte in the dword, we can generate
+ the result directly. We can't just subtract the bytes as the
+ MSB might be significant. */
+ cbnz has_nul, 1f
+ cmp data1, data2
+ cset result, ne
+ cneg result, result, lo
+ ret
+1:
+ /* Re-compute the NUL-byte detection, using a byte-reversed value. */
+ rev tmp3, data1
+ sub tmp1, tmp3, zeroones
+ orr tmp2, tmp3, #REP8_7f
+ bic has_nul, tmp1, tmp2
+ rev has_nul, has_nul
+ orr syndrome, diff, has_nul
+ clz pos, syndrome
+ /* The MS-non-zero bit of the syndrome marks either the first bit
+ that is different, or the top bit of the first zero byte.
+ Shifting left now will bring the critical information into the
+ top bits. */
+ lsl data1, data1, pos
+ lsl data2, data2, pos
+ /* But we need to zero-extend (char is unsigned) the value and then
+ perform a signed 32-bit subtraction. */
+ lsr data1, data1, #56
+ sub result, data1, data2, lsr #56
+ ret
+#endif
+
+L(mutual_align):
+ /* Sources are mutually aligned, but are not currently at an
+ alignment boundary. Round down the addresses and then mask off
+ the bytes that precede the start point.
+ We also need to adjust the limit calculations, but without
+ overflowing if the limit is near ULONG_MAX. */
+ bic src1, src1, #7
+ bic src2, src2, #7
+ ldr data1, [src1], #8
+ neg tmp3, count, lsl #3 /* 64 - bits(bytes beyond align). */
+ ldr data2, [src2], #8
+ mov tmp2, #~0
+ sub limit_wd, limit, #1 /* limit != 0, so no underflow. */
+#ifdef __AARCH64EB__
+ /* Big-endian. Early bytes are at MSB. */
+ lsl tmp2, tmp2, tmp3 /* Shift (count & 63). */
+#else
+ /* Little-endian. Early bytes are at LSB. */
+ lsr tmp2, tmp2, tmp3 /* Shift (count & 63). */
+#endif
+ and tmp3, limit_wd, #7
+ lsr limit_wd, limit_wd, #3
+ /* Adjust the limit. Only low 3 bits used, so overflow irrelevant. */
+ add limit, limit, count
+ add tmp3, tmp3, count
+ orr data1, data1, tmp2
+ orr data2, data2, tmp2
+ add limit_wd, limit_wd, tmp3, lsr #3
+ b L(start_realigned)
+
+ .p2align 4
+ /* Don't bother with dwords for up to 16 bytes. */
+L(misaligned8):
+ cmp limit, #16
+ b.hs L(try_misaligned_words)
+
+L(byte_loop):
+ /* Perhaps we can do better than this. */
+ ldrb data1w, [src1], #1
+ ldrb data2w, [src2], #1
+ subs limit, limit, #1
+ ccmp data1w, #1, #0, hi /* NZCV = 0b0000. */
+ ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */
+ b.eq L(byte_loop)
+L(done):
+ sub result, data1, data2
+ ret
+ /* Align the SRC1 to a dword by doing a bytewise compare and then do
+ the dword loop. */
+L(try_misaligned_words):
+ lsr limit_wd, limit, #3
+ cbz count, L(do_misaligned)
+
+ neg count, count
+ and count, count, #7
+ sub limit, limit, count
+ lsr limit_wd, limit, #3
+
+L(page_end_loop):
+ ldrb data1w, [src1], #1
+ ldrb data2w, [src2], #1
+ cmp data1w, #1
+ ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */
+ b.ne L(done)
+ subs count, count, #1
+ b.hi L(page_end_loop)
+
+L(do_misaligned):
+ /* Prepare ourselves for the next page crossing. Unlike the aligned
+ loop, we fetch 1 less dword because we risk crossing bounds on
+ SRC2. */
+ mov count, #8
+ subs limit_wd, limit_wd, #1
+ b.lo L(done_loop)
+L(loop_misaligned):
+ and tmp2, src2, #0xff8
+ eor tmp2, tmp2, #0xff8
+ cbz tmp2, L(page_end_loop)
+
+ ldr data1, [src1], #8
+ ldr data2, [src2], #8
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, #REP8_7f
+ eor diff, data1, data2 /* Non-zero if differences found. */
+ bics has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */
+ ccmp diff, #0, #0, eq
+ b.ne L(not_limit)
+ subs limit_wd, limit_wd, #1
+ b.pl L(loop_misaligned)
+
+L(done_loop):
+ /* We found a difference or a NULL before the limit was reached. */
+ and limit, limit, #7
+ cbz limit, L(not_limit)
+ /* Read the last word. */
+ sub src1, src1, 8
+ sub src2, src2, 8
+ ldr data1, [src1, limit]
+ ldr data2, [src2, limit]
+ sub tmp1, data1, zeroones
+ orr tmp2, data1, #REP8_7f
+ eor diff, data1, data2 /* Non-zero if differences found. */
+ bics has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */
+ ccmp diff, #0, #0, eq
+ b.ne L(not_limit)
+
+L(ret0):
+ mov result, #0
+ ret
+
+END ( __strncmp_aarch64)
+
diff --git a/string/aarch64/strnlen-sve.S b/string/aarch64/strnlen-sve.S
new file mode 100644
index 000000000000..5b9ebf7763bc
--- /dev/null
+++ b/string/aarch64/strnlen-sve.S
@@ -0,0 +1,74 @@
+/*
+ * strnlen - calculate the length of a string with limit.
+ *
+ * Copyright (c) 2019-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "../asmdefs.h"
+
+#if __ARM_FEATURE_SVE
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * SVE Available.
+ */
+
+ENTRY (__strnlen_aarch64_sve)
+ PTR_ARG (0)
+ SIZE_ARG (1)
+ setffr /* initialize FFR */
+ mov x2, 0 /* initialize len */
+ b 1f
+
+ .p2align 4
+ /* We have off + vl <= max, and so may read the whole vector. */
+0: ldff1b z0.b, p0/z, [x0, x2]
+ rdffrs p1.b, p0/z
+ b.nlast 2f
+
+ /* First fault did not fail: the whole vector is valid.
+ Avoid depending on the contents of FFR beyond the branch. */
+ cmpeq p2.b, p0/z, z0.b, 0
+ b.any 8f
+ incb x2
+
+1: whilelo p0.b, x2, x1
+ b.last 0b
+
+ /* We have off + vl < max. Test for off == max before proceeding. */
+ b.none 9f
+
+ ldff1b z0.b, p0/z, [x0, x2]
+ rdffrs p1.b, p0/z
+ b.nlast 2f
+
+ /* First fault did not fail: the vector up to max is valid.
+ Avoid depending on the contents of FFR beyond the branch.
+ Compare for end-of-string, but there are no more bytes. */
+ cmpeq p2.b, p0/z, z0.b, 0
+
+ /* Found end-of-string or zero. */
+8: brkb p2.b, p0/z, p2.b
+ mov x0, x2
+ incp x0, p2.b
+ ret
+
+ /* First fault failed: only some of the vector is valid.
+ Perform the comparison only on the valid bytes. */
+2: cmpeq p2.b, p1/z, z0.b, 0
+ b.any 8b
+
+ /* No inequality or zero found. Re-init FFR, incr and loop. */
+ setffr
+ incp x2, p1.b
+ b 1b
+
+ /* End of count. Return max. */
+9: mov x0, x1
+ ret
+
+END (__strnlen_aarch64_sve)
+
+#endif
+
diff --git a/string/aarch64/strnlen.S b/string/aarch64/strnlen.S
new file mode 100644
index 000000000000..48d2495d2082
--- /dev/null
+++ b/string/aarch64/strnlen.S
@@ -0,0 +1,112 @@
+/*
+ * strnlen - calculate the length of a string with limit.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, Advanced SIMD.
+ * MTE compatible.
+ */
+
+#include "../asmdefs.h"
+
+#define srcin x0
+#define cntin x1
+#define result x0
+
+#define src x2
+#define synd x3
+#define shift x4
+#define wtmp w4
+#define tmp x4
+#define cntrem x5
+
+#define qdata q0
+#define vdata v0
+#define vhas_chr v1
+#define vrepmask v2
+#define vend v3
+#define dend d3
+
+/*
+ Core algorithm:
+
+ For each 16-byte chunk we calculate a 64-bit syndrome value with four bits
+ per byte. For even bytes, bits 0-3 are set if the relevant byte matched the
+ requested character or the byte is NUL. Bits 4-7 must be zero. Bits 4-7 are
+ set likewise for odd bytes so that adjacent bytes can be merged. Since the
+ bits in the syndrome reflect the order in which things occur in the original
+ string, counting trailing zeros identifies exactly which byte matched. */
+
+ENTRY (__strnlen_aarch64)
+ PTR_ARG (0)
+ SIZE_ARG (1)
+ bic src, srcin, 15
+ mov wtmp, 0xf00f
+ cbz cntin, L(nomatch)
+ ld1 {vdata.16b}, [src], 16
+ dup vrepmask.8h, wtmp
+ cmeq vhas_chr.16b, vdata.16b, 0
+ lsl shift, srcin, 2
+ and vhas_chr.16b, vhas_chr.16b, vrepmask.16b
+ addp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov synd, dend
+ lsr synd, synd, shift
+ cbz synd, L(start_loop)
+L(finish):
+ rbit synd, synd
+ clz synd, synd
+ lsr result, synd, 2
+ cmp cntin, result
+ csel result, cntin, result, ls
+ ret
+
+L(start_loop):
+ sub tmp, src, srcin
+ subs cntrem, cntin, tmp
+ b.ls L(nomatch)
+
+ /* Make sure that it won't overread by a 16-byte chunk */
+ add tmp, cntrem, 15
+ tbnz tmp, 4, L(loop32_2)
+
+ .p2align 5
+L(loop32):
+ ldr qdata, [src], 16
+ cmeq vhas_chr.16b, vdata.16b, 0
+ umaxp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov synd, dend
+ cbnz synd, L(end)
+L(loop32_2):
+ ldr qdata, [src], 16
+ subs cntrem, cntrem, 32
+ cmeq vhas_chr.16b, vdata.16b, 0
+ b.ls L(end)
+ umaxp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ fmov synd, dend
+ cbz synd, L(loop32)
+
+L(end):
+ and vhas_chr.16b, vhas_chr.16b, vrepmask.16b
+ addp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */
+ sub src, src, 16
+ mov synd, vend.d[0]
+ sub result, src, srcin
+#ifndef __AARCH64EB__
+ rbit synd, synd
+#endif
+ clz synd, synd
+ add result, result, synd, lsr 2
+ cmp cntin, result
+ csel result, cntin, result, ls
+ ret
+
+L(nomatch):
+ mov result, cntin
+ ret
+
+END (__strnlen_aarch64)
+
diff --git a/string/aarch64/strrchr-mte.S b/string/aarch64/strrchr-mte.S
new file mode 100644
index 000000000000..1e4fb1a68f7e
--- /dev/null
+++ b/string/aarch64/strrchr-mte.S
@@ -0,0 +1,127 @@
+/*
+ * strrchr - find last position of a character in a string.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64, Advanced SIMD.
+ * MTE compatible.
+ */
+
+#include "../asmdefs.h"
+
+#define srcin x0
+#define chrin w1
+#define result x0
+
+#define src x2
+#define tmp x3
+#define wtmp w3
+#define synd x3
+#define shift x4
+#define src_match x4
+#define nul_match x5
+#define chr_match x6
+
+#define vrepchr v0
+#define vdata v1
+#define vhas_nul v2
+#define vhas_chr v3
+#define vrepmask v4
+#define vrepmask2 v5
+#define vend v5
+#define dend d5
+
+/* Core algorithm.
+
+ For each 16-byte chunk we calculate a 64-bit syndrome value, with
+ four bits per byte (LSB is always in bits 0 and 1, for both big
+ and little-endian systems). For each tuple, bits 0-1 are set if
+ the relevant byte matched the requested character; bits 2-3 are set
+ if the relevant byte matched the NUL end of string. */
+
+ENTRY (__strrchr_aarch64_mte)
+ PTR_ARG (0)
+ bic src, srcin, 15
+ dup vrepchr.16b, chrin
+ mov wtmp, 0x3003
+ dup vrepmask.8h, wtmp
+ tst srcin, 15
+ beq L(loop1)
+
+ ld1 {vdata.16b}, [src], 16
+ cmeq vhas_nul.16b, vdata.16b, 0
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ mov wtmp, 0xf00f
+ dup vrepmask2.8h, wtmp
+ bit vhas_nul.16b, vhas_chr.16b, vrepmask.16b
+ and vhas_nul.16b, vhas_nul.16b, vrepmask2.16b
+ addp vend.16b, vhas_nul.16b, vhas_nul.16b
+ lsl shift, srcin, 2
+ fmov synd, dend
+ lsr synd, synd, shift
+ lsl synd, synd, shift
+ ands nul_match, synd, 0xcccccccccccccccc
+ bne L(tail)
+ cbnz synd, L(loop2)
+
+ .p2align 5
+L(loop1):
+ ld1 {vdata.16b}, [src], 16
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ cmhs vhas_nul.16b, vhas_chr.16b, vdata.16b
+ umaxp vend.16b, vhas_nul.16b, vhas_nul.16b
+ fmov synd, dend
+ cbz synd, L(loop1)
+
+ cmeq vhas_nul.16b, vdata.16b, 0
+ bit vhas_nul.16b, vhas_chr.16b, vrepmask.16b
+ bic vhas_nul.8h, 0x0f, lsl 8
+ addp vend.16b, vhas_nul.16b, vhas_nul.16b
+ fmov synd, dend
+ ands nul_match, synd, 0xcccccccccccccccc
+ beq L(loop2)
+
+L(tail):
+ sub nul_match, nul_match, 1
+ and chr_match, synd, 0x3333333333333333
+ ands chr_match, chr_match, nul_match
+ sub result, src, 1
+ clz tmp, chr_match
+ sub result, result, tmp, lsr 2
+ csel result, result, xzr, ne
+ ret
+
+ .p2align 4
+L(loop2):
+ cmp synd, 0
+ csel src_match, src, src_match, ne
+ csel chr_match, synd, chr_match, ne
+ ld1 {vdata.16b}, [src], 16
+ cmeq vhas_nul.16b, vdata.16b, 0
+ cmeq vhas_chr.16b, vdata.16b, vrepchr.16b
+ bit vhas_nul.16b, vhas_chr.16b, vrepmask.16b
+ umaxp vend.16b, vhas_nul.16b, vhas_nul.16b
+ fmov synd, dend
+ tst synd, 0xcccccccccccccccc
+ beq L(loop2)
+
+ bic vhas_nul.8h, 0x0f, lsl 8
+ addp vend.16b, vhas_nul.16b, vhas_nul.16b
+ fmov synd, dend
+ and nul_match, synd, 0xcccccccccccccccc
+ sub nul_match, nul_match, 1
+ and tmp, synd, 0x3333333333333333
+ ands tmp, tmp, nul_match
+ csel chr_match, tmp, chr_match, ne
+ csel src_match, src, src_match, ne
+ sub src_match, src_match, 1
+ clz tmp, chr_match
+ sub result, src_match, tmp, lsr 2
+ ret
+
+END (__strrchr_aarch64_mte)
+
diff --git a/string/aarch64/strrchr-sve.S b/string/aarch64/strrchr-sve.S
new file mode 100644
index 000000000000..d36d69af37fd
--- /dev/null
+++ b/string/aarch64/strrchr-sve.S
@@ -0,0 +1,84 @@
+/*
+ * strrchr - find the last of a character in a string
+ *
+ * Copyright (c) 2019-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "../asmdefs.h"
+
+#if __ARM_FEATURE_SVE
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * SVE Available.
+ */
+
+ENTRY (__strrchr_aarch64_sve)
+ PTR_ARG (0)
+ dup z1.b, w1 /* replicate byte across vector */
+ setffr /* initialize FFR */
+ ptrue p1.b /* all ones; loop invariant */
+ mov x2, 0 /* no match found so far */
+ pfalse p2.b
+
+ .p2align 4
+ /* Read a vector's worth of bytes, stopping on first fault. */
+0: ldff1b z0.b, p1/z, [x0, xzr]
+ rdffrs p0.b, p1/z
+ b.nlast 1f
+
+ /* First fault did not fail: the whole vector is valid.
+ Avoid depending on the contents of FFR beyond the branch. */
+ incb x0, all /* skip bytes this round */
+ cmpeq p3.b, p1/z, z0.b, 0 /* search for 0 */
+ b.any 3f
+
+ cmpeq p3.b, p1/z, z0.b, z1.b /* search for c; no eos */
+ b.none 0b
+
+ mov x2, x0 /* save advanced base */
+ mov p2.b, p3.b /* save current search */
+ b 0b
+
+ /* First fault failed: only some of the vector is valid.
+ Perform the comparisions only on the valid bytes. */
+1: cmpeq p3.b, p0/z, z0.b, 0 /* search for 0 */
+ b.any 2f
+
+ cmpeq p3.b, p0/z, z0.b, z1.b /* search for c; no eos */
+ mov x3, x0
+ incp x0, p0.b /* skip bytes this round */
+ setffr /* re-init FFR */
+ b.none 0b
+
+ addvl x2, x3, 1 /* save advanced base */
+ mov p2.b, p3.b /* save current search */
+ b 0b
+
+ /* Found end-of-string. */
+2: incb x0, all /* advance base */
+3: brka p3.b, p1/z, p3.b /* mask after first 0 */
+ cmpeq p3.b, p3/z, z0.b, z1.b /* search for c not after eos */
+ b.any 4f
+
+ /* No C within last vector. Did we have one before? */
+ cbz x2, 5f
+ mov x0, x2 /* restore advanced base */
+ mov p3.b, p2.b /* restore saved search */
+
+ /* Find the *last* match in the predicate. This is slightly
+ more complicated than finding the first match. */
+4: rev p3.b, p3.b /* reverse the bits */
+ brka p3.b, p1/z, p3.b /* find position of last match */
+ decp x0, p3.b /* retard pointer to last match */
+ ret
+
+ /* No C whatsoever. Return NULL. */
+5: mov x0, 0
+ ret
+
+END (__strrchr_aarch64_sve)
+
+#endif
+
diff --git a/string/aarch64/strrchr.S b/string/aarch64/strrchr.S
new file mode 100644
index 000000000000..56185ff534e3
--- /dev/null
+++ b/string/aarch64/strrchr.S
@@ -0,0 +1,149 @@
+/*
+ * strrchr - find last position of a character in a string.
+ *
+ * Copyright (c) 2014-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/* Assumptions:
+ *
+ * ARMv8-a, AArch64
+ * Neon Available.
+ */
+
+#include "../asmdefs.h"
+
+/* Arguments and results. */
+#define srcin x0
+#define chrin w1
+
+#define result x0
+
+#define src x2
+#define tmp1 x3
+#define wtmp2 w4
+#define tmp3 x5
+#define src_match x6
+#define src_offset x7
+#define const_m1 x8
+#define tmp4 x9
+#define nul_match x10
+#define chr_match x11
+
+#define vrepchr v0
+#define vdata1 v1
+#define vdata2 v2
+#define vhas_nul1 v3
+#define vhas_nul2 v4
+#define vhas_chr1 v5
+#define vhas_chr2 v6
+#define vrepmask_0 v7
+#define vrepmask_c v16
+#define vend1 v17
+#define vend2 v18
+
+/* Core algorithm.
+
+ For each 32-byte hunk we calculate a 64-bit syndrome value, with
+ two bits per byte (LSB is always in bits 0 and 1, for both big
+ and little-endian systems). For each tuple, bit 0 is set iff
+ the relevant byte matched the requested character; bit 1 is set
+ iff the relevant byte matched the NUL end of string (we trigger
+ off bit0 for the special case of looking for NUL). Since the bits
+ in the syndrome reflect exactly the order in which things occur
+ in the original string a count_trailing_zeros() operation will
+ identify exactly which byte is causing the termination, and why. */
+
+ENTRY (__strrchr_aarch64)
+ PTR_ARG (0)
+ /* Magic constant 0x40100401 to allow us to identify which lane
+ matches the requested byte. Magic constant 0x80200802 used
+ similarly for NUL termination. */
+ mov wtmp2, #0x0401
+ movk wtmp2, #0x4010, lsl #16
+ dup vrepchr.16b, chrin
+ bic src, srcin, #31 /* Work with aligned 32-byte hunks. */
+ dup vrepmask_c.4s, wtmp2
+ mov src_offset, #0
+ ands tmp1, srcin, #31
+ add vrepmask_0.4s, vrepmask_c.4s, vrepmask_c.4s /* equiv: lsl #1 */
+ b.eq L(aligned)
+
+ /* Input string is not 32-byte aligned. Rather than forcing
+ the padding bytes to a safe value, we calculate the syndrome
+ for all the bytes, but then mask off those bits of the
+ syndrome that are related to the padding. */
+ ld1 {vdata1.16b, vdata2.16b}, [src], #32
+ neg tmp1, tmp1
+ cmeq vhas_nul1.16b, vdata1.16b, #0
+ cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b
+ cmeq vhas_nul2.16b, vdata2.16b, #0
+ cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b
+ and vhas_nul1.16b, vhas_nul1.16b, vrepmask_0.16b
+ and vhas_chr1.16b, vhas_chr1.16b, vrepmask_c.16b
+ and vhas_nul2.16b, vhas_nul2.16b, vrepmask_0.16b
+ and vhas_chr2.16b, vhas_chr2.16b, vrepmask_c.16b
+ addp vhas_nul1.16b, vhas_nul1.16b, vhas_nul2.16b // 256->128
+ addp vhas_chr1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128
+ addp vend1.16b, vhas_nul1.16b, vhas_chr1.16b // 128->64
+ mov nul_match, vend1.d[0]
+ lsl tmp1, tmp1, #1
+ mov const_m1, #~0
+ lsr tmp3, const_m1, tmp1
+ mov chr_match, vend1.d[1]
+
+ bic nul_match, nul_match, tmp3 // Mask padding bits.
+ bic chr_match, chr_match, tmp3 // Mask padding bits.
+ cbnz nul_match, L(tail)
+
+ .p2align 4
+L(loop):
+ cmp chr_match, #0
+ csel src_match, src, src_match, ne
+ csel src_offset, chr_match, src_offset, ne
+L(aligned):
+ ld1 {vdata1.16b, vdata2.16b}, [src], #32
+ cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b
+ cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b
+ uminp vend1.16b, vdata1.16b, vdata2.16b
+ and vhas_chr1.16b, vhas_chr1.16b, vrepmask_c.16b
+ and vhas_chr2.16b, vhas_chr2.16b, vrepmask_c.16b
+ cmeq vend1.16b, vend1.16b, 0
+ addp vhas_chr1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128
+ addp vend1.16b, vend1.16b, vhas_chr1.16b // 128->64
+ mov nul_match, vend1.d[0]
+ mov chr_match, vend1.d[1]
+ cbz nul_match, L(loop)
+
+ cmeq vhas_nul1.16b, vdata1.16b, #0
+ cmeq vhas_nul2.16b, vdata2.16b, #0
+ and vhas_nul1.16b, vhas_nul1.16b, vrepmask_0.16b
+ and vhas_nul2.16b, vhas_nul2.16b, vrepmask_0.16b
+ addp vhas_nul1.16b, vhas_nul1.16b, vhas_nul2.16b
+ addp vhas_nul1.16b, vhas_nul1.16b, vhas_nul1.16b
+ mov nul_match, vhas_nul1.d[0]
+
+L(tail):
+ /* Work out exactly where the string ends. */
+ sub tmp4, nul_match, #1
+ eor tmp4, tmp4, nul_match
+ ands chr_match, chr_match, tmp4
+ /* And pick the values corresponding to the last match. */
+ csel src_match, src, src_match, ne
+ csel src_offset, chr_match, src_offset, ne
+
+ /* Count down from the top of the syndrome to find the last match. */
+ clz tmp3, src_offset
+ /* Src_match points beyond the word containing the match, so we can
+ simply subtract half the bit-offset into the syndrome. Because
+ we are counting down, we need to go back one more character. */
+ add tmp3, tmp3, #2
+ sub result, src_match, tmp3, lsr #1
+ /* But if the syndrome shows no match was found, then return NULL. */
+ cmp src_offset, #0
+ csel result, result, xzr, ne
+
+ ret
+
+END (__strrchr_aarch64)
+
diff --git a/string/arm/check-arch.S b/string/arm/check-arch.S
new file mode 100644
index 000000000000..1cff9345e343
--- /dev/null
+++ b/string/arm/check-arch.S
@@ -0,0 +1,10 @@
+/*
+ * check ARCH setting.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#if !__arm__
+# error ARCH setting does not match the compiler.
+#endif
diff --git a/string/arm/memchr.S b/string/arm/memchr.S
new file mode 100644
index 000000000000..3f1ac4df136f
--- /dev/null
+++ b/string/arm/memchr.S
@@ -0,0 +1,132 @@
+/*
+ * memchr - scan memory for a character
+ *
+ * Copyright (c) 2010-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/*
+ Written by Dave Gilbert <david.gilbert@linaro.org>
+
+ This __memchr_arm routine is optimised on a Cortex-A9 and should work on
+ all ARMv7 processors. It has a fast past for short sizes, and has
+ an optimised path for large data sets; the worst case is finding the
+ match early in a large data set.
+
+ */
+
+@ 2011-02-07 david.gilbert@linaro.org
+@ Extracted from local git a5b438d861
+@ 2011-07-14 david.gilbert@linaro.org
+@ Import endianness fix from local git ea786f1b
+@ 2011-12-07 david.gilbert@linaro.org
+@ Removed unneeded cbz from align loop
+
+ .syntax unified
+ .arch armv7-a
+
+@ this lets us check a flag in a 00/ff byte easily in either endianness
+#ifdef __ARMEB__
+#define CHARTSTMASK(c) 1<<(31-(c*8))
+#else
+#define CHARTSTMASK(c) 1<<(c*8)
+#endif
+ .thumb
+
+@ ---------------------------------------------------------------------------
+ .thumb_func
+ .align 2
+ .p2align 4,,15
+ .global __memchr_arm
+ .type __memchr_arm,%function
+__memchr_arm:
+ @ r0 = start of memory to scan
+ @ r1 = character to look for
+ @ r2 = length
+ @ returns r0 = pointer to character or NULL if not found
+ and r1,r1,#0xff @ Don't think we can trust the caller to actually pass a char
+
+ cmp r2,#16 @ If it's short don't bother with anything clever
+ blt 20f
+
+ tst r0, #7 @ If it's already aligned skip the next bit
+ beq 10f
+
+ @ Work up to an aligned point
+5:
+ ldrb r3, [r0],#1
+ subs r2, r2, #1
+ cmp r3, r1
+ beq 50f @ If it matches exit found
+ tst r0, #7
+ bne 5b @ If not aligned yet then do next byte
+
+10:
+ @ At this point, we are aligned, we know we have at least 8 bytes to work with
+ push {r4,r5,r6,r7}
+ orr r1, r1, r1, lsl #8 @ expand the match word across to all bytes
+ orr r1, r1, r1, lsl #16
+ bic r4, r2, #7 @ Number of double words to work with
+ mvns r7, #0 @ all F's
+ movs r3, #0
+
+15:
+ ldmia r0!,{r5,r6}
+ subs r4, r4, #8
+ eor r5,r5, r1 @ Get it so that r5,r6 have 00's where the bytes match the target
+ eor r6,r6, r1
+ uadd8 r5, r5, r7 @ Parallel add 0xff - sets the GE bits for anything that wasn't 0
+ sel r5, r3, r7 @ bytes are 00 for none-00 bytes, or ff for 00 bytes - NOTE INVERSION
+ uadd8 r6, r6, r7 @ Parallel add 0xff - sets the GE bits for anything that wasn't 0
+ sel r6, r5, r7 @ chained....bytes are 00 for none-00 bytes, or ff for 00 bytes - NOTE INVERSION
+ cbnz r6, 60f
+ bne 15b @ (Flags from the subs above) If not run out of bytes then go around again
+
+ pop {r4,r5,r6,r7}
+ and r1,r1,#0xff @ Get r1 back to a single character from the expansion above
+ and r2,r2,#7 @ Leave the count remaining as the number after the double words have been done
+
+20:
+ cbz r2, 40f @ 0 length or hit the end already then not found
+
+21: @ Post aligned section, or just a short call
+ ldrb r3,[r0],#1
+ subs r2,r2,#1
+ eor r3,r3,r1 @ r3 = 0 if match - doesn't break flags from sub
+ cbz r3, 50f
+ bne 21b @ on r2 flags
+
+40:
+ movs r0,#0 @ not found
+ bx lr
+
+50:
+ subs r0,r0,#1 @ found
+ bx lr
+
+60: @ We're here because the fast path found a hit - now we have to track down exactly which word it was
+ @ r0 points to the start of the double word after the one that was tested
+ @ r5 has the 00/ff pattern for the first word, r6 has the chained value
+ cmp r5, #0
+ itte eq
+ moveq r5, r6 @ the end is in the 2nd word
+ subeq r0,r0,#3 @ Points to 2nd byte of 2nd word
+ subne r0,r0,#7 @ or 2nd byte of 1st word
+
+ @ r0 currently points to the 3rd byte of the word containing the hit
+ tst r5, # CHARTSTMASK(0) @ 1st character
+ bne 61f
+ adds r0,r0,#1
+ tst r5, # CHARTSTMASK(1) @ 2nd character
+ ittt eq
+ addeq r0,r0,#1
+ tsteq r5, # (3<<15) @ 2nd & 3rd character
+ @ If not the 3rd must be the last one
+ addeq r0,r0,#1
+
+61:
+ pop {r4,r5,r6,r7}
+ subs r0,r0,#1
+ bx lr
+
+ .size __memchr_arm, . - __memchr_arm
diff --git a/string/arm/memcpy.S b/string/arm/memcpy.S
new file mode 100644
index 000000000000..86e64938edb1
--- /dev/null
+++ b/string/arm/memcpy.S
@@ -0,0 +1,587 @@
+/*
+ * memcpy - copy memory area
+ *
+ * Copyright (c) 2013-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/*
+ This memcpy routine is optimised for Cortex-A15 cores and takes advantage
+ of VFP or NEON when built with the appropriate flags.
+
+ Assumptions:
+
+ ARMv6 (ARMv7-a if using Neon)
+ ARM state
+ Unaligned accesses
+
+ */
+
+#include "../asmdefs.h"
+
+ .syntax unified
+ /* This implementation requires ARM state. */
+ .arm
+
+#ifdef __ARM_NEON__
+
+ .fpu neon
+ .arch armv7-a
+# define FRAME_SIZE 4
+# define USE_VFP
+# define USE_NEON
+
+#elif !defined (__SOFTFP__)
+
+ .arch armv6
+ .fpu vfpv2
+# define FRAME_SIZE 32
+# define USE_VFP
+
+#else
+ .arch armv6
+# define FRAME_SIZE 32
+
+#endif
+
+/* Old versions of GAS incorrectly implement the NEON align semantics. */
+#ifdef BROKEN_ASM_NEON_ALIGN
+#define ALIGN(addr, align) addr,:align
+#else
+#define ALIGN(addr, align) addr:align
+#endif
+
+#define PC_OFFSET 8 /* PC pipeline compensation. */
+#define INSN_SIZE 4
+
+/* Call parameters. */
+#define dstin r0
+#define src r1
+#define count r2
+
+/* Locals. */
+#define tmp1 r3
+#define dst ip
+#define tmp2 r10
+
+#ifndef USE_NEON
+/* For bulk copies using GP registers. */
+#define A_l r2 /* Call-clobbered. */
+#define A_h r3 /* Call-clobbered. */
+#define B_l r4
+#define B_h r5
+#define C_l r6
+#define C_h r7
+#define D_l r8
+#define D_h r9
+#endif
+
+/* Number of lines ahead to pre-fetch data. If you change this the code
+ below will need adjustment to compensate. */
+
+#define prefetch_lines 5
+
+#ifdef USE_VFP
+ .macro cpy_line_vfp vreg, base
+ vstr \vreg, [dst, #\base]
+ vldr \vreg, [src, #\base]
+ vstr d0, [dst, #\base + 8]
+ vldr d0, [src, #\base + 8]
+ vstr d1, [dst, #\base + 16]
+ vldr d1, [src, #\base + 16]
+ vstr d2, [dst, #\base + 24]
+ vldr d2, [src, #\base + 24]
+ vstr \vreg, [dst, #\base + 32]
+ vldr \vreg, [src, #\base + prefetch_lines * 64 - 32]
+ vstr d0, [dst, #\base + 40]
+ vldr d0, [src, #\base + 40]
+ vstr d1, [dst, #\base + 48]
+ vldr d1, [src, #\base + 48]
+ vstr d2, [dst, #\base + 56]
+ vldr d2, [src, #\base + 56]
+ .endm
+
+ .macro cpy_tail_vfp vreg, base
+ vstr \vreg, [dst, #\base]
+ vldr \vreg, [src, #\base]
+ vstr d0, [dst, #\base + 8]
+ vldr d0, [src, #\base + 8]
+ vstr d1, [dst, #\base + 16]
+ vldr d1, [src, #\base + 16]
+ vstr d2, [dst, #\base + 24]
+ vldr d2, [src, #\base + 24]
+ vstr \vreg, [dst, #\base + 32]
+ vstr d0, [dst, #\base + 40]
+ vldr d0, [src, #\base + 40]
+ vstr d1, [dst, #\base + 48]
+ vldr d1, [src, #\base + 48]
+ vstr d2, [dst, #\base + 56]
+ vldr d2, [src, #\base + 56]
+ .endm
+#endif
+
+ENTRY (__memcpy_arm)
+
+ mov dst, dstin /* Preserve dstin, we need to return it. */
+ cmp count, #64
+ bhs L(cpy_not_short)
+ /* Deal with small copies quickly by dropping straight into the
+ exit block. */
+
+L(tail63unaligned):
+#ifdef USE_NEON
+ and tmp1, count, #0x38
+ rsb tmp1, tmp1, #(56 - PC_OFFSET + INSN_SIZE)
+ add pc, pc, tmp1
+ vld1.8 {d0}, [src]! /* 14 words to go. */
+ vst1.8 {d0}, [dst]!
+ vld1.8 {d0}, [src]! /* 12 words to go. */
+ vst1.8 {d0}, [dst]!
+ vld1.8 {d0}, [src]! /* 10 words to go. */
+ vst1.8 {d0}, [dst]!
+ vld1.8 {d0}, [src]! /* 8 words to go. */
+ vst1.8 {d0}, [dst]!
+ vld1.8 {d0}, [src]! /* 6 words to go. */
+ vst1.8 {d0}, [dst]!
+ vld1.8 {d0}, [src]! /* 4 words to go. */
+ vst1.8 {d0}, [dst]!
+ vld1.8 {d0}, [src]! /* 2 words to go. */
+ vst1.8 {d0}, [dst]!
+
+ tst count, #4
+ ldrne tmp1, [src], #4
+ strne tmp1, [dst], #4
+#else
+ /* Copy up to 15 full words of data. May not be aligned. */
+ /* Cannot use VFP for unaligned data. */
+ and tmp1, count, #0x3c
+ add dst, dst, tmp1
+ add src, src, tmp1
+ rsb tmp1, tmp1, #(60 - PC_OFFSET/2 + INSN_SIZE/2)
+ /* Jump directly into the sequence below at the correct offset. */
+ add pc, pc, tmp1, lsl #1
+
+ ldr tmp1, [src, #-60] /* 15 words to go. */
+ str tmp1, [dst, #-60]
+
+ ldr tmp1, [src, #-56] /* 14 words to go. */
+ str tmp1, [dst, #-56]
+ ldr tmp1, [src, #-52]
+ str tmp1, [dst, #-52]
+
+ ldr tmp1, [src, #-48] /* 12 words to go. */
+ str tmp1, [dst, #-48]
+ ldr tmp1, [src, #-44]
+ str tmp1, [dst, #-44]
+
+ ldr tmp1, [src, #-40] /* 10 words to go. */
+ str tmp1, [dst, #-40]
+ ldr tmp1, [src, #-36]
+ str tmp1, [dst, #-36]
+
+ ldr tmp1, [src, #-32] /* 8 words to go. */
+ str tmp1, [dst, #-32]
+ ldr tmp1, [src, #-28]
+ str tmp1, [dst, #-28]
+
+ ldr tmp1, [src, #-24] /* 6 words to go. */
+ str tmp1, [dst, #-24]
+ ldr tmp1, [src, #-20]
+ str tmp1, [dst, #-20]
+
+ ldr tmp1, [src, #-16] /* 4 words to go. */
+ str tmp1, [dst, #-16]
+ ldr tmp1, [src, #-12]
+ str tmp1, [dst, #-12]
+
+ ldr tmp1, [src, #-8] /* 2 words to go. */
+ str tmp1, [dst, #-8]
+ ldr tmp1, [src, #-4]
+ str tmp1, [dst, #-4]
+#endif
+
+ lsls count, count, #31
+ ldrhcs tmp1, [src], #2
+ ldrbne src, [src] /* Src is dead, use as a scratch. */
+ strhcs tmp1, [dst], #2
+ strbne src, [dst]
+ bx lr
+
+L(cpy_not_short):
+ /* At least 64 bytes to copy, but don't know the alignment yet. */
+ str tmp2, [sp, #-FRAME_SIZE]!
+ and tmp2, src, #7
+ and tmp1, dst, #7
+ cmp tmp1, tmp2
+ bne L(cpy_notaligned)
+
+#ifdef USE_VFP
+ /* Magic dust alert! Force VFP on Cortex-A9. Experiments show
+ that the FP pipeline is much better at streaming loads and
+ stores. This is outside the critical loop. */
+ vmov.f32 s0, s0
+#endif
+
+ /* SRC and DST have the same mutual 64-bit alignment, but we may
+ still need to pre-copy some bytes to get to natural alignment.
+ We bring SRC and DST into full 64-bit alignment. */
+ lsls tmp2, dst, #29
+ beq 1f
+ rsbs tmp2, tmp2, #0
+ sub count, count, tmp2, lsr #29
+ ldrmi tmp1, [src], #4
+ strmi tmp1, [dst], #4
+ lsls tmp2, tmp2, #2
+ ldrhcs tmp1, [src], #2
+ ldrbne tmp2, [src], #1
+ strhcs tmp1, [dst], #2
+ strbne tmp2, [dst], #1
+
+1:
+ subs tmp2, count, #64 /* Use tmp2 for count. */
+ blo L(tail63aligned)
+
+ cmp tmp2, #512
+ bhs L(cpy_body_long)
+
+L(cpy_body_medium): /* Count in tmp2. */
+#ifdef USE_VFP
+1:
+ vldr d0, [src, #0]
+ subs tmp2, tmp2, #64
+ vldr d1, [src, #8]
+ vstr d0, [dst, #0]
+ vldr d0, [src, #16]
+ vstr d1, [dst, #8]
+ vldr d1, [src, #24]
+ vstr d0, [dst, #16]
+ vldr d0, [src, #32]
+ vstr d1, [dst, #24]
+ vldr d1, [src, #40]
+ vstr d0, [dst, #32]
+ vldr d0, [src, #48]
+ vstr d1, [dst, #40]
+ vldr d1, [src, #56]
+ vstr d0, [dst, #48]
+ add src, src, #64
+ vstr d1, [dst, #56]
+ add dst, dst, #64
+ bhs 1b
+ tst tmp2, #0x3f
+ beq L(done)
+
+L(tail63aligned): /* Count in tmp2. */
+ and tmp1, tmp2, #0x38
+ add dst, dst, tmp1
+ add src, src, tmp1
+ rsb tmp1, tmp1, #(56 - PC_OFFSET + INSN_SIZE)
+ add pc, pc, tmp1
+
+ vldr d0, [src, #-56] /* 14 words to go. */
+ vstr d0, [dst, #-56]
+ vldr d0, [src, #-48] /* 12 words to go. */
+ vstr d0, [dst, #-48]
+ vldr d0, [src, #-40] /* 10 words to go. */
+ vstr d0, [dst, #-40]
+ vldr d0, [src, #-32] /* 8 words to go. */
+ vstr d0, [dst, #-32]
+ vldr d0, [src, #-24] /* 6 words to go. */
+ vstr d0, [dst, #-24]
+ vldr d0, [src, #-16] /* 4 words to go. */
+ vstr d0, [dst, #-16]
+ vldr d0, [src, #-8] /* 2 words to go. */
+ vstr d0, [dst, #-8]
+#else
+ sub src, src, #8
+ sub dst, dst, #8
+1:
+ ldrd A_l, A_h, [src, #8]
+ strd A_l, A_h, [dst, #8]
+ ldrd A_l, A_h, [src, #16]
+ strd A_l, A_h, [dst, #16]
+ ldrd A_l, A_h, [src, #24]
+ strd A_l, A_h, [dst, #24]
+ ldrd A_l, A_h, [src, #32]
+ strd A_l, A_h, [dst, #32]
+ ldrd A_l, A_h, [src, #40]
+ strd A_l, A_h, [dst, #40]
+ ldrd A_l, A_h, [src, #48]
+ strd A_l, A_h, [dst, #48]
+ ldrd A_l, A_h, [src, #56]
+ strd A_l, A_h, [dst, #56]
+ ldrd A_l, A_h, [src, #64]!
+ strd A_l, A_h, [dst, #64]!
+ subs tmp2, tmp2, #64
+ bhs 1b
+ tst tmp2, #0x3f
+ bne 1f
+ ldr tmp2,[sp], #FRAME_SIZE
+ bx lr
+1:
+ add src, src, #8
+ add dst, dst, #8
+
+L(tail63aligned): /* Count in tmp2. */
+ /* Copy up to 7 d-words of data. Similar to Ltail63unaligned, but
+ we know that the src and dest are 64-bit aligned so we can use
+ LDRD/STRD to improve efficiency. */
+ /* TMP2 is now negative, but we don't care about that. The bottom
+ six bits still tell us how many bytes are left to copy. */
+
+ and tmp1, tmp2, #0x38
+ add dst, dst, tmp1
+ add src, src, tmp1
+ rsb tmp1, tmp1, #(56 - PC_OFFSET + INSN_SIZE)
+ add pc, pc, tmp1
+ ldrd A_l, A_h, [src, #-56] /* 14 words to go. */
+ strd A_l, A_h, [dst, #-56]
+ ldrd A_l, A_h, [src, #-48] /* 12 words to go. */
+ strd A_l, A_h, [dst, #-48]
+ ldrd A_l, A_h, [src, #-40] /* 10 words to go. */
+ strd A_l, A_h, [dst, #-40]
+ ldrd A_l, A_h, [src, #-32] /* 8 words to go. */
+ strd A_l, A_h, [dst, #-32]
+ ldrd A_l, A_h, [src, #-24] /* 6 words to go. */
+ strd A_l, A_h, [dst, #-24]
+ ldrd A_l, A_h, [src, #-16] /* 4 words to go. */
+ strd A_l, A_h, [dst, #-16]
+ ldrd A_l, A_h, [src, #-8] /* 2 words to go. */
+ strd A_l, A_h, [dst, #-8]
+
+#endif
+ tst tmp2, #4
+ ldrne tmp1, [src], #4
+ strne tmp1, [dst], #4
+ lsls tmp2, tmp2, #31 /* Count (tmp2) now dead. */
+ ldrhcs tmp1, [src], #2
+ ldrbne tmp2, [src]
+ strhcs tmp1, [dst], #2
+ strbne tmp2, [dst]
+
+L(done):
+ ldr tmp2, [sp], #FRAME_SIZE
+ bx lr
+
+L(cpy_body_long): /* Count in tmp2. */
+
+ /* Long copy. We know that there's at least (prefetch_lines * 64)
+ bytes to go. */
+#ifdef USE_VFP
+ /* Don't use PLD. Instead, read some data in advance of the current
+ copy position into a register. This should act like a PLD
+ operation but we won't have to repeat the transfer. */
+
+ vldr d3, [src, #0]
+ vldr d4, [src, #64]
+ vldr d5, [src, #128]
+ vldr d6, [src, #192]
+ vldr d7, [src, #256]
+
+ vldr d0, [src, #8]
+ vldr d1, [src, #16]
+ vldr d2, [src, #24]
+ add src, src, #32
+
+ subs tmp2, tmp2, #prefetch_lines * 64 * 2
+ blo 2f
+1:
+ cpy_line_vfp d3, 0
+ cpy_line_vfp d4, 64
+ cpy_line_vfp d5, 128
+ add dst, dst, #3 * 64
+ add src, src, #3 * 64
+ cpy_line_vfp d6, 0
+ cpy_line_vfp d7, 64
+ add dst, dst, #2 * 64
+ add src, src, #2 * 64
+ subs tmp2, tmp2, #prefetch_lines * 64
+ bhs 1b
+
+2:
+ cpy_tail_vfp d3, 0
+ cpy_tail_vfp d4, 64
+ cpy_tail_vfp d5, 128
+ add src, src, #3 * 64
+ add dst, dst, #3 * 64
+ cpy_tail_vfp d6, 0
+ vstr d7, [dst, #64]
+ vldr d7, [src, #64]
+ vstr d0, [dst, #64 + 8]
+ vldr d0, [src, #64 + 8]
+ vstr d1, [dst, #64 + 16]
+ vldr d1, [src, #64 + 16]
+ vstr d2, [dst, #64 + 24]
+ vldr d2, [src, #64 + 24]
+ vstr d7, [dst, #64 + 32]
+ add src, src, #96
+ vstr d0, [dst, #64 + 40]
+ vstr d1, [dst, #64 + 48]
+ vstr d2, [dst, #64 + 56]
+ add dst, dst, #128
+ add tmp2, tmp2, #prefetch_lines * 64
+ b L(cpy_body_medium)
+#else
+ /* Long copy. Use an SMS style loop to maximize the I/O
+ bandwidth of the core. We don't have enough spare registers
+ to synthesise prefetching, so use PLD operations. */
+ /* Pre-bias src and dst. */
+ sub src, src, #8
+ sub dst, dst, #8
+ pld [src, #8]
+ pld [src, #72]
+ subs tmp2, tmp2, #64
+ pld [src, #136]
+ ldrd A_l, A_h, [src, #8]
+ strd B_l, B_h, [sp, #8]
+ ldrd B_l, B_h, [src, #16]
+ strd C_l, C_h, [sp, #16]
+ ldrd C_l, C_h, [src, #24]
+ strd D_l, D_h, [sp, #24]
+ pld [src, #200]
+ ldrd D_l, D_h, [src, #32]!
+ b 1f
+ .p2align 6
+2:
+ pld [src, #232]
+ strd A_l, A_h, [dst, #40]
+ ldrd A_l, A_h, [src, #40]
+ strd B_l, B_h, [dst, #48]
+ ldrd B_l, B_h, [src, #48]
+ strd C_l, C_h, [dst, #56]
+ ldrd C_l, C_h, [src, #56]
+ strd D_l, D_h, [dst, #64]!
+ ldrd D_l, D_h, [src, #64]!
+ subs tmp2, tmp2, #64
+1:
+ strd A_l, A_h, [dst, #8]
+ ldrd A_l, A_h, [src, #8]
+ strd B_l, B_h, [dst, #16]
+ ldrd B_l, B_h, [src, #16]
+ strd C_l, C_h, [dst, #24]
+ ldrd C_l, C_h, [src, #24]
+ strd D_l, D_h, [dst, #32]
+ ldrd D_l, D_h, [src, #32]
+ bcs 2b
+ /* Save the remaining bytes and restore the callee-saved regs. */
+ strd A_l, A_h, [dst, #40]
+ add src, src, #40
+ strd B_l, B_h, [dst, #48]
+ ldrd B_l, B_h, [sp, #8]
+ strd C_l, C_h, [dst, #56]
+ ldrd C_l, C_h, [sp, #16]
+ strd D_l, D_h, [dst, #64]
+ ldrd D_l, D_h, [sp, #24]
+ add dst, dst, #72
+ tst tmp2, #0x3f
+ bne L(tail63aligned)
+ ldr tmp2, [sp], #FRAME_SIZE
+ bx lr
+#endif
+
+L(cpy_notaligned):
+ pld [src]
+ pld [src, #64]
+ /* There's at least 64 bytes to copy, but there is no mutual
+ alignment. */
+ /* Bring DST to 64-bit alignment. */
+ lsls tmp2, dst, #29
+ pld [src, #(2 * 64)]
+ beq 1f
+ rsbs tmp2, tmp2, #0
+ sub count, count, tmp2, lsr #29
+ ldrmi tmp1, [src], #4
+ strmi tmp1, [dst], #4
+ lsls tmp2, tmp2, #2
+ ldrbne tmp1, [src], #1
+ ldrhcs tmp2, [src], #2
+ strbne tmp1, [dst], #1
+ strhcs tmp2, [dst], #2
+1:
+ pld [src, #(3 * 64)]
+ subs count, count, #64
+ ldrlo tmp2, [sp], #FRAME_SIZE
+ blo L(tail63unaligned)
+ pld [src, #(4 * 64)]
+
+#ifdef USE_NEON
+ vld1.8 {d0-d3}, [src]!
+ vld1.8 {d4-d7}, [src]!
+ subs count, count, #64
+ blo 2f
+1:
+ pld [src, #(4 * 64)]
+ vst1.8 {d0-d3}, [ALIGN (dst, 64)]!
+ vld1.8 {d0-d3}, [src]!
+ vst1.8 {d4-d7}, [ALIGN (dst, 64)]!
+ vld1.8 {d4-d7}, [src]!
+ subs count, count, #64
+ bhs 1b
+2:
+ vst1.8 {d0-d3}, [ALIGN (dst, 64)]!
+ vst1.8 {d4-d7}, [ALIGN (dst, 64)]!
+ ands count, count, #0x3f
+#else
+ /* Use an SMS style loop to maximize the I/O bandwidth. */
+ sub src, src, #4
+ sub dst, dst, #8
+ subs tmp2, count, #64 /* Use tmp2 for count. */
+ ldr A_l, [src, #4]
+ ldr A_h, [src, #8]
+ strd B_l, B_h, [sp, #8]
+ ldr B_l, [src, #12]
+ ldr B_h, [src, #16]
+ strd C_l, C_h, [sp, #16]
+ ldr C_l, [src, #20]
+ ldr C_h, [src, #24]
+ strd D_l, D_h, [sp, #24]
+ ldr D_l, [src, #28]
+ ldr D_h, [src, #32]!
+ b 1f
+ .p2align 6
+2:
+ pld [src, #(5 * 64) - (32 - 4)]
+ strd A_l, A_h, [dst, #40]
+ ldr A_l, [src, #36]
+ ldr A_h, [src, #40]
+ strd B_l, B_h, [dst, #48]
+ ldr B_l, [src, #44]
+ ldr B_h, [src, #48]
+ strd C_l, C_h, [dst, #56]
+ ldr C_l, [src, #52]
+ ldr C_h, [src, #56]
+ strd D_l, D_h, [dst, #64]!
+ ldr D_l, [src, #60]
+ ldr D_h, [src, #64]!
+ subs tmp2, tmp2, #64
+1:
+ strd A_l, A_h, [dst, #8]
+ ldr A_l, [src, #4]
+ ldr A_h, [src, #8]
+ strd B_l, B_h, [dst, #16]
+ ldr B_l, [src, #12]
+ ldr B_h, [src, #16]
+ strd C_l, C_h, [dst, #24]
+ ldr C_l, [src, #20]
+ ldr C_h, [src, #24]
+ strd D_l, D_h, [dst, #32]
+ ldr D_l, [src, #28]
+ ldr D_h, [src, #32]
+ bcs 2b
+
+ /* Save the remaining bytes and restore the callee-saved regs. */
+ strd A_l, A_h, [dst, #40]
+ add src, src, #36
+ strd B_l, B_h, [dst, #48]
+ ldrd B_l, B_h, [sp, #8]
+ strd C_l, C_h, [dst, #56]
+ ldrd C_l, C_h, [sp, #16]
+ strd D_l, D_h, [dst, #64]
+ ldrd D_l, D_h, [sp, #24]
+ add dst, dst, #72
+ ands count, tmp2, #0x3f
+#endif
+ ldr tmp2, [sp], #FRAME_SIZE
+ bne L(tail63unaligned)
+ bx lr
+
+END (__memcpy_arm)
diff --git a/string/arm/memset.S b/string/arm/memset.S
new file mode 100644
index 000000000000..11e927368fd1
--- /dev/null
+++ b/string/arm/memset.S
@@ -0,0 +1,98 @@
+/*
+ * memset - fill memory with a constant
+ *
+ * Copyright (c) 2010-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+/*
+ Written by Dave Gilbert <david.gilbert@linaro.org>
+
+ This memset routine is optimised on a Cortex-A9 and should work on
+ all ARMv7 processors.
+
+ */
+
+ .syntax unified
+ .arch armv7-a
+
+@ 2011-08-30 david.gilbert@linaro.org
+@ Extracted from local git 2f11b436
+
+@ this lets us check a flag in a 00/ff byte easily in either endianness
+#ifdef __ARMEB__
+#define CHARTSTMASK(c) 1<<(31-(c*8))
+#else
+#define CHARTSTMASK(c) 1<<(c*8)
+#endif
+ .thumb
+
+@ ---------------------------------------------------------------------------
+ .thumb_func
+ .align 2
+ .p2align 4,,15
+ .global __memset_arm
+ .type __memset_arm,%function
+__memset_arm:
+ @ r0 = address
+ @ r1 = character
+ @ r2 = count
+ @ returns original address in r0
+
+ mov r3, r0 @ Leave r0 alone
+ cbz r2, 10f @ Exit if 0 length
+
+ tst r0, #7
+ beq 2f @ Already aligned
+
+ @ Ok, so we're misaligned here
+1:
+ strb r1, [r3], #1
+ subs r2,r2,#1
+ tst r3, #7
+ cbz r2, 10f @ Exit if we hit the end
+ bne 1b @ go round again if still misaligned
+
+2:
+ @ OK, so we're aligned
+ push {r4,r5,r6,r7}
+ bics r4, r2, #15 @ if less than 16 bytes then need to finish it off
+ beq 5f
+
+3:
+ @ POSIX says that ch is cast to an unsigned char. A uxtb is one
+ @ byte and takes two cycles, where an AND is four bytes but one
+ @ cycle.
+ and r1, #0xFF
+ orr r1, r1, r1, lsl#8 @ Same character into all bytes
+ orr r1, r1, r1, lsl#16
+ mov r5,r1
+ mov r6,r1
+ mov r7,r1
+
+4:
+ subs r4,r4,#16
+ stmia r3!,{r1,r5,r6,r7}
+ bne 4b
+ and r2,r2,#15
+
+ @ At this point we're still aligned and we have upto align-1 bytes left to right
+ @ we can avoid some of the byte-at-a time now by testing for some big chunks
+ tst r2,#8
+ itt ne
+ subne r2,r2,#8
+ stmiane r3!,{r1,r5}
+
+5:
+ pop {r4,r5,r6,r7}
+ cbz r2, 10f
+
+ @ Got to do any last < alignment bytes
+6:
+ subs r2,r2,#1
+ strb r1,[r3],#1
+ bne 6b
+
+10:
+ bx lr @ goodbye
+ .size __memset_arm, . - __memset_arm
diff --git a/string/arm/strcmp-armv6m.S b/string/arm/strcmp-armv6m.S
new file mode 100644
index 000000000000..b75d4143db57
--- /dev/null
+++ b/string/arm/strcmp-armv6m.S
@@ -0,0 +1,117 @@
+/*
+ * strcmp for ARMv6-M (optimized for performance, not size)
+ *
+ * Copyright (c) 2014-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#if __ARM_ARCH == 6 && __ARM_ARCH_6M__ >= 1
+
+ .thumb_func
+ .syntax unified
+ .arch armv6-m
+
+ .macro DoSub n, label
+ subs r0, r0, r1
+#ifdef __ARM_BIG_ENDIAN
+ lsrs r1, r4, \n
+#else
+ lsls r1, r4, \n
+#endif
+ orrs r1, r0
+ bne \label
+ .endm
+
+ .macro Byte_Test n, label
+ lsrs r0, r2, \n
+ lsrs r1, r3, \n
+ DoSub \n, \label
+ .endm
+
+ENTRY_ALIGN (__strcmp_armv6m, 4)
+ mov r2, r0
+ push {r4, r5, r6, lr}
+ orrs r2, r1
+ lsls r2, r2, #30
+ bne 6f
+ ldr r5, =0x01010101
+ lsls r6, r5, #7
+1:
+ ldmia r0!, {r2}
+ ldmia r1!, {r3}
+ subs r4, r2, r5
+ bics r4, r2
+ ands r4, r6
+ beq 3f
+
+#ifdef __ARM_BIG_ENDIAN
+ Byte_Test #24, 4f
+ Byte_Test #16, 4f
+ Byte_Test #8, 4f
+
+ b 7f
+3:
+ cmp r2, r3
+ beq 1b
+ cmp r2, r3
+#else
+ uxtb r0, r2
+ uxtb r1, r3
+ DoSub #24, 2f
+
+ uxth r0, r2
+ uxth r1, r3
+ DoSub #16, 2f
+
+ lsls r0, r2, #8
+ lsls r1, r3, #8
+ lsrs r0, r0, #8
+ lsrs r1, r1, #8
+ DoSub #8, 2f
+
+ lsrs r0, r2, #24
+ lsrs r1, r3, #24
+ subs r0, r0, r1
+2:
+ pop {r4, r5, r6, pc}
+
+3:
+ cmp r2, r3
+ beq 1b
+ rev r0, r2
+ rev r1, r3
+ cmp r0, r1
+#endif
+
+ bls 5f
+ movs r0, #1
+4:
+ pop {r4, r5, r6, pc}
+5:
+ movs r0, #0
+ mvns r0, r0
+ pop {r4, r5, r6, pc}
+6:
+ ldrb r2, [r0, #0]
+ ldrb r3, [r1, #0]
+ adds r0, #1
+ adds r1, #1
+ cmp r2, #0
+ beq 7f
+ cmp r2, r3
+ bne 7f
+ ldrb r2, [r0, #0]
+ ldrb r3, [r1, #0]
+ adds r0, #1
+ adds r1, #1
+ cmp r2, #0
+ beq 7f
+ cmp r2, r3
+ beq 6b
+7:
+ subs r0, r2, r3
+ pop {r4, r5, r6, pc}
+
+END (__strcmp_armv6m)
+
+#endif /* __ARM_ARCH == 6 && __ARM_ARCH_6M__ >= 1 */
diff --git a/string/arm/strcmp.S b/string/arm/strcmp.S
new file mode 100644
index 000000000000..51443e343058
--- /dev/null
+++ b/string/arm/strcmp.S
@@ -0,0 +1,475 @@
+/*
+ * strcmp for ARMv7
+ *
+ * Copyright (c) 2012-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#if __ARM_ARCH >= 7 && __ARM_ARCH_ISA_ARM >= 1
+
+/* Implementation of strcmp for ARMv7 when DSP instructions are
+ available. Use ldrd to support wider loads, provided the data
+ is sufficiently aligned. Use saturating arithmetic to optimize
+ the compares. */
+
+#include "../asmdefs.h"
+
+/* Build Options:
+ STRCMP_NO_PRECHECK: Don't run a quick pre-check of the first
+ byte in the string. If comparing completely random strings
+ the pre-check will save time, since there is a very high
+ probability of a mismatch in the first character: we save
+ significant overhead if this is the common case. However,
+ if strings are likely to be identical (eg because we're
+ verifying a hit in a hash table), then this check is largely
+ redundant. */
+
+#define STRCMP_NO_PRECHECK 0
+
+ /* This version uses Thumb-2 code. */
+ .thumb
+ .syntax unified
+
+#ifdef __ARM_BIG_ENDIAN
+#define S2LO lsl
+#define S2LOEQ lsleq
+#define S2HI lsr
+#define MSB 0x000000ff
+#define LSB 0xff000000
+#define BYTE0_OFFSET 24
+#define BYTE1_OFFSET 16
+#define BYTE2_OFFSET 8
+#define BYTE3_OFFSET 0
+#else /* not __ARM_BIG_ENDIAN */
+#define S2LO lsr
+#define S2LOEQ lsreq
+#define S2HI lsl
+#define BYTE0_OFFSET 0
+#define BYTE1_OFFSET 8
+#define BYTE2_OFFSET 16
+#define BYTE3_OFFSET 24
+#define MSB 0xff000000
+#define LSB 0x000000ff
+#endif /* not __ARM_BIG_ENDIAN */
+
+/* Parameters and result. */
+#define src1 r0
+#define src2 r1
+#define result r0 /* Overlaps src1. */
+
+/* Internal variables. */
+#define tmp1 r4
+#define tmp2 r5
+#define const_m1 r12
+
+/* Additional internal variables for 64-bit aligned data. */
+#define data1a r2
+#define data1b r3
+#define data2a r6
+#define data2b r7
+#define syndrome_a tmp1
+#define syndrome_b tmp2
+
+/* Additional internal variables for 32-bit aligned data. */
+#define data1 r2
+#define data2 r3
+#define syndrome tmp2
+
+
+ /* Macro to compute and return the result value for word-aligned
+ cases. */
+ .macro strcmp_epilogue_aligned synd d1 d2 restore_r6
+#ifdef __ARM_BIG_ENDIAN
+ /* If data1 contains a zero byte, then syndrome will contain a 1 in
+ bit 7 of that byte. Otherwise, the highest set bit in the
+ syndrome will highlight the first different bit. It is therefore
+ sufficient to extract the eight bits starting with the syndrome
+ bit. */
+ clz tmp1, \synd
+ lsl r1, \d2, tmp1
+ .if \restore_r6
+ ldrd r6, r7, [sp, #8]
+ .endif
+ .cfi_restore 6
+ .cfi_restore 7
+ lsl \d1, \d1, tmp1
+ .cfi_remember_state
+ lsr result, \d1, #24
+ ldrd r4, r5, [sp], #16
+ .cfi_restore 4
+ .cfi_restore 5
+ sub result, result, r1, lsr #24
+ bx lr
+#else
+ /* To use the big-endian trick we'd have to reverse all three words.
+ that's slower than this approach. */
+ rev \synd, \synd
+ clz tmp1, \synd
+ bic tmp1, tmp1, #7
+ lsr r1, \d2, tmp1
+ .cfi_remember_state
+ .if \restore_r6
+ ldrd r6, r7, [sp, #8]
+ .endif
+ .cfi_restore 6
+ .cfi_restore 7
+ lsr \d1, \d1, tmp1
+ and result, \d1, #255
+ and r1, r1, #255
+ ldrd r4, r5, [sp], #16
+ .cfi_restore 4
+ .cfi_restore 5
+ sub result, result, r1
+
+ bx lr
+#endif
+ .endm
+
+ .p2align 5
+L(strcmp_start_addr):
+#if STRCMP_NO_PRECHECK == 0
+L(fastpath_exit):
+ sub r0, r2, r3
+ bx lr
+ nop
+#endif
+ENTRY_ALIGN (__strcmp_arm, 0)
+#if STRCMP_NO_PRECHECK == 0
+ ldrb r2, [src1]
+ ldrb r3, [src2]
+ cmp r2, #1
+ it cs
+ cmpcs r2, r3
+ bne L(fastpath_exit)
+#endif
+ strd r4, r5, [sp, #-16]!
+ .cfi_def_cfa_offset 16
+ .cfi_offset 4, -16
+ .cfi_offset 5, -12
+ orr tmp1, src1, src2
+ strd r6, r7, [sp, #8]
+ .cfi_offset 6, -8
+ .cfi_offset 7, -4
+ mvn const_m1, #0
+ lsl r2, tmp1, #29
+ cbz r2, L(loop_aligned8)
+
+L(not_aligned):
+ eor tmp1, src1, src2
+ tst tmp1, #7
+ bne L(misaligned8)
+
+ /* Deal with mutual misalignment by aligning downwards and then
+ masking off the unwanted loaded data to prevent a difference. */
+ and tmp1, src1, #7
+ bic src1, src1, #7
+ and tmp2, tmp1, #3
+ bic src2, src2, #7
+ lsl tmp2, tmp2, #3 /* Bytes -> bits. */
+ ldrd data1a, data1b, [src1], #16
+ tst tmp1, #4
+ ldrd data2a, data2b, [src2], #16
+ /* In thumb code we can't use MVN with a register shift, but
+ we do have ORN. */
+ S2HI tmp1, const_m1, tmp2
+ orn data1a, data1a, tmp1
+ orn data2a, data2a, tmp1
+ beq L(start_realigned8)
+ orn data1b, data1b, tmp1
+ mov data1a, const_m1
+ orn data2b, data2b, tmp1
+ mov data2a, const_m1
+ b L(start_realigned8)
+
+ /* Unwind the inner loop by a factor of 2, giving 16 bytes per
+ pass. */
+ .p2align 5,,12 /* Don't start in the tail bytes of a cache line. */
+ .p2align 2 /* Always word aligned. */
+L(loop_aligned8):
+ ldrd data1a, data1b, [src1], #16
+ ldrd data2a, data2b, [src2], #16
+L(start_realigned8):
+ uadd8 syndrome_b, data1a, const_m1 /* Only want GE bits, */
+ eor syndrome_a, data1a, data2a
+ sel syndrome_a, syndrome_a, const_m1
+ cbnz syndrome_a, L(diff_in_a)
+ uadd8 syndrome_b, data1b, const_m1 /* Only want GE bits. */
+ eor syndrome_b, data1b, data2b
+ sel syndrome_b, syndrome_b, const_m1
+ cbnz syndrome_b, L(diff_in_b)
+
+ ldrd data1a, data1b, [src1, #-8]
+ ldrd data2a, data2b, [src2, #-8]
+ uadd8 syndrome_b, data1a, const_m1 /* Only want GE bits, */
+ eor syndrome_a, data1a, data2a
+ sel syndrome_a, syndrome_a, const_m1
+ uadd8 syndrome_b, data1b, const_m1 /* Only want GE bits. */
+ eor syndrome_b, data1b, data2b
+ sel syndrome_b, syndrome_b, const_m1
+ /* Can't use CBZ for backwards branch. */
+ orrs syndrome_b, syndrome_b, syndrome_a /* Only need if s_a == 0 */
+ beq L(loop_aligned8)
+
+L(diff_found):
+ cbnz syndrome_a, L(diff_in_a)
+
+L(diff_in_b):
+ strcmp_epilogue_aligned syndrome_b, data1b, data2b 1
+
+L(diff_in_a):
+ .cfi_restore_state
+ strcmp_epilogue_aligned syndrome_a, data1a, data2a 1
+
+ .cfi_restore_state
+L(misaligned8):
+ tst tmp1, #3
+ bne L(misaligned4)
+ ands tmp1, src1, #3
+ bne L(mutual_align4)
+
+ /* Unrolled by a factor of 2, to reduce the number of post-increment
+ operations. */
+L(loop_aligned4):
+ ldr data1, [src1], #8
+ ldr data2, [src2], #8
+L(start_realigned4):
+ uadd8 syndrome, data1, const_m1 /* Only need GE bits. */
+ eor syndrome, data1, data2
+ sel syndrome, syndrome, const_m1
+ cbnz syndrome, L(aligned4_done)
+ ldr data1, [src1, #-4]
+ ldr data2, [src2, #-4]
+ uadd8 syndrome, data1, const_m1
+ eor syndrome, data1, data2
+ sel syndrome, syndrome, const_m1
+ cmp syndrome, #0
+ beq L(loop_aligned4)
+
+L(aligned4_done):
+ strcmp_epilogue_aligned syndrome, data1, data2, 0
+
+L(mutual_align4):
+ .cfi_restore_state
+ /* Deal with mutual misalignment by aligning downwards and then
+ masking off the unwanted loaded data to prevent a difference. */
+ lsl tmp1, tmp1, #3 /* Bytes -> bits. */
+ bic src1, src1, #3
+ ldr data1, [src1], #8
+ bic src2, src2, #3
+ ldr data2, [src2], #8
+
+ /* In thumb code we can't use MVN with a register shift, but
+ we do have ORN. */
+ S2HI tmp1, const_m1, tmp1
+ orn data1, data1, tmp1
+ orn data2, data2, tmp1
+ b L(start_realigned4)
+
+L(misaligned4):
+ ands tmp1, src1, #3
+ beq L(src1_aligned)
+ sub src2, src2, tmp1
+ bic src1, src1, #3
+ lsls tmp1, tmp1, #31
+ ldr data1, [src1], #4
+ beq L(aligned_m2)
+ bcs L(aligned_m1)
+
+#if STRCMP_NO_PRECHECK == 1
+ ldrb data2, [src2, #1]
+ uxtb tmp1, data1, ror #BYTE1_OFFSET
+ subs tmp1, tmp1, data2
+ bne L(misaligned_exit)
+ cbz data2, L(misaligned_exit)
+
+L(aligned_m2):
+ ldrb data2, [src2, #2]
+ uxtb tmp1, data1, ror #BYTE2_OFFSET
+ subs tmp1, tmp1, data2
+ bne L(misaligned_exit)
+ cbz data2, L(misaligned_exit)
+
+L(aligned_m1):
+ ldrb data2, [src2, #3]
+ uxtb tmp1, data1, ror #BYTE3_OFFSET
+ subs tmp1, tmp1, data2
+ bne L(misaligned_exit)
+ add src2, src2, #4
+ cbnz data2, L(src1_aligned)
+#else /* STRCMP_NO_PRECHECK */
+ /* If we've done the pre-check, then we don't need to check the
+ first byte again here. */
+ ldrb data2, [src2, #2]
+ uxtb tmp1, data1, ror #BYTE2_OFFSET
+ subs tmp1, tmp1, data2
+ bne L(misaligned_exit)
+ cbz data2, L(misaligned_exit)
+
+L(aligned_m2):
+ ldrb data2, [src2, #3]
+ uxtb tmp1, data1, ror #BYTE3_OFFSET
+ subs tmp1, tmp1, data2
+ bne L(misaligned_exit)
+ cbnz data2, L(aligned_m1)
+#endif
+
+L(misaligned_exit):
+ .cfi_remember_state
+ mov result, tmp1
+ ldr r4, [sp], #16
+ .cfi_restore 4
+ bx lr
+
+#if STRCMP_NO_PRECHECK == 0
+L(aligned_m1):
+ add src2, src2, #4
+#endif
+L(src1_aligned):
+ .cfi_restore_state
+ /* src1 is word aligned, but src2 has no common alignment
+ with it. */
+ ldr data1, [src1], #4
+ lsls tmp1, src2, #31 /* C=src2[1], Z=src2[0]. */
+
+ bic src2, src2, #3
+ ldr data2, [src2], #4
+ bhi L(overlap1) /* C=1, Z=0 => src2[1:0] = 0b11. */
+ bcs L(overlap2) /* C=1, Z=1 => src2[1:0] = 0b10. */
+
+ /* (overlap3) C=0, Z=0 => src2[1:0] = 0b01. */
+L(overlap3):
+ bic tmp1, data1, #MSB
+ uadd8 syndrome, data1, const_m1
+ eors syndrome, tmp1, data2, S2LO #8
+ sel syndrome, syndrome, const_m1
+ bne 4f
+ cbnz syndrome, 5f
+ ldr data2, [src2], #4
+ eor tmp1, tmp1, data1
+ cmp tmp1, data2, S2HI #24
+ bne 6f
+ ldr data1, [src1], #4
+ b L(overlap3)
+4:
+ S2LO data2, data2, #8
+ b L(strcmp_tail)
+
+5:
+ bics syndrome, syndrome, #MSB
+ bne L(strcmp_done_equal)
+
+ /* We can only get here if the MSB of data1 contains 0, so
+ fast-path the exit. */
+ ldrb result, [src2]
+ .cfi_remember_state
+ ldrd r4, r5, [sp], #16
+ .cfi_restore 4
+ .cfi_restore 5
+ /* R6/7 Not used in this sequence. */
+ .cfi_restore 6
+ .cfi_restore 7
+ neg result, result
+ bx lr
+
+6:
+ .cfi_restore_state
+ S2LO data1, data1, #24
+ and data2, data2, #LSB
+ b L(strcmp_tail)
+
+ .p2align 5,,12 /* Ensure at least 3 instructions in cache line. */
+L(overlap2):
+ and tmp1, data1, const_m1, S2LO #16
+ uadd8 syndrome, data1, const_m1
+ eors syndrome, tmp1, data2, S2LO #16
+ sel syndrome, syndrome, const_m1
+ bne 4f
+ cbnz syndrome, 5f
+ ldr data2, [src2], #4
+ eor tmp1, tmp1, data1
+ cmp tmp1, data2, S2HI #16
+ bne 6f
+ ldr data1, [src1], #4
+ b L(overlap2)
+4:
+ S2LO data2, data2, #16
+ b L(strcmp_tail)
+5:
+ ands syndrome, syndrome, const_m1, S2LO #16
+ bne L(strcmp_done_equal)
+
+ ldrh data2, [src2]
+ S2LO data1, data1, #16
+#ifdef __ARM_BIG_ENDIAN
+ lsl data2, data2, #16
+#endif
+ b L(strcmp_tail)
+
+6:
+ S2LO data1, data1, #16
+ and data2, data2, const_m1, S2LO #16
+ b L(strcmp_tail)
+
+ .p2align 5,,12 /* Ensure at least 3 instructions in cache line. */
+L(overlap1):
+ and tmp1, data1, #LSB
+ uadd8 syndrome, data1, const_m1
+ eors syndrome, tmp1, data2, S2LO #24
+ sel syndrome, syndrome, const_m1
+ bne 4f
+ cbnz syndrome, 5f
+ ldr data2, [src2], #4
+ eor tmp1, tmp1, data1
+ cmp tmp1, data2, S2HI #8
+ bne 6f
+ ldr data1, [src1], #4
+ b L(overlap1)
+4:
+ S2LO data2, data2, #24
+ b L(strcmp_tail)
+5:
+ tst syndrome, #LSB
+ bne L(strcmp_done_equal)
+ ldr data2, [src2]
+6:
+ S2LO data1, data1, #8
+ bic data2, data2, #MSB
+ b L(strcmp_tail)
+
+L(strcmp_done_equal):
+ mov result, #0
+ .cfi_remember_state
+ ldrd r4, r5, [sp], #16
+ .cfi_restore 4
+ .cfi_restore 5
+ /* R6/7 not used in this sequence. */
+ .cfi_restore 6
+ .cfi_restore 7
+ bx lr
+
+L(strcmp_tail):
+ .cfi_restore_state
+#ifndef __ARM_BIG_ENDIAN
+ rev data1, data1
+ rev data2, data2
+ /* Now everything looks big-endian... */
+#endif
+ uadd8 tmp1, data1, const_m1
+ eor tmp1, data1, data2
+ sel syndrome, tmp1, const_m1
+ clz tmp1, syndrome
+ lsl data1, data1, tmp1
+ lsl data2, data2, tmp1
+ lsr result, data1, #24
+ ldrd r4, r5, [sp], #16
+ .cfi_restore 4
+ .cfi_restore 5
+ /* R6/7 not used in this sequence. */
+ .cfi_restore 6
+ .cfi_restore 7
+ sub result, result, data2, lsr #24
+ bx lr
+
+END (__strcmp_arm)
+
+#endif /* __ARM_ARCH >= 7 && __ARM_ARCH_ISA_ARM >= 1 */
diff --git a/string/arm/strcpy.c b/string/arm/strcpy.c
new file mode 100644
index 000000000000..02cf94ff4be0
--- /dev/null
+++ b/string/arm/strcpy.c
@@ -0,0 +1,133 @@
+/*
+ * strcpy
+ *
+ * Copyright (c) 2008-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#if defined (__thumb2__) && !defined (__thumb__)
+
+/* For GLIBC:
+#include <string.h>
+#include <memcopy.h>
+
+#undef strcmp
+*/
+
+#ifdef __thumb2__
+#define magic1(REG) "#0x01010101"
+#define magic2(REG) "#0x80808080"
+#else
+#define magic1(REG) #REG
+#define magic2(REG) #REG ", lsl #7"
+#endif
+
+char* __attribute__((naked))
+__strcpy_arm (char* dst, const char* src)
+{
+ __asm__ (
+ "pld [r1, #0]\n\t"
+ "eor r2, r0, r1\n\t"
+ "mov ip, r0\n\t"
+ "tst r2, #3\n\t"
+ "bne 4f\n\t"
+ "tst r1, #3\n\t"
+ "bne 3f\n"
+ "5:\n\t"
+# ifndef __thumb2__
+ "str r5, [sp, #-4]!\n\t"
+ "mov r5, #0x01\n\t"
+ "orr r5, r5, r5, lsl #8\n\t"
+ "orr r5, r5, r5, lsl #16\n\t"
+# endif
+
+ "str r4, [sp, #-4]!\n\t"
+ "tst r1, #4\n\t"
+ "ldr r3, [r1], #4\n\t"
+ "beq 2f\n\t"
+ "sub r2, r3, "magic1(r5)"\n\t"
+ "bics r2, r2, r3\n\t"
+ "tst r2, "magic2(r5)"\n\t"
+ "itt eq\n\t"
+ "streq r3, [ip], #4\n\t"
+ "ldreq r3, [r1], #4\n"
+ "bne 1f\n\t"
+ /* Inner loop. We now know that r1 is 64-bit aligned, so we
+ can safely fetch up to two words. This allows us to avoid
+ load stalls. */
+ ".p2align 2\n"
+ "2:\n\t"
+ "pld [r1, #8]\n\t"
+ "ldr r4, [r1], #4\n\t"
+ "sub r2, r3, "magic1(r5)"\n\t"
+ "bics r2, r2, r3\n\t"
+ "tst r2, "magic2(r5)"\n\t"
+ "sub r2, r4, "magic1(r5)"\n\t"
+ "bne 1f\n\t"
+ "str r3, [ip], #4\n\t"
+ "bics r2, r2, r4\n\t"
+ "tst r2, "magic2(r5)"\n\t"
+ "itt eq\n\t"
+ "ldreq r3, [r1], #4\n\t"
+ "streq r4, [ip], #4\n\t"
+ "beq 2b\n\t"
+ "mov r3, r4\n"
+ "1:\n\t"
+# ifdef __ARMEB__
+ "rors r3, r3, #24\n\t"
+# endif
+ "strb r3, [ip], #1\n\t"
+ "tst r3, #0xff\n\t"
+# ifdef __ARMEL__
+ "ror r3, r3, #8\n\t"
+# endif
+ "bne 1b\n\t"
+ "ldr r4, [sp], #4\n\t"
+# ifndef __thumb2__
+ "ldr r5, [sp], #4\n\t"
+# endif
+ "BX LR\n"
+
+ /* Strings have the same offset from word alignment, but it's
+ not zero. */
+ "3:\n\t"
+ "tst r1, #1\n\t"
+ "beq 1f\n\t"
+ "ldrb r2, [r1], #1\n\t"
+ "strb r2, [ip], #1\n\t"
+ "cmp r2, #0\n\t"
+ "it eq\n"
+ "BXEQ LR\n"
+ "1:\n\t"
+ "tst r1, #2\n\t"
+ "beq 5b\n\t"
+ "ldrh r2, [r1], #2\n\t"
+# ifdef __ARMEB__
+ "tst r2, #0xff00\n\t"
+ "iteet ne\n\t"
+ "strneh r2, [ip], #2\n\t"
+ "lsreq r2, r2, #8\n\t"
+ "streqb r2, [ip]\n\t"
+ "tstne r2, #0xff\n\t"
+# else
+ "tst r2, #0xff\n\t"
+ "itet ne\n\t"
+ "strneh r2, [ip], #2\n\t"
+ "streqb r2, [ip]\n\t"
+ "tstne r2, #0xff00\n\t"
+# endif
+ "bne 5b\n\t"
+ "BX LR\n"
+
+ /* src and dst do not have a common word-alignement. Fall back to
+ byte copying. */
+ "4:\n\t"
+ "ldrb r2, [r1], #1\n\t"
+ "strb r2, [ip], #1\n\t"
+ "cmp r2, #0\n\t"
+ "bne 4b\n\t"
+ "BX LR");
+}
+/* For GLIBC: libc_hidden_builtin_def (strcpy) */
+
+#endif /* defined (__thumb2__) && !defined (__thumb__) */
diff --git a/string/arm/strlen-armv6t2.S b/string/arm/strlen-armv6t2.S
new file mode 100644
index 000000000000..5ad30c941586
--- /dev/null
+++ b/string/arm/strlen-armv6t2.S
@@ -0,0 +1,124 @@
+/*
+ * strlen - calculate the length of a string
+ *
+ * Copyright (c) 2010-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#if __ARM_ARCH >= 6 && __ARM_ARCH_ISA_THUMB == 2
+
+/*
+ Assumes:
+ ARMv6T2, AArch32
+
+ */
+
+#include "../asmdefs.h"
+
+#ifdef __ARMEB__
+#define S2LO lsl
+#define S2HI lsr
+#else
+#define S2LO lsr
+#define S2HI lsl
+#endif
+
+ /* This code requires Thumb. */
+ .thumb
+ .syntax unified
+
+/* Parameters and result. */
+#define srcin r0
+#define result r0
+
+/* Internal variables. */
+#define src r1
+#define data1a r2
+#define data1b r3
+#define const_m1 r12
+#define const_0 r4
+#define tmp1 r4 /* Overlaps const_0 */
+#define tmp2 r5
+
+ENTRY (__strlen_armv6t2)
+ pld [srcin, #0]
+ strd r4, r5, [sp, #-8]!
+ bic src, srcin, #7
+ mvn const_m1, #0
+ ands tmp1, srcin, #7 /* (8 - bytes) to alignment. */
+ pld [src, #32]
+ bne.w L(misaligned8)
+ mov const_0, #0
+ mov result, #-8
+L(loop_aligned):
+ /* Bytes 0-7. */
+ ldrd data1a, data1b, [src]
+ pld [src, #64]
+ add result, result, #8
+L(start_realigned):
+ uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */
+ sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */
+ uadd8 data1b, data1b, const_m1
+ sel data1b, data1a, const_m1 /* Only used if d1a == 0. */
+ cbnz data1b, L(null_found)
+
+ /* Bytes 8-15. */
+ ldrd data1a, data1b, [src, #8]
+ uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */
+ add result, result, #8
+ sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */
+ uadd8 data1b, data1b, const_m1
+ sel data1b, data1a, const_m1 /* Only used if d1a == 0. */
+ cbnz data1b, L(null_found)
+
+ /* Bytes 16-23. */
+ ldrd data1a, data1b, [src, #16]
+ uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */
+ add result, result, #8
+ sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */
+ uadd8 data1b, data1b, const_m1
+ sel data1b, data1a, const_m1 /* Only used if d1a == 0. */
+ cbnz data1b, L(null_found)
+
+ /* Bytes 24-31. */
+ ldrd data1a, data1b, [src, #24]
+ add src, src, #32
+ uadd8 data1a, data1a, const_m1 /* Saturating GE<0:3> set. */
+ add result, result, #8
+ sel data1a, const_0, const_m1 /* Select based on GE<0:3>. */
+ uadd8 data1b, data1b, const_m1
+ sel data1b, data1a, const_m1 /* Only used if d1a == 0. */
+ cmp data1b, #0
+ beq L(loop_aligned)
+
+L(null_found):
+ cmp data1a, #0
+ itt eq
+ addeq result, result, #4
+ moveq data1a, data1b
+#ifndef __ARMEB__
+ rev data1a, data1a
+#endif
+ clz data1a, data1a
+ ldrd r4, r5, [sp], #8
+ add result, result, data1a, lsr #3 /* Bits -> Bytes. */
+ bx lr
+
+L(misaligned8):
+ ldrd data1a, data1b, [src]
+ and tmp2, tmp1, #3
+ rsb result, tmp1, #0
+ lsl tmp2, tmp2, #3 /* Bytes -> bits. */
+ tst tmp1, #4
+ pld [src, #64]
+ S2HI tmp2, const_m1, tmp2
+ orn data1a, data1a, tmp2
+ itt ne
+ ornne data1b, data1b, tmp2
+ movne data1a, const_m1
+ mov const_0, #0
+ b L(start_realigned)
+
+END (__strlen_armv6t2)
+
+#endif /* __ARM_ARCH >= 6 && __ARM_ARCH_ISA_THUMB == 2 */
diff --git a/string/asmdefs.h b/string/asmdefs.h
new file mode 100644
index 000000000000..340b427a505b
--- /dev/null
+++ b/string/asmdefs.h
@@ -0,0 +1,98 @@
+/*
+ * Macros for asm code.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef _ASMDEFS_H
+#define _ASMDEFS_H
+
+#if defined(__aarch64__)
+
+/* Branch Target Identitication support. */
+#define BTI_C hint 34
+#define BTI_J hint 36
+/* Return address signing support (pac-ret). */
+#define PACIASP hint 25; .cfi_window_save
+#define AUTIASP hint 29; .cfi_window_save
+
+/* GNU_PROPERTY_AARCH64_* macros from elf.h. */
+#define FEATURE_1_AND 0xc0000000
+#define FEATURE_1_BTI 1
+#define FEATURE_1_PAC 2
+
+/* Add a NT_GNU_PROPERTY_TYPE_0 note. */
+#define GNU_PROPERTY(type, value) \
+ .section .note.gnu.property, "a"; \
+ .p2align 3; \
+ .word 4; \
+ .word 16; \
+ .word 5; \
+ .asciz "GNU"; \
+ .word type; \
+ .word 4; \
+ .word value; \
+ .word 0; \
+ .text
+
+/* If set then the GNU Property Note section will be added to
+ mark objects to support BTI and PAC-RET. */
+#ifndef WANT_GNU_PROPERTY
+#define WANT_GNU_PROPERTY 1
+#endif
+
+#if WANT_GNU_PROPERTY
+/* Add property note with supported features to all asm files. */
+GNU_PROPERTY (FEATURE_1_AND, FEATURE_1_BTI|FEATURE_1_PAC)
+#endif
+
+#define ENTRY_ALIGN(name, alignment) \
+ .global name; \
+ .type name,%function; \
+ .align alignment; \
+ name: \
+ .cfi_startproc; \
+ BTI_C;
+
+#else
+
+#define END_FILE
+
+#define ENTRY_ALIGN(name, alignment) \
+ .global name; \
+ .type name,%function; \
+ .align alignment; \
+ name: \
+ .cfi_startproc;
+
+#endif
+
+#define ENTRY(name) ENTRY_ALIGN(name, 6)
+
+#define ENTRY_ALIAS(name) \
+ .global name; \
+ .type name,%function; \
+ name:
+
+#define END(name) \
+ .cfi_endproc; \
+ .size name, .-name;
+
+#define L(l) .L ## l
+
+#ifdef __ILP32__
+ /* Sanitize padding bits of pointer arguments as per aapcs64 */
+#define PTR_ARG(n) mov w##n, w##n
+#else
+#define PTR_ARG(n)
+#endif
+
+#ifdef __ILP32__
+ /* Sanitize padding bits of size arguments as per aapcs64 */
+#define SIZE_ARG(n) mov w##n, w##n
+#else
+#define SIZE_ARG(n)
+#endif
+
+#endif
diff --git a/string/bench/memcpy.c b/string/bench/memcpy.c
new file mode 100644
index 000000000000..d5d4ea7e0309
--- /dev/null
+++ b/string/bench/memcpy.c
@@ -0,0 +1,260 @@
+/*
+ * memcpy benchmark.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#define _GNU_SOURCE
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include "stringlib.h"
+#include "benchlib.h"
+
+#define ITERS 5000
+#define ITERS2 20000000
+#define ITERS3 500000
+#define MAX_COPIES 8192
+#define SIZE (256*1024)
+
+static uint8_t a[SIZE + 4096] __attribute__((__aligned__(64)));
+static uint8_t b[SIZE + 4096] __attribute__((__aligned__(64)));
+
+#define F(x) {#x, x},
+
+static const struct fun
+{
+ const char *name;
+ void *(*fun)(void *, const void *, size_t);
+} funtab[] =
+{
+ F(memcpy)
+#if __aarch64__
+ F(__memcpy_aarch64)
+# if __ARM_NEON
+ F(__memcpy_aarch64_simd)
+# endif
+#elif __arm__
+ F(__memcpy_arm)
+#endif
+#undef F
+ {0, 0}
+};
+
+typedef struct { uint16_t size; uint16_t freq; } freq_data_t;
+typedef struct { uint8_t align; uint16_t freq; } align_data_t;
+
+#define SIZE_NUM 65536
+#define SIZE_MASK (SIZE_NUM-1)
+static uint8_t size_arr[SIZE_NUM];
+
+/* Frequency data for memcpy of less than 4096 bytes based on SPEC2017. */
+static freq_data_t size_freq[] =
+{
+{32,22320}, { 16,9554}, { 8,8915}, {152,5327}, { 4,2159}, {292,2035},
+{ 12,1608}, { 24,1343}, {1152,895}, {144, 813}, {884, 733}, {284, 721},
+{120, 661}, { 2, 649}, {882, 550}, { 5, 475}, { 7, 461}, {108, 460},
+{ 10, 361}, { 9, 361}, { 6, 334}, { 3, 326}, {464, 308}, {2048,303},
+{ 1, 298}, { 64, 250}, { 11, 197}, {296, 194}, { 68, 187}, { 15, 185},
+{192, 184}, {1764,183}, { 13, 173}, {560, 126}, {160, 115}, {288, 96},
+{104, 96}, {1144, 83}, { 18, 80}, { 23, 78}, { 40, 77}, { 19, 68},
+{ 48, 63}, { 17, 57}, { 72, 54}, {1280, 51}, { 20, 49}, { 28, 47},
+{ 22, 46}, {640, 45}, { 25, 41}, { 14, 40}, { 56, 37}, { 27, 35},
+{ 35, 33}, {384, 33}, { 29, 32}, { 80, 30}, {4095, 22}, {232, 22},
+{ 36, 19}, {184, 17}, { 21, 17}, {256, 16}, { 44, 15}, { 26, 15},
+{ 31, 14}, { 88, 14}, {176, 13}, { 33, 12}, {1024, 12}, {208, 11},
+{ 62, 11}, {128, 10}, {704, 10}, {324, 10}, { 96, 10}, { 60, 9},
+{136, 9}, {124, 9}, { 34, 8}, { 30, 8}, {480, 8}, {1344, 8},
+{273, 7}, {520, 7}, {112, 6}, { 52, 6}, {344, 6}, {336, 6},
+{504, 5}, {168, 5}, {424, 5}, { 0, 4}, { 76, 3}, {200, 3},
+{512, 3}, {312, 3}, {240, 3}, {960, 3}, {264, 2}, {672, 2},
+{ 38, 2}, {328, 2}, { 84, 2}, { 39, 2}, {216, 2}, { 42, 2},
+{ 37, 2}, {1608, 2}, { 70, 2}, { 46, 2}, {536, 2}, {280, 1},
+{248, 1}, { 47, 1}, {1088, 1}, {1288, 1}, {224, 1}, { 41, 1},
+{ 50, 1}, { 49, 1}, {808, 1}, {360, 1}, {440, 1}, { 43, 1},
+{ 45, 1}, { 78, 1}, {968, 1}, {392, 1}, { 54, 1}, { 53, 1},
+{ 59, 1}, {376, 1}, {664, 1}, { 58, 1}, {272, 1}, { 66, 1},
+{2688, 1}, {472, 1}, {568, 1}, {720, 1}, { 51, 1}, { 63, 1},
+{ 86, 1}, {496, 1}, {776, 1}, { 57, 1}, {680, 1}, {792, 1},
+{122, 1}, {760, 1}, {824, 1}, {552, 1}, { 67, 1}, {456, 1},
+{984, 1}, { 74, 1}, {408, 1}, { 75, 1}, { 92, 1}, {576, 1},
+{116, 1}, { 65, 1}, {117, 1}, { 82, 1}, {352, 1}, { 55, 1},
+{100, 1}, { 90, 1}, {696, 1}, {111, 1}, {880, 1}, { 79, 1},
+{488, 1}, { 61, 1}, {114, 1}, { 94, 1}, {1032, 1}, { 98, 1},
+{ 87, 1}, {584, 1}, { 85, 1}, {648, 1}, {0, 0}
+};
+
+#define ALIGN_NUM 1024
+#define ALIGN_MASK (ALIGN_NUM-1)
+static uint8_t src_align_arr[ALIGN_NUM];
+static uint8_t dst_align_arr[ALIGN_NUM];
+
+/* Source alignment frequency for memcpy based on SPEC2017. */
+static align_data_t src_align_freq[] =
+{
+ {8, 300}, {16, 292}, {32, 168}, {64, 153}, {4, 79}, {2, 14}, {1, 18}, {0, 0}
+};
+
+static align_data_t dst_align_freq[] =
+{
+ {8, 265}, {16, 263}, {64, 209}, {32, 174}, {4, 90}, {2, 10}, {1, 13}, {0, 0}
+};
+
+typedef struct
+{
+ uint64_t src : 24;
+ uint64_t dst : 24;
+ uint64_t len : 16;
+} copy_t;
+
+static copy_t copy[MAX_COPIES];
+
+typedef char *(*proto_t) (char *, const char *, size_t);
+
+static void
+init_copy_distribution (void)
+{
+ int i, j, freq, size, n;
+
+ for (n = i = 0; (freq = size_freq[i].freq) != 0; i++)
+ for (j = 0, size = size_freq[i].size; j < freq; j++)
+ size_arr[n++] = size;
+ assert (n == SIZE_NUM);
+
+ for (n = i = 0; (freq = src_align_freq[i].freq) != 0; i++)
+ for (j = 0, size = src_align_freq[i].align; j < freq; j++)
+ src_align_arr[n++] = size - 1;
+ assert (n == ALIGN_NUM);
+
+ for (n = i = 0; (freq = dst_align_freq[i].freq) != 0; i++)
+ for (j = 0, size = dst_align_freq[i].align; j < freq; j++)
+ dst_align_arr[n++] = size - 1;
+ assert (n == ALIGN_NUM);
+}
+
+static size_t
+init_copies (size_t max_size)
+{
+ size_t total = 0;
+ /* Create a random set of copies with the given size and alignment
+ distributions. */
+ for (int i = 0; i < MAX_COPIES; i++)
+ {
+ copy[i].dst = (rand32 (0) & (max_size - 1));
+ copy[i].dst &= ~dst_align_arr[rand32 (0) & ALIGN_MASK];
+ copy[i].src = (rand32 (0) & (max_size - 1));
+ copy[i].src &= ~src_align_arr[rand32 (0) & ALIGN_MASK];
+ copy[i].len = size_arr[rand32 (0) & SIZE_MASK];
+ total += copy[i].len;
+ }
+
+ return total;
+}
+
+int main (void)
+{
+ init_copy_distribution ();
+
+ memset (a, 1, sizeof (a));
+ memset (b, 2, sizeof (b));
+
+ printf("Random memcpy:\n");
+ for (int f = 0; funtab[f].name != 0; f++)
+ {
+ size_t total = 0;
+ uint64_t tsum = 0;
+ printf ("%22s (B/ns) ", funtab[f].name);
+ rand32 (0x12345678);
+
+ for (int size = 16384; size <= SIZE; size *= 2)
+ {
+ size_t copy_size = init_copies (size) * ITERS;
+
+ for (int c = 0; c < MAX_COPIES; c++)
+ funtab[f].fun (b + copy[c].dst, a + copy[c].src, copy[c].len);
+
+ uint64_t t = clock_get_ns ();
+ for (int i = 0; i < ITERS; i++)
+ for (int c = 0; c < MAX_COPIES; c++)
+ funtab[f].fun (b + copy[c].dst, a + copy[c].src, copy[c].len);
+ t = clock_get_ns () - t;
+ total += copy_size;
+ tsum += t;
+ printf ("%dK: %.2f ", size / 1024, (double)copy_size / t);
+ }
+ printf( "avg %.2f\n", (double)total / tsum);
+ }
+
+ printf ("\nMedium memcpy:\n");
+ for (int f = 0; funtab[f].name != 0; f++)
+ {
+ printf ("%22s (B/ns) ", funtab[f].name);
+
+ for (int size = 16; size <= 512; size *= 2)
+ {
+ uint64_t t = clock_get_ns ();
+ for (int i = 0; i < ITERS2; i++)
+ funtab[f].fun (b, a, size);
+ t = clock_get_ns () - t;
+ printf ("%d%c: %.2f ", size < 1024 ? size : size / 1024,
+ size < 1024 ? 'B' : 'K', (double)size * ITERS2 / t);
+ }
+ printf ("\n");
+ }
+
+ printf ("\nLarge memcpy:\n");
+ for (int f = 0; funtab[f].name != 0; f++)
+ {
+ printf ("%22s (B/ns) ", funtab[f].name);
+
+ for (int size = 1024; size <= 32768; size *= 2)
+ {
+ uint64_t t = clock_get_ns ();
+ for (int i = 0; i < ITERS3; i++)
+ funtab[f].fun (b, a, size);
+ t = clock_get_ns () - t;
+ printf ("%d%c: %.2f ", size < 1024 ? size : size / 1024,
+ size < 1024 ? 'B' : 'K', (double)size * ITERS3 / t);
+ }
+ printf ("\n");
+ }
+
+ printf ("\nUnaligned forwards memmove:\n");
+ for (int f = 0; funtab[f].name != 0; f++)
+ {
+ printf ("%22s (B/ns) ", funtab[f].name);
+
+ for (int size = 1024; size <= 32768; size *= 2)
+ {
+ uint64_t t = clock_get_ns ();
+ for (int i = 0; i < ITERS3; i++)
+ funtab[f].fun (a, a + 256 + (i & 31), size);
+ t = clock_get_ns () - t;
+ printf ("%d%c: %.2f ", size < 1024 ? size : size / 1024,
+ size < 1024 ? 'B' : 'K', (double)size * ITERS3 / t);
+ }
+ printf ("\n");
+ }
+
+
+ printf ("\nUnaligned backwards memmove:\n");
+ for (int f = 0; funtab[f].name != 0; f++)
+ {
+ printf ("%22s (B/ns) ", funtab[f].name);
+
+ for (int size = 1024; size <= 32768; size *= 2)
+ {
+ uint64_t t = clock_get_ns ();
+ for (int i = 0; i < ITERS3; i++)
+ funtab[f].fun (a + 256 + (i & 31), a, size);
+ t = clock_get_ns () - t;
+ printf ("%d%c: %.2f ", size < 1024 ? size : size / 1024,
+ size < 1024 ? 'B' : 'K', (double)size * ITERS3 / t);
+ }
+ printf ("\n");
+ }
+
+ return 0;
+}
diff --git a/string/bench/strlen.c b/string/bench/strlen.c
new file mode 100644
index 000000000000..cc0f04bee547
--- /dev/null
+++ b/string/bench/strlen.c
@@ -0,0 +1,221 @@
+/*
+ * strlen benchmark.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#define _GNU_SOURCE
+#include <stdint.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include "stringlib.h"
+#include "benchlib.h"
+
+#define ITERS 2000
+#define ITERS2 20000000
+#define ITERS3 2000000
+#define NUM_STRLEN 16384
+
+#define MAX_ALIGN 32
+#define MAX_STRLEN 256
+
+static char a[(MAX_STRLEN + 1) * MAX_ALIGN] __attribute__((__aligned__(4096)));
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ size_t (*fun) (const char *s);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(strlen, 0)
+#if __aarch64__
+ F(__strlen_aarch64, 0)
+ F(__strlen_aarch64_mte, 1)
+# if __ARM_FEATURE_SVE
+ F(__strlen_aarch64_sve, 1)
+# endif
+#elif __arm__
+# if __ARM_ARCH >= 6 && __ARM_ARCH_ISA_THUMB == 2
+ F(__strlen_armv6t2, 0)
+# endif
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+static uint16_t strlen_tests[NUM_STRLEN];
+
+typedef struct { uint16_t size; uint16_t freq; } freq_data_t;
+typedef struct { uint8_t align; uint16_t freq; } align_data_t;
+
+#define SIZE_NUM 65536
+#define SIZE_MASK (SIZE_NUM - 1)
+static uint8_t strlen_len_arr[SIZE_NUM];
+
+/* Frequency data for strlen sizes up to 128 based on SPEC2017. */
+static freq_data_t strlen_len_freq[] =
+{
+ { 12,22671}, { 18,12834}, { 13, 9555}, { 6, 6348}, { 17, 6095}, { 11, 2115},
+ { 10, 1335}, { 7, 814}, { 2, 646}, { 9, 483}, { 8, 471}, { 16, 418},
+ { 4, 390}, { 1, 388}, { 5, 233}, { 3, 204}, { 0, 79}, { 14, 79},
+ { 15, 69}, { 26, 36}, { 22, 35}, { 31, 24}, { 32, 24}, { 19, 21},
+ { 25, 17}, { 28, 15}, { 21, 14}, { 33, 14}, { 20, 13}, { 24, 9},
+ { 29, 9}, { 30, 9}, { 23, 7}, { 34, 7}, { 27, 6}, { 44, 5},
+ { 42, 4}, { 45, 3}, { 47, 3}, { 40, 2}, { 41, 2}, { 43, 2},
+ { 58, 2}, { 78, 2}, { 36, 2}, { 48, 1}, { 52, 1}, { 60, 1},
+ { 64, 1}, { 56, 1}, { 76, 1}, { 68, 1}, { 80, 1}, { 84, 1},
+ { 72, 1}, { 86, 1}, { 35, 1}, { 39, 1}, { 50, 1}, { 38, 1},
+ { 37, 1}, { 46, 1}, { 98, 1}, {102, 1}, {128, 1}, { 51, 1},
+ {107, 1}, { 0, 0}
+};
+
+#define ALIGN_NUM 1024
+#define ALIGN_MASK (ALIGN_NUM - 1)
+static uint8_t strlen_align_arr[ALIGN_NUM];
+
+/* Alignment data for strlen based on SPEC2017. */
+static align_data_t string_align_freq[] =
+{
+ {8, 470}, {32, 427}, {16, 99}, {1, 19}, {2, 6}, {4, 3}, {0, 0}
+};
+
+static void
+init_strlen_distribution (void)
+{
+ int i, j, freq, size, n;
+
+ for (n = i = 0; (freq = strlen_len_freq[i].freq) != 0; i++)
+ for (j = 0, size = strlen_len_freq[i].size; j < freq; j++)
+ strlen_len_arr[n++] = size;
+ assert (n == SIZE_NUM);
+
+ for (n = i = 0; (freq = string_align_freq[i].freq) != 0; i++)
+ for (j = 0, size = string_align_freq[i].align; j < freq; j++)
+ strlen_align_arr[n++] = size;
+ assert (n == ALIGN_NUM);
+}
+
+static void
+init_strlen_tests (void)
+{
+ uint16_t index[MAX_ALIGN];
+
+ memset (a, 'x', sizeof (a));
+
+ /* Create indices for strings at all alignments. */
+ for (int i = 0; i < MAX_ALIGN; i++)
+ {
+ index[i] = i * (MAX_STRLEN + 1);
+ a[index[i] + MAX_STRLEN] = 0;
+ }
+
+ /* Create a random set of strlen input strings using the string length
+ and alignment distributions. */
+ for (int n = 0; n < NUM_STRLEN; n++)
+ {
+ int align = strlen_align_arr[rand32 (0) & ALIGN_MASK];
+ int exp_len = strlen_len_arr[rand32 (0) & SIZE_MASK];
+
+ strlen_tests[n] =
+ index[(align + exp_len) & (MAX_ALIGN - 1)] + MAX_STRLEN - exp_len;
+ }
+}
+
+static volatile size_t maskv = 0;
+
+int main (void)
+{
+ rand32 (0x12345678);
+ init_strlen_distribution ();
+ init_strlen_tests ();
+
+ printf ("\nRandom strlen (bytes/ns):\n");
+ for (int f = 0; funtab[f].name != 0; f++)
+ {
+ size_t res = 0, strlen_size = 0, mask = maskv;
+ printf ("%22s ", funtab[f].name);
+
+ for (int c = 0; c < NUM_STRLEN; c++)
+ strlen_size += funtab[f].fun (a + strlen_tests[c]);
+ strlen_size *= ITERS;
+
+ /* Measure latency of strlen result with (res & mask). */
+ uint64_t t = clock_get_ns ();
+ for (int i = 0; i < ITERS; i++)
+ for (int c = 0; c < NUM_STRLEN; c++)
+ res = funtab[f].fun (a + strlen_tests[c] + (res & mask));
+ t = clock_get_ns () - t;
+ printf ("%.2f\n", (double)strlen_size / t);
+ }
+
+ printf ("\nSmall aligned strlen (bytes/ns):\n");
+ for (int f = 0; funtab[f].name != 0; f++)
+ {
+ printf ("%22s ", funtab[f].name);
+
+ for (int size = 1; size <= 64; size *= 2)
+ {
+ memset (a, 'x', size);
+ a[size - 1] = 0;
+
+ uint64_t t = clock_get_ns ();
+ for (int i = 0; i < ITERS2; i++)
+ funtab[f].fun (a);
+ t = clock_get_ns () - t;
+ printf ("%d%c: %.2f ", size < 1024 ? size : size / 1024,
+ size < 1024 ? 'B' : 'K', (double)size * ITERS2 / t);
+ }
+ printf ("\n");
+ }
+
+ printf ("\nSmall unaligned strlen (bytes/ns):\n");
+ for (int f = 0; funtab[f].name != 0; f++)
+ {
+ printf ("%22s ", funtab[f].name);
+
+ int align = 9;
+ for (int size = 1; size <= 64; size *= 2)
+ {
+ memset (a + align, 'x', size);
+ a[align + size - 1] = 0;
+
+ uint64_t t = clock_get_ns ();
+ for (int i = 0; i < ITERS2; i++)
+ funtab[f].fun (a + align);
+ t = clock_get_ns () - t;
+ printf ("%d%c: %.2f ", size < 1024 ? size : size / 1024,
+ size < 1024 ? 'B' : 'K', (double)size * ITERS2 / t);
+ }
+ printf ("\n");
+ }
+
+ printf ("\nMedium strlen (bytes/ns):\n");
+ for (int f = 0; funtab[f].name != 0; f++)
+ {
+ printf ("%22s ", funtab[f].name);
+
+ for (int size = 128; size <= 4096; size *= 2)
+ {
+ memset (a, 'x', size);
+ a[size - 1] = 0;
+
+ uint64_t t = clock_get_ns ();
+ for (int i = 0; i < ITERS3; i++)
+ funtab[f].fun (a);
+ t = clock_get_ns () - t;
+ printf ("%d%c: %.2f ", size < 1024 ? size : size / 1024,
+ size < 1024 ? 'B' : 'K', (double)size * ITERS3 / t);
+ }
+ printf ("\n");
+ }
+
+ printf ("\n");
+
+ return 0;
+}
diff --git a/string/include/benchlib.h b/string/include/benchlib.h
new file mode 100644
index 000000000000..0f2ce2eb6bce
--- /dev/null
+++ b/string/include/benchlib.h
@@ -0,0 +1,33 @@
+/*
+ * Benchmark support functions.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <time.h>
+
+/* Fast and accurate timer returning nanoseconds. */
+static inline uint64_t
+clock_get_ns (void)
+{
+ struct timespec ts;
+ clock_gettime (CLOCK_MONOTONIC, &ts);
+ return ts.tv_sec * (uint64_t) 1000000000 + ts.tv_nsec;
+}
+
+/* Fast 32-bit random number generator. Passing a non-zero seed
+ value resets the internal state. */
+static inline uint32_t
+rand32 (uint32_t seed)
+{
+ static uint64_t state = 0xb707be451df0bb19ULL;
+ if (seed != 0)
+ state = seed;
+ uint32_t res = state >> 32;
+ state = state * 6364136223846793005ULL + 1;
+ return res;
+}
+
+
diff --git a/string/include/stringlib.h b/string/include/stringlib.h
new file mode 100644
index 000000000000..378c3cd2d645
--- /dev/null
+++ b/string/include/stringlib.h
@@ -0,0 +1,69 @@
+/*
+ * Public API.
+ *
+ * Copyright (c) 2019-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stddef.h>
+
+/* restrict is not needed, but kept for documenting the interface contract. */
+#ifndef __restrict
+# define __restrict
+#endif
+
+#if __aarch64__
+void *__memcpy_aarch64 (void *__restrict, const void *__restrict, size_t);
+void *__memmove_aarch64 (void *, const void *, size_t);
+void *__memset_aarch64 (void *, int, size_t);
+void *__memchr_aarch64 (const void *, int, size_t);
+void *__memrchr_aarch64 (const void *, int, size_t);
+int __memcmp_aarch64 (const void *, const void *, size_t);
+char *__strcpy_aarch64 (char *__restrict, const char *__restrict);
+char *__stpcpy_aarch64 (char *__restrict, const char *__restrict);
+int __strcmp_aarch64 (const char *, const char *);
+char *__strchr_aarch64 (const char *, int);
+char *__strrchr_aarch64 (const char *, int);
+char *__strchrnul_aarch64 (const char *, int );
+size_t __strlen_aarch64 (const char *);
+size_t __strnlen_aarch64 (const char *, size_t);
+int __strncmp_aarch64 (const char *, const char *, size_t);
+void * __memchr_aarch64_mte (const void *, int, size_t);
+char *__strcpy_aarch64_mte (char *__restrict, const char *__restrict);
+char *__stpcpy_aarch64_mte (char *__restrict, const char *__restrict);
+char *__strchr_aarch64_mte (const char *, int);
+char * __strchrnul_aarch64_mte (const char *, int );
+size_t __strlen_aarch64_mte (const char *);
+char *__strrchr_aarch64_mte (const char *, int);
+int __strcmp_aarch64_mte (const char *, const char *);
+int __strncmp_aarch64_mte (const char *, const char *, size_t);
+#if __ARM_NEON
+void *__memcpy_aarch64_simd (void *__restrict, const void *__restrict, size_t);
+void *__memmove_aarch64_simd (void *, const void *, size_t);
+#endif
+# if __ARM_FEATURE_SVE
+void *__memchr_aarch64_sve (const void *, int, size_t);
+int __memcmp_aarch64_sve (const void *, const void *, size_t);
+char *__strchr_aarch64_sve (const char *, int);
+char *__strrchr_aarch64_sve (const char *, int);
+char *__strchrnul_aarch64_sve (const char *, int );
+int __strcmp_aarch64_sve (const char *, const char *);
+char *__strcpy_aarch64_sve (char *__restrict, const char *__restrict);
+char *__stpcpy_aarch64_sve (char *__restrict, const char *__restrict);
+size_t __strlen_aarch64_sve (const char *);
+size_t __strnlen_aarch64_sve (const char *, size_t);
+int __strncmp_aarch64_sve (const char *, const char *, size_t);
+# endif
+# if __ARM_FEATURE_MEMORY_TAGGING
+void *__mtag_tag_region (void *, size_t);
+void *__mtag_tag_zero_region (void *, size_t);
+# endif
+#elif __arm__
+void *__memcpy_arm (void *__restrict, const void *__restrict, size_t);
+void *__memset_arm (void *, int, size_t);
+void *__memchr_arm (const void *, int, size_t);
+char *__strcpy_arm (char *__restrict, const char *__restrict);
+int __strcmp_arm (const char *, const char *);
+int __strcmp_armv6m (const char *, const char *);
+size_t __strlen_armv6t2 (const char *);
+#endif
diff --git a/string/test/__mtag_tag_region.c b/string/test/__mtag_tag_region.c
new file mode 100644
index 000000000000..d8c02d92d626
--- /dev/null
+++ b/string/test/__mtag_tag_region.c
@@ -0,0 +1,147 @@
+/*
+ * __mtag_tag_region test.
+ *
+ * Copyright (c) 2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#if __ARM_FEATURE_MEMORY_TAGGING && WANT_MTE_TEST
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+static void
+mtag_quoteat (const char *prefix, void *p, int len, int at)
+{
+ /* Print tag, untag and quote the context. */
+ printf ("location: %p\n", __arm_mte_get_tag ((char *) p + at));
+ untag_buffer (p, len, 1);
+ p = untag_pointer (p);
+ quoteat (prefix, p, len, at);
+}
+
+#define F(x) {#x, x},
+
+static const struct fun
+{
+ const char *name;
+ void *(*fun) (void *s, size_t n);
+} funtab[] = {
+// clang-format off
+#if __aarch64__
+ F(__mtag_tag_region)
+#endif
+ {0, 0}
+ // clang-format on
+};
+#undef F
+
+#define A 64
+#define LEN 250000
+static unsigned char *sbuf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + A - 1) & -A);
+}
+
+static void
+test (const struct fun *fun, int salign, int len)
+{
+ unsigned char *src = alignup (sbuf);
+ unsigned char *s = src + salign;
+ void *p;
+ int i;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || salign >= A)
+ abort ();
+ for (i = 0; i < len + 2 * A; i++)
+ src[i] = '?';
+ for (i = 0; i < len; i++)
+ s[i] = 'a';
+
+ src = tag_buffer (src, len + 2 * A, 1);
+ s = src + salign;
+ /* Use different tag. */
+ s = __arm_mte_increment_tag (s, 1);
+ p = fun->fun (s, len);
+
+ if (p != s)
+ ERR ("%s(%p,..) returned %p\n", fun->name, s, p);
+
+ for (i = 0; i < salign; i++)
+ {
+ if (src[i] != '?')
+ {
+ ERR ("%s(align %d, %d) failed\n", fun->name, salign, len);
+ mtag_quoteat ("got head", src, len + 2 * A, i);
+ return;
+ }
+ }
+
+ for (; i < salign + len; i++)
+ {
+ if (s[i - salign] != 'a')
+ {
+ ERR ("%s(align %d, %d) failed\n", fun->name, salign, len);
+ mtag_quoteat ("got body", src, len + 2 * A, i);
+ return;
+ }
+ }
+
+ for (; i < len + 2 * A; i++)
+ {
+ if (src[i] != '?')
+ {
+ ERR ("%s(align %d, %d) failed\n", fun->name, salign, len);
+ mtag_quoteat ("got tail", src, len + 2 * A, i);
+ return;
+ }
+ }
+
+ untag_buffer (src, len + 2 * A, 1);
+}
+
+int
+main ()
+{
+ if (!mte_enabled ())
+ return 0;
+
+ sbuf = mte_mmap (LEN + 3 * A);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int s = 0; s < A; s += 16)
+ {
+ int n;
+ for (n = 0; n < 200; n += 16)
+ {
+ test (funtab + i, s, n);
+ }
+ for (; n < LEN; n *= 2)
+ {
+ test (funtab + i, s, n);
+ }
+ }
+ printf ("%s %s\n", err_count ? "FAIL" : "PASS", funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
+#else
+int
+main ()
+{
+ return 0;
+}
+#endif
diff --git a/string/test/__mtag_tag_zero_region.c b/string/test/__mtag_tag_zero_region.c
new file mode 100644
index 000000000000..221c223a2f31
--- /dev/null
+++ b/string/test/__mtag_tag_zero_region.c
@@ -0,0 +1,147 @@
+/*
+ * __mtag_tag_zero_region test.
+ *
+ * Copyright (c) 2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#if __ARM_FEATURE_MEMORY_TAGGING && WANT_MTE_TEST
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+static void
+mtag_quoteat (const char *prefix, void *p, int len, int at)
+{
+ /* Print tag, untag and quote the context. */
+ printf ("location: %p\n", __arm_mte_get_tag ((char *) p + at));
+ untag_buffer (p, len, 1);
+ p = untag_pointer (p);
+ quoteat (prefix, p, len, at);
+}
+
+#define F(x) {#x, x},
+
+static const struct fun
+{
+ const char *name;
+ void *(*fun) (void *s, size_t n);
+} funtab[] = {
+// clang-format off
+#if __aarch64__
+ F(__mtag_tag_zero_region)
+#endif
+ {0, 0}
+ // clang-format on
+};
+#undef F
+
+#define A 64
+#define LEN 250000
+static unsigned char *sbuf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + A - 1) & -A);
+}
+
+static void
+test (const struct fun *fun, int salign, int len)
+{
+ unsigned char *src = alignup (sbuf);
+ unsigned char *s = src + salign;
+ void *p;
+ int i;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || salign >= A)
+ abort ();
+ for (i = 0; i < len + 2 * A; i++)
+ src[i] = '?';
+ for (i = 0; i < len; i++)
+ s[i] = 'a' + i % 23;
+
+ src = tag_buffer (src, len + 2 * A, 1);
+ s = src + salign;
+ /* Use different tag. */
+ s = __arm_mte_increment_tag (s, 1);
+ p = fun->fun (s, len);
+
+ if (p != s)
+ ERR ("%s(%p,..) returned %p\n", fun->name, s, p);
+
+ for (i = 0; i < salign; i++)
+ {
+ if (src[i] != '?')
+ {
+ ERR ("%s(align %d, %d) failed\n", fun->name, salign, len);
+ mtag_quoteat ("got head", src, len + 2 * A, i);
+ return;
+ }
+ }
+
+ for (; i < salign + len; i++)
+ {
+ if (s[i - salign] != 0)
+ {
+ ERR ("%s(align %d, %d) failed\n", fun->name, salign, len);
+ mtag_quoteat ("got body", src, len + 2 * A, i);
+ return;
+ }
+ }
+
+ for (; i < len + 2 * A; i++)
+ {
+ if (src[i] != '?')
+ {
+ ERR ("%s(align %d, %d) failed\n", fun->name, salign, len);
+ mtag_quoteat ("got tail", src, len + 2 * A, i);
+ return;
+ }
+ }
+
+ untag_buffer (src, len + 2 * A, 1);
+}
+
+int
+main ()
+{
+ if (!mte_enabled ())
+ return 0;
+
+ sbuf = mte_mmap (LEN + 3 * A);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int s = 0; s < A; s += 16)
+ {
+ int n;
+ for (n = 0; n < 200; n += 16)
+ {
+ test (funtab + i, s, n);
+ }
+ for (; n < LEN; n *= 2)
+ {
+ test (funtab + i, s, n);
+ }
+ }
+ printf ("%s %s\n", err_count ? "FAIL" : "PASS", funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
+#else
+int
+main ()
+{
+ return 0;
+}
+#endif
diff --git a/string/test/memchr.c b/string/test/memchr.c
new file mode 100644
index 000000000000..0ff77f5710bf
--- /dev/null
+++ b/string/test/memchr.c
@@ -0,0 +1,110 @@
+/*
+ * memchr test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ void *(*fun) (const void *s, int c, size_t n);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(memchr, 0)
+#if __aarch64__
+ F(__memchr_aarch64, 0)
+ F(__memchr_aarch64_mte, 1)
+# if __ARM_FEATURE_SVE
+ F(__memchr_aarch64_sve, 1)
+# endif
+#elif __arm__
+ F(__memchr_arm, 0)
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define ALIGN 32
+#define LEN 512
+static char *sbuf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + ALIGN - 1) & -ALIGN);
+}
+
+static void
+test (const struct fun *fun, int align, size_t seekpos, size_t len,
+ size_t maxlen)
+{
+ char *src = alignup (sbuf);
+ char *s = src + align;
+ char *f = seekpos < maxlen ? s + seekpos : NULL;
+ int seekchar = 1;
+ void *p;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || seekpos > LEN || align > ALIGN)
+ abort ();
+
+ for (int i = 0; src + i < s; i++)
+ src[i] = seekchar;
+ for (int i = 0; i <= ALIGN; i++)
+ s[len + i] = seekchar;
+ for (int i = 0; i < len; i++)
+ s[i] = 'a' + (i & 31);
+ s[seekpos] = seekchar;
+ s[((len ^ align) & 1) ? seekpos + 1 : len] = seekchar;
+
+ int mte_len = seekpos != -1 ? seekpos + 1 : maxlen;
+ s = tag_buffer (s, mte_len, fun->test_mte);
+ p = fun->fun (s, seekchar, maxlen);
+ untag_buffer (s, mte_len, fun->test_mte);
+ p = untag_pointer (p);
+
+ if (p != f)
+ {
+ ERR ("%s (%p, 0x%02x, %zu) returned %p, expected %p\n", fun->name, s,
+ seekchar, maxlen, p, f);
+ quote ("input", s, len);
+ }
+}
+
+int
+main (void)
+{
+ sbuf = mte_mmap (LEN + 3 * ALIGN);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int a = 0; a < ALIGN; a++)
+ for (int n = 0; n < LEN; n++)
+ {
+ for (int sp = 0; sp < LEN; sp++)
+ test (funtab + i, a, sp, n, n);
+ test (funtab + i, a, n, n, SIZE_MAX - a);
+ }
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/memcmp.c b/string/test/memcmp.c
new file mode 100644
index 000000000000..7a7cf9cff35a
--- /dev/null
+++ b/string/test/memcmp.c
@@ -0,0 +1,125 @@
+/*
+ * memcmp test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ int (*fun) (const void *s1, const void *s2, size_t n);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(memcmp, 0)
+#if __aarch64__
+ F(__memcmp_aarch64, 1)
+# if __ARM_FEATURE_SVE
+ F(__memcmp_aarch64_sve, 1)
+# endif
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define A 32
+#define LEN 250000
+static unsigned char *s1buf;
+static unsigned char *s2buf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + A - 1) & -A);
+}
+
+static void
+test (const struct fun *fun, int s1align, int s2align, int len, int diffpos,
+ int delta)
+{
+ unsigned char *src1 = alignup (s1buf);
+ unsigned char *src2 = alignup (s2buf);
+ unsigned char *s1 = src1 + s1align;
+ unsigned char *s2 = src2 + s2align;
+ int r;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || s1align >= A || s2align >= A)
+ abort ();
+ if (diffpos >= len)
+ abort ();
+ if ((diffpos < 0) != (delta == 0))
+ abort ();
+
+ for (int i = 0; i < len + A; i++)
+ src1[i] = src2[i] = '?';
+ for (int i = 0; i < len; i++)
+ s1[i] = s2[i] = 'a' + i % 23;
+ if (delta)
+ s1[diffpos] += delta;
+
+ s1 = tag_buffer (s1, len, fun->test_mte);
+ s2 = tag_buffer (s2, len, fun->test_mte);
+ r = fun->fun (s1, s2, len);
+ untag_buffer (s1, len, fun->test_mte);
+ untag_buffer (s2, len, fun->test_mte);
+
+ if ((delta == 0 && r != 0) || (delta > 0 && r <= 0) || (delta < 0 && r >= 0))
+ {
+ ERR ("%s(align %d, align %d, %d) failed, returned %d\n", fun->name,
+ s1align, s2align, len, r);
+ quoteat ("src1", src1, len + A, diffpos);
+ quoteat ("src2", src2, len + A, diffpos);
+ }
+}
+
+int
+main ()
+{
+ s1buf = mte_mmap (LEN + 2 * A);
+ s2buf = mte_mmap (LEN + 2 * A);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int d = 0; d < A; d++)
+ for (int s = 0; s < A; s++)
+ {
+ int n;
+ test (funtab + i, d, s, 0, -1, 0);
+ test (funtab + i, d, s, 1, -1, 0);
+ test (funtab + i, d, s, 1, 0, -1);
+ test (funtab + i, d, s, 1, 0, 1);
+ for (n = 2; n < 100; n++)
+ {
+ test (funtab + i, d, s, n, -1, 0);
+ test (funtab + i, d, s, n, 0, -1);
+ test (funtab + i, d, s, n, n - 1, -1);
+ test (funtab + i, d, s, n, n / 2, 1);
+ }
+ for (; n < LEN; n *= 2)
+ {
+ test (funtab + i, d, s, n, -1, 0);
+ test (funtab + i, d, s, n, n / 2, -1);
+ }
+ }
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/memcpy.c b/string/test/memcpy.c
new file mode 100644
index 000000000000..ce0ceeef5ee8
--- /dev/null
+++ b/string/test/memcpy.c
@@ -0,0 +1,120 @@
+/*
+ * memcpy test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ void *(*fun) (void *, const void *, size_t);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(memcpy, 0)
+#if __aarch64__
+ F(__memcpy_aarch64, 1)
+# if __ARM_NEON
+ F(__memcpy_aarch64_simd, 1)
+# endif
+#elif __arm__
+ F(__memcpy_arm, 0)
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define A 32
+#define LEN 250000
+static unsigned char *dbuf;
+static unsigned char *sbuf;
+static unsigned char wbuf[LEN + 2 * A];
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + A - 1) & -A);
+}
+
+static void
+test (const struct fun *fun, int dalign, int salign, int len)
+{
+ unsigned char *src = alignup (sbuf);
+ unsigned char *dst = alignup (dbuf);
+ unsigned char *want = wbuf;
+ unsigned char *s = src + salign;
+ unsigned char *d = dst + dalign;
+ unsigned char *w = want + dalign;
+ void *p;
+ int i;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || dalign >= A || salign >= A)
+ abort ();
+ for (i = 0; i < len + A; i++)
+ {
+ src[i] = '?';
+ want[i] = dst[i] = '*';
+ }
+ for (i = 0; i < len; i++)
+ s[i] = w[i] = 'a' + i % 23;
+
+ s = tag_buffer (s, len, fun->test_mte);
+ d = tag_buffer (d, len, fun->test_mte);
+ p = fun->fun (d, s, len);
+ untag_buffer (s, len, fun->test_mte);
+ untag_buffer (d, len, fun->test_mte);
+
+ if (p != d)
+ ERR ("%s(%p,..) returned %p\n", fun->name, d, p);
+ for (i = 0; i < len + A; i++)
+ {
+ if (dst[i] != want[i])
+ {
+ ERR ("%s(align %d, align %d, %d) failed\n", fun->name, dalign, salign,
+ len);
+ quoteat ("got", dst, len + A, i);
+ quoteat ("want", want, len + A, i);
+ break;
+ }
+ }
+}
+
+int
+main ()
+{
+ dbuf = mte_mmap (LEN + 2 * A);
+ sbuf = mte_mmap (LEN + 2 * A);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int d = 0; d < A; d++)
+ for (int s = 0; s < A; s++)
+ {
+ int n;
+ for (n = 0; n < 100; n++)
+ test (funtab + i, d, s, n);
+ for (; n < LEN; n *= 2)
+ test (funtab + i, d, s, n);
+ }
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/memmove.c b/string/test/memmove.c
new file mode 100644
index 000000000000..689b68c98af2
--- /dev/null
+++ b/string/test/memmove.c
@@ -0,0 +1,164 @@
+/*
+ * memmove test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ void *(*fun) (void *, const void *, size_t);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(memmove, 0)
+#if __aarch64__
+ F(__memmove_aarch64, 1)
+# if __ARM_NEON
+ F(__memmove_aarch64_simd, 1)
+# endif
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define A 32
+#define LEN 250000
+static unsigned char *dbuf;
+static unsigned char *sbuf;
+static unsigned char wbuf[LEN + 2 * A];
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + A - 1) & -A);
+}
+
+static void
+test (const struct fun *fun, int dalign, int salign, int len)
+{
+ unsigned char *src = alignup (sbuf);
+ unsigned char *dst = alignup (dbuf);
+ unsigned char *want = wbuf;
+ unsigned char *s = src + salign;
+ unsigned char *d = dst + dalign;
+ unsigned char *w = want + dalign;
+ void *p;
+ int i;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || dalign >= A || salign >= A)
+ abort ();
+ for (i = 0; i < len + A; i++)
+ {
+ src[i] = '?';
+ want[i] = dst[i] = '*';
+ }
+ for (i = 0; i < len; i++)
+ s[i] = w[i] = 'a' + i % 23;
+
+ p = fun->fun (d, s, len);
+ if (p != d)
+ ERR ("%s(%p,..) returned %p\n", fun->name, d, p);
+ for (i = 0; i < len + A; i++)
+ {
+ if (dst[i] != want[i])
+ {
+ ERR ("%s(align %d, align %d, %d) failed\n", fun->name, dalign, salign,
+ len);
+ quoteat ("got", dst, len + A, i);
+ quoteat ("want", want, len + A, i);
+ break;
+ }
+ }
+}
+
+static void
+test_overlap (const struct fun *fun, int dalign, int salign, int len)
+{
+ unsigned char *src = alignup (sbuf);
+ unsigned char *dst = src;
+ unsigned char *want = wbuf;
+ unsigned char *s = src + salign;
+ unsigned char *d = dst + dalign;
+ unsigned char *w = wbuf + dalign;
+ void *p;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || dalign >= A || salign >= A)
+ abort ();
+
+ for (int i = 0; i < len + A; i++)
+ src[i] = want[i] = '?';
+
+ for (int i = 0; i < len; i++)
+ s[i] = want[salign + i] = 'a' + i % 23;
+ for (int i = 0; i < len; i++)
+ w[i] = s[i];
+
+ s = tag_buffer (s, len, fun->test_mte);
+ d = tag_buffer (d, len, fun->test_mte);
+ p = fun->fun (d, s, len);
+ untag_buffer (s, len, fun->test_mte);
+ untag_buffer (d, len, fun->test_mte);
+
+ if (p != d)
+ ERR ("%s(%p,..) returned %p\n", fun->name, d, p);
+ for (int i = 0; i < len + A; i++)
+ {
+ if (dst[i] != want[i])
+ {
+ ERR ("%s(align %d, align %d, %d) failed\n", fun->name, dalign, salign,
+ len);
+ quoteat ("got", dst, len + A, i);
+ quoteat ("want", want, len + A, i);
+ break;
+ }
+ }
+}
+
+int
+main ()
+{
+ dbuf = mte_mmap (LEN + 2 * A);
+ sbuf = mte_mmap (LEN + 2 * A);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int d = 0; d < A; d++)
+ for (int s = 0; s < A; s++)
+ {
+ int n;
+ for (n = 0; n < 100; n++)
+ {
+ test (funtab + i, d, s, n);
+ test_overlap (funtab + i, d, s, n);
+ }
+ for (; n < LEN; n *= 2)
+ {
+ test (funtab + i, d, s, n);
+ test_overlap (funtab + i, d, s, n);
+ }
+ }
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/memrchr.c b/string/test/memrchr.c
new file mode 100644
index 000000000000..adf96f049cc9
--- /dev/null
+++ b/string/test/memrchr.c
@@ -0,0 +1,106 @@
+/*
+ * memchr test.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ void *(*fun) (const void *s, int c, size_t n);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(memrchr, 0)
+#if __aarch64__
+ F(__memrchr_aarch64, 1)
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define ALIGN 32
+#define LEN 512
+static char *sbuf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + ALIGN) & -ALIGN);
+}
+
+static void
+test (const struct fun *fun, int align, size_t seekpos, size_t len,
+ size_t maxlen)
+{
+ char *src = alignup (sbuf);
+ char *s = src + align;
+ char *f = seekpos < maxlen ? s + seekpos : NULL;
+ int seekchar = 1;
+ void *p;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || seekpos > LEN || align > ALIGN)
+ abort ();
+
+ for (int i = 0; src + i < s; i++)
+ src[i] = seekchar;
+ for (int i = 0; i <= ALIGN; i++)
+ s[len + i] = seekchar;
+ for (int i = 0; i < len; i++)
+ s[i] = 'a' + (i & 31);
+ s[seekpos] = seekchar;
+ s[((len ^ align) & 1) && seekpos < maxlen ? seekpos - 1 : len] = seekchar;
+
+ s = tag_buffer (s, maxlen, fun->test_mte);
+ p = fun->fun (s, seekchar, maxlen);
+ untag_buffer (s, maxlen, fun->test_mte);
+ p = untag_pointer (p);
+
+ if (p != f)
+ {
+ ERR ("%s (%p, 0x%02x, %zu) returned %p, expected %p\n", fun->name, s,
+ seekchar, maxlen, p, f);
+ quote ("input", s, len);
+ }
+}
+
+int
+main (void)
+{
+ sbuf = mte_mmap (LEN + 3 * ALIGN);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int a = 0; a < ALIGN; a++)
+ for (int n = 0; n < LEN; n++)
+ {
+ for (int sp = 0; sp < LEN; sp++)
+ test (funtab + i, a, sp, n, n);
+ }
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/memset.c b/string/test/memset.c
new file mode 100644
index 000000000000..f1721442dbaf
--- /dev/null
+++ b/string/test/memset.c
@@ -0,0 +1,129 @@
+/*
+ * memset test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ void *(*fun) (void *s, int c, size_t n);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(memset, 0)
+#if __aarch64__
+ F(__memset_aarch64, 1)
+#elif __arm__
+ F(__memset_arm, 0)
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define A 32
+#define LEN 250000
+static unsigned char *sbuf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + A - 1) & -A);
+}
+
+static void
+test (const struct fun *fun, int salign, int c, int len)
+{
+ unsigned char *src = alignup (sbuf);
+ unsigned char *s = src + salign;
+ void *p;
+ int i;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || salign >= A)
+ abort ();
+ for (i = 0; i < len + A; i++)
+ src[i] = '?';
+ for (i = 0; i < len; i++)
+ s[i] = 'a' + i % 23;
+
+ s = tag_buffer (s, len, fun->test_mte);
+ p = fun->fun (s, c, len);
+ untag_buffer (s, len, fun->test_mte);
+
+ if (p != s)
+ ERR ("%s(%p,..) returned %p\n", fun->name, s, p);
+
+ for (i = 0; i < salign; i++)
+ {
+ if (src[i] != '?')
+ {
+ ERR ("%s(align %d, %d, %d) failed\n", fun->name, salign, c, len);
+ quoteat ("got", src, len + A, i);
+ return;
+ }
+ }
+ for (; i < salign + len; i++)
+ {
+ if (src[i] != (unsigned char) c)
+ {
+ ERR ("%s(align %d, %d, %d) failed\n", fun->name, salign, c, len);
+ quoteat ("got", src, len + A, i);
+ return;
+ }
+ }
+ for (; i < len + A; i++)
+ {
+ if (src[i] != '?')
+ {
+ ERR ("%s(align %d, %d, %d) failed\n", fun->name, salign, c, len);
+ quoteat ("got", src, len + A, i);
+ return;
+ }
+ }
+}
+
+int
+main ()
+{
+ sbuf = mte_mmap (LEN + 2 * A);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int s = 0; s < A; s++)
+ {
+ int n;
+ for (n = 0; n < 100; n++)
+ {
+ test (funtab + i, s, 0, n);
+ test (funtab + i, s, 0x25, n);
+ test (funtab + i, s, 0xaa25, n);
+ }
+ for (; n < LEN; n *= 2)
+ {
+ test (funtab + i, s, 0, n);
+ test (funtab + i, s, 0x25, n);
+ test (funtab + i, s, 0xaa25, n);
+ }
+ }
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/mte.h b/string/test/mte.h
new file mode 100644
index 000000000000..e67cbd9d2d40
--- /dev/null
+++ b/string/test/mte.h
@@ -0,0 +1,142 @@
+/*
+ * Memory tagging testing code.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef __TEST_MTE_H
+#define __TEST_MTE_H
+
+#include <stdlib.h>
+
+#if __ARM_FEATURE_MEMORY_TAGGING && WANT_MTE_TEST
+#include <arm_acle.h>
+#include <sys/mman.h>
+#include <sys/prctl.h>
+
+// These depend on a not yet merged kernel ABI.
+#define PR_SET_TAGGED_ADDR_CTRL 55
+#define PR_TAGGED_ADDR_ENABLE (1UL << 0)
+#define PR_MTE_TCF_SHIFT 1
+#define PR_MTE_TCF_SYNC (1UL << PR_MTE_TCF_SHIFT)
+#define PR_MTE_TAG_SHIFT 3
+#define PROT_MTE 0x20
+
+#define MTE_GRANULE_SIZE 16
+
+int
+mte_enabled ()
+{
+ static int enabled = -1;
+ if (enabled == -1)
+ {
+ int res = prctl (PR_SET_TAGGED_ADDR_CTRL,
+ PR_TAGGED_ADDR_ENABLE | PR_MTE_TCF_SYNC
+ | (0xfffe << PR_MTE_TAG_SHIFT),
+ 0, 0, 0);
+ enabled = (res == 0);
+ }
+ return enabled;
+}
+
+static void *
+mte_mmap (size_t size)
+{
+ if (mte_enabled ())
+ {
+ return mmap (NULL, size, PROT_READ | PROT_WRITE | PROT_MTE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ }
+ else
+ {
+ return malloc (size);
+ }
+}
+
+void *
+alignup_mte (void *p)
+{
+ return (void *) (((uintptr_t) p + MTE_GRANULE_SIZE - 1)
+ & ~(MTE_GRANULE_SIZE - 1));
+}
+
+void *
+aligndown_mte (void *p)
+{
+ return (void *) ((uintptr_t) p & ~(MTE_GRANULE_SIZE - 1));
+}
+
+void *
+untag_pointer (void *p)
+{
+ return (void *) ((unsigned long long) p & (~0ULL >> 8));
+}
+
+void
+tag_buffer_helper (void *p, int len)
+{
+ char *ptr = p;
+ char *end = alignup_mte (ptr + len);
+ ptr = aligndown_mte (p);
+ for (; ptr < end; ptr += MTE_GRANULE_SIZE)
+ {
+ __arm_mte_set_tag (ptr);
+ }
+}
+
+void *
+tag_buffer (void *p, int len, int test_mte)
+{
+ if (test_mte && mte_enabled ())
+ {
+ p = __arm_mte_increment_tag (p, 1);
+ tag_buffer_helper (p, len);
+ }
+ return p;
+}
+
+void *
+untag_buffer (void *p, int len, int test_mte)
+{
+ p = untag_pointer (p);
+ if (test_mte && mte_enabled ())
+ {
+ tag_buffer_helper (p, len);
+ }
+ return p;
+}
+
+#else // __ARM_FEATURE_MEMORY_TAGGING
+int
+mte_enabled ()
+{
+ return 0;
+}
+static void *
+mte_mmap (size_t size)
+{
+ return malloc (size);
+}
+void *
+tag_buffer (void *p, int len, int test_mte)
+{
+ (void) len;
+ (void) test_mte;
+ return p;
+}
+void *
+untag_buffer (void *p, int len, int test_mte)
+{
+ (void) len;
+ (void) test_mte;
+ return p;
+}
+void *
+untag_pointer (void *p)
+{
+ return p;
+}
+#endif // __ARM_FEATURE_MEMORY_TAGGING
+
+#endif
diff --git a/string/test/stpcpy.c b/string/test/stpcpy.c
new file mode 100644
index 000000000000..1827e68c9a30
--- /dev/null
+++ b/string/test/stpcpy.c
@@ -0,0 +1,125 @@
+/*
+ * stpcpy test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ char *(*fun) (char *dest, const char *src);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(stpcpy, 0)
+#if __aarch64__
+ F(__stpcpy_aarch64, 0)
+ F(__stpcpy_aarch64_mte, 1)
+# if __ARM_FEATURE_SVE
+ F(__stpcpy_aarch64_sve, 1)
+# endif
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define ALIGN 32
+#define LEN 512
+static char *dbuf;
+static char *sbuf;
+static char wbuf[LEN + 3 * ALIGN];
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + ALIGN - 1) & -ALIGN);
+}
+
+static void
+test (const struct fun *fun, int dalign, int salign, int len)
+{
+ char *src = alignup (sbuf);
+ char *dst = alignup (dbuf);
+ char *want = wbuf;
+ char *s = src + salign;
+ char *d = dst + dalign;
+ char *w = want + dalign;
+ void *p;
+ int i;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || dalign >= ALIGN || salign >= ALIGN)
+ abort ();
+ for (i = 0; i < len + ALIGN; i++)
+ {
+ src[i] = '?';
+ want[i] = dst[i] = '*';
+ }
+ for (int i = 0; src + i < s; i++)
+ src[i] = 0;
+ for (int i = 1; i <= ALIGN; i++)
+ s[len + i] = (len + salign) & 1 ? 1 : 0;
+ for (i = 0; i < len; i++)
+ s[i] = w[i] = 'a' + (i & 31);
+ s[len] = w[len] = '\0';
+
+ s = tag_buffer (s, len + 1, fun->test_mte);
+ d = tag_buffer (d, len + 1, fun->test_mte);
+ p = fun->fun (d, s);
+ untag_buffer (s, len + 1, fun->test_mte);
+ untag_buffer (d, len + 1, fun->test_mte);
+
+ if (p != d + len)
+ ERR ("%s (%p,..) returned %p expected %p\n", fun->name, d, p, d + len);
+
+ for (i = 0; i < len + ALIGN; i++)
+ {
+ if (dst[i] != want[i])
+ {
+ ERR ("%s (align %d, align %d, %d) failed\n",
+ fun->name, dalign, salign, len);
+ quoteat ("got", dst, len + ALIGN, i);
+ quoteat ("want", want, len + ALIGN, i);
+ break;
+ }
+ }
+}
+
+int
+main (void)
+{
+ sbuf = mte_mmap (LEN + 3 * ALIGN);
+ dbuf = mte_mmap (LEN + 3 * ALIGN);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int d = 0; d < ALIGN; d++)
+ for (int s = 0; s < ALIGN; s++)
+ for (int n = 0; n < LEN; n++)
+ test (funtab + i, d, s, n);
+
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/strchr.c b/string/test/strchr.c
new file mode 100644
index 000000000000..f3ae982ef0ad
--- /dev/null
+++ b/string/test/strchr.c
@@ -0,0 +1,121 @@
+/*
+ * strchr test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ char *(*fun) (const char *s, int c);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(strchr, 0)
+#if __aarch64__
+ F(__strchr_aarch64, 0)
+ F(__strchr_aarch64_mte, 1)
+# if __ARM_FEATURE_SVE
+ F(__strchr_aarch64_sve, 1)
+# endif
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define ALIGN 32
+#define LEN 512
+static char *sbuf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + ALIGN - 1) & -ALIGN);
+}
+
+static void
+test (const struct fun *fun, int align, int seekpos, int len)
+{
+ char *src = alignup (sbuf);
+ char *s = src + align;
+ char *f = seekpos != -1 ? s + seekpos : 0;
+ int seekchar = 0x1;
+ void *p;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || seekpos >= len || align >= ALIGN)
+ abort ();
+
+ for (int i = 0; src + i < s; i++)
+ src[i] = (i + len) & 1 ? seekchar : 0;
+ for (int i = 1; i <= ALIGN; i++)
+ s[len + i] = (i + len) & 1 ? seekchar : 0;
+ for (int i = 0; i < len; i++)
+ s[i] = 'a' + (i & 31);
+ if (seekpos != -1)
+ s[seekpos] = seekchar;
+ if (seekpos != -1 && (len + align) & 1)
+ s[seekpos + 1] = seekchar;
+ s[len] = '\0';
+
+ s = tag_buffer (s, len + 1, fun->test_mte);
+ p = fun->fun (s, seekchar);
+ untag_buffer (s, len + 1, fun->test_mte);
+ p = untag_pointer (p);
+
+ if (p != f)
+ {
+ ERR ("%s (%p, 0x%02x) len %d returned %p, expected %p pos %d\n",
+ fun->name, s, seekchar, len, p, f, seekpos);
+ quote ("input", s, len);
+ }
+
+ s = tag_buffer (s, len + 1, fun->test_mte);
+ p = fun->fun (s, 0);
+ untag_buffer (s, len + 1, fun->test_mte);
+
+ if (p != s + len)
+ {
+ ERR ("%s (%p, 0x%02x) len %d returned %p, expected %p pos %d\n",
+ fun->name, s, 0, len, p, f, len);
+ quote ("input", s, len);
+ }
+}
+
+int
+main (void)
+{
+ sbuf = mte_mmap (LEN + 3 * ALIGN);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int a = 0; a < ALIGN; a++)
+ for (int n = 0; n < LEN; n++)
+ {
+ for (int sp = 0; sp < n; sp++)
+ test (funtab + i, a, sp, n);
+ test (funtab + i, a, -1, n);
+ }
+
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/strchrnul.c b/string/test/strchrnul.c
new file mode 100644
index 000000000000..6c30ab2123f1
--- /dev/null
+++ b/string/test/strchrnul.c
@@ -0,0 +1,126 @@
+/*
+ * strchrnul test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ char *(*fun) (const char *s, int c);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(strchrnul, 0)
+#if __aarch64__
+ F(__strchrnul_aarch64, 0)
+ F(__strchrnul_aarch64_mte, 1)
+# if __ARM_FEATURE_SVE
+ F(__strchrnul_aarch64_sve, 1)
+# endif
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define ALIGN 32
+#define LEN 512
+static char *sbuf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + ALIGN - 1) & -ALIGN);
+}
+
+static void
+test (const struct fun *fun, int align, int seekpos, int len)
+{
+ char *src = alignup (sbuf);
+ char *s = src + align;
+ char *f = seekpos != -1 ? s + seekpos : s + len;
+ int seekchar = 0x1;
+ void *p;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || seekpos >= len || align >= ALIGN)
+ abort ();
+
+ for (int i = 0; src + i < s; i++)
+ src[i] = (i + len) & 1 ? seekchar : 0;
+ for (int i = 1; i <= ALIGN; i++)
+ s[len + i] = (i + len) & 1 ? seekchar : 0;
+ for (int i = 0; i < len; i++)
+ s[i] = 'a' + (i & 31);
+ if (seekpos != -1)
+ s[seekpos] = seekchar;
+ if (seekpos != -1 && (len + align) & 1)
+ s[seekpos + 1] = seekchar;
+ s[len] = '\0';
+
+ int mte_len = seekpos != -1 ? seekpos + 1 : len + 1;
+ s = tag_buffer (s, mte_len, fun->test_mte);
+ p = fun->fun (s, seekchar);
+ untag_buffer (s, mte_len, fun->test_mte);
+ p = untag_pointer (p);
+
+ if (p != f)
+ {
+ ERR ("%s (%p, 0x%02x) len %d returned %p, expected %p pos %d\n",
+ fun->name, s, seekchar, len, p, f, seekpos);
+ quote ("input", s, len);
+ }
+
+ s = tag_buffer (s, len + 1, fun->test_mte);
+ p = fun->fun (s, 0);
+ untag_buffer (s, len + 1, fun->test_mte);
+
+ if (p != s + len)
+ {
+ ERR ("%s (%p, 0x%02x) len %d returned %p, expected %p pos %d\n",
+ fun->name, s, 0, len, p, f, len);
+ quote ("input", s, len);
+ }
+}
+
+int
+main (void)
+{
+ sbuf = mte_mmap (LEN + 3 * ALIGN);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int a = 0; a < ALIGN; a++)
+ for (int n = 0; n < LEN; n++)
+ {
+ for (int sp = 0; sp < n; sp++)
+ test (funtab + i, a, sp, n);
+ test (funtab + i, a, -1, n);
+ }
+
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/strcmp.c b/string/test/strcmp.c
new file mode 100644
index 000000000000..d57b54ed50a8
--- /dev/null
+++ b/string/test/strcmp.c
@@ -0,0 +1,132 @@
+/*
+ * strcmp test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ int (*fun) (const char *s1, const char *s2);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(strcmp, 0)
+#if __aarch64__
+ F(__strcmp_aarch64, 0)
+ F(__strcmp_aarch64_mte, 1)
+# if __ARM_FEATURE_SVE
+ F(__strcmp_aarch64_sve, 1)
+# endif
+#elif __arm__
+# if __ARM_ARCH >= 7 && __ARM_ARCH_ISA_ARM >= 1
+ F(__strcmp_arm, 0)
+# elif __ARM_ARCH == 6 && __ARM_ARCH_6M__ >= 1
+ F(__strcmp_armv6m, 0)
+# endif
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define A 32
+#define LEN 250000
+static char *s1buf;
+static char *s2buf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + A - 1) & -A);
+}
+
+static void
+test (const struct fun *fun, int s1align, int s2align, int len, int diffpos,
+ int delta)
+{
+ char *src1 = alignup (s1buf);
+ char *src2 = alignup (s2buf);
+ char *s1 = src1 + s1align;
+ char *s2 = src2 + s2align;
+ int r;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || s1align >= A || s2align >= A)
+ abort ();
+ if (diffpos >= len)
+ abort ();
+ if ((diffpos < 0) != (delta == 0))
+ abort ();
+
+ for (int i = 0; i < len + A; i++)
+ src1[i] = src2[i] = '?';
+ for (int i = 0; i < len; i++)
+ s1[i] = s2[i] = 'a' + i % 23;
+ if (delta)
+ s1[diffpos] += delta;
+ s1[len] = s2[len] = '\0';
+
+ s1 = tag_buffer (s1, len + 1, fun->test_mte);
+ s2 = tag_buffer (s2, len + 1, fun->test_mte);
+ r = fun->fun (s1, s2);
+ untag_buffer (s1, len + 1, fun->test_mte);
+ untag_buffer (s2, len + 1, fun->test_mte);
+
+ if ((delta == 0 && r != 0) || (delta > 0 && r <= 0) || (delta < 0 && r >= 0))
+ {
+ ERR ("%s(align %d, align %d, %d) failed, returned %d\n", fun->name,
+ s1align, s2align, len, r);
+ quoteat ("src1", src1, len + A, diffpos);
+ quoteat ("src2", src2, len + A, diffpos);
+ }
+}
+
+int
+main ()
+{
+ s1buf = mte_mmap (LEN + 2 * A + 1);
+ s2buf = mte_mmap (LEN + 2 * A + 1);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int d = 0; d < A; d++)
+ for (int s = 0; s < A; s++)
+ {
+ int n;
+ test (funtab + i, d, s, 0, -1, 0);
+ test (funtab + i, d, s, 1, -1, 0);
+ test (funtab + i, d, s, 1, 0, 1);
+ test (funtab + i, d, s, 1, 0, -1);
+ for (n = 2; n < 100; n++)
+ {
+ test (funtab + i, d, s, n, -1, 0);
+ test (funtab + i, d, s, n, n - 1, -1);
+ test (funtab + i, d, s, n, n / 2, 1);
+ }
+ for (; n < LEN; n *= 2)
+ {
+ test (funtab + i, d, s, n, -1, 0);
+ test (funtab + i, d, s, n, n / 2, -1);
+ }
+ }
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/strcpy.c b/string/test/strcpy.c
new file mode 100644
index 000000000000..e84cace9c8c6
--- /dev/null
+++ b/string/test/strcpy.c
@@ -0,0 +1,123 @@
+/*
+ * strcpy test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ char *(*fun) (char *dest, const char *src);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(strcpy, 0)
+#if __aarch64__
+ F(__strcpy_aarch64, 0)
+ F(__strcpy_aarch64_mte, 1)
+# if __ARM_FEATURE_SVE
+ F(__strcpy_aarch64_sve, 1)
+# endif
+#elif __arm__ && defined (__thumb2__) && !defined (__thumb__)
+ F(__strcpy_arm, 0)
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define ALIGN 32
+#define LEN 512
+static char *dbuf;
+static char *sbuf;
+static char wbuf[LEN + 3 * ALIGN];
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + ALIGN - 1) & -ALIGN);
+}
+
+static void
+test (const struct fun *fun, int dalign, int salign, int len)
+{
+ char *src = alignup (sbuf);
+ char *dst = alignup (dbuf);
+ char *want = wbuf;
+ char *s = src + salign;
+ char *d = dst + dalign;
+ char *w = want + dalign;
+ void *p;
+ int i;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || dalign >= ALIGN || salign >= ALIGN)
+ abort ();
+ for (i = 0; i < len + ALIGN; i++)
+ {
+ src[i] = '?';
+ want[i] = dst[i] = '*';
+ }
+ for (int i = 0; src + i < s; i++)
+ src[i] = 0;
+ for (int i = 1; i <= ALIGN; i++)
+ s[len + i] = (len + salign) & 1 ? 1 : 0;
+ for (i = 0; i < len; i++)
+ s[i] = w[i] = 'a' + (i & 31);
+ s[len] = w[len] = '\0';
+
+ s = tag_buffer (s, len + 1, fun->test_mte);
+ d = tag_buffer (d, len + 1, fun->test_mte);
+ p = fun->fun (d, s);
+ untag_buffer (s, len + 1, fun->test_mte);
+ untag_buffer (d, len + 1, fun->test_mte);
+
+ if (p != d)
+ ERR ("%s (%p,..) returned %p\n", fun->name, d, p);
+
+ for (i = 0; i < len + ALIGN; i++)
+ {
+ if (dst[i] != want[i])
+ {
+ ERR ("%s (align %d, align %d, %d) failed\n",
+ fun->name, dalign, salign, len);
+ quoteat ("got", dst, len + ALIGN, i);
+ quoteat ("want", want, len + ALIGN, i);
+ break;
+ }
+ }
+}
+
+int
+main (void)
+{
+ sbuf = mte_mmap (LEN + 3 * ALIGN);
+ dbuf = mte_mmap (LEN + 3 * ALIGN);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int d = 0; d < ALIGN; d++)
+ for (int s = 0; s < ALIGN; s++)
+ for (int n = 0; n < LEN; n++)
+ test (funtab + i, d, s, n);
+
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/stringtest.h b/string/test/stringtest.h
new file mode 100644
index 000000000000..fe855fc21736
--- /dev/null
+++ b/string/test/stringtest.h
@@ -0,0 +1,55 @@
+/*
+ * Common string test code.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+
+/* Accounting errors for a test case. */
+static int err_count;
+#define ERR_LIMIT 10
+#define ERR(...) (err_count++, printf (__VA_ARGS__))
+
+static inline void
+quotechar (unsigned char c)
+{
+ if (isprint (c))
+ putchar (c);
+ else
+ printf ("\\x%02x", c);
+}
+
+/* quoted print around at or the entire string if at < 0. */
+static void
+quoteat (const char *prefix, const void *p, int len, int at)
+{
+ static const int CTXLEN = 15;
+ int i;
+ const char *pre = "\"";
+ const char *post = "\"";
+ const char *s = p;
+ if (at > CTXLEN)
+ {
+ s += at - CTXLEN;
+ len -= at - CTXLEN;
+ pre = "...\"";
+ }
+ if (at >= 0 && len > 2 * CTXLEN + 1)
+ {
+ len = 2 * CTXLEN + 1;
+ post = "\"...";
+ }
+ printf ("%4s: %s", prefix, pre);
+ for (i = 0; i < len; i++)
+ quotechar (s[i]);
+ printf ("%s\n", post);
+}
+
+static inline void
+quote (const char *prefix, const void *p, int len)
+{
+ quoteat (prefix, p, len, -1);
+}
diff --git a/string/test/strlen.c b/string/test/strlen.c
new file mode 100644
index 000000000000..6278380f26df
--- /dev/null
+++ b/string/test/strlen.c
@@ -0,0 +1,103 @@
+/*
+ * strlen test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/mman.h>
+#include <limits.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ size_t (*fun) (const char *s);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(strlen, 0)
+#if __aarch64__
+ F(__strlen_aarch64, 0)
+ F(__strlen_aarch64_mte, 1)
+# if __ARM_FEATURE_SVE
+ F(__strlen_aarch64_sve, 1)
+# endif
+#elif __arm__
+# if __ARM_ARCH >= 6 && __ARM_ARCH_ISA_THUMB == 2
+ F(__strlen_armv6t2, 0)
+# endif
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define ALIGN 32
+#define LEN 512
+static char *sbuf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + ALIGN - 1) & -ALIGN);
+}
+
+static void
+test (const struct fun *fun, int align, int len)
+{
+ char *src = alignup (sbuf);
+ char *s = src + align;
+ size_t r;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || align >= ALIGN)
+ abort ();
+
+ for (int i = 0; src + i < s; i++)
+ src[i] = 0;
+ for (int i = 1; i <= ALIGN; i++)
+ s[len + i] = (len + align) & 1 ? 1 : 0;
+ for (int i = 0; i < len; i++)
+ s[i] = 'a' + (i & 31);
+ s[len] = '\0';
+
+ s = tag_buffer (s, len + 1, fun->test_mte);
+ r = fun->fun (s);
+ untag_buffer (s, len + 1, fun->test_mte);
+
+ if (r != len)
+ {
+ ERR ("%s (%p) returned %zu expected %d\n", fun->name, s, r, len);
+ quote ("input", src, len);
+ }
+}
+
+int
+main (void)
+{
+ sbuf = mte_mmap (LEN + 3 * ALIGN);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int a = 0; a < ALIGN; a++)
+ for (int n = 0; n < LEN; n++)
+ test (funtab + i, a, n);
+
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/strncmp.c b/string/test/strncmp.c
new file mode 100644
index 000000000000..018a8a431ab8
--- /dev/null
+++ b/string/test/strncmp.c
@@ -0,0 +1,139 @@
+/*
+ * strncmp test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ int (*fun) (const char *, const char *, size_t);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(strncmp, 0)
+#if __aarch64__
+ F(__strncmp_aarch64, 0)
+ F(__strncmp_aarch64_mte, 1)
+# if __ARM_FEATURE_SVE
+ F(__strncmp_aarch64_sve, 1)
+# endif
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define A 32
+#define LEN 250000
+static char *s1buf;
+static char *s2buf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + A - 1) & -A);
+}
+
+static void
+test (const struct fun *fun, int s1align, int s2align, int maxlen, int diffpos,
+ int len, int delta)
+{
+ char *src1 = alignup (s1buf);
+ char *src2 = alignup (s2buf);
+ char *s1 = src1 + s1align;
+ char *s2 = src2 + s2align;
+ int r;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || s1align >= A || s2align >= A)
+ abort ();
+ if (diffpos >= len)
+ abort ();
+ if ((diffpos < 0) != (delta == 0))
+ abort ();
+
+ for (int i = 0; i < len + A; i++)
+ src1[i] = src2[i] = '?';
+ for (int i = 0; i < len; i++)
+ s1[i] = s2[i] = 'a' + i % 23;
+ if (delta)
+ s1[diffpos] += delta;
+ s1[len] = s2[len] = '\0';
+
+ size_t mte_len = maxlen < len + 1 ? maxlen : len + 1;
+ s1 = tag_buffer (s1, mte_len, fun->test_mte);
+ s2 = tag_buffer (s2, mte_len, fun->test_mte);
+ r = fun->fun (s1, s2, maxlen);
+ untag_buffer (s1, mte_len, fun->test_mte);
+ untag_buffer (s2, mte_len, fun->test_mte);
+
+ if (diffpos >= maxlen)
+ {
+ diffpos = -1;
+ delta = 0;
+ }
+ if ((delta == 0 && r != 0) || (delta > 0 && r <= 0) || (delta < 0 && r >= 0))
+ {
+ ERR (
+ "%s(align %d, align %d, %d) (len=%d, diffpos=%d) failed, returned %d\n",
+ fun->name, s1align, s2align, maxlen, len, diffpos, r);
+ quoteat ("src1", src1, len + A, diffpos);
+ quoteat ("src2", src2, len + A, diffpos);
+ }
+}
+
+int
+main ()
+{
+ s1buf = mte_mmap (LEN + 2 * A + 1);
+ s2buf = mte_mmap (LEN + 2 * A + 1);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int d = 0; d < A; d++)
+ for (int s = 0; s < A; s++)
+ {
+ int n;
+ test (funtab + i, d, s, 0, -1, 0, 0);
+ test (funtab + i, d, s, 1, -1, 0, 0);
+ test (funtab + i, d, s, 0, -1, 1, 0);
+ test (funtab + i, d, s, 1, -1, 1, 0);
+ test (funtab + i, d, s, 2, -1, 1, 0);
+ test (funtab + i, d, s, 1, 0, 1, 1);
+ test (funtab + i, d, s, 1, 0, 1, -1);
+ for (n = 2; n < 100; n++)
+ {
+ test (funtab + i, d, s, n, -1, n, 0);
+ test (funtab + i, d, s, n, n / 2, n, 1);
+ test (funtab + i, d, s, n / 2, -1, n, 0);
+ test (funtab + i, d, s, n / 2, n / 2, n, -1);
+ }
+ for (; n < LEN; n *= 2)
+ {
+ test (funtab + i, d, s, n, -1, n, 0);
+ test (funtab + i, d, s, n, n / 2, n, -1);
+ test (funtab + i, d, s, n / 2, -1, n, 0);
+ test (funtab + i, d, s, n / 2, n / 2, n, 1);
+ }
+ }
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/strnlen.c b/string/test/strnlen.c
new file mode 100644
index 000000000000..0dea00eaf8e3
--- /dev/null
+++ b/string/test/strnlen.c
@@ -0,0 +1,109 @@
+/*
+ * strnlen test.
+ *
+ * Copyright (c) 2019-2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ size_t (*fun) (const char *s, size_t m);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(strnlen, 0)
+#if __aarch64__
+ F(__strnlen_aarch64, 1)
+# if __ARM_FEATURE_SVE
+ F(__strnlen_aarch64_sve, 1)
+# endif
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define ALIGN 32
+#define LEN 512
+static char *sbuf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + ALIGN - 1) & -ALIGN);
+}
+
+static void
+test (const struct fun *fun, int align, size_t maxlen, size_t len)
+{
+ char *src = alignup (sbuf);
+ char *s = src + align;
+ size_t r;
+ size_t e = maxlen < len ? maxlen : len;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || align >= ALIGN)
+ abort ();
+
+ for (int i = 0; src + i < s; i++)
+ src[i] = 0;
+ for (int i = 1; i <= ALIGN; i++)
+ s[len + i] = (len + align) & 1 ? 1 : 0;
+ for (int i = 0; i < len; i++)
+ s[i] = 'a' + (i & 31);
+ s[len] = 0;
+ if ((len + align) & 1)
+ s[e + 1] = 0;
+
+ size_t mte_len = maxlen < len + 1 ? maxlen : len + 1;
+ s = tag_buffer (s, mte_len, fun->test_mte);
+ r = fun->fun (s, maxlen);
+ untag_buffer (s, mte_len, fun->test_mte);
+
+ if (r != e)
+ {
+ ERR ("%s (%p, %zu) len %zu returned %zu, expected %zu\n",
+ fun->name, s, maxlen, len, r, e);
+ quote ("input", s, len);
+ }
+}
+
+int
+main (void)
+{
+ sbuf = mte_mmap (LEN + 3 * ALIGN);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int a = 0; a < ALIGN; a++)
+ for (int n = 0; n < LEN; n++)
+ {
+ for (int maxlen = 0; maxlen < LEN; maxlen++)
+ test (funtab + i, a, maxlen, n);
+ test (funtab + i, a, SIZE_MAX - a, n);
+ }
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/test/strrchr.c b/string/test/strrchr.c
new file mode 100644
index 000000000000..fedbdc52fcc1
--- /dev/null
+++ b/string/test/strrchr.c
@@ -0,0 +1,121 @@
+/*
+ * strrchr test.
+ *
+ * Copyright (c) 2019-2021, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <stdint.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <limits.h>
+#include "mte.h"
+#include "stringlib.h"
+#include "stringtest.h"
+
+#define F(x, mte) {#x, x, mte},
+
+static const struct fun
+{
+ const char *name;
+ char *(*fun) (const char *s, int c);
+ int test_mte;
+} funtab[] = {
+ // clang-format off
+ F(strrchr, 0)
+#if __aarch64__
+ F(__strrchr_aarch64, 0)
+ F(__strrchr_aarch64_mte, 1)
+# if __ARM_FEATURE_SVE
+ F(__strrchr_aarch64_sve, 1)
+# endif
+#endif
+ {0, 0, 0}
+ // clang-format on
+};
+#undef F
+
+#define ALIGN 32
+#define LEN 512
+static char *sbuf;
+
+static void *
+alignup (void *p)
+{
+ return (void *) (((uintptr_t) p + ALIGN - 1) & -ALIGN);
+}
+
+static void
+test (const struct fun *fun, int align, int seekpos, int len)
+{
+ char *src = alignup (sbuf);
+ char *s = src + align;
+ char *f = seekpos != -1 ? s + seekpos : 0;
+ int seekchar = 0x1;
+ void *p;
+
+ if (err_count >= ERR_LIMIT)
+ return;
+ if (len > LEN || seekpos >= len || align >= ALIGN)
+ abort ();
+
+ for (int i = 0; src + i < s; i++)
+ src[i] = (i + len) & 1 ? seekchar : 0;
+ for (int i = 1; i <= ALIGN; i++)
+ s[len + i] = (i + len) & 1 ? seekchar : 0;
+ for (int i = 0; i < len; i++)
+ s[i] = 'a' + (i & 31);
+ if (seekpos != -1)
+ s[seekpos / 2] = s[seekpos] = seekchar;
+ if (seekpos > 0 && (len + align) & 1)
+ s[seekpos - 1] = seekchar;
+ s[len] = '\0';
+
+ s = tag_buffer (s, len + 1, fun->test_mte);
+ p = fun->fun (s, seekchar);
+ untag_buffer (s, len + 1, fun->test_mte);
+ p = untag_pointer (p);
+
+ if (p != f)
+ {
+ ERR ("%s (%p, 0x%02x) len %d returned %p, expected %p pos %d\n",
+ fun->name, s, seekchar, len, p, f, seekpos);
+ quote ("input", s, len);
+ }
+
+ s = tag_buffer (s, len + 1, fun->test_mte);
+ p = fun->fun (s, 0);
+ untag_buffer (s, len + 1, fun->test_mte);
+
+ if (p != s + len)
+ {
+ ERR ("%s (%p, 0x%02x) len %d returned %p, expected %p pos %d\n",
+ fun->name, s, 0, len, p, s + len, len);
+ quote ("input", s, len);
+ }
+}
+
+int
+main (void)
+{
+ sbuf = mte_mmap (LEN + 3 * ALIGN);
+ int r = 0;
+ for (int i = 0; funtab[i].name; i++)
+ {
+ err_count = 0;
+ for (int a = 0; a < ALIGN; a++)
+ for (int n = 0; n < LEN; n++)
+ {
+ for (int sp = 0; sp < n; sp++)
+ test (funtab + i, a, sp, n);
+ test (funtab + i, a, -1, n);
+ }
+
+ char *pass = funtab[i].test_mte && mte_enabled () ? "MTE PASS" : "PASS";
+ printf ("%s %s\n", err_count ? "FAIL" : pass, funtab[i].name);
+ if (err_count)
+ r = -1;
+ }
+ return r;
+}
diff --git a/string/x86_64/check-arch.S b/string/x86_64/check-arch.S
new file mode 100644
index 000000000000..26ade0a0c7db
--- /dev/null
+++ b/string/x86_64/check-arch.S
@@ -0,0 +1,10 @@
+/*
+ * check ARCH setting.
+ *
+ * Copyright (c) 2020, Arm Limited.
+ * SPDX-License-Identifier: MIT
+ */
+
+#if !__x86_64__
+# error ARCH setting does not match the compiler.
+#endif