private static DateTime AddInterval(DateTime val, DoubleR10 interval, DateTimeScaleUnit unit) { switch (unit) { case DateTimeScaleUnit.Years: return(val.AddYears((int)DoubleR10.Round(interval))); case DateTimeScaleUnit.Months: return(val.AddMonths((int)DoubleR10.Round(interval))); case DateTimeScaleUnit.Weeks: return(val.AddDays((double)((DoubleR10)7 * interval))); case DateTimeScaleUnit.Days: return(val.AddDays((double)interval)); case DateTimeScaleUnit.Hours: return(val.AddHours((double)interval)); case DateTimeScaleUnit.Minutes: return(val.AddMinutes((double)interval)); case DateTimeScaleUnit.Seconds: return(val.AddSeconds((double)interval)); case DateTimeScaleUnit.Milliseconds: return(val.AddMilliseconds((double)interval)); default: throw new NotImplementedException(); } }
internal void ShrinkByStep(NumericRangeInfo range, DoubleR10 step, bool useZeroRefPoint) { if (this.Minimum == 0 && this.Maximum == 0) this.Maximum = (DoubleR10)1; else if (this.Minimum < 0 && this.Maximum <= 0) { this.Maximum = this.Maximum.DecrementByStep(range.Maximum, step); this.Minimum = this.Maximum.DecrementByStep(range.Minimum, step); if (!(this.Minimum == this.Maximum)) return; this.Minimum = this.Minimum - step; } else if (this.Minimum >= 0 && this.Maximum > 0 || !useZeroRefPoint) { this.Minimum = this.Minimum.IncrementByStep(range.Minimum, step); this.Maximum = this.Minimum.IncrementByStep(range.Maximum, step); if (!(this.Minimum == this.Maximum)) return; this.Maximum = this.Maximum + step; } else { this.Minimum = (DoubleR10)0; this.Maximum = (DoubleR10)0; this.Minimum = this.Minimum.DecrementByStep(range.Minimum, step); if (this.Minimum == this.Maximum) this.Minimum = this.Minimum - step; this.Maximum = this.Maximum.IncrementByStep(range.Maximum, step); if (!(this.Minimum == this.Maximum)) return; this.Maximum = this.Maximum + step; } }
private void FixDirection() { if (!(this.Minimum > this.Maximum)) return; DoubleR10 doubleR10 = this.Minimum; this.Minimum = this.Maximum; this.Maximum = doubleR10; }
private void Load() { this.Sequence = (IList <DoubleR10>) new List <DoubleR10>(); this.Minimum = this._baseSequence.Minimum; this.Maximum = this._baseSequence.Maximum; if (this.Interval < 1) { DoubleR10 doubleR10_1 = DoubleR10.NaN; foreach (DoubleR10 doubleR10_2 in this._baseSequence) { if (doubleR10_1 != DoubleR10.NaN) { DoubleR10 doubleR10_3 = doubleR10_1 + this.IntervalOffset; DoubleR10 doubleR10_4 = doubleR10_2; DoubleR10 x2 = (doubleR10_4 - doubleR10_3) * this.Interval; if (x2 != 0) { for (DoubleR10 doubleR10_5 = doubleR10_3; doubleR10_5 <= doubleR10_4; doubleR10_5 = doubleR10_5.Add(ref x2)) { if (this.Sequence.Count == 0 || doubleR10_5 != doubleR10_1) { this.Sequence.Add(doubleR10_5); } } } } doubleR10_1 = doubleR10_2; } } else { DoubleR10 interval = this.Interval; for (DoubleR10 doubleR10_1 = this.IntervalOffset; doubleR10_1 <= this._baseSequence.Count - 1; doubleR10_1 = doubleR10_1.Add(ref interval)) { int index = (int)DoubleR10.Floor(doubleR10_1, 0); if (index < this._baseSequence.Count - 1) { DoubleR10 doubleR10_2 = this._baseSequence[index]; DoubleR10 doubleR10_3 = this._baseSequence[index + 1]; DoubleR10 doubleR10_4 = doubleR10_3 - doubleR10_2; if (doubleR10_4 == 0) { this.Sequence.Add(doubleR10_3); } else { this.Sequence.Add(doubleR10_2 + (doubleR10_1 - (DoubleR10)index) * doubleR10_4); } } else { this.Sequence.Add(this._baseSequence[this._baseSequence.Count - 1]); } } } }
public NumericRangeInfo(DoubleR10 minimum, DoubleR10 maximum) { this.HasDataRange = false; this.HasMin = true; this.HasMax = true; this.Minimum = minimum; this.Maximum = maximum; this.ForsedSingleStop = new DoubleR10?(); this.FixDirection(); }
public NumericRangeInfo(DoubleR10 minimum, DoubleR10 maximum) { this.HasDataRange = false; this.HasMin = true; this.HasMax = true; this.Minimum = minimum; this.Maximum = maximum; this.ForsedSingleStop = new DoubleR10?(); this.FixDirection(); }
private void IncludeZero() { if (this.HasMin && this.Minimum > 0 || this.HasMax && this.Maximum < 0) return; if (this.Minimum > 0) this.Minimum = (DoubleR10)0; if (!(this.Maximum < 0)) return; this.Maximum = (DoubleR10)0; }
private void FixEmptySingleDataValue() { DoubleR10 doubleR10_1 = this.Maximum; doubleR10_1.Normalize(); int num = 0; if (doubleR10_1.E >= 0 && doubleR10_1.Log10() < 4) { this.ForsedSingleStop = new DoubleR10?(doubleR10_1); num = 3; } DoubleR10 doubleR10_2 = DoubleR10.Pow10(Math.Max(doubleR10_1.E, doubleR10_1.Log10() - num)) / (DoubleR10)2; this.Minimum = doubleR10_1 + doubleR10_2; this.Maximum = doubleR10_1 - doubleR10_2; }
public static DateTimeSequence CalculateCenturies(Range <DateTime> range, int?interval, int?intervalOffset, int maxCount) { NumericRangeInfo range1 = new NumericRangeInfo((DoubleR10)range.Minimum.Year, (DoubleR10)range.Maximum.Year); int? nullable1 = interval; double?interval1 = nullable1.HasValue ? new double?((double)nullable1.GetValueOrDefault()) : new double?(); int? nullable2 = intervalOffset; double?intervalOffset1 = nullable2.HasValue ? new double?((double)nullable2.GetValueOrDefault()) : new double?(); int maxCount1 = maxCount; int minPower = 2; DoubleR10[] steps = new DoubleR10[3] { (DoubleR10)1, (DoubleR10)2, (DoubleR10)5 }; int num = 1; double maxAllowedMargin = 1.0; NumericSequence numericSequence = NumericSequence.Calculate(range1, interval1, intervalOffset1, maxCount1, minPower, steps, num != 0, maxAllowedMargin); DateTimeSequence dateTimeSequence = new DateTimeSequence(DateTimeScaleUnit.Years); try { foreach (DoubleR10 doubleR10 in numericSequence) { int year = (int)doubleR10; if (year > 0) { dateTimeSequence.Add(new DateTime(year, 1, 1)); } } } catch (ArgumentOutOfRangeException ex) { } dateTimeSequence.Interval = numericSequence.Interval; dateTimeSequence.IntervalOffset = numericSequence.IntervalOffset; return(dateTimeSequence); }
public override void ExtendToCover(DoubleR10 min, DoubleR10 max) { this._baseSequence.ExtendToCover(min, max); this.Load(); }
private void IncludeZero() { if (this.HasMin && this.Minimum > 0 || this.HasMax && this.Maximum < 0) return; if (this.Minimum > 0) this.Minimum = (DoubleR10)0; if (!(this.Maximum < 0)) return; this.Maximum = (DoubleR10)0; }
public DateTimeSequence(DateTimeScaleUnit unit) { this._unit = unit; this._interval = (DoubleR10)1; }
private void FixIfEmpty(double? interval, bool includeZero) { if (this.Minimum == this.Maximum) { if (this.HasMin && this.HasMax) { if (interval.HasValue) { this.Maximum = this.Minimum + interval.Value; } else if (this.Maximum < 0) { this.Maximum = 0; } else if (this.Minimum > 0) { this.Minimum = 0; } else { this.Maximum = 10.0; } } else if (this.HasMin) { if (interval.HasValue) { this.Maximum = this.Minimum + interval.Value; } else if (this.Minimum > 0) { this.Maximum = this.Minimum * 2; } else if (this.Minimum < 0) { this.Maximum = 0; } else { this.Maximum = 10.0; } } else if (this.HasMax) { if (interval.HasValue) { this.Minimum = this.Maximum - interval.Value; } else if (this.Maximum > 0) { this.Minimum = 0; } else if (this.Maximum < 0) { this.Minimum = this.Maximum * 2; } else { this.Minimum = -10.0; } } else if (this.HasDataRange) { if (interval.HasValue) { this.Maximum = this.Minimum + interval.Value; } else if (this.Maximum < 0) { if (includeZero || this.Maximum.IsSpecial()) { this.Maximum = 0; } else { this.FixEmptySingleDataValue(); } } else if (this.Minimum > 0) { if (includeZero || this.Minimum.IsSpecial()) { this.Minimum = 0; } else { this.FixEmptySingleDataValue(); } } else { this.Minimum = 0; this.Maximum = 10.0; this.HasDataRange = false; } } else { this.Minimum = 0; if (interval.HasValue) { this.Maximum = interval.Value; } else { this.Maximum = 10.0; } } } }
private void FixIfEmpty(double? interval, bool includeZero) { if (this.Minimum == this.Maximum) { if (this.HasMin && this.HasMax) { if (interval.HasValue) { this.Maximum = this.Minimum + interval.Value; } else if (this.Maximum < 0) { this.Maximum = 0; } else if (this.Minimum > 0) { this.Minimum = 0; } else { this.Maximum = 10.0; } } else if (this.HasMin) { if (interval.HasValue) { this.Maximum = this.Minimum + interval.Value; } else if (this.Minimum > 0) { this.Maximum = this.Minimum * 2; } else if (this.Minimum < 0) { this.Maximum = 0; } else { this.Maximum = 10.0; } } else if (this.HasMax) { if (interval.HasValue) { this.Minimum = this.Maximum - interval.Value; } else if (this.Maximum > 0) { this.Minimum = 0; } else if (this.Maximum < 0) { this.Minimum = this.Maximum * 2; } else { this.Minimum = -10.0; } } else if (this.HasDataRange) { if (interval.HasValue) { this.Maximum = this.Minimum + interval.Value; } else if (this.Maximum < 0) { if (includeZero || this.Maximum.IsSpecial()) { this.Maximum = 0; } else { this.FixEmptySingleDataValue(); } } else if (this.Minimum > 0) { if (includeZero || this.Minimum.IsSpecial()) { this.Minimum = 0; } else { this.FixEmptySingleDataValue(); } } else { this.Minimum = 0; this.Maximum = 10.0; this.HasDataRange = false; } } else { this.Minimum = 0; if (interval.HasValue) { this.Maximum = interval.Value; } else { this.Maximum = 10.0; } } } }
private void FixEmptySingleDataValue() { DoubleR10 doubleR10_1 = this.Maximum; doubleR10_1.Normalize(); int num = 0; if (doubleR10_1.E >= 0 && doubleR10_1.Log10() < 4) { this.ForsedSingleStop = new DoubleR10?(doubleR10_1); num = 3; } DoubleR10 doubleR10_2 = DoubleR10.Pow10(Math.Max(doubleR10_1.E, doubleR10_1.Log10() - num)) / (DoubleR10)2; this.Minimum = doubleR10_1 + doubleR10_2; this.Maximum = doubleR10_1 - doubleR10_2; }
private void FixDirection() { if (!(this.Minimum > this.Maximum)) return; DoubleR10 doubleR10 = this.Minimum; this.Minimum = this.Maximum; this.Maximum = doubleR10; }
internal void ShrinkByStepQuick(NumericRangeInfo range, DoubleR10 step) { this.Minimum = this.Minimum.IncrementByStep(range.Minimum, step); this.Maximum = this.Maximum.DecrementByStep(range.Maximum, step); }
internal void ShrinkByStep(NumericRangeInfo range, DoubleR10 step, bool useZeroRefPoint) { if (this.Minimum == 0 && this.Maximum == 0) this.Maximum = (DoubleR10)1; else if (this.Minimum < 0 && this.Maximum <= 0) { this.Maximum = this.Maximum.DecrementByStep(range.Maximum, step); this.Minimum = this.Maximum.DecrementByStep(range.Minimum, step); if (!(this.Minimum == this.Maximum)) return; this.Minimum = this.Minimum - step; } else if (this.Minimum >= 0 && this.Maximum > 0 || !useZeroRefPoint) { this.Minimum = this.Minimum.IncrementByStep(range.Minimum, step); this.Maximum = this.Minimum.IncrementByStep(range.Maximum, step); if (!(this.Minimum == this.Maximum)) return; this.Maximum = this.Maximum + step; } else { this.Minimum = (DoubleR10)0; this.Maximum = (DoubleR10)0; this.Minimum = this.Minimum.DecrementByStep(range.Minimum, step); if (this.Minimum == this.Maximum) this.Minimum = this.Minimum - step; this.Maximum = this.Maximum.IncrementByStep(range.Maximum, step); if (!(this.Minimum == this.Maximum)) return; this.Maximum = this.Maximum + step; } }
internal void ShrinkByStepQuick(NumericRangeInfo range, DoubleR10 step) { this.Minimum = this.Minimum.IncrementByStep(range.Minimum, step); this.Maximum = this.Maximum.DecrementByStep(range.Maximum, step); }