C division entière et à l'étage
Dans C, il existe une différence entre la division entière de a/b et floor(a/b) où a et b sont des nombres entiers?
Plus précisément ce qui se passe au cours de ces deux processus?
Double Possible de Quel est le comportement de la division entière?
OriginalL'auteur CodeKingPlusPlus | 2012-09-02
Vous devez vous connecter pour publier un commentaire.
a/b
n'division entière. Sia
oub
est négatif, le résultat dépend du compilateur (arrondi peut aller vers zéro ou vers l'infini négatif en pré-C99; en C99+, le mode d'arrondi vers 0). Le résultat est de typeint
.floor(a/b)
fait la même division, convertit le résultat en double, supprime le (inexistante) de partie fractionnaire, et renvoie le résultat sous la forme d'un double.Ah, raté le
C
tag. Pourtant, il est clair que ma réponse est sur le C++.<g>
le point est que
floor
n'a pas rond quelque chose dans cet exemple parce quea / b
effectue une division entière, et passe àfloor
.J'ai évidemment mal lu la question...
euh... d'accord?
OriginalL'auteur Pete Becker
floor
renvoie unedouble
touta /b
où les deuxa
etb
sont des entiers donne une valeur de type entier.Avec la bonne fonte de la valeur est la même.
Si
typeof
opérateur existé en C (il n'a pas) on aurait:EDIT: Maintenant, si la question est: quelle est la différence entre:
et
la réponse est oui. Les résultats diffèrent en ce qui concerne les valeurs négatives.
OriginalL'auteur ouah
Il est possible de perdre de l'information de la conversion d'entier en virgule flottante. Pas de chances avec int et double, mais avec une légère modification:
Résultat:
OriginalL'auteur Alan Curry
En général, en supposant que les entiers sont représentables dans les deux entier et les types à virgule flottante, il n'y a pas de différence, mais la preuve n'est pas évident. Le problème est qu'en virgule flottante, un arrondissement se produit dans la division a/b, de sorte que le plancher de la fonction ne s'applique pas sur l'exacte valeur rationnelle, mais sur une valeur approximative. J'avais écrit un papier sur le sujet: https://www.vinc17.net/research/publi.html#Lef2005b
En bref, le résultat que j'ai obtenu, c'est que si a - b est exactement représentable dans le floating-point du système, puis floor(a/b), où a et b sont des nombres à virgule flottante (avec des valeurs entières), donne le même résultat que la division entière de a/b.
OriginalL'auteur vinc17