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