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