From 198f9f875e74e7ad3cede4ee4ae4471a3cfa79e0 Mon Sep 17 00:00:00 2001 From: Matthieu Schaller <matthieu.schaller@durham.ac.uk> Date: Tue, 9 Feb 2016 19:07:01 +0000 Subject: [PATCH] New file containing approximate math functions. --- src/Makefile.am | 2 +- src/approx_math.h | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 src/approx_math.h diff --git a/src/Makefile.am b/src/Makefile.am index da5d88e799..cd100392ac 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -44,7 +44,7 @@ AM_SOURCES = space.c runner.c queue.c task.c cell.c engine.c \ kernel.c tools.c part.c # Include files for distribution, not installation. -noinst_HEADERS = atomic.h cycle.h error.h inline.h kernel.h vector.h \ +noinst_HEADERS = approx_math.h atomic.h cycle.h error.h inline.h kernel.h vector.h \ runner_doiact.h runner_doiact_grav.h units.h intrinsics.h \ hydro.h hydro_io.h gravity.h hydro/*/*.h gravity/*/*.h diff --git a/src/approx_math.h b/src/approx_math.h new file mode 100644 index 0000000000..ef93ea63c3 --- /dev/null +++ b/src/approx_math.h @@ -0,0 +1,33 @@ +/******************************************************************************* + * This file is part of SWIFT. + * Copyright (c) 2016 Matthieu Schaller matthieu.schaller@durham.ac.uk) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + * + ******************************************************************************/ +#ifndef SWIFT_APPROX_MATH_H +#define SWIFT_APPROX_MATH_H + +/** + * @brief Approximate version of expf(x) using a 4th order Taylor expansion + * + * The absolute error is of order 10^-6 for -0.2 < x < 0.2. + * + * @param x The number to take the exponential of. + */ +__attribute__((always_inline)) INLINE static float approx_expf(float x) { + return 1.f + x * (1.f + x * (0.5f + x * (1.f / 6.0f + 1.f / 24.0f * x))); +} + +#endif /* SWIFT_APPROX_MATH_H */ -- GitLab