public void computeNewValues() {
        	
            // This stuff is to ensure that new prices follow a random
            // but nondivergent path, centered around the reference price
            double limit = ref / 4.0;
            int jump = ref / 100;
            double relDist = (last - ref) / limit;
            int direction = 1;

            if (relDist < 0) {
                direction = -1;
                relDist = -relDist;
            }
            
            if (relDist > 1) {
                relDist = 1;
            }
            
            double weight = (relDist * relDist * relDist);
            double prob = (1 - weight) / 2;
            boolean goFarther = __random.nextDouble() < prob;
            
            if (!goFarther) {
                direction *= -1;
            }
            
            int difference = uniform(0, jump) * direction;
            int gap = ref / 250;
            int delta;
            
            if (gap > 0) {
                do {
                    delta = uniform(-gap, gap);
                } while (delta == 0);
            
            } else {
                delta = 1;
            }
            
            last += difference;
            other = last + delta;
            
            if (last < min) {
                min = last;
            }
            
            if (last > max) {
                max = last;
            }
        }