Por que o comportamento definido de estouro de inteiro não assinado, mas o estouro de inteiro assinado, não é?

O estouro de inteiros não assinados é bem definido pelos padrões C e C ++. Por exemplo, oPadrão C99 (§6.2.5/9) estados

Uma computação envolvendo operandos não assinados nunca pode exceder o fluxo, porque um resultado que não pode ser representado pelo tipo de inteiro não assinado resultante é módulo reduzido o número que é um maior que o maior valor que pode ser representado pelo tipo resultante.

No entanto, os dois padrões afirmam que o estouro de inteiro assinado é um comportamento indefinido. Mais uma vez, a partir do padrão C99 (§3.4.3/1)

Um exemplo de comportamento indefinido é o comportamento no overflow de inteiros

Existe uma razão histórica ou (ainda melhor!) Uma razão técnica para essa discrepância?

questionAnswers(5)

yourAnswerToTheQuestion