//-------------------------------------------------------------------------- Distribution LossDistMonteCarlo::operator()(const vector<Real>& nominals, const vector<Real>& probabilities) const { //-------------------------------------------------------------------------- Distribution dist (nBuckets_, 0.0, maximum_); // KnuthUniformRng rng(seed_); // LecuyerUniformRng rng; MersenneTwisterUniformRng rng; for (Size i = 0; i < simulations_; i++) { double e = 0; for (Size j = 0; j < nominals.size(); j++) { Real r = rng.next().value; if (r <= probabilities[j]) e += nominals[j]; } dist.add (e + epsilon_); } dist.normalize(); return dist; }