59 votes

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

De temps en temps, je me retrouve à arrondir certains chiffres et je dois toujours convertir le résultat en un nombre entier :

int rounded = (int) floor(value);

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

67voto

Sean A.O. Harney Points 8033

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 produirait des résultats non définis, une application devrait effectuer un contrôle de plage sur la valeur retournée avant de l'affecter à un type entier.

de la page du manuel Linux ceil(3).

28voto

sharptooth Points 93379

C'est parce que float L'éventail de l'utilisateur est plus large que int 's. Qu'attendez-vous à avoir si la valeur renvoyée par ces fonctions ne rentre pas dans un int ? Ce serait un comportement non défini et vous ne pourriez pas le vérifier dans votre programme.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X