fork(3) 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;
  16.  
  17. count<float>(&f_m, &f_e);
  18. count<double>(&d_m, &d_e);
  19. count<long double>(&ld_m, &ld_e);
  20.  
  21. printf(" S M E SZ\n");
  22. printf("float: 1 %2u %2u %3u\n", f_m, f_e, 8 * sizeof(float));
  23. printf("double: 1 %2u %2u %3u\n", d_m, d_e, 8 * sizeof(double));
  24. printf("long double: 1 %2u %2u %3u\n", ld_m, ld_e, 8 * sizeof(long double));
  25. }
Success #stdin #stdout 0s 15224KB
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