fork(2) download
  1. #include <cstdio>
  2.  
  3. template <typename typed> void count(unsigned *result_m, unsigned *result_e)
  4. {
  5. typed x = 1, exp;
  6. unsigned res, e;
  7. for (res=0; x!=0; ++res) x/=2;
  8. for (exp=1,e=0; exp*2<res; ++e) exp*=2;
  9. *result_e = e+1;
  10. *result_m = res-exp+1;
  11. }
  12.  
  13. int main(void)
  14. {
  15. unsigned f_m, f_e, d_m, d_e, ld_m, ld_e, f128_m, f128_e;
  16.  
  17. count<float>(&f_m, &f_e);
  18. count<double>(&d_m, &d_e);
  19. count<long double>(&ld_m, &ld_e);
  20. count<__float128>(&f128_m, &f128_e);
  21.  
  22. printf(" S M E SZ\n");
  23. printf("float: 1 %3u %2u %3u\n", f_m, f_e, 8 * sizeof(float));
  24. printf("double: 1 %3u %2u %3u\n", d_m, d_e, 8 * sizeof(double));
  25. printf("long double: 1 %3u %2u %3u\n", ld_m, ld_e, 8 * sizeof(long double));
  26. printf("__float128: 1 %3u %2u %3u\n", f128_m, f128_e, 8 * sizeof(__float128));
  27. }
Success #stdin #stdout 0s 16064KB
stdin
Standard input is empty
stdout
              S    M   E   SZ
float:        1   23   8   32
double:       1   52  11   64
long double:  1   63  15  128
__float128:   1  112  15  128