/*********************************************

include <stdio.h>

include <stdlib.h>

include <limits.h>

include <float.h>

include <math.h>

/*************************************************************************

define E (24*1024)

/************************************************************************

define LOGPI2div2 (double)0.399089934

define LN10 (double)2.302585093

define LOG256 (double)2.408239965

ifndef FALSE

define FALSE 0

endif

ifndef TRUE

define TRUE !FALSE

endif

/************************************************************************/

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);

}

}

/***********************************************************************/

define inline() { \

		  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);

}

/*************************************************************************/

Proxy Information
Original URL
gemini://gemini.conman.org/boston/2004/11/12/bige.c
Status Code
Success (20)
Meta
text/plain; charset=us-ascii
Capsule Response Time
567.088534 milliseconds
Gemini-to-HTML Time
2.42247 milliseconds

This content has been proxied by September (3851b).