Qual è il comportamento della divisione intera?

Per esempio,

int result; result = 125/100; 

o

 result = 43/100; 

Risulterà sempre il piano della divisione? Qual è il comportamento definito?

Risulterà sempre il piano della divisione? Qual è il comportamento definito?

Sì, il quoziente intero dei due operandi.

6.5.5 Operatori moltiplicativi

6 Quando gli interi sono divisi, il risultato dell’operatore / è il quoziente algebrico con qualsiasi parte frazionaria scartata. 88) Se il quoziente a / b è rappresentabile, l’espressione (a / b) * b + a% b deve essere uguale a a.

e la nota in calce corrispondente:

88) Questo è spesso chiamato “troncatura verso zero”.

Naturalmente due punti da notare sono:

3 Le normali conversioni aritmetiche vengono eseguite sugli operandi.

e:

5 Il risultato dell’operatore / è il quoziente dalla divisione del primo operando per il secondo; il risultato dell’operatore% è il resto. In entrambe le operazioni, se il valore del secondo operando è zero, il comportamento non è definito.

[Nota: enfasi mia]

Dirkgently fornisce un’eccellente descrizione della divisione intera in C99, ma dovresti anche sapere che in C89 la divisione intera con un operando negativo ha una direzione definita dall’implementazione.

Dalla bozza ANSI C (3.3.5):

Se uno degli operandi è negativo, se il risultato dell’operatore / è il più grande intero meno del quoziente algebrico o il più piccolo intero maggiore del quoziente algebrico è definito dall’implementazione, come il segno del risultato dell’operatore%. Se il quoziente a / b è rappresentabile, l’espressione (a / b) * b + a% b deve essere uguale a a.

Quindi fai attenzione ai numeri negativi quando sei bloccato con un compilatore C89.

È un fatto divertente che C99 abbia scelto il troncamento verso zero perché è stato così che FORTRAN ha fatto. Vedi questo messaggio su comp.std.c.

Dove il risultato è negativo, C tronca verso 0 piuttosto che su pavimento – Ho imparato questa lettura sul perché la divisione intera di Python ha sempre dei piani qui: Perché i piani interi di Python

Sì, il risultato è sempre troncato verso zero. Arrotonderà verso il minimo valore assoluto.

 -5 / 2 = -2 5 / 2 = 2 

Per i valori firmati non firmati e non negativi, è uguale a floor (arrotondamento verso -Infinity).

Risulterà sempre il piano della divisione?

No. Il risultato varia, ma la variazione avviene solo per valori negativi.

Qual è il comportamento definito?

Per rendere chiari i round di pavimento verso l’infinito negativo, mentre la divisione intera arrotonda verso zero (tronca)

Per valori positivi sono uguali

 int integerDivisionResultPositive= 125/100;//= 1 double flooringResultPositive= floor(125.0/100.0);//=1.0 

Per valore negativo questo è diverso

 int integerDivisionResultNegative= -125/100;//=-1 double flooringResultNegative= floor(-125.0/100.0);//=-2.0