Cześć,
Bardzo zaskoczył mnie wynik działania poniższych komend:
dla ile = 100000 jest błąd, ale dla ile = 50000 średnia liczona jest poprawnie.
Wiecie może dlaczego tak się dzieje ?
#include<iostream>
#include<math.h>
#include<cstdlib>
#include<ctime>
using namespace std;
const double PI = 3.14159265358979323846;
double losuj();
int main(){
srand(time(NULL));
double s = 0;
int ile = 100000;
for(int i = 0; i < ile; i++)
s += losuj();
cout << s/ile << endl;
system("PAUSE");
}
double losuj(){
double u1 = (double)rand()/RAND_MAX;
double u2 = (double)rand()/RAND_MAX;
return sqrt(-2*log(u1))*cos(u2*2*PI);
}
double f(double x, double y, double r, double dt, double sigma){
double tmp = ( log(y/x) - ( r-0.5*pow(sigma,2) )*dt ) / sigma / sqrt(dt) ;
return exp( -pow(tmp,2)/2 ) / sqrt(2*PI) / sigma / y / sqrt(dt);
}