// Initialise with U[a1,b1] and U[a2, b2] SumOfUniforms::SumOfUniforms(double a1, double b1, double a2, double b2) { this->a1 = a1; this->b1 = b1; this->a2 = a2; this->b2 = b2; range1 = b1 - a1; range2 = b2 - a2; a12 = a1 + a2; b12 = b1 + b2; c1 = (a12 * a12) / (2 * range1 * range2); c3 = -(b12 * b12) / (2 * range1 * range2) + 1; if (range1 <= 0 || range2 <= 0) throw InvalidParametersException("Invalid ranges in sum of uniforms"); if (a1 + b2 < a2 + b1) { case_flag = 0; c2 = (((a1 + b2) * (a1 + b2) - 2 * a12 * (a1 + b2)) / (2 * range1 * range2)) + c1 - (a1 + b2) / range1; } if (a1 + b2 > a2 + b1) { case_flag = 1; c2 = (((a2 + b1) * (a2 + b1) - 2 * a12 * (a2 + b1)) / (2 * range1 * range2)) + c1 - (a2 + b1) / range2; } else if (a1 + b2 == a2 + b1) case_flag = 2; }
Exponential::Exponential(double lambda) { if (lambda <= 0) { std::stringstream lambda_s; lambda_s << lambda; std::string message = "lambda = "; message.append(lambda_s.str()); message.append(" : lambda <= 0 in a Exponential"); throw InvalidParametersException(message); } this->lambda = lambda; }
Uniform::Uniform(double alpha, double beta) { if (alpha >= beta) { std::stringstream alpha_s; std::stringstream beta_s; alpha_s << alpha; beta_s << beta; std::string message = "alpha = "; message.append(alpha_s.str()); message.append(", beta = "); message.append(beta_s.str()); message.append(" : alpha >= beta in a Uniform"); throw InvalidParametersException(message); } this->alpha = alpha; this->beta = beta; }
Gaussian::Gaussian(double mean, double variance) { if (variance <= 0) { std::stringstream var_s; var_s << variance; std::string message = "variance = "; message.append(var_s.str()); message.append(" : variance <= 0 in a Gaussian"); throw InvalidParametersException(message); } this->mean = mean; this->variance = variance; cache_varX2 = variance * 2; cache_one_over_sqrt_var2PI = 1 / sqrt(PI * cache_varX2); cache_leftMargin = mean - 4 * sqrt(variance); cache_rightMargin = mean + 4 * sqrt(variance); }
LambdaTransformation::LambdaTransformation(const parameter::Value& value) : Transformation(LambdaTransformationType::getInstance(), parameter::emptyValue) { assert_fail() << "Lambda Transformations can not be instantiated using parameters!"; throw InvalidParametersException("Parameter-based instantiation not supported by lambda transformation!"); };