code: public static Stream<BigDecimal> range(BigDecimal startInclusive, BigDecimal endExclusive, BigDecimal step, MathContext mathContext) {
      	if (step.signum() == 0) {
      		throw new IllegalArgumentException("invalid step: 0");
      	}
  		if (endExclusive.subtract(startInclusive).signum() != step.signum()) {
  			return Stream.empty();
  		}
      	return StreamSupport.stream(new BigDecimalSpliterator(startInclusive, endExclusive, false, step, mathContext), false);
      }
docs: Returns a sequential ordered {@code Stream<BigDecimal>} from {@code startInclusive}
  (inclusive) to {@code endExclusive} (exclusive) by an incremental {@code step}.
  
  <p>An equivalent sequence of increasing values can be produced
  sequentially using a {@code for} loop as follows:
  <pre>for (BigDecimal i = startInclusive; i.compareTo(endExclusive) &lt; 0; i = i.add(step, mathContext)) {
  ...
  }</pre>
  
  @param startInclusive the (inclusive) initial value
  @param endExclusive the exclusive upper bound
  @param step the step between elements
  @param mathContext the {@link MathContext} used for all mathematical operations
  @return a sequential {@code Stream<BigDecimal>}