private TimeSpan FromDouble(double value, TimeSpanUnits units)
{
if (units == TimeSpanUnits.Nanoseconds)
{
return TimeSpan.FromTicks((long)(value / 100.0)); // divide first then cast to reduce chance of overflow
}
else
{
return TimeSpan.FromTicks((long)(value * TicksPerUnit(units))); // multiply first then cast to preserve fractional part of value
}
}