#include <stdio.h>
#define COUNT(type, result_m, result_e) do { \
type x = 1, exp; \
unsigned res, e; \
for (res=0; x!=0; ++res) x/=2.; \
for (exp=1,e=0; exp*2<res; ++e) exp*=2; \
*result_e = e+1; \
*result_m = res-exp+1; \
} while(0)
int main(void)
{
unsigned f_m, f_e, d_m, d_e, ld_m, ld_e;
COUNT(float, &f_m, &f_e);
COUNT(double, &d_m, &d_e);
COUNT(long double, &ld_m, &ld_e);
printf("float: 1 %2u %2u %3u\n", f_m
, f_e
, 8 * sizeof(float)); printf("double: 1 %2u %2u %3u\n", d_m
, d_e
, 8 * sizeof(double)); printf("long double: 1 %2u %2u %3u\n", ld_m
, ld_e
, 8 * sizeof(long double)); }
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIENPVU5UKHR5cGUsIHJlc3VsdF9tLCByZXN1bHRfZSkgZG8geyBcCiAgdHlwZSB4ID0gMSwgZXhwOyBcCiAgdW5zaWduZWQgcmVzLCBlOyBcCiAgZm9yIChyZXM9MDsgeCE9MDsgKytyZXMpIHgvPTIuOyBcCiAgZm9yIChleHA9MSxlPTA7IGV4cCoyPHJlczsgKytlKSBleHAqPTI7IFwKICAqcmVzdWx0X2UgPSBlKzE7IFwKICAqcmVzdWx0X20gPSByZXMtZXhwKzE7IFwKfSB3aGlsZSgwKQoKaW50IG1haW4odm9pZCkKewogIHVuc2lnbmVkIGZfbSwgZl9lLCBkX20sIGRfZSwgbGRfbSwgbGRfZTsKICAKICBDT1VOVChmbG9hdCwgJmZfbSwgJmZfZSk7CiAgQ09VTlQoZG91YmxlLCAmZF9tLCAmZF9lKTsKICBDT1VOVChsb25nIGRvdWJsZSwgJmxkX20sICZsZF9lKTsKICAKICBwcmludGYoIiAgICAgICAgICAgICAgUyAgIE0gICBFICAgU1pcbiIpOwogIHByaW50ZigiZmxvYXQ6ICAgICAgICAxICAlMnUgICUydSAgJTN1XG4iLCAgZl9tLCAgZl9lLCA4ICogc2l6ZW9mKGZsb2F0KSk7CiAgcHJpbnRmKCJkb3VibGU6ICAgICAgIDEgICUydSAgJTJ1ICAlM3VcbiIsICBkX20sICBkX2UsIDggKiBzaXplb2YoZG91YmxlKSk7CiAgcHJpbnRmKCJsb25nIGRvdWJsZTogIDEgICUydSAgJTJ1ICAlM3VcbiIsIGxkX20sIGxkX2UsIDggKiBzaXplb2YobG9uZyBkb3VibGUpKTsKfQo=