Usando o Google, posso encontrar muitos argumentos antigos sobre como a divisão de inteiros deve funcionar no Rust, mas não consigo encontrar nada na referência, os documentos da API para os tipos inteiros ou os documentos da API para o traço Div
que diz o que foi realmente decidido. (E a documentação parece implicar que /
, checked_div
e wrapping_div
podem não fazer a mesma coisa.) Isso é ainda mais confundido pela documentação do tipo inteiro aparentemente às vezes usando /
para se referir à divisão inteira e às vezes à divisão matemática. (Não consigo encontrar nenhuma outra interpretação razoável de floor(self / other)
na documentação wrapping_div
.) Seria bom se isso estivesse claramente documentado em algum lugar, já que isso varia entre os idiomas e é um deles das principais confusões com aritmética inteira.
http://doc.rust-lang.org/reference.html#behavior -não-considerado-inseguro fala sobre 'estouro' e menciona o empacotamento, mas você está certo de que podemos explicar isso melhor.
@steveklabnik
Trata-se de arredondar, não de embrulhar. Usamos sdiv
do LLVM, que arredonda para zero (e srem
tem o mesmo sinal do dividendo). Devemos documentar isso (a documentação de wrapping_div
atualmente _lies_, alegando que se aproxima do infinito negativo).
Isso também deve deixar um aviso, porque inteiro / inteiro nem sempre é desejado e acontece por acidente. Apenas um pensamento, se alguém estiver lendo isso.