anchor.diff:      Duration simulationDuration = duration;
       if (simulationDuration == null) {
         double range = upperBound - lowerBound;
  -      if (range.isFinite) {
  -        double remainingFraction = (target - _value).abs() / range;
  -        simulationDuration = this.duration * remainingFraction;
  -      }
  +      double remainingFraction = range.isFinite ? (target - _value).abs() / range : 1.0;
  +      simulationDuration = this.duration * remainingFraction;
       }
       stop();
       if (simulationDuration == Duration.ZERO) {
  
positive.code:     }
      assert(simulationDuration > Duration.ZERO);
      assert(!isAnimating);
      return _startSimulation(new _TweenSimulation(_value, target, simulationDuration, curve));
    }
  
    /// Starts running this animation in the forward direction, and
    /// restarts the animation when it completes.
    Future repeat({ double min: 0.0, double max: 1.0, Duration period }) {
      period ??= duration;
      return animateWith(new _RepeatingSimulation(min, max, period));
    }
  
negative.code:   }
  }
  
  class _InterpolationSimulation extends Simulation {
    _InterpolationSimulation(this._begin, this._end, Duration duration, this._curve)
      : _durationInSeconds = duration.inMicroseconds / Duration.MICROSECONDS_PER_SECOND {
      assert(_durationInSeconds > 0.0);
      assert(_begin != null);
  