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 "rtrsmrascala_.h"
00016 #include "drtrsmrascala_.h"
00017 #include "irtrsmrascala_.h"
00018 #include "artrsmrascala1_.h"
00019 #include "dartrsmrascala1_.h"
00020 #include "iartrsmrascala1_.h"
00021 #endif
00022
00023 #include "stormdef.h"
00024 #define INVSQRT2 STORMDEF_MATHCONST_INVSQRT2
00025
00026 void rtrsmrascala(
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& scala
00034 )
00035 {
00036 #ifdef STORM_USEF
00037 rtrsmrascala_(
00038 &Msize,
00039 &mmax,
00040 &mrastep, mracoef, mracoefrs,
00041 &m, &scala
00042 );
00043 #else
00044
00045 scala = mracoef[ 2*m ] * pow(INVSQRT2,m);
00046
00047
00048
00049 #endif
00050 }
00051
00052
00053 void rtrsmrascala(
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& scala
00061 )
00062 {
00063 #ifdef STORM_USEF
00064 drtrsmrascala_(
00065 &Msize,
00066 &mmax,
00067 &mrastep, mracoef, mracoefrs,
00068 &m, &scala
00069 );
00070 #else
00071
00072 scala = mracoef[ 2*m ] * pow(INVSQRT2,m);
00073
00074
00075
00076 #endif
00077 }
00078
00079
00080 void rtrsmrascala(
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& scala
00088 )
00089 {
00090 #ifdef STORM_USEF
00091 irtrsmrascala_( &Msize, &mmax, &mrastep, mracoef, mracoefrs, &m, &scala );
00092 #else
00093
00094 int tmp = mracoef[ 2*m ];
00095 if (tmp >= 0) {
00096 scala = tmp >> m;
00097 } else {
00098 if ((tmp & 0x00000001) != 0) {
00099 scala = - ( (-tmp) >> m);
00100 } else {
00101 scala = - ( (-tmp) >> m) - 1;
00102 }
00103 }
00104
00105
00106
00107 #endif
00108 }
00109
00110
00111 void rtrsmrascala(
00112 const int& Asize,
00113 const int& Msize,
00114 const int& amax,
00115 const int& mmax,
00116 const int& mrastep,
00117 const float* mracoef,
00118 const float* mracoefrs,
00119 const int& a,
00120 const int& m,
00121 float& scala
00122 )
00123 {
00124 #ifdef STORM_USEF
00125 artrsmrascala1_(
00126 &Asize, &Msize,
00127 &amax, &mmax,
00128 &mrastep, mracoef, mracoefrs,
00129 &a, &m, &scala
00130 );
00131 #else
00132
00133 scala = mracoef[ Msize*2*a + 2*m ] * pow(INVSQRT2,m);
00134
00135
00136
00137 #endif
00138 }
00139
00140 void rtrsmrascala(
00141 const int& Asize,
00142 const int& Msize,
00143 const int& amax,
00144 const int& mmax,
00145 const int& mrastep,
00146 const double* mracoef,
00147 const double* mracoefrs,
00148 const int& a,
00149 const int& m,
00150 double& scala
00151 )
00152 {
00153 #ifdef STORM_USEF
00154 dartrsmrascala1_(
00155 &Asize, &Msize,
00156 &amax, &mmax,
00157 &mrastep, mracoef, mracoefrs,
00158 &a, &m, &scala
00159 );
00160 #else
00161
00162 scala = mracoef[ Msize*2*a + 2*m ] * pow(INVSQRT2,m);
00163
00164
00165
00166 #endif
00167 }
00168
00169
00170 void rtrsmrascala(
00171 const int& Asize,
00172 const int& Msize,
00173 const int& amax,
00174 const int& mmax,
00175 const int& mrastep,
00176 const int* mracoef,
00177 const int* mracoefrs,
00178 const int& a,
00179 const int& m,
00180 int& scala
00181 )
00182 {
00183 #ifdef STORM_USEF
00184 iartrsmrascala1_(
00185 &Asize, &Msize,
00186 &amax, &mmax,
00187 &mrastep, mracoef, mracoefrs,
00188 &a, &m, &scala
00189 );
00190 #else
00191
00192 int tmp = mracoef[ Msize*2*a + 2*m ];
00193 if (tmp >= 0) {
00194 scala = tmp >> m;
00195 } else {
00196 if ((tmp & 0x00000001) != 0) {
00197 scala = - ( (-tmp) >> m);
00198 } else {
00199 scala = - ( (-tmp) >> m) - 1;
00200 }
00201 }
00202
00203
00204
00205 #endif
00206 }
00207