protected void AddInfinities(int missingInfinities, DoubleBuffer buffer)
        {
            RandomSamplingAssistant oldAssistant = this.samplingAssistant;

            this.samplingAssistant = null; // switch off sampler
                                           //double[] infinities = new double[missingInfinities];

            Boolean even = true;

            for (int i = 0; i < missingInfinities; i++)
            {
                if (even)
                {
                    buffer.Values.Add(Double.MaxValue);
                }
                else
                {
                    buffer.Values.Add(-Double.MaxValue);
                }

                //if (even) {infinities[i]=Double.MaxValue;}
                //else	  {infinities[i]=-Double.MaxValue;}

                //if (even) {this.Add(Double.MaxValue);}
                //else	  {this.Add(-Double.MaxValue);}
                even = !even;
            }

            //buffer.Values.addAllOfFromTo(new DoubleArrayList(infinities),0,missingInfinities-1);

            //this.totalElementsFilled -= infinities;

            this.samplingAssistant = oldAssistant; // switch on sampler again
        }
        public override void Clear()
        {
            base.Clear();
            this.beta = 1.0;
            this.weHadMoreThanOneEmptyBuffer = false;
            //this.setSamplingRate(samplingRate,N);

            RandomSamplingAssistant assist = this.samplingAssistant;

            if (assist != null)
            {
                this.samplingAssistant = new RandomSamplingAssistant((long)System.Math.Floor(N / samplingRate), N, assist.RandomGenerator);
            }
        }
        protected long N;              // see method sampleNextElement()
        #endregion

        #region Property

        #endregion

        #region Constructor
        /// <summary>
        ///
        /// </summary>
        /// <param name="b"></param>
        /// <param name="k"></param>
        /// <param name="N"></param>
        /// <param name="samplingRate"></param>
        /// <param name="generator"></param>
        public KnownDoubleQuantileEstimator(int b, int k, long N, double samplingRate, RandomEngine generator)
        {
            this.samplingRate = samplingRate;
            this.N            = N;

            if (this.samplingRate <= 1.0)
            {
                this.samplingAssistant = null;
            }
            else
            {
                this.samplingAssistant = new RandomSamplingAssistant((long)System.Math.Floor(N / samplingRate), N, generator);
            }

            SetUp(b, k);
            this.Clear();
        }