00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef NTG_CONFIG_MATH_HH
00029 # define NTG_CONFIG_MATH_HH
00030
00031 # include <ntg/config/system.hh>
00032
00033 # include <cmath>
00034
00035 # ifndef USE_C_LIMITS
00036 # include <limits>
00037 # define NTG_DOUBLE_INFINITY (std::numeric_limits<double>::infinity())
00038 # define NTG_FLOAT_INFINITY (std::numeric_limits<float>::infinity())
00039 # else
00040 # ifdef HUGE_VAL
00041 # define NTG_DOUBLE_INFINITY HUGE_VAL
00042 # ifdef HUGE_VALF
00043 # define NTG_FLOAT_INFINITY HUGE_VALF
00044 # else
00045 # define NTG_FLOAT_INFINITY ((float)HUGE_VAL)
00046 # endif
00047 # else
00048 # error Cannot define Infinity in this configuration.
00049 # endif
00050 # endif
00051
00052 # ifndef M_PI
00053 # define M_PI 3.14159265358979323846264338327
00054 # endif
00055
00056 # ifdef NEED_SQRTF
00057 static inline float sqrtf(float f)
00058 {
00059 return (float)sqrt((double)f);
00060 }
00061 # endif
00062
00063 # ifdef NEED_FLOORF
00064 static inline float floorf(float f)
00065 {
00066 return (float)floor((double)f);
00067 }
00068 # endif
00069
00070 # ifdef NEED_ROUND
00071 static inline double round(double f)
00072 {
00073 return (f < 0.) ? -floor(-f + 0.5) : floor(f + 0.5);
00074 }
00075 # endif
00076 # ifdef NEED_ROUNDF
00077 static inline float roundf(float f)
00078 {
00079 return (f < 0.f) ? -floorf(-f + 0.5f) : floorf(f + 0.5f);
00080 }
00081 # endif
00082
00083 #endif // !NTG_CONFIG_MATH_HH