[GRASS-dev] Overflow warning in r.mapcalc calculation

Paulo van Breugel p.vanbreugel at gmail.com
Thu May 16 01:01:22 PDT 2013


Thanks for that Rainer. I have no expertise in C too, but let me file a 
feature / enhancement request, perhaps somebody can pick this up.

Cheers,

Paulo



On 05/16/2013 09:38 AM, Rainer M. Krug wrote:
> I just looked at the round function in xround.c, and it does not look to
> complicated to modify round() to obtain have three more functions, aligned to the
> R functions:
>
>  From the R help:
> ,----
> |      ‘ceiling’ takes a single numeric argument ‘x’ and returns a
> |      numeric vector containing the smallest integers not less than the
> |      corresponding elements of ‘x’.
> |
> |      ‘floor’ takes a single numeric argument ‘x’ and returns a numeric
> |      vector containing the largest integers not greater than the
> |      corresponding elements of ‘x’.
> |
> |      ‘trunc’ takes a single numeric argument ‘x’ and returns a numeric
> |      vector containing the integers formed by truncating the values in
> |      ‘x’ toward ‘0’.
> `----
>
> In addition, an additional argument could be added to the round()
> function to round to the number of specified decimal places, so that it
> is equivalent to your suggestion, Paulo.
>
>  From the R help:
> ,----
> |      ‘round’ rounds the values in its first argument to the specified
> |      number of decimal places (default 0).
> `----
>
> Unfortunately I don't have the experience in C and absolutely no time at
> the moment to get into it.
>
> Cheers,
>
> Rainer
>
>
> Paulo van Breugel <p.vanbreugel at gmail.com> writes:
>
>> I would second that, it certainly would be handy to be able to round
>> numbers outside the integer range and in addition, rounding with a specific
>> number of decimal places, like e.g., the function round() in R. Is there a
>> specific reason the round() function results in an integer?
>>
>> Paulo
>>
>>
>> On Wed, May 15, 2013 at 9:20 PM, Rainer M Krug <r.m.krug at gmail.com> wrote:
>>
>>>
>>> On Wednesday, May 15, 2013, Glynn Clements wrote:
>>>
>>>> Paulo van Breugel wrote:
>>>>
>>>>> I am having trouble with the following computation, which gives me an
>>>>> overflow warning ("WARNING: Overflow occured in the calculation").
>>>>>
>>>>> r.mapcalc "A = if(B==0,
>>>> (round(C/0.0001)-1175699902)/(3007966667-1175699902) *100.0, 1)" --overwrite
>>>>>
>>>>> whereby C is a map with values between 1 and 31000. It seems to be
>>>>> related to the size of the numbers (no warning if I divide C by 0.001),
>>>>> but I am not clear what limit I am hitting here or how to avoid this.
>>>>>
>>>>> The warning does not stop the calculation, and the resulting map seems
>>>>> to be correct. However, I rather avoid this warning, also because the
>>>>> warning message causes problems when running in batch from within R.
>>>> The round() function always returns an integer, regardless of its
>>>> argument types. Integers are always 32-bit, so the result is limited
>>>> to the range +/- 2147483647 (2^31-1).
>>>
>>> True - but is there an equivalent function to round numbers outside the
>>> integer range? Would be useful. Looking at the functions in r.mapcalc, I
>>> can't think of a way of doing this?
>>>
>>> Rainer
>>>
>>>
>>>> --
>>>> Glynn Clements <glynn at gclements.plus.com>
>>>> _______________________________________________
>>>> grass-dev mailing list
>>>> grass-dev at lists.osgeo.org
>>>> http://lists.osgeo.org/mailman/listinfo/grass-dev
>>>>
>>>
>>> --
>>> Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation
>>> Biology, UCT), Dipl. Phys. (Germany)
>>>
>>> Centre of Excellence for Invasion Biology
>>> Stellenbosch University
>>> South Africa
>>>
>>> Tel :       +33 - (0)9 53 10 27 44
>>> Cell:       +33 - (0)6 85 62 59 98
>>> Fax (F):       +33 - (0)9 58 10 27 44
>>>
>>> Fax (D):    +49 - (0)3 21 21 25 22 44
>>>
>>> email:      Rainer at krugs.de
>>>
>>> Skype:      RMkrug
>>>
>>>

-- 

Paulo van Breugel
Department of Geosciences and Natural Resource Management
Section of Forest, Nature and Biomass
University of Copenhagen

Rolighedsvej 23
1958 Frederiksberg C
Phone: +45 353-31646
Phone: +31 6 12189147
e-mail: pvb at life.ku.dk
e-mail: p.vanbreugel at gmail.com

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osgeo.org/pipermail/grass-dev/attachments/20130516/52e69d91/attachment.html>


More information about the grass-dev mailing list