/* int _DoubleUnsArr(a,n) * * ARGUMENT * unsigned *a; * int n; * * DESCRIPTION * Multiplies a by 2 and stores the result in a. * * * SIDE EFFECTS * * * RETURNS * SUCCESS if no overflow, otherwise FAILURE. * * AUTHOR * Brugnoli Giugno 1992 * * MODIFICATIONS * */ #include #include #include "gm.h" #include "gmsystem.h" extern double pow(double, double); unsigned _DoubleUnsArr(a,n) unsigned SHORT a[]; int n; { int i; unsigned long maxunsint,pdst; unsigned SHORT carry; carry=0; #ifdef SH_LIB maxunsint=1; for (i=1;i<=BITSPERUI;i++) maxunsint*=2; maxunsint--; #else maxunsint=(unsigned long)pow(2.,(float)BITSPERUI)-1; #endif if (n>0) { for (i=0;imaxunsint) { carry=(unsigned SHORT)(pdst>> BITSPERUI ); a[i]=(unsigned SHORT)(pdst & maxunsint ); } else { a[i]=(unsigned SHORT)pdst; carry=0; } } if ((a[n-1])>>(BITSPERUI-1)) { return(FAILURE); } else { return(GM_SUCCESS); } } }