web-dev-qa-db-fra.com

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

De temps en temps, je me retrouve à arrondir certains 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 quelques explications!

59
Wookai

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 non définis, une application doit effectuer une vérification de plage sur la valeur renvoyée avant de l'affecter à un type entier.

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

66
Sean A.O. Harney

C'est parce que la plage de float est plus large que celle de int. À quoi vous attendriez-vous si la valeur renvoyée par ces fonctions ne rentre pas dans un int? Ce serait un comportement indéfini et vous ne pourriez pas le vérifier dans votre programme.

28
sharptooth