div() फ़ंक्शन एक संरचना देता है जिसमें दूसरे पैरामीटर (संख्या) द्वारा पहले पैरामीटर (संख्यात्मक) के विभाजन का भाग और शेष होता है। चार वेरिएंट हैं:
div_t div(int, int)
ldiv_t ldiv(long, long)
lldiv_t lldiv(long long, long long)
imaxdiv_t imaxdiv(intmax_t, intmax_t
div_t
संरचना इस तरह दिखता है (intmax_t सबसे बड़ी पूर्णांक सिस्टम पर उपलब्ध प्रकार का प्रतिनिधित्व करता है):
typedef struct
{
int quot; /* Quotient. */
int rem; /* Remainder. */
} div_t;
कार्यान्वयन केवल /
और %
ऑपरेटरों का उपयोग करता है, इसलिए यह बिल्कुल जटिल या आवश्यक फ़ंक्शन नहीं है, लेकिन यह सी मानक का हिस्सा है (जैसा कि [आईएसओ 98 99: 201x] [1] द्वारा परिभाषित किया गया है)।)
/* Return the `div_t' representation of NUMER over DENOM. */
div_t
div (numer, denom)
int numer, denom;
{
div_t result;
result.quot = numer/denom;
result.rem = numer % denom;
/* The ANSI standard says that |QUOT| <= |NUMER/DENOM|, where
NUMER/DENOM is to be computed in infinite precision. In
other words, we should always truncate the quotient towards
zero, never -infinity. Machine division and remainer may
work either way when one or both of NUMER or DENOM is
negative. If only one is negative and QUOT has been
truncated towards -infinity, REM will have the same sign as
DENOM and the opposite sign of NUMER; if both are negative
and QUOT has been truncated towards -infinity, REM will be
positive (will have the opposite sign of NUMER). These are
considered `wrong'. If both are NUM and DENOM are positive,
RESULT will always be positive. This all boils down to: if
NUMER >= 0, but REM < 0, we got the wrong answer. In that
case, to get the right answer, add 1 to QUOT and subtract
DENOM from REM. */
if (numer >= 0 && result.rem < 0)
{
++result.quot;
result.rem -= denom;
}
return result;
}
यह पहले से ही [इस सवाल] में उत्तर दिया गया था (http://stackoverflow.com/a/11726016/995714) –