Mark Reed wrote:

I would really like to see ($x div $y) be (floor($x/$y))

That is: floor( 8 / (-3) ) == floor( -2.6666.... ) == -3 Or do you want -2?

and ($x mod $y) be ($x - $x div $y).

Hmm, since 8 - (-3) == 11 this definition hardly works. But even with $q = floor( $x / $y ) and $r = $x - $q * $y we get 8 - (-3) * (-3) == -1 where I guess you expect -2. Looks like you want some case distinction there on the sign of $x.

If the divisor is positive the modulus should be positive, no matter what the sign of the dividend.

The problem is that with two numbers $x and $y you get four combinations of signs which must be considered when calculating $q and $r such that $x == $q * $y + $r holds.

Avoids lots of special case code across 0 boundaries.

If there is a definition that needs no special casing then it is the euclidean definition that 0 <= $r < abs $y. -- TSa (Thomas Sandlaß)