NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.

To learn about what's going on, see About the Archive Site.

question about float to int type conversion...

NOTE: The netcdf-hdf mailing list is no longer active. The list archives are made available for historical reasons.

>>>>> "Ed" == Ed Hartnett <ed@xxxxxxxxxxxxxxxx> writes:
Ed>    float float_data_out2[DIM1_LEN] = {(float)INT_MIN - 1.0, (float)INT_MIN 
- 1.0, (float)INT_MAX + 129.0};

Hi Ed,
  Looking at your output, you're on a machine where
sizeof(float)==sizeof(int)==4. So the initialization of
float_data_out2[] is not doing what you expect. The problem is that
the significand of a float is less than 32 bits (because the sign and
exponent take up some of the other bits). So the +1.0 and -1.0 have
too small a magnitude to make any difference in the arithmetic. The
loss of significant digits can be seen in your output: INT_MIN-1.0
should be -2147483649, not -2147483648.

Ed> So why doesn't it generate an overflow?

Because by time HDF5 gets the data there is no overflow for your first
two array values. Using `double' should fix the problem because it can
represent all 32 bits of an `int'.

-- 
Robb Matzke L-159   | Ph:  812-967-6325  | I/O, I/O, it's off to disk we go,
Lawrence Livermore  | Fax: 812-967-6326  | A gigabyte to read or write,
National Laboratory | Hrs: 3am-11am PDT  | I/O, I/O.


  • 2005 messages navigation, sorted by:
    1. Thread
    2. Subject
    3. Author
    4. Date
    5. ↑ Table Of Contents
  • Search the netcdf-hdf archives: