#define _CRT_SECURE_NO_WARNINGS
#include <float.h>
#include <math.h>
#include <stdio.h>

#define max(a,b) (((a)>(b))?(a):(b))

void dispf(float f)
{
	char		str[32];
	char*		pc;
	unsigned char*	pf;
	int		i, b;

	pf = (unsigned char*)&f;
	pc = str;
	for (i = 0; i < 4; i++) {
		for (b = 0; b < 8; b++) {
			*pc++ = '0'+((pf[3-i]>>(7-b))&1);
		}
	}
	printf("%.1s %.8s %.23s\n", str, str + 1, str + 9);
	printf("%E\n", f);
	printf("%f\n", f);
}

int main()
{
	float	a, b, c, d;

	printf("a = 1970.2\n");
	a = (float)1970.2;
	dispf(a);
	printf("a = 1970.199707\n");
	a = (float)1970.199707;
	dispf(a);
	printf("b = 1.970200E+03\n");
	sscanf("1.970200E+03", "%E", &b);
	dispf(b);
	printf("c = fabsf(a - b)\n");
	c = fabsf(a - b);
	dispf(c);
	printf("d = FLT_EPSILON\n");
	d = FLT_EPSILON;
	dispf(d);
	printf("d = max(fabsf(a), fabsf(b))\n");
	d = max(fabsf(a), fabsf(b));
	dispf(d);
	printf("d = FLT_EPSILON * max(fabsf(a), fabsf(b))\n");
	d = FLT_EPSILON * max(fabsf(a), fabsf(b));
	dispf(d);
	printf("%s\n", (c<=d)?"true":"false");
	return 0;
}
