numbersBetween function

int numbersBetween (double a, double b)

Evaluates the count of numbers between two double numbers

The second number is included in the number, thus two equal numbers evaluate to zero and two neighbor numbers evaluate to one. Therefore, what is returned is actually the count of numbers between plus 1. Throws ArgumentError if a is double.infinity or double.negativeInfinity. Throws ArgumentError if a is double.nan. Throws ArgumentError if b is double.infinity or double.negativeInfinity. Throws ArgumentError if b is double.nan.

Implementation

int numbersBetween(double a, double b) {
  if (a.isNaN || a.isInfinite) {
    throw ArgumentError.value(a, 'a', 'Value can\'t be NaN or infinity');
  }

  if (b.isNaN || b.isInfinite) {
    throw ArgumentError.value(b, 'b', 'Value can\'t be NaN or infinity');
  }

  // Calculate the ulps for the maximum and minimum values
  // Note that these can overflow
  int intA = asDirectionalInt64(a);
  int intB = asDirectionalInt64(b);

  // Now find the number of values between the two doubles. This should not overflow
  // given that there are more long values than there are double values
  return (a >= b) ? (intA - intB) : (intB - intA);
}