
On Fri, Mar 18, 2022 at 04:26:54PM -0500, Tim Peters wrote:
Another choice is made by math.remainder:
import math math.remainder(7, 10) -3.0
Alas, math.remainder goes through float:
math.remainder(3**500, 3) # Should be 0. 1.0 math.remainder(3**500 + 2, 3) # Should be 2. 1.0
It would be nice if remainder() worked properly for exact values, without overflow or rounding errors.
What I'm _guessing_ you mean by "Euclidean division" is that
0 <= divmod(a,b) < abs(b)
That is, the modulus is always non-negative, regardless of the inputs' signs.
I expect no languages implement that because: (a) there's no particularly compelling use for it ;-) ;
I don't know whether this counts as compelling or not, but I have a divmod variant which returns an always positive modulus for use in base conversion. It is only used in one place in a module I haven't touched in a decade, so it is quite possible that if I were writing that code again today, I wouldn't do it that way. -- Steve