У меня всегда есть `(a/b * b) + a% b == a`, когда b не равно нулю?

Для int a, b, я знаю, что когда есть ровно один из a и b отрицателен, результат a / b и a % b зависит от машины. Но всегда ли у меня (a / b * b) + a % b == a, когда b не равен нулю?

Ответ 1

С++ 11 §5.6 [expr.mul]/4 указывает:

Если частное выражение a/b представимо в типе результата, (a/b)*b + a%b равно a.

C11 §6.5.5/6 указывает то же самое с несколько иной фразировкой:

Если выражение a/b является представимым, выражение (a/b)*b + a%b должно быть равно a; в противном случае поведение как a/b, так и a%b равно undefined.