|
|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T W
Length: 2498 (0x9c2)
Types: TextFile
Names: »Wsize.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki
└─⟦this⟧ »EUUGD11/gnu-31mar87/scheme/microcode/Wsize.c«
#include <stdio.h>
#include <math.h>
#include <errno.h>
extern int errno;
extern char *malloc();
extern free();
/* Some machines do not set ERANGE by default. */
/* This attempts to fix this. */
#ifdef celerity
#define hack_signal
#endif
#ifdef hack_signal
#define setup_error() signal(SIGFPE, range_error)
range_error()
{ setup_error();
errno = ERANGE;
}
#else
#define setup_error()
#endif
#define ARR_SIZE 20000
#define MEM_SIZE 400000
/* Force program data to be relatively large. */
static long dummy[ARR_SIZE];
/* Note: comments are printed in a weird way because some
C compilers eliminate them even from strings.
*/
main()
{ double accum, delta;
int count, expt_size, char_size, mant_size;
unsigned long to_be_shifted;
unsigned bogus;
char *temp;
setup_error();
for(bogus = ((unsigned) -1), count = 0;
bogus != 0;
count += 1)
bogus >>= 1;
char_size = count/(sizeof(unsigned));
temp = malloc(MEM_SIZE*sizeof(long));
if (temp == NULL)
printf("/%c Cannot allocate %d Pointers. %c/\n",
'*', MEM_SIZE, '*');
else count = free(temp);
if (((unsigned long) temp) < (1 << ((char_size*sizeof(long))-8)))
printf("#define Heap_In_Low_Memory\n");
else
printf("/%c Heap is not in Low Memory. %c/\n", '*', '*');
to_be_shifted = -1;
if ((to_be_shifted >> 1) != to_be_shifted)
printf("#define UNSIGNED_SHIFT\n");
else
printf("/%c unsigned longs use arithmetic shifting. %c/\n",
'*', '*');
printf("#define CHAR_SIZE %d\n",
char_size);
printf("#define USHORT_SIZE %d\n",
(sizeof(unsigned short) * char_size));
printf("#define ULONG_SIZE %d\n",
(sizeof(unsigned long) * char_size));
printf("/%c Flonum (double) size is %d bits. %c/\n",
'*', (char_size*sizeof(double)), '*');
for(mant_size = 0, accum = 1.0, delta = 0.5;
((accum + delta) != accum);
accum = accum + delta,
delta /= 2.0,
mant_size += 1) ;
for(errno = 0, expt_size = 0, bogus = 1;
errno != ERANGE;
expt_size += 1, bogus <<= 1)
accum = pow(2.0, ((double) bogus));
expt_size -= 1;
printf("#define FLONUM_EXPT_SIZE %d\n", expt_size);
printf("#define FLONUM_MANTISSA_BITS %d\n", mant_size);
printf("#define MAX_FLONUM_EXPONENT %d\n", ((1 << expt_size) - 1));
printf("/%c Representation %s hidden bit. %c/\n", '*',
(((2+expt_size+mant_size) > (char_size*sizeof(double))) ?
"uses" :
"does not use"), '*');
return;
}