Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What is the purpose of the div() library function?

When C has the / operator to divide two numbers, what is the purpose of having the div() library function?

Is there any scenario where / can't be used but div() can?

like image 872
Eight Avatar asked Jul 30 '12 16:07

Eight


People also ask

What is the purpose of the div function?

Use the DIV function to calculate the value of the quotient after dividend is divided by divisor. The dividend and divisor expressions can evaluate to any numeric value. The only exception is that divisor cannot be 0. If either dividend or divisor evaluates to the null value, null is returned.

What is Div used for in C++?

The div() function in C++ computes the integral quotient and remainder of the division of two numbers. The div() function is defined in <cstdlib> header file.

What is used for division in C language?

printf("Enter dividend: "); scanf("%d", &dividend); printf("Enter divisor: "); scanf("%d", &divisor); Then the quotient is evaluated using / (the division operator), and stored in quotient . quotient = dividend / divisor; Similarly, the remainder is evaluated using % (the modulo operator) and stored in remainder .

Is Div built in function in SQL?

DIV() function :This function in MySQL is used to return a quotient (integer) value when integer division is done. For example, when 7 is divided by 3, then 2 will be returned.


2 Answers

From the C99 Rationale document:

(7.20.6.2 The div, ldiv, and lldiv functions) Because C89 had implementation-defined semantics for division of signed integers when negative operands were involved, div and ldiv, and lldiv in C99, were invented to provide well-specified semantics for signed integer division and remainder operations. The semantics were adopted to be the same as in Fortran. Since these functions return both the quotient and the remainder, they also serve as a convenient way of efficiently modeling underlying hardware that computes both results as part of the same operation. [...] Now that C99 requires similar semantics for the division operator, the main reason for new programs to use div, ldiv or lldiv is to simultaneously obtain quotient and remainder.

like image 53
ouah Avatar answered Nov 20 '22 09:11

ouah


Quoted from C Programming: A Modern Approach, 2nd Edition, chapter 26, Q & A section.

Q: Why do the div and ldiv functions exist? Can't we just use the / and % operators?

A: div and ldiv aren't quite the same as / and %. Recall from Section 4.1 that applying / and % to negative operands doesn't give a portable result in C89. If i or j is negative, whether the value of i / j is rounded up or down is implementation defined, as is the sign of i % j. The answer computed by div and ldiv, on the other hand, don't depend on the implementation. The quotient is rounded toward zero; the remainder is computed according to the formula n = q x d + r, where n is the original number, q is the quotient, d is the divisor, and r is the remainder. Here are a few examples:

 n      |  d     |  q     |  r
--------|--------|--------|--------
 7      |  3     |  2     |  1
-7      |  3     | -2     | -1
 7      | -3     | -2     |  1
-7      | -3     |  2     | -1

In C99, the / and % operators are guaranteed to produce the same result as div and ldiv.

Efficiency is the other reason that div and ldiv exist. Many machines have an instruction that can compute both the quotient and remainder, so calling div or ldiv may be faster than using the / and % operators separately.

like image 22
mja Avatar answered Nov 20 '22 07:11

mja