@Override
    public double distributionFunction(final Integer value) {
        if (value < 0)
            return 0.0;
        else if (this._upperBound < value)
            return 1.0;
        else if (this._distributionFunction.containsKey(value))
            return this._distributionFunction.get(value);
        else {
            int start = this._distributionFunction.size() - 1;
            double d = this.density(0);
            if (start == -1) {
                start++;
                this._distributionFunction.put(start, d);
            }
            else
                d = this._distributionFunction.get(start);
            for (int i = start+1; i <= value; i++) {
                d += this.density(i);
                d = this._TruncateDistributionFunctionValue(d);
                this._distributionFunction.put(i, d);
            }
            return d;
        }
    }