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.
NOTE: The netcdf-hdf
mailing list is no longer active. The list archives are made available for historical reasons.
Robb Matzke <matzke@xxxxxxxx> writes: >>>>>> "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. > > Thanks very much - I should have seen that myself! Ed -- Ed Hartnett -- ed@xxxxxxxxxxxxxxxx
netcdf-hdf
archives: