Com base na lógica / código brilhante de mathematix e scottyc, eu envio:
DECLARE @a INT, @b INT, @c INT = 0
WHILE @c < 100
BEGIN
SET @c += 1
SET @a = ROUND(RAND()*100,0)-50
SET @b = ROUND(RAND()*100,0)-50
SELECT @a AS a, @b AS b,
@a - ( ABS(@a-@b) + (@a-@b) ) / 2 AS MINab,
@a + ( ABS(@b-@a) + (@b-@a) ) / 2 AS MAXab,
CASE WHEN (@a <= @b AND @a = @a - ( ABS(@a-@b) + (@a-@b) ) / 2)
OR (@a >= @b AND @a = @a + ( ABS(@b-@a) + (@b-@a) ) / 2)
THEN 'Success' ELSE 'Failure' END AS Status
END
Embora o salto da função MIN do scottyc para a função MAX deva ter sido óbvio para mim, não foi, então resolvi fazer isso e o incluí aqui: SELECT @a + (ABS (@ b- @ a) + ( @ b- @ a)) / 2. Os números gerados aleatoriamente, embora não sejam prova, devem pelo menos convencer os céticos de que ambas as fórmulas estão corretas.