#include <cstdio>
template <typename typed> void count(unsigned *result_m, unsigned *result_e)
{
typed 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;
}
int main(void)
{
unsigned f_m, f_e, d_m, d_e, ld_m, ld_e, f128_m, f128_e;
count<float>(&f_m, &f_e);
count<double>(&d_m, &d_e);
count<long double>(&ld_m, &ld_e);
count<__float128>(&f128_m, &f128_e);
printf(" S M E SZ\n");
printf("float: 1 %3u %2u %3u\n", f_m, f_e, 8 * sizeof(float));
printf("double: 1 %3u %2u %3u\n", d_m, d_e, 8 * sizeof(double));
printf("long double: 1 %3u %2u %3u\n", ld_m, ld_e, 8 * sizeof(long double));
printf("__float128: 1 %3u %2u %3u\n", f128_m, f128_e, 8 * sizeof(__float128));
}
I2luY2x1ZGUgPGNzdGRpbz4KCnRlbXBsYXRlIDx0eXBlbmFtZSB0eXBlZD4gdm9pZCBjb3VudCh1bnNpZ25lZCAqcmVzdWx0X20sIHVuc2lnbmVkICpyZXN1bHRfZSkKewogIHR5cGVkIHggPSAxLCBleHA7CiAgdW5zaWduZWQgcmVzLCBlOwogIGZvciAocmVzPTA7IHghPTA7ICsrcmVzKSB4Lz0yOwogIGZvciAoZXhwPTEsZT0wOyBleHAqMjxyZXM7ICsrZSkgZXhwKj0yOwogICpyZXN1bHRfZSA9IGUrMTsKICAqcmVzdWx0X20gPSByZXMtZXhwKzE7Cn0KCmludCBtYWluKHZvaWQpCnsKICB1bnNpZ25lZCBmX20sIGZfZSwgZF9tLCBkX2UsIGxkX20sIGxkX2UsIGYxMjhfbSwgZjEyOF9lOwogIAogIGNvdW50PGZsb2F0PigmZl9tLCAmZl9lKTsKICBjb3VudDxkb3VibGU+KCZkX20sICZkX2UpOwogIGNvdW50PGxvbmcgZG91YmxlPigmbGRfbSwgJmxkX2UpOwogIGNvdW50PF9fZmxvYXQxMjg+KCZmMTI4X20sICZmMTI4X2UpOwogIAogIHByaW50ZigiICAgICAgICAgICAgICBTICAgIE0gICBFICAgU1pcbiIpOwogIHByaW50ZigiZmxvYXQ6ICAgICAgICAxICAlM3UgICUydSAgJTN1XG4iLCAgICBmX20sICAgIGZfZSwgOCAqIHNpemVvZihmbG9hdCkpOwogIHByaW50ZigiZG91YmxlOiAgICAgICAxICAlM3UgICUydSAgJTN1XG4iLCAgICBkX20sICAgIGRfZSwgOCAqIHNpemVvZihkb3VibGUpKTsKICBwcmludGYoImxvbmcgZG91YmxlOiAgMSAgJTN1ICAlMnUgICUzdVxuIiwgICBsZF9tLCAgIGxkX2UsIDggKiBzaXplb2YobG9uZyBkb3VibGUpKTsKICBwcmludGYoIl9fZmxvYXQxMjg6ICAgMSAgJTN1ICAlMnUgICUzdVxuIiwgZjEyOF9tLCBmMTI4X2UsIDggKiBzaXplb2YoX19mbG9hdDEyOCkpOwp9