I believe integer is a 32-bit signed integer. Your first example ends up
causing integer overflow.
I was curious so I googled [1]. You'll see somewhat curious behavior in the LL grid as well in those situations, though
I think the curious behaviour will be different from our curious behaviour.
[1]
http://wiki.secondlife.com/wiki/LSL_101/LSL_in_Focus:_Integers#Integer_Overflow
On 08/05/13 15:16, Dr Ramesh Ramloll wrote:
Hello,
I am sharing on this list hoping that some brains could help me figure this one
out. I think I have hit a modulus
divisor bug. Please let me know what you think. This had a significant impact
on my scripts ... the whole thing froze
after I made a simple change to a single variable and am wondering if I have
hit some constraints that I am not aware
of. Basically I am trying to pass parameters to a rezzed child object (see
below). I generate values at the parent prim
and try to get those values back from the rezzed child. Any thoughts
appreciated.
Thank you.
integer commChannel =54;
integer modulus_divisor = 1000000000;
integer objectPinIndex = 23;
integer rezParameter;
integer repro_commChannel;
integer repro_objectPinIndex;
default
{
state_entry()
{
rezParameter = -1*((commChannel*modulus_divisor)+(objectPinIndex));
repro_commChannel = -1*((integer)rezParameter)/modulus_divisor;
repro_objectPinIndex = -1*((integer)rezParameter)%modulus_divisor;
llOwnerSay("modulus="+(string)modulus_divisor);
llOwnerSay("objectPinIndex="+(string)objectPinIndex);
llOwnerSay("commChannel="+(string)commChannel);
llOwnerSay("REPRODUCING VALUES");
llOwnerSay("repro_objectPinIndex="+(string)repro_objectPinIndex);
llOwnerSay("repro_commChannel="+(string)repro_commChannel);
}
}
output follows:
modulus=100000000 (eight zeroes)
[06:57] Primitive: modulus=100000000
[06:57] Primitive: objectPinIndex=23
[06:57] Primitive: commChannel=54
[06:57] Primitive: REPRODUCING VALUES
[06:57] Primitive: repro_objectPinIndex=5032727
[06:57] Primitive: repro_commChannel=11
now change modulus = 10000000
output is:
Primitive: modulus=10000000 (seven zeroes)
[06:56] Primitive: objectPinIndex=23
[06:56] Primitive: commChannel=54
[06:56] Primitive: REPRODUCING VALUES
[06:56] Primitive: repro_objectPinIndex=23
[06:56] Primitive: repro_commChannel=54
also, modulus_divisor = 29999999 works
modulus_divisor = 39699999 also works; this appears to be the experimental
upper bound before modulus_divisor stops working.
I did not expect this.
--
'Consider how the lilies grow. They do not labor or spin.'
*Rameshsharma Ramloll* PhD, CEO CTO DeepSemaphore LLC, Affiliate /Research
Associate Professor/, Idaho State University,
Pocatello, ID 83209 Tel: 208-240-0040
Blog <http://deepsemaphore.posterous.com/>, LinkedIn
<http://www.linkedin.com/in/rameshramloll>, DeepSemaphore LLC
<http://www.deepsemaphore.com>, Google+ profile
<https://plus.google.com/103652369558830540272/about>
_______________________________________________
Opensim-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-users
--
Justin Clark-Casey (justincc)
OSVW Consulting
http://justincc.org
http://twitter.com/justincc
_______________________________________________
Opensim-users mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/opensim-users