Mit Google kann ich viele alte Argumente darüber finden, wie die Ganzzahldivision in Rust funktionieren sollte, aber ich kann nichts in der Referenz finden, den API-Dokumenten für die Ganzzahltypen oder den API-Dokumenten für das Merkmal Div
, das besagt: was eigentlich entschieden wurde. (Und die Dokumentation scheint zu implizieren, dass /
, checked_div
und wrapping_div
möglicherweise nicht alle dasselbe tun.) Dies wird weiter durch die Integer-Dokumentation verwirrt, die anscheinend manchmal verwendet /
bezieht sich auf die Ganzzahldivision und manchmal auf die mathematische Division. (Ich kann keine andere vernünftige Interpretation von floor(self / other)
in der wrapping_div
Dokumentation finden.) Es wäre schön, wenn dies irgendwo klar dokumentiert wäre, da dies von Sprache zu Sprache variiert und eine ist der wichtigsten Verwechslungen mit ganzzahliger Arithmetik.
http://doc.rust-lang.org/reference.html#behavior -not-considered-unsafe spricht von 'Überlauf' und erwähnt Wrapping, aber Sie haben Recht, dass wir dies besser aufdecken können.
@steveklabnik
Hier geht es um das Runden, nicht um das Umwickeln. Wir verwenden LLVMs sdiv
, die gegen Null runden (und srem
hat das gleiche Vorzeichen wie die Dividende). Wir sollten dies dokumentieren (die Dokumentation für wrapping_div
_lies_ derzeit und behauptet, dass sie gegen negativ unendlich rundet).
Dies sollte auch eine Warnung hinterlassen, da integer/integer nicht immer erwünscht ist und zufällig passiert. Nur so ein Gedanke, falls das hier jemand liest.