00001
00002
00003
00004
00005
00006
00007 #ifdef USE_STD
00008 #include <cmath>
00009 using namespace std;
00010 #else
00011 #include <math.h>
00012 #endif
00013
00014 #ifdef STORM_USEF
00015 #include "rtrsmrawavd_.h"
00016 #include "drtrsmrawavd_.h"
00017 #include "irtrsmrawavd_.h"
00018 #include "artrsmrawavd1_.h"
00019 #include "dartrsmrawavd1_.h"
00020 #include "iartrsmrawavd1_.h"
00021 #endif
00022
00023 #include "stormdef.h"
00024 #define INVSQRT2 STORMDEF_MATHCONST_INVSQRT2
00025
00026 void rtrsmrawavd(
00027 const int& Msize,
00028 const int& mmax,
00029 const int& mrastep,
00030 const float* mracoef,
00031 const float* mracoefrs,
00032 const int& m,
00033 float& wavd
00034 )
00035 {
00036 #ifdef STORM_USEF
00037 rtrsmrawavd_(
00038 &Msize,
00039 &mmax,
00040 &mrastep, mracoef, mracoefrs,
00041 &m, &wavd
00042 );
00043 #else
00044
00045 wavd = mracoef[ 2*m +1 ] * pow(INVSQRT2,m);
00046
00047
00048
00049 #endif
00050 }
00051
00052
00053 void rtrsmrawavd(
00054 const int& Msize,
00055 const int& mmax,
00056 const int& mrastep,
00057 const double* mracoef,
00058 const double* mracoefrs,
00059 const int& m,
00060 double& wavd
00061 )
00062 {
00063 #ifdef STORM_USEF
00064 drtrsmrawavd_(
00065 &Msize,
00066 &mmax,
00067 &mrastep, mracoef, mracoefrs,
00068 &m, &wavd
00069 );
00070 #else
00071
00072 wavd = mracoef[ 2*m + 1 ] * pow(INVSQRT2,m);
00073
00074
00075
00076 #endif
00077 }
00078
00079
00080 void rtrsmrawavd(
00081 const int& Msize,
00082 const int& mmax,
00083 const int& mrastep,
00084 const int* mracoef,
00085 const int* mracoefrs,
00086 const int& m,
00087 int& wavd
00088 )
00089 {
00090 #ifdef STORM_USEF
00091 irtrsmrawavd_(
00092 &Msize,
00093 &mmax,
00094 &mrastep, mracoef, mracoefrs,
00095 &m, &wavd
00096 );
00097 #else
00098
00099 int tmp = mracoef[ 2*m + 1 ];
00100 if (tmp >= 0) {
00101 wavd = tmp >> m;
00102 } else {
00103 if ((tmp & 0x00000001) != 0) {
00104 wavd = - ( (-tmp) >> m);
00105 } else {
00106 wavd = - ( (-tmp) >> m) - 1;
00107 }
00108 }
00109
00110
00111
00112 #endif
00113 }
00114
00115
00116 void rtrsmrawavd(
00117 const int& Asize,
00118 const int& Msize,
00119 const int& amax,
00120 const int& mmax,
00121 const int& mrastep,
00122 const float* mracoef,
00123 const float* mracoefrs,
00124 const int& a,
00125 const int& m,
00126 float& wavd
00127 )
00128 {
00129 #ifdef STORM_USEF
00130 artrsmrawavd1_(
00131 &Asize, &Msize,
00132 &amax, &mmax,
00133 &mrastep, mracoef, mracoefrs,
00134 &a, &m, &wavd
00135 );
00136 #else
00137
00138 wavd = mracoef[ Msize*2*a + 2*m + 1 ] * pow(INVSQRT2,m);
00139
00140
00141
00142 #endif
00143 }
00144
00145
00146 void rtrsmrawavd(
00147 const int& Asize,
00148 const int& Msize,
00149 const int& amax,
00150 const int& mmax,
00151 const int& mrastep,
00152 const double* mracoef,
00153 const double* mracoefrs,
00154 const int& a,
00155 const int& m,
00156 double& wavd
00157 )
00158 {
00159 #ifdef STORM_USEF
00160 dartrsmrawavd1_(
00161 &Asize, &Msize,
00162 &amax, &mmax,
00163 &mrastep, mracoef, mracoefrs,
00164 &a, &m, &wavd
00165 );
00166 #else
00167
00168 wavd = mracoef[ Msize*2*a + 2*m +1 ] * pow(INVSQRT2,m);
00169
00170
00171
00172 #endif
00173 }
00174
00175
00176 void rtrsmrawavd(
00177 const int& Asize,
00178 const int& Msize,
00179 const int& amax,
00180 const int& mmax,
00181 const int& mrastep,
00182 const int* mracoef,
00183 const int* mracoefrs,
00184 const int& a,
00185 const int& m,
00186 int& wavd
00187 )
00188 {
00189 #ifdef STORM_USEF
00190 iartrsmrawavd1_(
00191 &Asize, &Msize,
00192 &amax, &mmax,
00193 &mrastep, mracoef, mracoefrs,
00194 &a, &m, &wavd
00195 );
00196 #else
00197
00198 int tmp = mracoef[ Msize*2*a + 2*m +1 ];
00199 if (tmp >= 0) {
00200 wavd = tmp >> m;
00201 } else {
00202 if ((tmp & 0x00000001) != 0) {
00203 wavd = - ( (-tmp) >> m);
00204 } else {
00205 wavd = - ( (-tmp) >> m) - 1;
00206 }
00207 }
00208
00209
00210
00211 #endif
00212 }
00213