[GRASS5] Re: [GRASS_DE] r.mapcalc round()

Markus Neteler neteler at geog.uni-hannover.de
Thu May 17 10:19:44 EDT 2001


On Wed, May 16, 2001 at 10:47:17PM +0100, Glynn Clements wrote:
> 
> Markus Neteler wrote:
> 
> > > Unless someone is planning on implementing a more robust variance
> > > algorithm, we should at least add a check for negative variance in
> > > r.univar. BTW, does s.univar suffer from the same problem?
> > 
> > I have tested this:
> 
> [snip]
> 
> >       standard deviation 1.45885e-13
> > coefficient of variation 1.32622e-11
> 
> [snip]
> 
> > -> far from being perfect
> 
> At least it didn't fail with a domain error, although that may well
> just be luck. Not having looked at the code, I can imagine that using
> a different input value might result in a variance slightly less than
> zero instead of one slightly greater.
> 
> > > > r.mapcalc seems to generate FCELL only. Shouldn't the range printed with
> > > > float precision then?
> > > 
> > > Yes. float has just under 7 digits of precision (FLT_EPSILON is around
> > > 1.19e-7 for IEEE single precision), so "%.6f" should do it. I suspect
> > > that "%.10f" was "pulled out of a hat".
> > 
> > O.k. I have changed that to "%.6f" in CVS.
> > Now I get:
> > 
> > r.mapcalc plane=1.1
> > range: 1.1 1.1
> > 
> > which is looking better.
> > 
> > and:
> > r.mapcalc plane=1.123456789
> > range: 1.123457 1.123457
> 
> Note, however, that a similar approach probably should NOT be adopted
> for writing data to files (e.g. sites files). Whilst using less
> precision than a float has may improve the appearance (and conserve
> space), it is likely to introduce further error.
> 
> Furthermore, "%f" (with or without width and/or precision modifiers)
> should never be used for data which is intended to be read by a
> program; use "%e" instead.
> 
> > > > Sorry for insisting here, but above range will
> > > > be expected to be wrong by the average user not familiar with precision
> > > > issues.
> > > > 
> > > > And r.stats: maybe the printed precision should be dependent from the
> > > > input map type, means more decimals for DCELL maps that FCELL maps.
> > > 
> > > Maybe; although this won't help if a DCELL map is generated using
> > > float data somewhere in the process.
> > 
> > O.k., but we should address the problem when displaying a FCELL map.
> > In above example I get:
> > 
> > r.stats -1 plane
> > 1.1234568357
> > 1.1234568357
> > 1.1234568357
> > 
> > instead of
> > 1.1234568
> > 1.1234568
> > 1.1234568
> > 
> > Could the RASTER_MAP_TYPE be used somehow for the "fprintf()"s?
> 
> It could, but I suggest that care is taken not to put neatness before
> accuracy.
> 
> Having said that, GRASS seems to use "%f" liberally, which tends to
> suck for very large or very small values; you get roughly constant
> absolute error rather than roughly constant relative error.
> 
> For an illustration, redo your tests with numbers a million times
> smaller; you'll end up with only two significant digits. OTOH, if you
> redo them with numbers a thousand times larger, you'll get the error
> digits back.
Glynn,

I agree with you that accuracy is to be considered, not neatness.
Therefore I am careful to change anything and continue to discuss/learn
here :-)

How shall we deal with the example:
r.mapcalc plane=1.123456789
r.stats -1 plane
 1.1234568357   
 1.1234568357   
 1.1234568357   
          ^^^   
          These numbers are phantasy.
As a lot of users (like me) like to redirect the output of r.stats into
awk and other tools, they run into troubles with precision.

I have implemented "-s" right now into r.stats (not uploaded yet) which
offers optional scientific notation (%e). In our example we would get:
1.123457e+

Does such a flag make sense? 
But: What about r.to.sites which is using %f and sending the wrong numbers
into the sites list? Here we need a change, too.

Regards

 Markus


---------------------------------------- 
If you want to unsubscribe from GRASS Development Team mailing list write to:
minordomo at geog.uni-hannover.de with
subject 'unsubscribe grass5'



More information about the grass-dev mailing list