#771: use longer ints for counting raster cells
---------------------+------------------------------------------------------
Reporter: hamish | Owner: [email protected]
Type: task | Status: new
Priority: normal | Milestone: 6.4.0
Component: Raster | Version: svn-develbranch6
Resolution: | Keywords: overflow
Platform: All | Cpu: Unspecified
---------------------+------------------------------------------------------
Comment (by glynn):
Replying to [ticket:771 hamish]:
> r.info man page:
{{{
Some standards (ISO-C90) and compilers do not support the 'long long' type
as a 64-bit type.
}}}
Just to clarify: C89 doesn't support it at all; the compiler will report a
syntax error if the code contains "long long".
> we should standardize on something. any reason not to make it unsigned?
For counts, using an unsigned type makes sense. Using "unsigned long" will
at least give you 64-bit values on 64-bit systems.
One caveat is that comparing signed and unsigned values will cast the
signed value to an unsigned value, which results in undefined behaviour if
the signed value is negative. So you need to use e.g.:
{{{
if (sval < 0 || (unsigned) sval < uval) ...
if (sval < 0 || (unsigned) sval <= uval) ...
if (sval >= 0 && (unsigned) sval == uval) ...
if (sval >= 0 && (unsigned) sval >= uval) ...
if (sval >= 0 && (unsigned) sval > uval) ...
}}}
to ensure that the signed-unsigned comparison is only performed when the
signed value is non-negative.
Another caveat is the difference between two arbitrary unsigned values
cannot be represented by the equivalent signed type.
--
Ticket URL: <https://trac.osgeo.org/grass/ticket/771#comment:1>
GRASS GIS <http://grass.osgeo.org>
_______________________________________________
grass-dev mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/grass-dev