À l'aide de math entier à lui seul, que je voudrais en "toute sécurité" moyenne deux entiers non signés en C++.
Ce que je veux dire par "en toute sécurité" est d'éviter les débordements (et tout ce qui peut être pensé).
Par exemple, le calcul de la moyenne 200 et 5000 est facile:
unsigned int a = 200; unsigned int b = 5000; unsigned int moyenne = (a + b) / 2; // Équivaut à: 2600 comme prévu
Mais dans le cas de 4294967295 et 5000 alors:
unsigned int a = 4294967295; unsigned int b = 5000; unsigned int moyenne = (a + b) / 2; // Équivaut à: 2499 au lieu de 2147486147
Le meilleur que j'ai trouvé est:
unsigned int a = 4294967295; unsigned int b = 5000; unsigned int moyenne = (a / 2) + (b / 2); // Équivaut à: 2147486147 comme prévu
Sont t-il de meilleures façons de faire?