/// <summary>
        /// The next.
        /// </summary>
        /// <param name="criterion">
        /// The criterion.
        /// </param>
        /// <returns>
        /// The <see cref="double"/>.
        /// </returns>
        public override double Next(Criterion.Criterion criterion)
        {
            if (rightBound - leftBound > Precision)
            {
                double criterionDistortion = criterion.Distortion();
                if (lastDistortion > criterionDistortion)
                {
                    Value = current;
                    lastDistortion = criterionDistortion;
                }

                current = (rightBound + leftBound) / 2.0;

                if (criterionDistortion < 0)
                {
                    leftBound = current;
                }
                else
                {
                    rightBound = current;
                }

                return current;
            }

            return -1;
        }