1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| // VarAleaGauss.cpp*: définit les fonctions exportées pour l'application DLL.
//
#include "stdafx.h"
#include <windows.h>
#include <tchar.h>
#include <iostream> // std::cout
#include <string> // std::string
#include <fstream>
#include <sstream>
#include <cstdlib>
#include <iomanip>
#include <stdlib.h>
#include <ctime>
#include <cmath>
#include <limits>
#include <stdio.h>
#include <conio.h>
#include <vector>
using namespace std;
double randomUniform (double _iMin,double _iMax)
{
// return (_iMin + (rand () % (_iMax-_iMin+1)));
return ((_iMax-_iMin)*(rand()/(double)RAND_MAX)+_iMin);
}
// *************************************
void boxMuller(double &px1,double &px2, double _moyenne, double _sigma)
{
double U1=randomUniform(0,1);
double U2=randomUniform(0,1);
const double g_Pi = 3.14159265358979323846;
px1 = sqrt(-2 * log(U2)) * cos(2 * g_Pi * U1) * _sigma + _moyenne;
px2 = sqrt(-2 * log(U2)) * sin(2 * g_Pi * U1) * _sigma + _moyenne;
// cout << "---> x1 :" << *px1 << " x2 :" << *px2 << endl ;
}
extern "C" __declspec(dllexport) double *VarAleaGaussTirage(double moyenne, double sigma)
{
int const taille = 2 ;
double data[taille];
double px1, px2;
srand(time(NULL));
boxMuller(px1,px2,moyenne,sigma) ;
data[1] = px1;
data[2] = px2;
return data;
} |
Partager