c - Explain this code in K&R 2-1 -


i'm trying determine range of various floating-point types. when read code:

#include <stdio.h>  main() {     float fl, fltest, last;     double dbl, dbltest, dblast;      fl = 0.0;     fltest = 0.0;     while (fl == 0.0) {         last = fltest;         fltest = fltest + 1111e28;         fl = (fl + fltest) - fltest;     }     printf("maximum range of float variable: %e\n", last);      dbl = 0.0;     dbltest = 0.0;     while (dbl == 0.0) {         dblast = dbltest;         dbltest = dbltest + 1111e297;         dbl = (dbl + dbltest) - dbltest;     }     printf("maximum range of double variable: %e\n", dblast);     return 0; } 

i don't understand why author added 1111e28 @ fltest variable ?

the loop terminates when fltest reaches +inf, @ point fl = (fl + fltest) - fltest becomes nan, unequal 0.0. last contains value when added 1111e28 produces +inf , close upper limit of float.

1111e28 chosen reach +inf reasonably quickly; needs large enough when added large values loop continues progress i.e. @ least large gap between largest , second-largest non-infinite float values.


Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -