src/corelib/kernel/qmath.h
changeset 3 41300fa6a67c
parent 0 1918ee327afb
child 4 3b1da2848fc7
equal deleted inserted replaced
2:56cd8111b7f7 3:41300fa6a67c
    44 
    44 
    45 #include <math.h>
    45 #include <math.h>
    46 
    46 
    47 #include <QtCore/qglobal.h>
    47 #include <QtCore/qglobal.h>
    48 
    48 
       
    49 #ifdef Q_OS_SYMBIAN
       
    50 #    include <e32math.h>
       
    51 #endif
       
    52 
    49 QT_BEGIN_HEADER
    53 QT_BEGIN_HEADER
    50 
    54 
    51 QT_BEGIN_NAMESPACE
    55 QT_BEGIN_NAMESPACE
    52 
    56 
    53 QT_MODULE(Core)
    57 QT_MODULE(Core)
    74     else
    78     else
    75 #endif
    79 #endif
    76         return int(floor(v));
    80         return int(floor(v));
    77 }
    81 }
    78 
    82 
       
    83 inline qreal qFabs(qreal v)
       
    84 {
       
    85 #ifdef QT_USE_MATH_H_FLOATS
       
    86     if(sizeof(qreal) == sizeof(float))
       
    87         return fabsf(float(v));
       
    88     else
       
    89 #endif
       
    90         return fabs(v);
       
    91 }
       
    92 
    79 inline qreal qSin(qreal v)
    93 inline qreal qSin(qreal v)
    80 {
    94 {
    81 #ifdef QT_USE_MATH_H_FLOATS
    95 #ifdef Q_OS_SYMBIAN
    82     if (sizeof(qreal) == sizeof(float))
    96     TReal sin_v;
    83         return sinf(float(v));
    97     Math::Sin(sin_v, static_cast<TReal>(v));
    84     else
    98     return static_cast<qreal>(sin_v);
    85 #endif
    99 #else
    86         return sin(v);
   100 #    ifdef QT_USE_MATH_H_FLOATS
       
   101         if (sizeof(qreal) == sizeof(float))
       
   102             return sinf(float(v));
       
   103         else
       
   104 #    endif
       
   105             return sin(v);
       
   106 #endif
    87 }
   107 }
    88 
   108 
    89 inline qreal qCos(qreal v)
   109 inline qreal qCos(qreal v)
    90 {
   110 {
    91 #ifdef QT_USE_MATH_H_FLOATS
   111 #ifdef Q_OS_SYMBIAN
    92     if (sizeof(qreal) == sizeof(float))
   112     TReal cos_v;
    93         return cosf(float(v));
   113     Math::Cos(cos_v, static_cast<TReal>(v));
    94     else
   114     return static_cast<qreal>(cos_v);
    95 #endif
   115 #else
    96         return cos(v);
   116 #    ifdef QT_USE_MATH_H_FLOATS
       
   117         if (sizeof(qreal) == sizeof(float))
       
   118             return cosf(float(v));
       
   119         else
       
   120 #    endif
       
   121             return cos(v);
       
   122 #endif
       
   123 }
       
   124 
       
   125 inline qreal qTan(qreal v)
       
   126 {
       
   127 #ifdef Q_OS_SYMBIAN
       
   128     TReal tan_v;
       
   129     Math::Tan(tan_v, static_cast<TReal>(v));
       
   130     return static_cast<qreal>(tan_v);
       
   131 #else
       
   132 #    ifdef QT_USE_MATH_H_FLOATS
       
   133         if (sizeof(qreal) == sizeof(float))
       
   134             return tanf(float(v));
       
   135         else
       
   136 #    endif
       
   137             return tan(v);
       
   138 #endif
    97 }
   139 }
    98 
   140 
    99 inline qreal qAcos(qreal v)
   141 inline qreal qAcos(qreal v)
   100 {
   142 {
   101 #ifdef QT_USE_MATH_H_FLOATS
   143 #ifdef Q_OS_SYMBIAN
   102     if (sizeof(qreal) == sizeof(float))
   144     TReal acos_v;
   103         return acosf(float(v));
   145     Math::ACos(acos_v, static_cast<TReal>(v));
   104     else
   146     return static_cast<qreal>(acos_v);
   105 #endif
   147 #else
   106         return acos(v);
   148 #    ifdef QT_USE_MATH_H_FLOATS
       
   149         if (sizeof(qreal) == sizeof(float))
       
   150             return acosf(float(v));
       
   151         else
       
   152 #    endif
       
   153            return acos(v);
       
   154 #endif
       
   155 }
       
   156 
       
   157 inline qreal qAsin(qreal v)
       
   158 {
       
   159 #ifdef Q_OS_SYMBIAN
       
   160     TReal asin_v;
       
   161     Math::ASin(asin_v, static_cast<TReal>(v));
       
   162     return static_cast<qreal>(asin_v);
       
   163 #else
       
   164 #    ifdef QT_USE_MATH_H_FLOATS
       
   165         if (sizeof(qreal) == sizeof(float))
       
   166             return asinf(float(v));
       
   167         else
       
   168 #    endif
       
   169             return asin(v);
       
   170 #endif
       
   171 }
       
   172 
       
   173 inline qreal qAtan(qreal v)
       
   174 {
       
   175 #ifdef Q_OS_SYMBIAN
       
   176     TReal atan_v;
       
   177     Math::ATan(atan_v, static_cast<TReal>(v));
       
   178     return static_cast<qreal>(atan_v);
       
   179 #else
       
   180 #    ifdef QT_USE_MATH_H_FLOATS
       
   181         if(sizeof(qreal) == sizeof(float))
       
   182             return atanf(float(v));
       
   183         else
       
   184 #    endif
       
   185             return atan(v);
       
   186 #endif
       
   187 }
       
   188 
       
   189 inline qreal qAtan2(qreal x, qreal y)
       
   190 {
       
   191 #ifdef Q_OS_SYMBIAN
       
   192     TReal atan2_v;
       
   193     Math::ATan(atan2_v, static_cast<TReal>(x), static_cast<TReal>(y));
       
   194     return static_cast<qreal>(atan2_v);
       
   195 #else
       
   196 #    ifdef QT_USE_MATH_H_FLOATS
       
   197         if(sizeof(qreal) == sizeof(float))
       
   198             return atan2f(float(x), float(y));
       
   199         else
       
   200 #    endif
       
   201             return atan2(x, y);
       
   202 #endif
   107 }
   203 }
   108 
   204 
   109 inline qreal qSqrt(qreal v)
   205 inline qreal qSqrt(qreal v)
   110 {
   206 {
   111 #ifdef QT_USE_MATH_H_FLOATS
   207 #ifdef Q_OS_SYMBIAN
   112     if (sizeof(qreal) == sizeof(float))
   208     TReal sqrt_v;
   113         return sqrtf(float(v));
   209     Math::Sqrt(sqrt_v, static_cast<TReal>(v));
   114     else
   210     return static_cast<qreal>(sqrt_v);
   115 #endif
   211 #else
   116         return sqrt(v);
   212 #    ifdef QT_USE_MATH_H_FLOATS
       
   213         if (sizeof(qreal) == sizeof(float))
       
   214             return sqrtf(float(v));
       
   215         else
       
   216 #    endif
       
   217             return sqrt(v);
       
   218 #endif
   117 }
   219 }
   118 
   220 
   119 inline qreal qLn(qreal v)
   221 inline qreal qLn(qreal v)
   120 {
   222 {
   121 #ifdef QT_USE_MATH_H_FLOATS
   223 #ifdef QT_USE_MATH_H_FLOATS
   124     else
   226     else
   125 #endif
   227 #endif
   126         return log(v);
   228         return log(v);
   127 }
   229 }
   128 
   230 
       
   231 inline qreal qExp(qreal v)
       
   232 {
       
   233 #ifdef Q_OS_SYMBIAN
       
   234     TReal exp_v;
       
   235     Math::Exp(exp_v, static_cast<TReal>(v));
       
   236     return static_cast<qreal>(exp_v);
       
   237 #else
       
   238     // only one signature
       
   239     // exists, exp(double)
       
   240     return exp(v);
       
   241 #endif
       
   242 }
       
   243 
   129 inline qreal qPow(qreal x, qreal y)
   244 inline qreal qPow(qreal x, qreal y)
   130 {
   245 {
   131 #ifdef QT_USE_MATH_H_FLOATS
   246 #ifdef Q_OS_SYMBIAN
   132     if (sizeof(qreal) == sizeof(float))
   247     TReal pow_v;
   133         return powf(float(x), float(y));
   248     Math::Pow(pow_v, static_cast<TReal>(x), static_cast<TReal>(y));
   134     else
   249     return static_cast<qreal>(pow_v);
   135 #endif
   250 #else
   136         return pow(x, y);
   251 #    ifdef QT_USE_MATH_H_FLOATS
       
   252         if (sizeof(qreal) == sizeof(float))
       
   253             return powf(float(x), float(y));
       
   254         else
       
   255 #    endif
       
   256             return pow(x, y);
       
   257 #endif
   137 }
   258 }
   138 
   259 
   139 #ifndef M_PI
   260 #ifndef M_PI
   140 #define M_PI (3.14159265358979323846)
   261 #define M_PI (3.14159265358979323846)
   141 #endif
   262 #endif