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

(-)a/src/core/random-variable.cc (-4 / +22 lines)
 Lines 1043-1053   double NormalVariableImpl::GetValue() Link Here 
1043
        { // Got good pair
1043
        { // Got good pair
1044
          double y = sqrt((-2 * log(w))/w);
1044
          double y = sqrt((-2 * log(w))/w);
1045
          m_next = m_mean + v2 * y * sqrt(m_variance);
1045
          m_next = m_mean + v2 * y * sqrt(m_variance);
1046
          if (fabs(m_next) > m_bound) m_next = m_bound * (m_next)/fabs(m_next);
1046
          //if next is in bounds, it is valid
1047
          m_nextValid = true;
1047
          m_nextValid = fabs(m_next-m_mean) <= m_bound;
1048
          double x1 = m_mean + v1 * y * sqrt(m_variance);
1048
          double x1 = m_mean + v1 * y * sqrt(m_variance);
1049
          if (fabs(x1) > m_bound) x1 = m_bound * (x1)/fabs(x1);
1049
          //if x1 is in bounds, return it
1050
          return x1;
1050
          if (fabs(x1-m_mean) <= m_bound)
1051
          {
1052
            return x1;
1053
          }
1054
          //otherwise try and return m_next if it is valid
1055
          else if (m_nextValid)
1056
          {
1057
            m_nextValid = false;
1058
            return m_next;
1059
          }
1060
          //otherwise, just run this loop again
1051
        }
1061
        }
1052
    }
1062
    }
1053
}
1063
}
 Lines 1094-1102   NormalVariable::NormalVariable() Link Here 
1094
NormalVariable::NormalVariable()
1104
NormalVariable::NormalVariable()
1095
  : RandomVariable (NormalVariableImpl ())
1105
  : RandomVariable (NormalVariableImpl ())
1096
{}
1106
{}
1107
NormalVariable::NormalVariable(double m, double v)
1108
  : RandomVariable (NormalVariableImpl (m, v))
1109
{}
1097
NormalVariable::NormalVariable(double m, double v, double b)
1110
NormalVariable::NormalVariable(double m, double v, double b)
1098
  : RandomVariable (NormalVariableImpl (m, v, b))
1111
  : RandomVariable (NormalVariableImpl (m, v, b))
1099
{}
1112
{}
1113
double 
1114
NormalVariable::GetSingleValue(double m, double v)
1115
{
1116
  return NormalVariableImpl::GetSingleValue (m, v);
1117
}
1100
double 
1118
double 
1101
NormalVariable::GetSingleValue(double m, double v, double b)
1119
NormalVariable::GetSingleValue(double m, double v, double b)
1102
{
1120
{
(-)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