Usando Google, puedo encontrar muchos argumentos antiguos sobre cómo debería funcionar la división de enteros en Rust, pero no puedo encontrar nada en la referencia, los documentos de API para los tipos de enteros o los documentos de API para el rasgo Div
que dice lo que realmente se decidió. (Y la documentación parece implicar que /
, checked_div
y wrapping_div
pueden no hacer lo mismo). Esto se confunde aún más por la documentación de tipo entero que aparentemente a veces usa /
para referirse a la división de enteros y, a veces, a la división matemática. (No se me ocurre ninguna otra interpretación razonable de floor(self / other)
en la documentación de wrapping_div
.) Sería bueno si esto estuviera claramente documentado en alguna parte, ya que varía entre los idiomas y es uno de las principales confusiones con la aritmética de enteros.
http://doc.rust-lang.org/reference.html#behavior -not-consider-unsafe habla sobre el 'desbordamiento' y menciona la envoltura, pero tienes razón en que podemos sacar a la luz esto mejor.
@steveklabnik
Se trata de redondear, no de envolver. Usamos sdiv
LLVM, que se redondea a cero (y srem
tiene el mismo signo que el dividendo). Deberíamos documentar esto (la documentación para wrapping_div
actualmente _siste_, afirmando que se redondea hacia un infinito negativo).
Esto también debería dejar una advertencia, porque el número entero / entero no siempre se desea y ocurre por accidente. Solo un pensamiento si alguien está leyendo esto.