Improve accuracy of SIMD exp for small args
commit36311d95c2d8b0ebd889d96b681795c4c34634dd
authorErik Lindahl <erik@kth.se>
Fri, 8 Sep 2017 19:03:58 +0000 (8 21:03 +0200)
committerMark Abraham <mark.j.abraham@gmail.com>
Tue, 12 Sep 2017 12:26:21 +0000 (12 14:26 +0200)
treedde1964a2cd107a1938fbe4d665156cd6bdc0d88
parent9a05de960184a62586814ada2a1bb4fa8de4b9d6
Improve accuracy of SIMD exp for small args

Introduce a separate check for small arguments and
set the result to zero below this cutoff. This change
also moves the exponential tests to ldexp(), which
as a side-effect also makes that function safer by
default, with an optional template parameter to avoid
the checks.

Fixes #2243.

Change-Id: I41bccaeec9921c3aead2cd2caf41cbe2206e0687
25 files changed:
src/gromacs/simd/impl_arm_neon/impl_arm_neon_simd_float.h
src/gromacs/simd/impl_arm_neon_asimd/impl_arm_neon_asimd_simd_double.h
src/gromacs/simd/impl_ibm_qpx/impl_ibm_qpx_simd_double.h
src/gromacs/simd/impl_ibm_qpx/impl_ibm_qpx_simd_float.h
src/gromacs/simd/impl_ibm_vmx/impl_ibm_vmx_simd_float.h
src/gromacs/simd/impl_ibm_vsx/impl_ibm_vsx_simd_double.h
src/gromacs/simd/impl_ibm_vsx/impl_ibm_vsx_simd_float.h
src/gromacs/simd/impl_reference/impl_reference_general.h
src/gromacs/simd/impl_reference/impl_reference_simd_double.h
src/gromacs/simd/impl_reference/impl_reference_simd_float.h
src/gromacs/simd/impl_x86_avx2_256/impl_x86_avx2_256_simd_double.h
src/gromacs/simd/impl_x86_avx2_256/impl_x86_avx2_256_simd_float.h
src/gromacs/simd/impl_x86_avx_256/impl_x86_avx_256_simd_double.h
src/gromacs/simd/impl_x86_avx_256/impl_x86_avx_256_simd_float.h
src/gromacs/simd/impl_x86_avx_512/impl_x86_avx_512_simd_double.h
src/gromacs/simd/impl_x86_avx_512/impl_x86_avx_512_simd_float.h
src/gromacs/simd/impl_x86_mic/impl_x86_mic_simd_double.h
src/gromacs/simd/impl_x86_mic/impl_x86_mic_simd_float.h
src/gromacs/simd/impl_x86_sse2/impl_x86_sse2_simd_double.h
src/gromacs/simd/impl_x86_sse2/impl_x86_sse2_simd_float.h
src/gromacs/simd/impl_x86_sse4_1/impl_x86_sse4_1_simd_double.h
src/gromacs/simd/impl_x86_sse4_1/impl_x86_sse4_1_simd_float.h
src/gromacs/simd/simd_math.h
src/gromacs/simd/tests/simd_floatingpoint.cpp
src/gromacs/simd/tests/simd_vector_operations.cpp