[GRASS-dev] r.mapcal rand() strangeness
Maciej Sieczka
tutey at o2.pl
Sun Feb 24 12:39:36 EST 2008
Maciej Sieczka pisze:
> Maciej Sieczka pisze:
>> Glynn Clements pisze:
>>> Maciej Sieczka wrote:
>>>> $ r.mapcalc 'map=rand(-2147483648,2147483647)'
>>> res[i] = (lo == hi) ? lo : lo + x % (hi - lo);
>>>
>>> The expression (hi - lo) is overflowing the range of a signed integer.
> Are all GRASS modules limited to Int32, ie. -2147483648 to 214748364? I
> can see r.mapcalc silently forces 214748364 for anything bigger...
This is not entirely correct. More findings:
The following silently forces 2147483647 on anything bigger:
$ r.mapcalc 'map=9999999999999999999'
$ r.info -rt map
min=2147483647
max=2147483647
datatype=CELL
This one too, though I'm trying to enforce double:
$ r.mapcalc 'map=double(9999999999999999999)'
$ r.info -rt map
min=2147483647.000000
max=2147483647.000000
datatype=DCELL
Trying the same by adding a decimal place separator, results in
something bizzare to me:
$ r.mapcalc 'map=99999999999999999999999.0'
$ r.info -rt map
min=99999999999999991611392.000000
max=99999999999999991611392.000000
datatype=DCELL
$ r.mapcalc 'map=9999999999999999999.0'
$ r.info -rt map
min=10000000000000000000.000000
max=10000000000000000000.000000
datatype=DCELL
At the edges of Float32 range other strange things happen:
Shouldn't the below be rather
min,max=340282000000000000000000000000000000000.0?:
$ r.mapcalc 'map=3.40282e38'
$ r.info -rt map
min=340282000000000014192072600942972764160.000000
max=340282000000000014192072600942972764160.000000
datatype=DCELL
The the one below should be -340282000000000000000000000000000000000.0 I
guess:
$ r.mapcalc 'map=-3.40282e38'
$ r.info -rt map
min=-340282000000000014192072600942972764160.000000
max=-340282000000000014192072600942972764160.000000
datatype=DCEL
At bigger Float64 values r.mapcalc crashes:
$r.mapcalc 'map=3.40282e110'
*** stack smashing detected ***: r.mapcalc terminated
Aborted (core dumped)
$ r.mapcalc 'map=1.79769e+308'
100%
*** stack smashing detected ***: r.mapcalc terminated
Aborted (core dumped
>> BTW, what are the NULL value for double and float?
Still curious (to document it).
Maciek
More information about the grass-dev
mailing list