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; }
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; }