randn.cpp
Go to the documentation of this file.
00001 /*
00002  * randn.cpp
00003  *
00004  * Code generation for function 'randn'
00005  *
00006  * C source code generated on: Wed Jul 24 16:11:35 2013
00007  *
00008  */
00009 
00010 /* Include files */
00011 #include "rt_nonfinite.h"
00012 #include "Optimal_affine_tracking_3d16_fast_realtime.h"
00013 #include "randn.h"
00014 #include "Optimal_affine_tracking_3d16_fast_realtime_data.h"
00015 
00016 /* Type Definitions */
00017 
00018 /* Named Constants */
00019 
00020 /* Variable Declarations */
00021 
00022 /* Variable Definitions */
00023 
00024 /* Function Declarations */
00025 static real_T eml_rand_mt19937ar(uint32_T b_state[625]);
00026 static void genrand_uint32_vector(uint32_T mt[625], uint32_T u[2]);
00027 
00028 /* Function Definitions */
00029 static real_T eml_rand_mt19937ar(uint32_T b_state[625])
00030 {
00031   real_T r;
00032   int32_T exitg1;
00033   uint32_T u32[2];
00034   int32_T i;
00035   static const real_T dv14[257] = { 0.0, 0.215241895984875, 0.286174591792068,
00036     0.335737519214422, 0.375121332878378, 0.408389134611989, 0.43751840220787,
00037     0.46363433679088, 0.487443966139235, 0.50942332960209, 0.529909720661557,
00038     0.549151702327164, 0.567338257053817, 0.584616766106378, 0.601104617755991,
00039     0.61689699000775, 0.63207223638606, 0.646695714894993, 0.660822574244419,
00040     0.674499822837293, 0.687767892795788, 0.700661841106814, 0.713212285190975,
00041     0.725446140909999, 0.737387211434295, 0.749056662017815, 0.760473406430107,
00042     0.771654424224568, 0.782615023307232, 0.793369058840623, 0.80392911698997,
00043     0.814306670135215, 0.824512208752291, 0.834555354086381, 0.844444954909153,
00044     0.854189171008163, 0.863795545553308, 0.87327106808886, 0.882622229585165,
00045     0.891855070732941, 0.900975224461221, 0.909987953496718, 0.91889818364959,
00046     0.927710533401999, 0.936429340286575, 0.945058684468165, 0.953602409881086,
00047     0.96206414322304, 0.970447311064224, 0.978755155294224, 0.986990747099062,
00048     0.99515699963509, 1.00325667954467, 1.01129241744, 1.01926671746548,
00049     1.02718196603564, 1.03504043983344, 1.04284431314415, 1.05059566459093,
00050     1.05829648333067, 1.06594867476212, 1.07355406579244, 1.0811144097034,
00051     1.08863139065398, 1.09610662785202, 1.10354167942464, 1.11093804601357,
00052     1.11829717411934, 1.12562045921553, 1.13290924865253, 1.14016484436815,
00053     1.14738850542085, 1.15458145035993, 1.16174485944561, 1.16887987673083,
00054     1.17598761201545, 1.18306914268269, 1.19012551542669, 1.19715774787944,
00055     1.20416683014438, 1.2111537262437, 1.21811937548548, 1.22506469375653,
00056     1.23199057474614, 1.23889789110569, 1.24578749554863, 1.2526602218949,
00057     1.25951688606371, 1.26635828701823, 1.27318520766536, 1.27999841571382,
00058     1.28679866449324, 1.29358669373695, 1.30036323033084, 1.30712898903073,
00059     1.31388467315022, 1.32063097522106, 1.32736857762793, 1.33409815321936,
00060     1.3408203658964, 1.34753587118059, 1.35424531676263, 1.36094934303328,
00061     1.36764858359748, 1.37434366577317, 1.38103521107586, 1.38772383568998,
00062     1.39441015092814, 1.40109476367925, 1.4077782768464, 1.41446128977547,
00063     1.42114439867531, 1.42782819703026, 1.43451327600589, 1.44120022484872,
00064     1.44788963128058, 1.45458208188841, 1.46127816251028, 1.46797845861808,
00065     1.47468355569786, 1.48139403962819, 1.48811049705745, 1.49483351578049,
00066     1.50156368511546, 1.50830159628131, 1.51504784277671, 1.521803020761,
00067     1.52856772943771, 1.53534257144151, 1.542128153229, 1.54892508547417,
00068     1.55573398346918, 1.56255546753104, 1.56939016341512, 1.57623870273591,
00069     1.58310172339603, 1.58997987002419, 1.59687379442279, 1.60378415602609,
00070     1.61071162236983, 1.61765686957301, 1.62462058283303, 1.63160345693487,
00071     1.63860619677555, 1.64562951790478, 1.65267414708306, 1.65974082285818,
00072     1.66683029616166, 1.67394333092612, 1.68108070472517, 1.68824320943719,
00073     1.69543165193456, 1.70264685479992, 1.7098896570713, 1.71716091501782,
00074     1.72446150294804, 1.73179231405296, 1.73915426128591, 1.74654827828172,
00075     1.75397532031767, 1.76143636531891, 1.76893241491127, 1.77646449552452,
00076     1.78403365954944, 1.79164098655216, 1.79928758454972, 1.80697459135082,
00077     1.81470317596628, 1.82247454009388, 1.83028991968276, 1.83815058658281,
00078     1.84605785028518, 1.8540130597602, 1.86201760539967, 1.87007292107127,
00079     1.878180486293, 1.88634182853678, 1.8945585256707, 1.90283220855043,
00080     1.91116456377125, 1.91955733659319, 1.92801233405266, 1.93653142827569,
00081     1.94511656000868, 1.95376974238465, 1.96249306494436, 1.97128869793366,
00082     1.98015889690048, 1.98910600761744, 1.99813247135842, 2.00724083056053,
00083     2.0164337349062, 2.02571394786385, 2.03508435372962, 2.04454796521753,
00084     2.05410793165065, 2.06376754781173, 2.07353026351874, 2.0833996939983,
00085     2.09337963113879, 2.10347405571488, 2.11368715068665, 2.12402331568952,
00086     2.13448718284602, 2.14508363404789, 2.15581781987674, 2.16669518035431,
00087     2.17772146774029, 2.18890277162636, 2.20024554661128, 2.21175664288416,
00088     2.22344334009251, 2.23531338492992, 2.24737503294739, 2.25963709517379,
00089     2.27210899022838, 2.28480080272449, 2.29772334890286, 2.31088825060137,
00090     2.32430801887113, 2.33799614879653, 2.35196722737914, 2.36623705671729,
00091     2.38082279517208, 2.39574311978193, 2.41101841390112, 2.42667098493715,
00092     2.44272531820036, 2.4592083743347, 2.47614993967052, 2.49358304127105,
00093     2.51154444162669, 2.53007523215985, 2.54922155032478, 2.56903545268184,
00094     2.58957598670829, 2.61091051848882, 2.63311639363158, 2.65628303757674,
00095     2.68051464328574, 2.70593365612306, 2.73268535904401, 2.76094400527999,
00096     2.79092117400193, 2.82287739682644, 2.85713873087322, 2.89412105361341,
00097     2.93436686720889, 2.97860327988184, 3.02783779176959, 3.08352613200214,
00098     3.147889289518, 3.2245750520478, 3.32024473383983, 3.44927829856143,
00099     3.65415288536101, 3.91075795952492 };
00100 
00101   real_T u;
00102   static const real_T dv15[257] = { 1.0, 0.977101701267673, 0.959879091800108,
00103     0.9451989534423, 0.932060075959231, 0.919991505039348, 0.908726440052131,
00104     0.898095921898344, 0.887984660755834, 0.878309655808918, 0.869008688036857,
00105     0.860033621196332, 0.851346258458678, 0.842915653112205, 0.834716292986884,
00106     0.826726833946222, 0.818929191603703, 0.811307874312656, 0.803849483170964,
00107     0.796542330422959, 0.789376143566025, 0.782341832654803, 0.775431304981187,
00108     0.768637315798486, 0.761953346836795, 0.755373506507096, 0.748892447219157,
00109     0.742505296340151, 0.736207598126863, 0.729995264561476, 0.72386453346863,
00110     0.717811932630722, 0.711834248878248, 0.705928501332754, 0.700091918136512,
00111     0.694321916126117, 0.688616083004672, 0.682972161644995, 0.677388036218774,
00112     0.671861719897082, 0.66639134390875, 0.660975147776663, 0.655611470579697,
00113     0.650298743110817, 0.645035480820822, 0.639820277453057, 0.634651799287624,
00114     0.629528779924837, 0.624450015547027, 0.619414360605834, 0.614420723888914,
00115     0.609468064925773, 0.604555390697468, 0.599681752619125, 0.594846243767987,
00116     0.590047996332826, 0.585286179263371, 0.580559996100791, 0.575868682972354,
00117     0.571211506735253, 0.566587763256165, 0.561996775814525, 0.557437893618766,
00118     0.552910490425833, 0.548413963255266, 0.543947731190026, 0.539511234256952,
00119     0.535103932380458, 0.530725304403662, 0.526374847171684, 0.522052074672322,
00120     0.517756517229756, 0.513487720747327, 0.509245245995748, 0.505028667943468,
00121     0.500837575126149, 0.49667156905249, 0.492530263643869, 0.488413284705458,
00122     0.484320269426683, 0.480250865909047, 0.476204732719506, 0.47218153846773,
00123     0.468180961405694, 0.464202689048174, 0.460246417812843, 0.456311852678716,
00124     0.452398706861849, 0.448506701507203, 0.444635565395739, 0.440785034665804,
00125     0.436954852547985, 0.433144769112652, 0.429354541029442, 0.425583931338022,
00126     0.421832709229496, 0.418100649837848, 0.414387534040891, 0.410693148270188,
00127     0.407017284329473, 0.403359739221114, 0.399720314980197, 0.396098818515832,
00128     0.392495061459315, 0.388908860018789, 0.385340034840077, 0.381788410873393,
00129     0.378253817245619, 0.374736087137891, 0.371235057668239, 0.367750569779032,
00130     0.364282468129004, 0.360830600989648, 0.357394820145781, 0.353974980800077,
00131     0.350570941481406, 0.347182563956794, 0.343809713146851, 0.340452257044522,
00132     0.337110066637006, 0.333783015830718, 0.330470981379163, 0.327173842813601,
00133     0.323891482376391, 0.320623784956905, 0.317370638029914, 0.314131931596337,
00134     0.310907558126286, 0.307697412504292, 0.30450139197665, 0.301319396100803,
00135     0.298151326696685, 0.294997087799962, 0.291856585617095, 0.288729728482183,
00136     0.285616426815502, 0.282516593083708, 0.279430141761638, 0.276356989295668,
00137     0.273297054068577, 0.270250256365875, 0.267216518343561, 0.264195763997261,
00138     0.261187919132721, 0.258192911337619, 0.255210669954662, 0.252241126055942,
00139     0.249284212418529, 0.246339863501264, 0.24340801542275, 0.240488605940501,
00140     0.237581574431238, 0.23468686187233, 0.231804410824339, 0.228934165414681,
00141     0.226076071322381, 0.223230075763918, 0.220396127480152, 0.217574176724331,
00142     0.214764175251174, 0.211966076307031, 0.209179834621125, 0.206405406397881,
00143     0.203642749310335, 0.200891822494657, 0.198152586545776, 0.195425003514135,
00144     0.192709036903589, 0.190004651670465, 0.187311814223801, 0.1846304924268,
00145     0.181960655599523, 0.179302274522848, 0.176655321443735, 0.174019770081839,
00146     0.171395595637506, 0.168782774801212, 0.166181285764482, 0.163591108232366,
00147     0.161012223437511, 0.158444614155925, 0.15588826472448, 0.153343161060263,
00148     0.150809290681846, 0.148286642732575, 0.145775208005994, 0.143274978973514,
00149     0.140785949814445, 0.138308116448551, 0.135841476571254, 0.133386029691669,
00150     0.130941777173644, 0.12850872228, 0.126086870220186, 0.123676228201597,
00151     0.12127680548479, 0.11888861344291, 0.116511665625611, 0.114145977827839,
00152     0.111791568163838, 0.109448457146812, 0.107116667774684, 0.104796225622487,
00153     0.102487158941935, 0.10018949876881, 0.0979032790388625, 0.095628536713009,
00154     0.093365311912691, 0.0911136480663738, 0.0888735920682759,
00155     0.0866451944505581, 0.0844285095703535, 0.082223595813203,
00156     0.0800305158146631, 0.0778493367020961, 0.0756801303589272,
00157     0.0735229737139814, 0.0713779490588905, 0.0692451443970068,
00158     0.0671246538277886, 0.065016577971243, 0.0629210244377582, 0.06083810834954,
00159     0.0587679529209339, 0.0567106901062031, 0.0546664613248891,
00160     0.0526354182767924, 0.0506177238609479, 0.0486135532158687,
00161     0.0466230949019305, 0.0446465522512946, 0.0426841449164746,
00162     0.0407361106559411, 0.0388027074045262, 0.0368842156885674,
00163     0.0349809414617162, 0.0330932194585786, 0.0312214171919203,
00164     0.0293659397581334, 0.0275272356696031, 0.0257058040085489,
00165     0.0239022033057959, 0.0221170627073089, 0.0203510962300445,
00166     0.0186051212757247, 0.0168800831525432, 0.0151770883079353,
00167     0.0134974506017399, 0.0118427578579079, 0.0102149714397015,
00168     0.00861658276939875, 0.00705087547137324, 0.00552240329925101,
00169     0.00403797259336304, 0.00260907274610216, 0.0012602859304986,
00170     0.000477467764609386 };
00171 
00172   real_T x;
00173   do {
00174     exitg1 = 0;
00175     genrand_uint32_vector(b_state, u32);
00176     i = (int32_T)((u32[1] >> 24U) + 1U);
00177     r = (((real_T)(u32[0] >> 3U) * 1.6777216E+7 + (real_T)((int32_T)u32[1] &
00178            16777215)) * 2.2204460492503131E-16 - 1.0) * dv14[i];
00179     if (fabs(r) <= dv14[i - 1]) {
00180       exitg1 = 1;
00181     } else if (i < 256) {
00182       u = genrandu(b_state);
00183       if (dv15[i] + u * (dv15[i - 1] - dv15[i]) < exp(-0.5 * r * r)) {
00184         exitg1 = 1;
00185       }
00186     } else {
00187       do {
00188         u = genrandu(b_state);
00189         x = log(u) * 0.273661237329758;
00190         u = genrandu(b_state);
00191       } while (!(-2.0 * log(u) > x * x));
00192 
00193       if (r < 0.0) {
00194         r = x - 3.65415288536101;
00195       } else {
00196         r = 3.65415288536101 - x;
00197       }
00198 
00199       exitg1 = 1;
00200     }
00201   } while (exitg1 == 0U);
00202 
00203   return r;
00204 }
00205 
00206 static void genrand_uint32_vector(uint32_T mt[625], uint32_T u[2])
00207 {
00208   int32_T i;
00209   uint32_T mti;
00210   int32_T kk;
00211   uint32_T y;
00212   for (i = 0; i < 2; i++) {
00213     u[i] = 0U;
00214   }
00215 
00216   for (i = 0; i < 2; i++) {
00217     mti = mt[624] + 1U;
00218     if (mti >= 625U) {
00219       for (kk = 0; kk < 227; kk++) {
00220         y = (mt[kk] & 2147483648U) | (mt[1 + kk] & 2147483647U);
00221         if ((int32_T)(y & 1U) == 0) {
00222           y >>= 1U;
00223         } else {
00224           y = y >> 1U ^ 2567483615U;
00225         }
00226 
00227         mt[kk] = mt[397 + kk] ^ y;
00228       }
00229 
00230       for (kk = 0; kk < 396; kk++) {
00231         y = (mt[227 + kk] & 2147483648U) | (mt[228 + kk] & 2147483647U);
00232         if ((int32_T)(y & 1U) == 0) {
00233           y >>= 1U;
00234         } else {
00235           y = y >> 1U ^ 2567483615U;
00236         }
00237 
00238         mt[227 + kk] = mt[kk] ^ y;
00239       }
00240 
00241       y = (mt[623] & 2147483648U) | (mt[0] & 2147483647U);
00242       if ((int32_T)(y & 1U) == 0) {
00243         y >>= 1U;
00244       } else {
00245         y = y >> 1U ^ 2567483615U;
00246       }
00247 
00248       mt[623] = mt[396] ^ y;
00249       mti = 1U;
00250     }
00251 
00252     y = mt[(int32_T)mti - 1];
00253     mt[624] = mti;
00254     y ^= y >> 11U;
00255     y ^= y << 7U & 2636928640U;
00256     y ^= y << 15U & 4022730752U;
00257     y ^= y >> 18U;
00258     u[i] = y;
00259   }
00260 }
00261 
00262 real_T genrandu(uint32_T mt[625])
00263 {
00264   real_T r;
00265   int32_T exitg1;
00266   uint32_T u[2];
00267   boolean_T isvalid;
00268   int32_T k;
00269   boolean_T exitg2;
00270   uint32_T b_r;
00271 
00272   /* <LEGAL>   This is a uniform (0,1) pseudorandom number generator based on: */
00273   /* <LEGAL> */
00274   /* <LEGAL>    A C-program for MT19937, with initialization improved 2002/1/26. */
00275   /* <LEGAL>    Coded by Takuji Nishimura and Makoto Matsumoto. */
00276   /* <LEGAL> */
00277   /* <LEGAL>    Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura, */
00278   /* <LEGAL>    All rights reserved. */
00279   /* <LEGAL> */
00280   /* <LEGAL>    Redistribution and use in source and binary forms, with or without */
00281   /* <LEGAL>    modification, are permitted provided that the following conditions */
00282   /* <LEGAL>    are met: */
00283   /* <LEGAL> */
00284   /* <LEGAL>      1. Redistributions of source code must retain the above copyright */
00285   /* <LEGAL>         notice, this list of conditions and the following disclaimer. */
00286   /* <LEGAL> */
00287   /* <LEGAL>      2. Redistributions in binary form must reproduce the above copyright */
00288   /* <LEGAL>         notice, this list of conditions and the following disclaimer in the */
00289   /* <LEGAL>         documentation and/or other materials provided with the distribution. */
00290   /* <LEGAL> */
00291   /* <LEGAL>      3. The names of its contributors may not be used to endorse or promote */
00292   /* <LEGAL>         products derived from this software without specific prior written */
00293   /* <LEGAL>         permission. */
00294   /* <LEGAL> */
00295   /* <LEGAL>    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
00296   /* <LEGAL>    "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
00297   /* <LEGAL>    LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR */
00298   /* <LEGAL>    A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR */
00299   /* <LEGAL>    CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, */
00300   /* <LEGAL>    EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, */
00301   /* <LEGAL>    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR */
00302   /* <LEGAL>    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF */
00303   /* <LEGAL>    LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
00304   /* <LEGAL>    NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
00305   /* <LEGAL>    SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
00306   do {
00307     exitg1 = 0;
00308     genrand_uint32_vector(mt, u);
00309     u[0] >>= 5U;
00310     u[1] >>= 6U;
00311     r = 1.1102230246251565E-16 * ((real_T)u[0] * 6.7108864E+7 + (real_T)u[1]);
00312     if (r == 0.0) {
00313       if ((mt[624] >= 1U) && (mt[624] < 625U)) {
00314         isvalid = TRUE;
00315       } else {
00316         isvalid = FALSE;
00317       }
00318 
00319       if (isvalid) {
00320         isvalid = FALSE;
00321         k = 1;
00322         exitg2 = FALSE;
00323         while ((exitg2 == 0U) && (k < 625)) {
00324           if (mt[k - 1] == 0U) {
00325             k++;
00326           } else {
00327             isvalid = TRUE;
00328             exitg2 = TRUE;
00329           }
00330         }
00331       }
00332 
00333       if (!isvalid) {
00334         b_r = 5489U;
00335         mt[0] = 5489U;
00336         for (k = 0; k < 623; k++) {
00337           b_r = ((b_r ^ b_r >> 30U) * 1812433253U + (uint32_T)k) + 1U;
00338           mt[1 + k] = b_r;
00339         }
00340 
00341         mt[624] = 624U;
00342       }
00343     } else {
00344       exitg1 = 1;
00345     }
00346   } while (exitg1 == 0U);
00347 
00348   return r;
00349 }
00350 
00351 void randn(real_T r[6])
00352 {
00353   int32_T k;
00354   real_T d3;
00355   if (!method_not_empty) {
00356     method_not_empty = TRUE;
00357   }
00358 
00359   for (k = 0; k < 6; k++) {
00360     d3 = eml_rand_mt19937ar(state);
00361     r[k] = d3;
00362   }
00363 }
00364 
00365 /* End of code generation (randn.cpp) */


depth_tracker_ros_vr8
Author(s): shusain
autogenerated on Fri Dec 6 2013 20:45:47