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.vanbreu...@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.k...@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 <gl...@gclements.plus.com>
_______________________________________________
grass-dev mailing list
grass-dev@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:      rai...@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: p...@life.ku.dk
e-mail: p.vanbreu...@gmail.com

_______________________________________________
grass-dev mailing list
grass-dev@lists.osgeo.org
http://lists.osgeo.org/mailman/listinfo/grass-dev

Reply via email to