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.
On Mon, 16 Mar 1998 Randy Zagar wrote in ncdigest Volume 01 : Number 445: > Subject: 'valid_min', 'valid_max', and 'valid_range' question > > I am currently writing some programs that 'pack' floating point > values into BYTE and SHORT variables, but keep the 'scale_factor' > and 'add_offset' attributes as FLOAT. > > My question is about the valid_{min,max,range} attributes... > > The NetCDF documentation says that 'valid_min', 'valid_max', > and 'valid_range' should be the same type as the packed variable, > but I'm finding it convenient to make them the same type as the > 'scale_factor' and 'add_offset' attributes... The section headed 'valid_range' includes the following sentence: "The type of each valid_range, valid_min and valid_max attribute should match the type of its variable (except that for byte data, these can be of a signed integral type to specify the intended range)." Note that this exception for type byte allows such data to be treated as either signed or unsigned. It you scale using attributes scale_factor and add_offset then it is essential to note that the valid range applies to the external packed values not the internal unpacked values. For example, say you want to store (internal) values ranging from -3.0 to +3.0 using netCDF type short. You could set scale_factor = 1.0e-4f valid_min = -30000s valid_max = 30000s where the suffix f means float & s means short. > It would seem to me that the appropriate data-type for these > attributes depends on whether one wants to do range-checking > before or after scaling the variables.. Are you suggesting following? valid_min = -30000.0f valid_max = 30000.0f This contravenes the conventions, but will usually work OK with version 3 due to automatic type conversion. Or are you suggesting following? valid_min = -3.0f valid_max = 3.0f This implies that there are only seven valid external (short) values: -3, -2, -1, 0, 1 ,2, 3 which correspond to unscaled values -0.0003 to 0.0003! Note that the fact that the data-type of the valid range attributes is float does NOT imply that these correspond to internal (float) values! In most cases (using version 3 which does automatic type conversion) the reading program does not need to worry about the external data-type. I hope this clarifies these conventions. Harvey Davies, CSIRO Mathematical and Information Sciences, Email: harvey.davies@xxxxxxxxxxxxx Phone: +61 3 9669 8110 or +61 3 9239 4556 Fax: +61 3 9669 8112
netcdfgroup
archives: