fun7_randn.cpp 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740
  1. //
  2. // File: randn_7.cpp
  3. //
  4. // MATLAB Coder version : 5.2
  5. // C/C++ source code generated on : 04-Mar-2023 17:44:30
  6. //
  7. // Include Files
  8. #include "fun7_randn.h"
  9. #include "fun7_DRFMRF_data.h"
  10. #include "eml_rand_mt19937ar.h"
  11. #include "coder_array.h"
  12. #include <cmath>
  13. // Function Definitions
  14. //
  15. // Arguments : const double varargin_1[2]
  16. // ::coder::array<double, 2U> &r
  17. // Return Type : void
  18. //
  19. namespace coder {
  20. void randn_7(const double *varargin_1, ::coder::array<double, 2U> &r)
  21. {
  22. static const double dv[257]{0.0,
  23. 0.215241895984875,
  24. 0.286174591792068,
  25. 0.335737519214422,
  26. 0.375121332878378,
  27. 0.408389134611989,
  28. 0.43751840220787,
  29. 0.46363433679088,
  30. 0.487443966139235,
  31. 0.50942332960209,
  32. 0.529909720661557,
  33. 0.549151702327164,
  34. 0.567338257053817,
  35. 0.584616766106378,
  36. 0.601104617755991,
  37. 0.61689699000775,
  38. 0.63207223638606,
  39. 0.646695714894993,
  40. 0.660822574244419,
  41. 0.674499822837293,
  42. 0.687767892795788,
  43. 0.700661841106814,
  44. 0.713212285190975,
  45. 0.725446140909999,
  46. 0.737387211434295,
  47. 0.749056662017815,
  48. 0.760473406430107,
  49. 0.771654424224568,
  50. 0.782615023307232,
  51. 0.793369058840623,
  52. 0.80392911698997,
  53. 0.814306670135215,
  54. 0.824512208752291,
  55. 0.834555354086381,
  56. 0.844444954909153,
  57. 0.854189171008163,
  58. 0.863795545553308,
  59. 0.87327106808886,
  60. 0.882622229585165,
  61. 0.891855070732941,
  62. 0.900975224461221,
  63. 0.909987953496718,
  64. 0.91889818364959,
  65. 0.927710533401999,
  66. 0.936429340286575,
  67. 0.945058684468165,
  68. 0.953602409881086,
  69. 0.96206414322304,
  70. 0.970447311064224,
  71. 0.978755155294224,
  72. 0.986990747099062,
  73. 0.99515699963509,
  74. 1.00325667954467,
  75. 1.01129241744,
  76. 1.01926671746548,
  77. 1.02718196603564,
  78. 1.03504043983344,
  79. 1.04284431314415,
  80. 1.05059566459093,
  81. 1.05829648333067,
  82. 1.06594867476212,
  83. 1.07355406579244,
  84. 1.0811144097034,
  85. 1.08863139065398,
  86. 1.09610662785202,
  87. 1.10354167942464,
  88. 1.11093804601357,
  89. 1.11829717411934,
  90. 1.12562045921553,
  91. 1.13290924865253,
  92. 1.14016484436815,
  93. 1.14738850542085,
  94. 1.15458145035993,
  95. 1.16174485944561,
  96. 1.16887987673083,
  97. 1.17598761201545,
  98. 1.18306914268269,
  99. 1.19012551542669,
  100. 1.19715774787944,
  101. 1.20416683014438,
  102. 1.2111537262437,
  103. 1.21811937548548,
  104. 1.22506469375653,
  105. 1.23199057474614,
  106. 1.23889789110569,
  107. 1.24578749554863,
  108. 1.2526602218949,
  109. 1.25951688606371,
  110. 1.26635828701823,
  111. 1.27318520766536,
  112. 1.27999841571382,
  113. 1.28679866449324,
  114. 1.29358669373695,
  115. 1.30036323033084,
  116. 1.30712898903073,
  117. 1.31388467315022,
  118. 1.32063097522106,
  119. 1.32736857762793,
  120. 1.33409815321936,
  121. 1.3408203658964,
  122. 1.34753587118059,
  123. 1.35424531676263,
  124. 1.36094934303328,
  125. 1.36764858359748,
  126. 1.37434366577317,
  127. 1.38103521107586,
  128. 1.38772383568998,
  129. 1.39441015092814,
  130. 1.40109476367925,
  131. 1.4077782768464,
  132. 1.41446128977547,
  133. 1.42114439867531,
  134. 1.42782819703026,
  135. 1.43451327600589,
  136. 1.44120022484872,
  137. 1.44788963128058,
  138. 1.45458208188841,
  139. 1.46127816251028,
  140. 1.46797845861808,
  141. 1.47468355569786,
  142. 1.48139403962819,
  143. 1.48811049705745,
  144. 1.49483351578049,
  145. 1.50156368511546,
  146. 1.50830159628131,
  147. 1.51504784277671,
  148. 1.521803020761,
  149. 1.52856772943771,
  150. 1.53534257144151,
  151. 1.542128153229,
  152. 1.54892508547417,
  153. 1.55573398346918,
  154. 1.56255546753104,
  155. 1.56939016341512,
  156. 1.57623870273591,
  157. 1.58310172339603,
  158. 1.58997987002419,
  159. 1.59687379442279,
  160. 1.60378415602609,
  161. 1.61071162236983,
  162. 1.61765686957301,
  163. 1.62462058283303,
  164. 1.63160345693487,
  165. 1.63860619677555,
  166. 1.64562951790478,
  167. 1.65267414708306,
  168. 1.65974082285818,
  169. 1.66683029616166,
  170. 1.67394333092612,
  171. 1.68108070472517,
  172. 1.68824320943719,
  173. 1.69543165193456,
  174. 1.70264685479992,
  175. 1.7098896570713,
  176. 1.71716091501782,
  177. 1.72446150294804,
  178. 1.73179231405296,
  179. 1.73915426128591,
  180. 1.74654827828172,
  181. 1.75397532031767,
  182. 1.76143636531891,
  183. 1.76893241491127,
  184. 1.77646449552452,
  185. 1.78403365954944,
  186. 1.79164098655216,
  187. 1.79928758454972,
  188. 1.80697459135082,
  189. 1.81470317596628,
  190. 1.82247454009388,
  191. 1.83028991968276,
  192. 1.83815058658281,
  193. 1.84605785028518,
  194. 1.8540130597602,
  195. 1.86201760539967,
  196. 1.87007292107127,
  197. 1.878180486293,
  198. 1.88634182853678,
  199. 1.8945585256707,
  200. 1.90283220855043,
  201. 1.91116456377125,
  202. 1.91955733659319,
  203. 1.92801233405266,
  204. 1.93653142827569,
  205. 1.94511656000868,
  206. 1.95376974238465,
  207. 1.96249306494436,
  208. 1.97128869793366,
  209. 1.98015889690048,
  210. 1.98910600761744,
  211. 1.99813247135842,
  212. 2.00724083056053,
  213. 2.0164337349062,
  214. 2.02571394786385,
  215. 2.03508435372962,
  216. 2.04454796521753,
  217. 2.05410793165065,
  218. 2.06376754781173,
  219. 2.07353026351874,
  220. 2.0833996939983,
  221. 2.09337963113879,
  222. 2.10347405571488,
  223. 2.11368715068665,
  224. 2.12402331568952,
  225. 2.13448718284602,
  226. 2.14508363404789,
  227. 2.15581781987674,
  228. 2.16669518035431,
  229. 2.17772146774029,
  230. 2.18890277162636,
  231. 2.20024554661128,
  232. 2.21175664288416,
  233. 2.22344334009251,
  234. 2.23531338492992,
  235. 2.24737503294739,
  236. 2.25963709517379,
  237. 2.27210899022838,
  238. 2.28480080272449,
  239. 2.29772334890286,
  240. 2.31088825060137,
  241. 2.32430801887113,
  242. 2.33799614879653,
  243. 2.35196722737914,
  244. 2.36623705671729,
  245. 2.38082279517208,
  246. 2.39574311978193,
  247. 2.41101841390112,
  248. 2.42667098493715,
  249. 2.44272531820036,
  250. 2.4592083743347,
  251. 2.47614993967052,
  252. 2.49358304127105,
  253. 2.51154444162669,
  254. 2.53007523215985,
  255. 2.54922155032478,
  256. 2.56903545268184,
  257. 2.58957598670829,
  258. 2.61091051848882,
  259. 2.63311639363158,
  260. 2.65628303757674,
  261. 2.68051464328574,
  262. 2.70593365612306,
  263. 2.73268535904401,
  264. 2.76094400527999,
  265. 2.79092117400193,
  266. 2.82287739682644,
  267. 2.85713873087322,
  268. 2.89412105361341,
  269. 2.93436686720889,
  270. 2.97860327988184,
  271. 3.02783779176959,
  272. 3.08352613200214,
  273. 3.147889289518,
  274. 3.2245750520478,
  275. 3.32024473383983,
  276. 3.44927829856143,
  277. 3.65415288536101,
  278. 3.91075795952492};
  279. static const double dv1[257]{1.0,
  280. 0.977101701267673,
  281. 0.959879091800108,
  282. 0.9451989534423,
  283. 0.932060075959231,
  284. 0.919991505039348,
  285. 0.908726440052131,
  286. 0.898095921898344,
  287. 0.887984660755834,
  288. 0.878309655808918,
  289. 0.869008688036857,
  290. 0.860033621196332,
  291. 0.851346258458678,
  292. 0.842915653112205,
  293. 0.834716292986884,
  294. 0.826726833946222,
  295. 0.818929191603703,
  296. 0.811307874312656,
  297. 0.803849483170964,
  298. 0.796542330422959,
  299. 0.789376143566025,
  300. 0.782341832654803,
  301. 0.775431304981187,
  302. 0.768637315798486,
  303. 0.761953346836795,
  304. 0.755373506507096,
  305. 0.748892447219157,
  306. 0.742505296340151,
  307. 0.736207598126863,
  308. 0.729995264561476,
  309. 0.72386453346863,
  310. 0.717811932630722,
  311. 0.711834248878248,
  312. 0.705928501332754,
  313. 0.700091918136512,
  314. 0.694321916126117,
  315. 0.688616083004672,
  316. 0.682972161644995,
  317. 0.677388036218774,
  318. 0.671861719897082,
  319. 0.66639134390875,
  320. 0.660975147776663,
  321. 0.655611470579697,
  322. 0.650298743110817,
  323. 0.645035480820822,
  324. 0.639820277453057,
  325. 0.634651799287624,
  326. 0.629528779924837,
  327. 0.624450015547027,
  328. 0.619414360605834,
  329. 0.614420723888914,
  330. 0.609468064925773,
  331. 0.604555390697468,
  332. 0.599681752619125,
  333. 0.594846243767987,
  334. 0.590047996332826,
  335. 0.585286179263371,
  336. 0.580559996100791,
  337. 0.575868682972354,
  338. 0.571211506735253,
  339. 0.566587763256165,
  340. 0.561996775814525,
  341. 0.557437893618766,
  342. 0.552910490425833,
  343. 0.548413963255266,
  344. 0.543947731190026,
  345. 0.539511234256952,
  346. 0.535103932380458,
  347. 0.530725304403662,
  348. 0.526374847171684,
  349. 0.522052074672322,
  350. 0.517756517229756,
  351. 0.513487720747327,
  352. 0.509245245995748,
  353. 0.505028667943468,
  354. 0.500837575126149,
  355. 0.49667156905249,
  356. 0.492530263643869,
  357. 0.488413284705458,
  358. 0.484320269426683,
  359. 0.480250865909047,
  360. 0.476204732719506,
  361. 0.47218153846773,
  362. 0.468180961405694,
  363. 0.464202689048174,
  364. 0.460246417812843,
  365. 0.456311852678716,
  366. 0.452398706861849,
  367. 0.448506701507203,
  368. 0.444635565395739,
  369. 0.440785034665804,
  370. 0.436954852547985,
  371. 0.433144769112652,
  372. 0.429354541029442,
  373. 0.425583931338022,
  374. 0.421832709229496,
  375. 0.418100649837848,
  376. 0.414387534040891,
  377. 0.410693148270188,
  378. 0.407017284329473,
  379. 0.403359739221114,
  380. 0.399720314980197,
  381. 0.396098818515832,
  382. 0.392495061459315,
  383. 0.388908860018789,
  384. 0.385340034840077,
  385. 0.381788410873393,
  386. 0.378253817245619,
  387. 0.374736087137891,
  388. 0.371235057668239,
  389. 0.367750569779032,
  390. 0.364282468129004,
  391. 0.360830600989648,
  392. 0.357394820145781,
  393. 0.353974980800077,
  394. 0.350570941481406,
  395. 0.347182563956794,
  396. 0.343809713146851,
  397. 0.340452257044522,
  398. 0.337110066637006,
  399. 0.333783015830718,
  400. 0.330470981379163,
  401. 0.327173842813601,
  402. 0.323891482376391,
  403. 0.320623784956905,
  404. 0.317370638029914,
  405. 0.314131931596337,
  406. 0.310907558126286,
  407. 0.307697412504292,
  408. 0.30450139197665,
  409. 0.301319396100803,
  410. 0.298151326696685,
  411. 0.294997087799962,
  412. 0.291856585617095,
  413. 0.288729728482183,
  414. 0.285616426815502,
  415. 0.282516593083708,
  416. 0.279430141761638,
  417. 0.276356989295668,
  418. 0.273297054068577,
  419. 0.270250256365875,
  420. 0.267216518343561,
  421. 0.264195763997261,
  422. 0.261187919132721,
  423. 0.258192911337619,
  424. 0.255210669954662,
  425. 0.252241126055942,
  426. 0.249284212418529,
  427. 0.246339863501264,
  428. 0.24340801542275,
  429. 0.240488605940501,
  430. 0.237581574431238,
  431. 0.23468686187233,
  432. 0.231804410824339,
  433. 0.228934165414681,
  434. 0.226076071322381,
  435. 0.223230075763918,
  436. 0.220396127480152,
  437. 0.217574176724331,
  438. 0.214764175251174,
  439. 0.211966076307031,
  440. 0.209179834621125,
  441. 0.206405406397881,
  442. 0.203642749310335,
  443. 0.200891822494657,
  444. 0.198152586545776,
  445. 0.195425003514135,
  446. 0.192709036903589,
  447. 0.190004651670465,
  448. 0.187311814223801,
  449. 0.1846304924268,
  450. 0.181960655599523,
  451. 0.179302274522848,
  452. 0.176655321443735,
  453. 0.174019770081839,
  454. 0.171395595637506,
  455. 0.168782774801212,
  456. 0.166181285764482,
  457. 0.163591108232366,
  458. 0.161012223437511,
  459. 0.158444614155925,
  460. 0.15588826472448,
  461. 0.153343161060263,
  462. 0.150809290681846,
  463. 0.148286642732575,
  464. 0.145775208005994,
  465. 0.143274978973514,
  466. 0.140785949814445,
  467. 0.138308116448551,
  468. 0.135841476571254,
  469. 0.133386029691669,
  470. 0.130941777173644,
  471. 0.12850872228,
  472. 0.126086870220186,
  473. 0.123676228201597,
  474. 0.12127680548479,
  475. 0.11888861344291,
  476. 0.116511665625611,
  477. 0.114145977827839,
  478. 0.111791568163838,
  479. 0.109448457146812,
  480. 0.107116667774684,
  481. 0.104796225622487,
  482. 0.102487158941935,
  483. 0.10018949876881,
  484. 0.0979032790388625,
  485. 0.095628536713009,
  486. 0.093365311912691,
  487. 0.0911136480663738,
  488. 0.0888735920682759,
  489. 0.0866451944505581,
  490. 0.0844285095703535,
  491. 0.082223595813203,
  492. 0.0800305158146631,
  493. 0.0778493367020961,
  494. 0.0756801303589272,
  495. 0.0735229737139814,
  496. 0.0713779490588905,
  497. 0.0692451443970068,
  498. 0.0671246538277886,
  499. 0.065016577971243,
  500. 0.0629210244377582,
  501. 0.06083810834954,
  502. 0.0587679529209339,
  503. 0.0567106901062031,
  504. 0.0546664613248891,
  505. 0.0526354182767924,
  506. 0.0506177238609479,
  507. 0.0486135532158687,
  508. 0.0466230949019305,
  509. 0.0446465522512946,
  510. 0.0426841449164746,
  511. 0.0407361106559411,
  512. 0.0388027074045262,
  513. 0.0368842156885674,
  514. 0.0349809414617162,
  515. 0.0330932194585786,
  516. 0.0312214171919203,
  517. 0.0293659397581334,
  518. 0.0275272356696031,
  519. 0.0257058040085489,
  520. 0.0239022033057959,
  521. 0.0221170627073089,
  522. 0.0203510962300445,
  523. 0.0186051212757247,
  524. 0.0168800831525432,
  525. 0.0151770883079353,
  526. 0.0134974506017399,
  527. 0.0118427578579079,
  528. 0.0102149714397015,
  529. 0.00861658276939875,
  530. 0.00705087547137324,
  531. 0.00552240329925101,
  532. 0.00403797259336304,
  533. 0.00260907274610216,
  534. 0.0012602859304986,
  535. 0.000477467764609386};
  536. unsigned int u[2];
  537. int i;
  538. i = static_cast<int>(varargin_1[1]);
  539. r.set_size(1, i);
  540. for (int k{0}; k < i; k++) {
  541. double b_r;
  542. int b_i;
  543. int exitg1;
  544. do {
  545. exitg1 = 0;
  546. genrand_uint32_vector(state, u);
  547. b_i = static_cast<int>((u[1] >> 24U) + 1U);
  548. b_r = ((static_cast<double>(u[0] >> 3U) * 1.6777216E+7 +
  549. static_cast<double>(static_cast<int>(u[1]) & 16777215)) *
  550. 2.2204460492503131E-16 -
  551. 1.0) *
  552. dv[b_i];
  553. if (std::abs(b_r) <= dv[b_i - 1]) {
  554. exitg1 = 1;
  555. } else if (b_i < 256) {
  556. double b_u;
  557. // ========================= COPYRIGHT NOTICE
  558. // ============================
  559. // This is a uniform (0,1) pseudorandom number generator based on:
  560. //
  561. // A C-program for MT19937, with initialization improved 2002/1/26.
  562. // Coded by Takuji Nishimura and Makoto Matsumoto.
  563. //
  564. // Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
  565. // All rights reserved.
  566. //
  567. // Redistribution and use in source and binary forms, with or without
  568. // modification, are permitted provided that the following conditions
  569. // are met:
  570. //
  571. // 1. Redistributions of source code must retain the above copyright
  572. // notice, this list of conditions and the following disclaimer.
  573. //
  574. // 2. Redistributions in binary form must reproduce the above
  575. // copyright
  576. // notice, this list of conditions and the following disclaimer
  577. // in the documentation and/or other materials provided with the
  578. // distribution.
  579. //
  580. // 3. The names of its contributors may not be used to endorse or
  581. // promote products derived from this software without specific
  582. // prior written permission.
  583. //
  584. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  585. // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  586. // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  587. // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  588. // COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  589. // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  590. // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  591. // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  592. // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  593. // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  594. // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  595. // POSSIBILITY OF SUCH DAMAGE.
  596. //
  597. // ============================= END =================================
  598. do {
  599. genrand_uint32_vector(state, u);
  600. u[0] >>= 5U;
  601. u[1] >>= 6U;
  602. b_u = 1.1102230246251565E-16 *
  603. (static_cast<double>(u[0]) * 6.7108864E+7 +
  604. static_cast<double>(u[1]));
  605. } while (b_u == 0.0);
  606. if (dv1[b_i] + b_u * (dv1[b_i - 1] - dv1[b_i]) <
  607. std::exp(-0.5 * b_r * b_r)) {
  608. exitg1 = 1;
  609. }
  610. } else {
  611. double b_u;
  612. double x;
  613. do {
  614. // ========================= COPYRIGHT NOTICE
  615. // ============================
  616. // This is a uniform (0,1) pseudorandom number generator based on:
  617. //
  618. // A C-program for MT19937, with initialization improved 2002/1/26.
  619. // Coded by Takuji Nishimura and Makoto Matsumoto.
  620. //
  621. // Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
  622. // All rights reserved.
  623. //
  624. // Redistribution and use in source and binary forms, with or without
  625. // modification, are permitted provided that the following conditions
  626. // are met:
  627. //
  628. // 1. Redistributions of source code must retain the above
  629. // copyright
  630. // notice, this list of conditions and the following disclaimer.
  631. //
  632. // 2. Redistributions in binary form must reproduce the above
  633. // copyright
  634. // notice, this list of conditions and the following disclaimer
  635. // in the documentation and/or other materials provided with the
  636. // distribution.
  637. //
  638. // 3. The names of its contributors may not be used to endorse or
  639. // promote products derived from this software without specific
  640. // prior written permission.
  641. //
  642. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
  643. // CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
  644. // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  645. // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  646. // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  647. // BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  648. // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
  649. // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  650. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  651. // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
  652. // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  653. // OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
  654. // OF SUCH DAMAGE.
  655. //
  656. // ============================= END
  657. // =================================
  658. do {
  659. genrand_uint32_vector(state, u);
  660. u[0] >>= 5U;
  661. u[1] >>= 6U;
  662. b_u = 1.1102230246251565E-16 *
  663. (static_cast<double>(u[0]) * 6.7108864E+7 +
  664. static_cast<double>(u[1]));
  665. } while (b_u == 0.0);
  666. x = std::log(b_u) * 0.273661237329758;
  667. // ========================= COPYRIGHT NOTICE
  668. // ============================
  669. // This is a uniform (0,1) pseudorandom number generator based on:
  670. //
  671. // A C-program for MT19937, with initialization improved 2002/1/26.
  672. // Coded by Takuji Nishimura and Makoto Matsumoto.
  673. //
  674. // Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
  675. // All rights reserved.
  676. //
  677. // Redistribution and use in source and binary forms, with or without
  678. // modification, are permitted provided that the following conditions
  679. // are met:
  680. //
  681. // 1. Redistributions of source code must retain the above
  682. // copyright
  683. // notice, this list of conditions and the following disclaimer.
  684. //
  685. // 2. Redistributions in binary form must reproduce the above
  686. // copyright
  687. // notice, this list of conditions and the following disclaimer
  688. // in the documentation and/or other materials provided with the
  689. // distribution.
  690. //
  691. // 3. The names of its contributors may not be used to endorse or
  692. // promote products derived from this software without specific
  693. // prior written permission.
  694. //
  695. // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
  696. // CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
  697. // INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  698. // MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  699. // DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
  700. // BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  701. // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
  702. // TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  703. // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
  704. // ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
  705. // TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  706. // OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
  707. // OF SUCH DAMAGE.
  708. //
  709. // ============================= END
  710. // =================================
  711. do {
  712. genrand_uint32_vector(state, u);
  713. u[0] >>= 5U;
  714. u[1] >>= 6U;
  715. b_u = 1.1102230246251565E-16 *
  716. (static_cast<double>(u[0]) * 6.7108864E+7 +
  717. static_cast<double>(u[1]));
  718. } while (b_u == 0.0);
  719. } while (!(-2.0 * std::log(b_u) > x * x));
  720. if (b_r < 0.0) {
  721. b_r = x - 3.65415288536101;
  722. } else {
  723. b_r = 3.65415288536101 - x;
  724. }
  725. exitg1 = 1;
  726. }
  727. } while (exitg1 == 0);
  728. r[k] = b_r;
  729. }
  730. }
  731. } // namespace coder
  732. //
  733. // File trailer for randn_7.cpp
  734. //
  735. // [EOF]
  736. //