Pourquoi round () et ceil () ne renvoient-ils pas un entier?

De temps en temps, je me retrouve à arrondir des nombres et je dois toujours convertir le résultat en entier:

int rounded = (int) floor(value); 

Pourquoi toutes les fonctions d’arrondi ( ceil() , floor() ) renvoient un nombre flottant et non un entier? Je trouve cela assez peu intuitif et j’aimerais avoir des explications!

La valeur intégrale renvoyée par ces fonctions peut être trop grande pour être stockée dans un type entier (int, long, etc.). Pour éviter un débordement, qui produira des résultats indéfinis, une application doit effectuer un contrôle de distance sur la valeur renvoyée avant de l’affecter à un type entier.

à partir de la page de manuel Linux ceil (3).

C’est parce que la gamme de float est plus large que celle d ‘ int . Que penseriez-vous avoir si la valeur renvoyée par ces fonctions ne correspondait pas à un int ? Ce serait un comportement indéfini et vous ne pourriez pas vérifier cela dans votre programme.