View | Details | Raw Unified | Return to bug 181
Collapse All | Expand All

(-)a/src/core/random-variable.cc (-2 / +11 lines)
 Lines 1044-1053   double NormalVariableImpl::GetValue() Link Here 
1044
        { // Got good pair
1044
        { // Got good pair
1045
          double y = sqrt((-2 * log(w))/w);
1045
          double y = sqrt((-2 * log(w))/w);
1046
          m_next = m_mean + v2 * y * sqrt(m_variance);
1046
          m_next = m_mean + v2 * y * sqrt(m_variance);
1047
          if (fabs(m_next) > m_bound) m_next = m_bound * (m_next)/fabs(m_next);
1047
          if (fabs(m_next-m_mean) > m_bound) m_next = 
1048
                m_mean + m_bound * (m_next-m_mean)/fabs(m_next-m_mean);
1048
          m_nextValid = true;
1049
          m_nextValid = true;
1049
          double x1 = m_mean + v1 * y * sqrt(m_variance);
1050
          double x1 = m_mean + v1 * y * sqrt(m_variance);
1050
          if (fabs(x1) > m_bound) x1 = m_bound * (x1)/fabs(x1);
1051
          if (fabs(x1-m_mean) > m_bound) x1 = m_mean + m_bound * (x1-m_mean)/fabs(x1-m_mean);
1051
          return x1;
1052
          return x1;
1052
        }
1053
        }
1053
    }
1054
    }
 Lines 1095-1103   NormalVariable::NormalVariable() Link Here 
1095
NormalVariable::NormalVariable()
1096
NormalVariable::NormalVariable()
1096
  : RandomVariable (NormalVariableImpl ())
1097
  : RandomVariable (NormalVariableImpl ())
1097
{}
1098
{}
1099
NormalVariable::NormalVariable(double m, double v)
1100
  : RandomVariable (NormalVariableImpl (m, v))
1101
{}
1098
NormalVariable::NormalVariable(double m, double v, double b)
1102
NormalVariable::NormalVariable(double m, double v, double b)
1099
  : RandomVariable (NormalVariableImpl (m, v, b))
1103
  : RandomVariable (NormalVariableImpl (m, v, b))
1100
{}
1104
{}
1105
double 
1106
NormalVariable::GetSingleValue(double m, double v)
1107
{
1108
  return NormalVariableImpl::GetSingleValue (m, v);
1109
}
1101
double 
1110
double 
1102
NormalVariable::GetSingleValue(double m, double v, double b)
1111
NormalVariable::GetSingleValue(double m, double v, double b)
1103
{
1112
{
(-)a/src/core/random-variable.h (-5 / +21 lines)
 Lines 490-496   class NormalVariable : public RandomVari Link Here 
490
class NormalVariable : public RandomVariable
490
class NormalVariable : public RandomVariable
491
{
491
{
492
public:
492
public:
493
   static const double INFINITE_VALUE;
494
  /**
493
  /**
495
   * Constructs an normal random variable  with a mean
494
   * Constructs an normal random variable  with a mean
496
   * value of 0 and variance of 1.
495
   * value of 0 and variance of 1.
 Lines 498-516   public: Link Here 
498
  NormalVariable();
497
  NormalVariable();
499
498
500
  /**
499
  /**
500
   * \brief Construct a normal random variable with specified mean and variance.
501
   * \param m Mean value
502
   * \param v Variance
503
   */ 
504
  NormalVariable(double m, double v);
505
506
  /**
501
   * \brief Construct a normal random variable with specified mean and variance
507
   * \brief Construct a normal random variable with specified mean and variance
502
   * \param m Mean value
508
   * \param m Mean value
503
   * \param v Variance
509
   * \param v Variance
504
   * \param b Bound.  The NormalVariable is bounded within +-bound.
510
   * \param b Bound.  The NormalVariable is bounded symetrically about the mean
511
   * [mean-bound,mean+bound]
505
   */ 
512
   */ 
506
  NormalVariable(double m, double v, double b = INFINITE_VALUE);
513
  NormalVariable(double m, double v, double b);
514
507
  /**
515
  /**
508
   * \param m Mean value
516
   * \param m Mean value
509
   * \param v Variance
517
   * \param v Variance
510
   * \param b Bound.  The NormalVariable is bounded within +-bound.
518
   * \return A random number from a distribution specified by m, and v.
519
   */ 
520
  static double GetSingleValue(double m, double v);
521
522
  /**
523
   * \param m Mean value
524
   * \param v Variance
525
   * \param b Bound.  The NormalVariable is bounded symetrically about the mean
526
   * [mean-bound,mean+bound]
511
   * \return A random number from a distribution specified by m,v, and b.
527
   * \return A random number from a distribution specified by m,v, and b.
512
   */ 
528
   */ 
513
  static double GetSingleValue(double m, double v, double b = INFINITE_VALUE);
529
  static double GetSingleValue(double m, double v, double b);
514
};
530
};
515
531
516
/**
532
/**

Return to bug 181