Thanks for writing this up!
Ad 1: I don’t think it’s useful to have both flooring and Euclidean division available as functions, at least not in this verbose form. Who wants to write
5.mod_round(3, num::DivisionMode::Euclidean) instead of, say,
5.mod_e(3)? I think short names are important here given that the worst choice (truncating mod) is one character
Ad 2: So a single division/modulo function is definitely better. I have a slight preference for Euclidean division (it’s more well-behaved according to the paper linked in your first post) but if flooring division is faster, then I’m fine with sacrificing the regularity of Euclidean division for the performance of flooring division. But I agree with @ExpHP that there seems to be no evidence so far supporting the statement that flooring division is faster.
Small proposal: I also think it might be useful to add a
fn divMod(self, rhs: Self) -> (Self, Self) function, returning the division and modulo result, similarly to Haskell. Such a function could also be added later, of course, if you want to keep the RFC minimal.