Wat is het gedrag van integer delen?

Bijvoorbeeld

int result;
result = 125/100;

of

result = 43/100;

Zal het resultaat altijd de vloer van de divisie zijn? Wat is het gedefinieerde gedrag?


Antwoord 1, autoriteit 100%

Zal het resultaat altijd de vloer van de divisie zijn? Wat is het gedefinieerde gedrag?

Niet helemaal. Het rondt af naar 0, in plaats van naar vloer.

6.5.5 Multiplicatieve operatoren

6Wanneer gehele getallen worden gedeeld, is het resultaat van de / operator het algebraïsche quotiënt met een willekeurig
breukdeel weggegooid.88)Als het quotiënt a/b representeerbaar is, is de uitdrukking
(a/b)*b + a%b is gelijk aan a.

en de bijbehorende voetnoot:

  1. Dit wordt vaak truncatie naar nul genoemd.

Natuurlijk zijn er twee aandachtspunten:

3De gebruikelijke rekenkundige conversies worden uitgevoerd op de operanden.

en:

5Het resultaat van de / operator is de
quotiënt uit de deling van de
eerste operand door de tweede; de
resultaat van de %-operator is de
rest. In beide bewerkingen, als de
waarde van de tweede operand is nul,
het gedrag is niet gedefinieerd.

[Opmerking: leg de nadruk op mij]


Antwoord 2, autoriteit 23%

Dirkgently geeft een uitstekende beschrijvingvan integer deling in C99, maar je moet ook weten dat in C89 integer deling met een negatieve operand een implementatie-gedefinieerde richting heeft.

Van het ANSI C-concept (3.3.5):

Als een van beide operands negatief is, wordt door de implementatie gedefinieerd of het resultaat van de /-operator het grootste gehele getal kleiner is dan het algebraïsche quotiënt of het kleinste gehele getal groter dan het algebraïsche quotiënt, evenals het teken van het resultaat van de %-operator . Als het quotiënt a/b representeerbaar is, is de uitdrukking (a/b)*b + a%b gelijk aan a.

Pas dus op met negatieve getallen als je vastzit aan een C89-compiler.

Het is een leuk feit dat C99 ervoor koos om af te kappen naar nul, want zo deed FORTRAN het. Zie dit berichtop comp.std.c.


Antwoord 3, autoriteit 12%

Waar het resultaat negatief is, wordt C afgekapt naar 0 in plaats van naar vloer. Ik heb deze lezing geleerd over waarom de verdeling van gehele getallen in Python hier altijd vloeren: Waarom Python’s Integer Division-vloeren


Antwoord 4, autoriteit 12%

Ja, het resultaat wordt altijd afgekapt richting nul. Het wordt afgerond naar de kleinste absolute waarde.

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

Voor waarden zonder teken en niet-negatief teken is dit hetzelfde als vloer (afronding naar -Oneindig).


Antwoord 5, autoriteit 6%

Zal het resultaat altijd de vloer van de divisie zijn?

Nee. Het resultaat varieert, maar variatie vindt alleen plaats bij negatieve waarden.

Wat is het gedefinieerde gedrag?

Om het duidelijk te maken vloer rondt af naar negatief oneindig, terwijl gehele deling naar nul afrondt (afkapt)

Voor positieve waarden zijn ze hetzelfde

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

Voor negatieve waarde is dit anders

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

Antwoord 6, autoriteit 2%

Ik weet dat mensen je vraag hebben beantwoord, maar in termen van leken:

5 / 2 = 2// aangezien zowel 5 als 2 gehele getallen zijn en gehele getallen delen altijd decimalen af

5.0 / 2 or 5 / 2.0 or 5.0 /2.0 = 2.5//hier heeft 5 of 2 of beide decimaal, vandaar dat het quotiënt dat u krijgt in decimalen is.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

three × four =

Other episodes