[GRASSdev] Overflow warning in r.mapcalc calculation
Rainer M. Krug
Rainer at krugs.de
Thu May 16 00:38:32 PDT 2013
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)/(30079666671175699902) *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 32bit, so the result is limited
>>> to the range +/ 2147483647 (2^311).
>>
>>
>> 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>
>>> _______________________________________________
>>> grassdev mailing list
>>> grassdev at lists.osgeo.org
>>> http://lists.osgeo.org/mailman/listinfo/grassdev
>>>
>>
>>
>> 
>> 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
>>
>>

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 : +33  (0)9 58 10 27 44
Fax (D): +49  (0)3 21 21 25 22 44
email: Rainer at krugs.de
Skype: RMkrug
 next part 
A nontext attachment was scrubbed...
Name: not available
Type: application/pgpsignature
Size: 489 bytes
Desc: not available
URL: <http://lists.osgeo.org/pipermail/grassdev/attachments/20130516/3a0e634f/attachment.pgp>
More information about the grassdev
mailing list