예제 #1
0
        public double GetGaussianShiftedDouble(double initialValue, double meanOffset, double unitsPerSigma, OffsetConstraints constraintPassed)
        {
            double probability = GaussianProbability(12);

            switch (constraintPassed)
            {
                case OffsetConstraints.None:
                    // Doesn't do anything
                    break;
                case OffsetConstraints.NegativeOnly:
                    if (probability > 0.0)
                    {
                        probability *= -1;
                    }
                    break;
                case OffsetConstraints.PositiveOnly:
                    if (probability < 0.0)
                    {
                        probability *= -1;
                    }
                    break;
                default:
                    // Report Error Here
                    break;
            }

            double offsetResult = initialValue + meanOffset + (probability * unitsPerSigma);

            return offsetResult;
        }
예제 #2
0
        public DateTime GetGaussianShiftedDateTime(DateTime initialValue, double meanOffset, double unitsPerSigma, TimeUnits unitsPassed, OffsetConstraints constraintsPassed)
        {
            DateTime offsetValue = initialValue;
            TimeSpan offsetSpan = new TimeSpan();

            double probability = GaussianProbability(12);

            switch (constraintsPassed)
            {
                case OffsetConstraints.None:
                    // This does nothing.
                    break;
                case OffsetConstraints.NegativeOnly:
                    if (probability > 0.0)
                    {
                        probability *= -1;
                    }
                    break;
                case OffsetConstraints.PositiveOnly:
                    if (probability < 0.0)
                    {
                        probability *= -1;
                    }
                    break;
                default:
                    // Report error here
                    break;
            }

            double offsetAmount = meanOffset + (probability * unitsPerSigma);
            bool negativeOffset = offsetAmount < 0.0;
            offsetAmount = Math.Abs(offsetAmount);

            offsetSpan = ConvertDoubleToTimeSpan(offsetAmount, unitsPassed);

            if (negativeOffset)
            {
                offsetValue = initialValue - offsetSpan;
            }
            else
            {
                offsetValue = initialValue + offsetSpan;
            }

            return offsetValue;
        }