campo-sirio/gfm/dmbyp10.c

51 lines
937 B
C
Raw Normal View History

/* int _DivUnsArrByPwrOf10(a,n,p)
*
* ARGUMENT
* unsigned a[];
* int p; power of 10 to divide by
* int n; number of digits
*
* DESCRIPTION
* Divides a number of n words (a) by a power of 10, c= a/10^p,
* a>=0, p>0, rounding the result, c is correct only if a/10^p<2^79.
*
* SIDE EFFECTS
* The value of a is destroyed.
*
* RETURNS
* None. (always succeeds)
*
* AUTHOR
* Brugnoli Giugno 1992
*
* MODIFICATIONS
*
*/
#include <stdio.h>
#include <math.h>
#include "gm.h"
#include "gmsystem.h"
extern double pow(double, double);
void _DivUnsArrByPwrOf10(a,n,p)
unsigned SHORT a[];
int n,p;
{
int ppdf,i;
while (p>4)
{
_DivUnsArrByUns(a,10000,n);
p-=4;
}
#ifdef SH_LIB
ppdf=1;
for (i=1;i<=p;i++) ppdf*=10;
#else
ppdf=(int)pow(10.,(double)p);
#endif
_DivUnsArrByUnsRound(a,ppdf,n);
}