/*********************************************
/*************************************************************************
/************************************************************************
/************************************************************************/
unsigned char *e;
unsigned long esize = E;
/***********************************************************************/
int main (int,char *[]);
static void calc_e (unsigned short);
static void div_e (unsigned short);
static double num_digits (unsigned long);
static unsigned long calc_n (double);
static void print_e (double);
static unsigned short e10 (void);
/************************************************************************/
int main(int argc,char *argv[])
{
unsigned long n;
double nd;
if (argc > 1)
{
esize = strtol(argv[1],NULL,10);
}
nd = num_digits(esize);
n = calc_n(nd);
printf("bytes: %lu nd: %f mag: 10**%lu\n",esize,nd,n);
if (n == 0)
{
fprintf(stderr,"Can not calculate\n");
return(1);
}
e = malloc(esize * sizeof(unsigned char));
if (e == NULL)
{
fprintf(stderr,"no memory\n");
return(1);
}
calc_e(n);
print_e(nd);
return(0);
}
/**********************************************************************/
static void calc_e(unsigned short nmax)
{
unsigned short n;
for (n = nmax ; n > 1 ; n--)
{
div_e(n);
}
}
/***********************************************************************/
ter += ter; \
te += te; \
a += a; \
if (te & 0x0100) a |= 0x0001; \
if (a >= n) \
{ \
a -= n; \
ter |= 0x01; \
} \
}
static void div_e(unsigned short n)
{
unsigned short a;
unsigned short te;
unsigned char ter;
int i;
a = 1;
for (i = 0 ; i < esize ; i++)
{
ter = 0;
te = e[i];
inline();
inline();
inline();
inline();
inline();
inline();
inline();
inline();
e[i] = ter;
}
}
/*******************************************************************/
static double num_digits(unsigned long e)
{
return((double)e * LOG256);
}
/************************************************************************/
static unsigned long calc_n(double digits)
{
unsigned long i;
double n;
double magnb;
for(i = 1 , n = 1.0 ; i < ULONG_MAX ; i++ , n+= 1.0)
{
magnb = LOGPI2div2 + (log10(n) * (n + 0.5)) - ( n / LN10) ;
if (magnb > digits)
{
return(i);
}
}
return(0);
}
/*************************************************************************
static void print_e(double nd)
{
int page = 0;
int group = 0;
int digit = 0;
int even = TRUE;
unsigned short p;
for ( ; nd > 0 ; nd -= 1.0)
{
if (digit == 5)
{
putchar(' ');
digit = 0;
group++;
}
if (group == 12)
{
putchar('\n');
group = 0;
page++;
}
if (page == 60)
{
putchar('\n');
putchar('\n');
page = 0;
}
digit++;
if (even)
{
p = e10();
putchar((p/10) + '0');
even = FALSE;
}
else
{
putchar((p % 10) + '0');
even = TRUE;
}
}
putchar('\n');
}
/**********************************************************************/
static unsigned short e10(void)
{
unsigned short p;
int i;
unsigned char c;
c = 0;
for (i = esize-1 ; i >= 0 ; i--)
{
p = (e[i] * 100) + c;
e[i] = p & 0xff;
c = (p >> 8) & 0xff;
}
p = c;
return(p);
}
/*************************************************************************/
text/plain; charset=us-ascii
This content has been proxied by September (3851b).