void setup() 
{
  Serial.begin(115200);
  Serial.println( "=========");

  Serial.println( getJohnDiff( 100, 200));
  Serial.println( getJohnDiff( 200, 100));
  Serial.println( getJohnDiff( 0xFFFFFFF5, 0x09));
  Serial.println( getJohnDiff( 0x09, 0xFFFFFFF5));
  Serial.println( "---------");

  Serial.println( discardWrongOne( 100, 200));
  Serial.println( discardWrongOne( 200, 100));
  Serial.println( discardWrongOne( 0xFFFFFFF5, 0x09));
  Serial.println( discardWrongOne( 0x09, 0xFFFFFFF5));
  Serial.println( "---------");

  Serial.println( original( 100, 200));
  Serial.println( original( 200, 100));
  Serial.println( original( 0xFFFFFFF5, 0x09));
  Serial.println( original( 0x09, 0xFFFFFFF5));
  Serial.println( "---------");
}

void loop() { }

uint32_t getJohnDiff( uint32_t X, uint32_t Y )
{
  int32_t diff = X - Y;  // Signed difference
  if (diff < 0)          // If the result is negative
    diff = Y - X;        // Positive difference
  return diff;           // Convert back to unsigned
}

unsigned long discardWrongOne( unsigned long t1, unsigned long t2)
{
  unsigned long d1 = t2 - t1;
  unsigned long d2 = t1 - t2;
  unsigned long elapsedMillis = d1;
  if( d2 < d1)
    elapsedMillis = d2;
  return( elapsedMillis);
}

const uint32_t MAXDIFF     = 0xFFFFFFFF / 2 ;

uint32_t original( uint32_t X, uint32_t Y )
{   
  uint32_t Diff = X - Y;

  if( Diff > MAXDIFF )
  {
    Diff = Y - X ;
  }
  else
  {
    if( X < Y )
      Diff = Y - X ;
    if( Diff > MAXDIFF )
      Diff = X - Y ;
  }
  return( Diff );
}