campo-sirio/gfm/mul10l.c

70 lines
1.1 KiB
C
Raw Normal View History

/* int _MulUnsArrByPwrOf10Limited(pa,n,dig)
*
* ARGUMENT
* unsigned pa[]; points to a 160bit number
* int n; power of 10 to multiply by (0..19)
* int dig; number of digits to multiply
*
* DESCRIPTION
* Multiplies the pa[] array by 10^n (0<n<19),
* if the multiplication overflows, multiplies by largest power of 10
* which doesn't generate overflow and return that power of ten.
*
* SIDE EFFECTS
* None.
*
* RETURNS
* Power of ten multiplied by.
*
* AUTHOR
* Brugnoli Giugno 1992
*
* MODIFICATIONS
*
*/
#include <stdio.h>
#include "gm.h"
#include "gmsystem.h"
int _MulUnsArrByPwrOf10Limited(pa,n,dig)
unsigned SHORT pa[];
int n,dig;
{
int k,i,pow;
unsigned SHORT cop[10];
k=GM_SUCCESS;
pow=0;
for (i=0;i<10;i++)
{
cop[i]=0;
}
while((pow<n)&&(!k))
{
for (i=0;i<dig;i++)
{
cop[i]=pa[i];
}
k=_MulUnsArrByPwrOf10(pa,1,dig);
if (!k)
{
pow++;
}
}
if (k)
{
for (i=0;i<dig;i++)
{
pa[i]=cop[i];
}
}
return(pow);
}