Pourquoi round() et ceil() de ne pas renvoyer un nombre entier?
De temps en temps, je me retrouve à l'arrondissement des chiffres, et j'ai toujours de la fonte le résultat à un nombre entier:
int rounded = (int) floor(value);
Pourquoi toutes les fonctions d'arrondi (ceil()
, floor()
) de retour d'un nombre flottant, et non d'un nombre entier? Je trouve cela assez intuitif, et aimerais avoir quelques explications!
- Vous pouvez utiliser vos compétences de recherche et de trouver ce stackoverflow.com/questions/605533/... OU Ce peut être utile aussi bien gnu.org/s/libc/manual/html_node/Rounding-Functions.html
- Bonne question - je n'avais jamais pensé à demander que
- Ce double a réussi à acquérir une réponse qui est (à mon humble avis) mieux: stackoverflow.com/questions/15348180/...
Vous devez vous connecter pour publier un commentaire.
L'intégrale de la valeur retournée par ces fonctions peut être trop grande pour stocker dans un type entier (int, long, etc.). Pour éviter un débordement, qui va produire des résultats inattendus, une application doit effectuer un test de portée sur la valeur retournée avant de l'affecter à un type entier.
de l'ceil(3) Linux page de man.
C'est parce que
float
gamme est plus large queint
s'. Qu'attendriez-vous d'avoir si la valeur retournée par ces fonctions ne rentre pas dans unint
? Ce serait un comportement indéterminé et vous serait impossible de vérifier que, dans votre programme.