OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [newlib/] [newlib/] [libc/] [stdlib/] [ldiv.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 39 lampret
/*
2
FUNCTION
3
<<ldiv>>---divide two long integers
4
 
5
INDEX
6
        ldiv
7
 
8
ANSI_SYNOPSIS
9
        #include <stdlib.h>
10
        ldiv_t ldiv(long <[n]>, long <[d]>);
11
 
12
TRAD_SYNOPSIS
13
        #include <stdlib.h>
14
        ldiv_t ldiv(<[n]>, <[d]>)
15
        long <[n]>, <[d]>;
16
 
17
DESCRIPTION
18
Divide
19
@tex
20
$n/d$,
21
@end tex
22
@ifinfo
23
<[n]>/<[d]>,
24
@end ifinfo
25
returning quotient and remainder as two long integers in a structure <<ldiv_t>>.
26
 
27
RETURNS
28
The result is represented with the structure
29
 
30
. typedef struct
31
. {
32
.  long quot;
33
.  long rem;
34
. } ldiv_t;
35
 
36
where the <<quot>> field represents the quotient, and <<rem>> the
37
remainder.  For nonzero <[d]>, if `<<<[r]> = ldiv(<[n]>,<[d]>);>>' then
38
<[n]> equals `<<<[r]>.rem + <[d]>*<[r]>.quot>>'.
39
 
40
To divide <<int>> rather than <<long>> values, use the similar
41
function <<div>>.
42
 
43
PORTABILITY
44
<<ldiv>> is ANSI.
45
 
46
No supporting OS subroutines are required.
47
*/
48
 
49
 
50
/*
51
 * Copyright (c) 1990 Regents of the University of California.
52
 * All rights reserved.
53
 *
54
 * This code is derived from software contributed to Berkeley by
55
 * Chris Torek.
56
 *
57
 * Redistribution and use in source and binary forms, with or without
58
 * modification, are permitted provided that the following conditions
59
 * are met:
60
 * 1. Redistributions of source code must retain the above copyright
61
 *    notice, this list of conditions and the following disclaimer.
62
 * 2. Redistributions in binary form must reproduce the above copyright
63
 *    notice, this list of conditions and the following disclaimer in the
64
 *    documentation and/or other materials provided with the distribution.
65
 * 3. All advertising materials mentioning features or use of this software
66
 *    must display the following acknowledgement:
67
 *      This product includes software developed by the University of
68
 *      California, Berkeley and its contributors.
69
 * 4. Neither the name of the University nor the names of its contributors
70
 *    may be used to endorse or promote products derived from this software
71
 *    without specific prior written permission.
72
 *
73
 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
74
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
75
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
76
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
77
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
78
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
79
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
80
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
81
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
82
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
83
 * SUCH DAMAGE.
84
 */
85
 
86
#include <_ansi.h>
87
#include <stdlib.h>             /* ldiv_t */
88
 
89
ldiv_t
90
_DEFUN (ldiv, (num, denom),
91
        long num _AND
92
        long denom)
93
{
94
        ldiv_t r;
95
 
96
        /* see div.c for comments */
97
 
98
        r.quot = num / denom;
99
        r.rem = num % denom;
100
        if (num >= 0 && r.rem < 0) {
101 56 joel
                ++r.quot;
102 39 lampret
                r.rem -= denom;
103
        }
104 56 joel
        else if (num < 0 && r.rem > 0) {
105
                --r.quot;
106
                r.rem += denom;
107
        }
108 39 lampret
        return (r);
109
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.