#include <stdio.h>
#include <float.h>

union hoge {
	double d;
	char c[8];
};

void printB(void) {
	int i;
	int e = sizeof(double) * 8 - DBL_MANT_DIG - 1 + 1;
	int f = DBL_MANT_DIG - 1;
	printf("D S");
	for (i = 0; i < e; i++) {
		putchar('E');
	}
	for (i = 0; i < f; i++) {
		putchar('F');
	}
	puts("");
}

void printC(char c) {
	int n = 0xFF & (int)c;
	char s[9] = {0};
	int i;
	for (i = 0; i < 8; i++) {
		s[7 - i] = '0' + (char)(n & 0x1);
		n >>= 1;
	}
	printf("%s", s);
}

void print(union hoge h) {
	int i;
	printf("F %50.47lf\nH ", h.d);
	for (i = 0; i < 8; i++)
		printf("%02X", 0xFF & (int)h.c[7 - i]);
	printf("\nB ");
	for (i = 0; i < 8; i++)
		printC(h.c[7 - i]);
	puts("");
	printB();
	puts("\n");
}

int main(void) {
	union hoge h;
	int i;
	
	printf("%d\n", DBL_MANT_DIG);
	printf("%d\n", sizeof(double) * 8);
	puts("");
	
	h.d = 0.0; print(h);
	h.d = 0.25; print(h);
	h.d = 0.5; print(h);
	h.d = 0.2; print(h);
	h.d = 0.1; print(h);
	puts("");
	h.d = 1.0; print(h);
	h.d = 2.0; print(h);
	h.d = 3.0; print(h);
	h.d = 4.0; print(h);
	h.d = 8.0; print(h);
	puts("");
	h.d =-1.0; print(h);
	h.d =-2.0; print(h);
	h.d =-3.0; print(h);
	h.d =-4.0; print(h);
	h.d =-8.0; print(h);


	return 0;
}
