aboutsummaryrefslogtreecommitdiffstats
path: root/man/zdivmod.3
blob: d63405a0381e14491b9ef5c0d76724445a5de773 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
.TH ZDIVMOD 3 libzahl
.SH NAME
zdivmod - Calculate the quotient and the remainder of two big integer
.SH SYNOPSIS
.nf
#include <zahl.h>

void zdivmod(z_t \fIquotient\fP, z_t \fIremainder\fP, z_t \fIdividend\fP, z_t \fIdivisor\fP);
.fi
.SH DESCRIPTION
.B zdivmod
calculates the truncated quotient and the remainder of a
.I dividend
and a
.IR divisor ,
and stores the truncated quotient in
.I quotient
and the remainder in
.IR remainder .
That is,
.I quotient
gets
.I dividend
/
.I divisor
and
.I remainder
gets
.I dividend
Mod
.IR divisor .
.P
Be aware,
.I remainder
gets
.RI | dividend |
Mod
.RI | divisor |,
this means that it is only guaranteed to be true that
.I dividend
=
.I quotient
⋅
.I divisor
+
.IR remainder
if
.I dividend
and
.I divisor
are both non-negative.
It is up to the user, to make the necessary adjustment to
.I remainder
to make this true or to satisfy any desired property. This
exceptional behaviour has been choosen because it is the
simplies, works just fine if you are working with natural
numbers only, and there are two many ways to define
modulus; this one is advantages when you want to make
adjustments, it is straight-forward.
.P
It is safe to call
.B zdivmod
with non-unique parameters,
except it is
.I not
safe to call
.B zdivmod with
.IR "(quotient==remainder)" .
.P
See
.BR zmod (3)
for details on modulation.
.SH RATIONALE
Calculating the remainder requires calculating division to
be performed, and performing a division gives the remainder
for free. It is often useful to calculate both.
.SH SEE ALSO
.BR zstr (3),
.BR zadd (3),
.BR zsub (3),
.BR zmul (3),
.BR zdiv (3),
.BR zmod (3),
.BR zneg (3),
.BR zabs (3),
.BR zpow (3)