RosettaCodeData/Task/Extreme-floating-point-values/C/extreme-floating-point-values-2.c
2023-07-01 13:44:08 -04:00

31 lines
635 B
C

#include <stdio.h>
#include <values.h>
#include <math.h>
char * bits(double v) {
static char s[sizeof(double) * (CHARBITS + 1)];
int n, i, j;
unsigned char *c = (void*)&v;
for (i = n = 0; i < sizeof(double); i++) {
for (j = 1 << (CHARBITS - 1); j; j >>= 1)
s[n++] = (c[i] & j) ? '1' : '.';
s[n++] = ' ';
}
s[n-1] = 0;
return s;
}
int main(void)
{
double x[] = {
1.0, -1.0, 1.0/256, 0.0, // "normal" values
-0.0, INFINITY, -INFINITY, NAN, -NAN, // special
DBL_MAX, DBL_MIN // not required by task
};
int i;
for (i = 0; i < sizeof(x) / sizeof(x[0]); i++)
printf("%s | %g\n", bits(x[i]), x[i]);
return 0;
}