Next: Floating Point Numbers, Previous: Integers, Up: Arithmetic [Contents][Index]

This section describes functions for performing integer division. These
functions are redundant when GNU CC is used, because in GNU C the
‘`/`’ operator always rounds towards zero. But in other C
implementations, ‘`/`’ may round differently with negative arguments.
`div`

and `ldiv`

are useful because they specify how to round
the quotient: towards zero. The remainder has the same sign as the
numerator.

These functions are specified to return a result `r` such that the value

equals
`r`.quot*`denominator` + `r`.rem`numerator`.

To use these facilities, you should include the header file
`stdlib.h` in your program.

- Data Type:
**div_t** -
This is a structure type used to hold the result returned by the

`div`

function. It has the following members:`int quot`

The quotient from the division.

`int rem`

The remainder from the division.

- Function:
*div_t***div***(int*`numerator`, int`denominator`) -
Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

The function

`div`

computes the quotient and remainder from the division of`numerator`by`denominator`, returning the result in a structure of type`div_t`

.If the result cannot be represented (as in a division by zero), the behavior is undefined.

Here is an example, albeit not a very useful one.

div_t result; result = div (20, -6);

Now

`result.quot`

is`-3`

and`result.rem`

is`2`

.

- Data Type:
**ldiv_t** -
This is a structure type used to hold the result returned by the

`ldiv`

function. It has the following members:`long int quot`

The quotient from the division.

`long int rem`

The remainder from the division.

(This is identical to

`div_t`

except that the components are of type`long int`

rather than`int`

.)

- Function:
*ldiv_t***ldiv***(long int*`numerator`, long int`denominator`) -
Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

The

`ldiv`

function is similar to`div`

, except that the arguments are of type`long int`

and the result is returned as a structure of type`ldiv_t`

.

- Data Type:
**lldiv_t** -
This is a structure type used to hold the result returned by the

`lldiv`

function. It has the following members:`long long int quot`

The quotient from the division.

`long long int rem`

The remainder from the division.

(This is identical to

`div_t`

except that the components are of type`long long int`

rather than`int`

.)

- Function:
*lldiv_t***lldiv***(long long int*`numerator`, long long int`denominator`) -
Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

The

`lldiv`

function is like the`div`

function, but the arguments are of type`long long int`

and the result is returned as a structure of type`lldiv_t`

.The

`lldiv`

function was added in ISO C99.

- Data Type:
**imaxdiv_t** -
This is a structure type used to hold the result returned by the

`imaxdiv`

function. It has the following members:`intmax_t quot`

The quotient from the division.

`intmax_t rem`

The remainder from the division.

(This is identical to

`div_t`

except that the components are of type`intmax_t`

rather than`int`

.)See Integers for a description of the

`intmax_t`

type.

- Function:
*imaxdiv_t***imaxdiv***(intmax_t*`numerator`, intmax_t`denominator`) -
Preliminary: | MT-Safe | AS-Safe | AC-Safe | See POSIX Safety Concepts.

The

`imaxdiv`

function is like the`div`

function, but the arguments are of type`intmax_t`

and the result is returned as a structure of type`imaxdiv_t`

.See Integers for a description of the

`intmax_t`

type.The

`imaxdiv`

function was added in ISO C99.

Next: Floating Point Numbers, Previous: Integers, Up: Arithmetic [Contents][Index]