[GRASS-dev] [GRASS-user] compare a DCELL and FCELL question

Zoltan zoltans at geograph.co.za
Sun Jan 24 08:34:02 PST 2021


No inconvenience - general list etiquette usually says start with 'user' 
and then move to 'dev' if it looks like a SW issue.
But I am NOT lecturing you, so please do not take offense.

Keep well,
Zoltan

On 2021-01-24 18:28, ming han wrote:
> sorry for the inconvenience. I was just not sure if it is problem that 
> needs developers to answer.
> Best regards
> Ming
>
> Zoltan <zoltans at geograph.co.za <mailto:zoltans at geograph.co.za>> 
> 于2021年1月24日周日 上午11:13写道:
>
>     Hi,
>     Is it important to cross-post this discussion on both dev and user
>     lists?
>
>     Regards,
>     Zoltan
>
>
>     On 2021-01-24 17:56, Markus Metz wrote:
>>     Trying to answer the original question: with a DCELL map
>>     "cat1_acc_riv" and a FCELL map "cat1_minacc", why is
>>     "float(cat1_acc_riv) == float(cat1_minacc)" not equal to
>>     "int(cat1_acc_riv) == int(cat1_minacc)" ?
>>
>>     int truncates to integer while float converts to single precision
>>     floating point. E.g. with cat1_acc_riv = 1.1 and cat1_minacc =
>>     1.9, "float(cat1_acc_riv) == float(cat1_minacc)" becomes "1.1 ==
>>     1.9" whereas "int(cat1_acc_riv) == int(cat1_minacc)" becomes "1
>>     == 1", thus the results are different.
>>
>>     Another reason for possible differences is that float can only
>>     represent max 7 decimal digits. E.g. float(194320567) becomes
>>     194320560 but int(194320567) preserves the value 194320567.
>>
>>     Thus the safest is to cast everything to the type with the
>>     highest precision. In this case with FCELL and DCELL, use
>>     "double(cat1_acc_riv) == double(cat1_minacc)" or even better the
>>     suggestion of Markus N.
>>
>>     Markus M
>>
>>
>>     On Sun, Jan 24, 2021 at 3:51 PM ming han <dustming at gmail.com
>>     <mailto:dustming at gmail.com>> wrote:
>>     >
>>     > Hi Markus and Micha
>>     >
>>     >      I am just trying to find grids have the same values in
>>     these two rasters, I will try the threshold approach.
>>     >
>>     > Thanks
>>     > Ming
>>     >
>>     > Markus Neteler <neteler at osgeo.org <mailto:neteler at osgeo.org>>
>>     于2021年1月24日周日 上午6:58写道:
>>     >>
>>     >> Hi Ming,
>>     >>
>>     >> On Sun, Jan 24, 2021 at 10:49 AM ming han <dustming at gmail.com
>>     <mailto:dustming at gmail.com>> wrote:
>>     >> >
>>     >> > Hi Micha
>>     >> >
>>     >> >      Many thanks for your reply.
>>     >> >      Here is the command I am using:
>>     >> >
>>     >> >      if(float(cat1_acc_riv) == float(cat1_minacc), str_r,
>>     null())
>>     >> >
>>     >> >       The str_r is a CELL raster. the result is different
>>     when I change it to:
>>     >> >        if(int(cat1_acc_riv) == int(cat1_minacc), str_r, null())
>>     >>
>>     >> Note that numerical "equality" is better tested with a
>>     threshold test
>>     >> against the map pixel difference.
>>     >> As the threshold, we use GRASS_EPSILON which is defined as
>>     1.0e-15.
>>     >>
>>     >> Hence the test needs to be implemented in a different way, i.e. by
>>     >> using an epsilon.
>>     >> Essentially something like this:
>>     >>
>>     >> if(fabs(map_A - map_B) <= 1.0e-15, ... )
>>     >>
>>     >> In your case (untested):
>>     >> r.mapcalc diffepsilon = if( abs( map_A - map_B) <= 1.0e-15,
>>     str_r , null())
>>     >>
>>     >> See related discussions here: [1], [2] and elsewhere.
>>     >>
>>     >> [1] Comment by Glynn:
>>     https://trac.osgeo.org/grass/ticket/2854#comment:9
>>     <https://trac.osgeo.org/grass/ticket/2854#comment:9>
>>     >> [2] Comment by Glynn:
>>     >>
>>     https://lists.osgeo.org/pipermail/grass-user/2015-October/073200.html
>>     <https://lists.osgeo.org/pipermail/grass-user/2015-October/073200.html>
>>     >>
>>     >> Best,
>>     >> Markus
>>     >
>>     > _______________________________________________
>>     > grass-dev mailing list
>>     > grass-dev at lists.osgeo.org <mailto:grass-dev at lists.osgeo.org>
>>     > https://lists.osgeo.org/mailman/listinfo/grass-dev
>>     <https://lists.osgeo.org/mailman/listinfo/grass-dev>
>>
>>     _______________________________________________
>>     grass-dev mailing list
>>     grass-dev at lists.osgeo.org  <mailto:grass-dev at lists.osgeo.org>
>>     https://lists.osgeo.org/mailman/listinfo/grass-dev  <https://lists.osgeo.org/mailman/listinfo/grass-dev>
>
>     -- 
>
>     =============================================
>     Zoltan Szecsei GPrGISc 0031
>     Geograph (Pty) Ltd.
>     GIS and Photogrammetric Services
>
>     Cape Town, South Africa.
>
>     Mobile: +27-83-6004028
>     www.geograph.co.za  <http://www.geograph.co.za>
>     =============================================
>
>     _______________________________________________
>     grass-dev mailing list
>     grass-dev at lists.osgeo.org <mailto:grass-dev at lists.osgeo.org>
>     https://lists.osgeo.org/mailman/listinfo/grass-dev
>     <https://lists.osgeo.org/mailman/listinfo/grass-dev>
>

-- 

=============================================
Zoltan Szecsei GPrGISc 0031
Geograph (Pty) Ltd.
GIS and Photogrammetric Services

Cape Town, South Africa.

Mobile: +27-83-6004028
www.geograph.co.za
=============================================

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20210124/4c840c70/attachment-0001.html>


More information about the grass-dev mailing list