00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00024 #ifndef AVUTIL_LIBM_H
00025 #define AVUTIL_LIBM_H
00026
00027 #include <math.h>
00028 #include "config.h"
00029 #include "attributes.h"
00030
00031 #if !HAVE_CBRTF
00032 #undef cbrtf
00033 #define cbrtf(x) powf(x, 1.0/3.0)
00034 #endif
00035
00036 #if !HAVE_EXP2
00037 #undef exp2
00038 #define exp2(x) exp((x) * 0.693147180559945)
00039 #endif
00040
00041 #if !HAVE_EXP2F
00042 #undef exp2f
00043 #define exp2f(x) ((float)exp2(x))
00044 #endif
00045
00046 #if !HAVE_LLRINT
00047 #undef llrint
00048 #define llrint(x) ((long long)rint(x))
00049 #endif
00050
00051 #if !HAVE_LLRINTF
00052 #undef llrintf
00053 #define llrintf(x) ((long long)rint(x))
00054 #endif
00055
00056 #if !HAVE_LOG2
00057 #undef log2
00058 #define log2(x) (log(x) * 1.44269504088896340736)
00059 #endif
00060
00061 #if !HAVE_LOG2F
00062 #undef log2f
00063 #define log2f(x) ((float)log2(x))
00064 #endif
00065
00066 #if !HAVE_LRINT
00067 static av_always_inline av_const long int lrint(double x)
00068 {
00069 return rint(x);
00070 }
00071 #endif
00072
00073 #if !HAVE_LRINTF
00074 static av_always_inline av_const long int lrintf(float x)
00075 {
00076 return (int)(rint(x));
00077 }
00078 #endif
00079
00080 #if !HAVE_ROUND
00081 static av_always_inline av_const double round(double x)
00082 {
00083 return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);
00084 }
00085 #endif
00086
00087 #if !HAVE_ROUNDF
00088 static av_always_inline av_const float roundf(float x)
00089 {
00090 return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);
00091 }
00092 #endif
00093
00094 #if !HAVE_TRUNC
00095 static av_always_inline av_const double trunc(double x)
00096 {
00097 return (x > 0) ? floor(x) : ceil(x);
00098 }
00099 #endif
00100
00101 #if !HAVE_TRUNCF
00102 static av_always_inline av_const float truncf(float x)
00103 {
00104 return (x > 0) ? floor(x) : ceil(x);
00105 }
00106 #endif
00107
00108 #endif