[GRASS-dev] dealing with nan
Glynn Clements
glynn at gclements.plus.com
Mon May 19 11:02:12 EDT 2008
Hamish wrote:
> places in the code to look for accidental creation of nan:
> - tan(pi/2)
That should be +/- Inf, not NaN. atan2(0,0) will return NaN, though.
> - GRASS nulls + non-core libgis functions meet mixed endian (?)
GRASS' FP nulls are the all-ones bit patterns, which are unaffected by
endianness issues.
> > The (x != x) test should be portable; OTOH, it's the
> > kind of thing that compilers often get wrong, particularly when
> > optimising (if you ignore NaN, x!=x is always false).
>
> there is a longstanding wish that 'r.null setnull=' could understand
> nan, so that you could get rid of them.
scanf("%f") etc understand "nan" (case not significant).
However, although "r.null ... setnull=nan" will result in a rule with
low==high==NaN, as NaN is neither less than, equal to, or greater than
itself, testing actual NaN values against that rule will always fail.
> e.g. very rarely r.in.xyz will create them, I am not sure why/how.
Maybe you actually have "nan"s in the file?
> > For 7.0, I intend to change G_is_[fd]_null_value() to treat
> > all NaN values as null, not just the specific bit patterns which
> > it currently uses.
>
> the only reason I could see to keep them as nan not grass-NULL would
> be for debugging (there is obviously a bug if you get them..).
I'm not proposing changing G_set_[df]_null_value(), only the test. If
the test is changed, there's no reason to explicitly convert "other"
NaN values to the GRASS value (which is just one possible NaN value;
any value with an all-ones exponent and a non-zero mantissa is NaN).
--
Glynn Clements <glynn at gclements.plus.com>
More information about the grass-dev
mailing list