For Gauche 0.9.7

Next: , Previous: , Up: Library modules - SRFIs   [Contents][Index]

### 11.29 `srfi-141` - Integer division

Module: srfi-141

This module provides a comprehensive set of integer division operators.

Quotient and remainder in integer divisions can be defined in multiple ways, when you consider the choice of sign of the result with regard to the operands. Gauche has builtin procedures in several flavors: R5RS `quotient`, `remadiner` and `modulo`, R6RS `div`, `mod`, `div0` and `mod0`, and R7RS `floor-quotient`, `floor-remainder`, `floor/`, `truncate-quotinet`, `truncate-remainder`, `truncate/`.

This module complements R7RS procedures, by adding `ceiling`, `round`, `euclidean` and `balanced` variants.

The following procedures are in srfi-141 but built-in in Gauche (see Arithmetics).

```floor-quotient     floor-remainder    floor/
truncate-quotient  truncate-remainder truncate/
```
Function: ceiling-quotient n d
Function: ceiling-remainder n d
Function: ceiling/ n d

[SRFI-141] {srfi-141}

```ceiling-quotient = ceiling(n / d)
ceiling-remainder = n - d * ceiling-quotient
ceiling/ = values(ceiling-quotient, ceiling-remainder)
```
Function: round-quotient n d
Function: round-remainder n d
Function: round/ n d

[SRFI-141] {srfi-141}

```round-quotient = round(n/d)
round-remainder = n - d * round-quotient
round/ = values(round-quotient, round-remainder)
```
Function: euclidean-quotient n d
Function: euclidean-remainder n d
Function: euclidean/ n d

[SRFI-141] {srfi-141}

```euclidean-quotient = floor(n / d)   if d > 0
ceiling(n / d) if d < 0
euclidean-remainder = n - d * euclidean-quotient
euclidean/ = values(euclidean-quotient, euclidean-remainder)
```

The Eclidean variant satisfies a property `0 <= remainder < abs(d)`. These are the same as R6RS’s `div`, `mod`, and `div-and-mod`, except that they accept non-integers (see Arithmetics)

Function: balanced-quotient n d
Function: balanced-remainder n d
Function: balanced/ n d

[SRFI-141] {srfi-141}

```balanced-quotient = roundup(n / d)
balanced-remainder = n - d * balanced-quotient
balanced/ = values(balanced-quotient, balanced-remainder)
where roundup(x) is  ceiling(x) if x - floor(x) <= 0.5
and floor(x)   if x - floor(x) > 0.5
```

The balanced variant satisfies a property `-abs(d/2) <= remainder < abs(d/2)`. These are the same as R6RS’s `div0`, `mod0`, and `div0-and-mod0`, except that they accept non-integers (see Arithmetics).

Next: , Previous: , Up: Library modules - SRFIs   [Contents][Index]