#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int validIEEE(void) {
if (sizeof (double) != 8) return 0;
double x = -3.14159;
unsigned char data[] = {0x6e, 0x86, 0x1b, 0xf0, 0xf9, 0x21, 0x09, 0xc0};
if (memcmp(&x, data, 8)) return 0;
return 1;
}
void printIEEE(void *xx) {
unsigned char *x = xx;
putchar((x[7] & 0x80) ? '-' : '+');
printf("1.");
for (int j = 3; j >= 0; j--) {
putchar((x[6] & (1 << j)) ? '1' : '0');
}
for (int k = 5; k >= 0; k--) {
for (int j = 7; j >= 0; j--) {
putchar((x[k] & (1 << j)) ? '1' : '0');
}
}
unsigned exp = ((x[7] & 0x7fu) << 4) + (x[6] >> 4);
printf(" %+d ", (int)exp - 1023);
putchar('\n');
}
int main(void) {
if (!validIEEE()) {
fprintf(stderr, "This computer does not pass the tests for valid IEEE numbers.\n");
exit(EXIT_FAILURE);
}
while (1) {
double x;
printf("Enter a number: ");
fflush(stdout);
if (scanf("%lf", &x) != 1) break;
printf("%f is ", x);
printIEEE(&x);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgoKaW50IHZhbGlkSUVFRSh2b2lkKSB7CiAgICBpZiAoc2l6ZW9mIChkb3VibGUpICE9IDgpIHJldHVybiAwOwogICAgZG91YmxlIHggPSAtMy4xNDE1OTsKICAgIHVuc2lnbmVkIGNoYXIgZGF0YVtdID0gezB4NmUsIDB4ODYsIDB4MWIsIDB4ZjAsIDB4ZjksIDB4MjEsIDB4MDksIDB4YzB9OwogICAgaWYgKG1lbWNtcCgmeCwgZGF0YSwgOCkpIHJldHVybiAwOwogICAgcmV0dXJuIDE7Cn0KCnZvaWQgcHJpbnRJRUVFKHZvaWQgKnh4KSB7CiAgICB1bnNpZ25lZCBjaGFyICp4ID0geHg7CiAgICBwdXRjaGFyKCh4WzddICYgMHg4MCkgPyAnLScgOiAnKycpOwogICAgcHJpbnRmKCIxLiIpOwogICAgZm9yIChpbnQgaiA9IDM7IGogPj0gMDsgai0tKSB7CiAgICAgICAgcHV0Y2hhcigoeFs2XSAmICgxIDw8IGopKSA/ICcxJyA6ICcwJyk7CiAgICB9CiAgICBmb3IgKGludCBrID0gNTsgayA+PSAwOyBrLS0pIHsKICAgICAgICBmb3IgKGludCBqID0gNzsgaiA+PSAwOyBqLS0pIHsKICAgICAgICAgICAgcHV0Y2hhcigoeFtrXSAmICgxIDw8IGopKSA/ICcxJyA6ICcwJyk7CiAgICAgICAgfQogICAgfQogICAgdW5zaWduZWQgZXhwID0gKCh4WzddICYgMHg3ZnUpIDw8IDQpICsgKHhbNl0gPj4gNCk7CiAgICBwcmludGYoIiAlK2QgIiwgKGludClleHAgLSAxMDIzKTsKICAgIHB1dGNoYXIoJ1xuJyk7Cn0KCmludCBtYWluKHZvaWQpIHsKICAgIGlmICghdmFsaWRJRUVFKCkpIHsKICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlRoaXMgY29tcHV0ZXIgZG9lcyBub3QgcGFzcyB0aGUgdGVzdHMgZm9yIHZhbGlkIElFRUUgbnVtYmVycy5cbiIpOwogICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgIH0KICAgIHdoaWxlICgxKSB7CiAgICAgICAgZG91YmxlIHg7CiAgICAgICAgcHJpbnRmKCJFbnRlciBhIG51bWJlcjogIik7CiAgICAgICAgZmZsdXNoKHN0ZG91dCk7CiAgICAgICAgaWYgKHNjYW5mKCIlbGYiLCAmeCkgIT0gMSkgYnJlYWs7CiAgICAgICAgcHJpbnRmKCIlZiBpcyAiLCB4KTsKICAgICAgICBwcmludElFRUUoJngpOwogICAgfQogICAgcmV0dXJuIDA7Cn0K