Como posso calcular em média com segurança duas entradas não assinadas em C +

Usando a matemática inteira sozinha, gostaria de "com segurança" média de duas entradas não assinadas em C +

O que quero dizer com "segurança" é evitar estouros (e qualquer outra coisa que possa ser pensada

Por exemplo, calculando a média de 200 e 5000 é fácil

unsigned int a = 200;
unsigned int b = 5000;
unsigned int average = (a + b) / 2; // Equals: 2600 as intended

Mas no caso de 4294967295 e 5000 então

unsigned int a = 4294967295;
unsigned int b = 5000;
unsigned int average = (a + b) / 2; // Equals: 2499 instead of 2147486147

O melhor que eu vim é:

unsigned int a = 4294967295;
unsigned int b = 5000;
unsigned int average = (a / 2) + (b / 2); // Equals: 2147486147 as expected

Existem maneiras melhores?

questionAnswers(10)

yourAnswerToTheQuestion