En utilisant Google, je peux trouver de nombreux arguments anciens sur le fonctionnement de la division entière dans Rust, mais je ne trouve rien dans la référence, les documents API pour les types entiers ou les documents API pour le trait Div
qui dit ce qui a été réellement décidé. (Et la documentation semble impliquer que /
, checked_div
et wrapping_div
peuvent ne pas tous faire la même chose.) Ceci est encore plus confus par la documentation de type entier qui utilise apparemment parfois /
pour se référer à la division entière et parfois à la division mathématique. (Je ne peux pas proposer d'autre interprétation raisonnable de floor(self / other)
dans la documentation wrapping_div
.) Ce serait bien si cela était clairement documenté quelque part, car cela varie selon les langues et en est un des principales confusions avec l'arithmétique des nombres entiers.
http://doc.rust-lang.org/reference.html#behavior -not-considered-unsafe parle de « débordement » et mentionne l'emballage, mais vous avez raison de dire que nous pouvons mieux faire ressortir cela.
@steveklabnik
Il s'agit d'arrondir, pas d'envelopper. Nous utilisons le sdiv
LLVM, qui s'arrondit vers zéro (et srem
a le même signe que le dividende). Nous devrions documenter cela (la documentation pour wrapping_div
actuellement _mens_, affirmant qu'elle s'arrondit vers l'infini négatif).
Cela devrait également laisser un avertissement, car entier / entier n'est pas toujours souhaité et se produit par accident. Juste une pensée si quelqu'un lit ceci.