57 lines
1002 B
C
57 lines
1002 B
C
|
/* void _DivUnsArrByUnsRound(a,c,n)
|
||
|
*
|
||
|
* ARGUMENT
|
||
|
* unsigned a[];
|
||
|
* unsigned c; number of divide by
|
||
|
* int n; number of digits
|
||
|
*
|
||
|
* DESCRIPTION
|
||
|
* Divides a number of n digits (a) by c and stores the result in a.
|
||
|
* The quotient is rounded to the nearest integer.
|
||
|
*
|
||
|
* SIDE EFFECTS
|
||
|
* None.
|
||
|
*
|
||
|
* RETURNS
|
||
|
* None.
|
||
|
*
|
||
|
* AUTHOR
|
||
|
* Brugnoli Giugno 1992
|
||
|
*
|
||
|
* MODIFICATIONS
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#include <stdio.h>
|
||
|
#include "gm.h"
|
||
|
#include "gmsystem.h"
|
||
|
|
||
|
void _DivUnsArrByUnsRound(a,c,n)
|
||
|
unsigned SHORT a[],c;
|
||
|
int n;
|
||
|
{
|
||
|
int i;
|
||
|
unsigned SHORT rem,qt;
|
||
|
unsigned long remup,ntbd;
|
||
|
float limit;
|
||
|
|
||
|
rem=0;
|
||
|
|
||
|
if ((c)&&(n))
|
||
|
{
|
||
|
for (i=n-1;i>=0;i--)
|
||
|
{
|
||
|
remup=(long)rem<<BITSPERUI;
|
||
|
ntbd=(long)a[i]+remup;
|
||
|
qt=(unsigned SHORT)(ntbd / c);
|
||
|
rem=(unsigned SHORT)(ntbd % c);
|
||
|
a[i]=qt;
|
||
|
}
|
||
|
limit=(float)(c-1)/2;
|
||
|
if (rem>limit)
|
||
|
{
|
||
|
a[0]++;
|
||
|
}
|
||
|
}
|
||
|
}
|