public void add(double value) {
			totalCount++;

			compCount++;
			if (value < start) {
				others++;
				return;
			} else if (value > end) {
				compCount++;
				others++;
				return;
			}
			compCount++;

			latestInRange = value;

			//	binary search
			
			int low = 0;
			int high = rangeCount - 1;

			compCount++;
			while (low <= high) {
//				opCount++;
				int mid = (high + low) >>> 1;
				compCount++;
				if (value <= ranges[mid]) {
					compCount += 2;
					if (mid > 0 && value < ranges[mid - 1]) {
						//	continue search
						high = mid - 1;
					} else {
						//	we've found the range: ranges[mid]
						counts[mid]++;
						return;
					}
				} else if (value > ranges[mid]) {
					compCount++;
					low = mid + 1;
				} else {
					compCount++;
				}
			}
		}