summaryrefslogtreecommitdiff
path: root/libavutil/internal.h
diff options
context:
space:
mode:
Diffstat (limited to 'libavutil/internal.h')
-rw-r--r--libavutil/internal.h19
1 files changed, 19 insertions, 0 deletions
diff --git a/libavutil/internal.h b/libavutil/internal.h
index f86b7fb741..076aa47f3d 100644
--- a/libavutil/internal.h
+++ b/libavutil/internal.h
@@ -292,6 +292,25 @@ static av_always_inline av_const int64_t ff_rint64_clip(double a, int64_t amin,
return res;
}
+/**
+ * Compute 10^x for floating point values. Note: this function is by no means
+ * "correctly rounded", and is meant as a fast, reasonably accurate approximation.
+ * For instance, maximum relative error for the double precision variant is
+ * ~ 1e-13 for very small and very large values.
+ * This is ~2x faster than GNU libm's approach, which is still off by 2ulp on
+ * some inputs.
+ * @param x exponent
+ * @return 10^x
+ */
+static av_always_inline double ff_exp10(double x)
+{
+ return exp2(M_LOG2_10 * x);
+}
+
+static av_always_inline float ff_exp10f(float x)
+{
+ return exp2f(M_LOG2_10 * x);
+}
/**
* A wrapper for open() setting O_CLOEXEC.