This archive contains answers to questions sent to Unidata support through mid-2025. Note that the archive is no longer being updated. We provide the archive for reference; many of the answers presented here remain technically correct, even if somewhat outdated. For the most up-to-date information on the use of NSF Unidata software and data services, please consult the Software Documentation first.
>To: address@hidden
>cc: carrie@pemrac
>From: address@hidden (Carrie Gonzalez)
>Organization: .
>Keywords: 199705071848.MAA04257
Hi Carrie,
> I have a question. I have a float variable and am trying to define an
> attribute (_FillValue) for this variable. I read in the netCDF users
> guide on page 127 that a flag type can hold values between -3.4+38 and
> 3.4e+38 I need to hold the value -1.0e-31 (minus 31). What data type
> can I use? At first, I thought it was because I was printing the value
> %.2e so I changed it to %.0f, but ncgen still gives an error code.
Just guessing, but did you by any chance just specify the attribute as
something like
x:_FillValue = -1.0e-31;
and get the ncgen error
ncgen: ... variable x: _FillValue type mismatch
If so, then the problem is that the type of the _FillValue attribute
must match the type of its variable. The constant "-1.0e-31" is a
double constant, not a float constant (following the C convention that
floating-point constants are double by default).
To specify a float constant, you actually need to append an "f":
x:_FillValue = -1.e-31f ;
I believe this is documented in the User's Guide chapter on Utilities,
in the section on syntax for constants in CDL, but perhaps it should be
noted more prominently, since users often think "-1.0d-31" is a double
constant (it is), but "-1.0e-31" is a float constant (it isn't).
--Russ
_____________________________________________________________________
Russ Rew UCAR Unidata Program
address@hidden http://www.unidata.ucar.edu