There are also few functions implementing bitwise shifts and addition...
However my biggest regard is about binary addition (multiplying two integers requires few addition steps), which is damn slow, maybe somehow has an idea on how to improove the addition?
The run-time for multiplying two 32 bit integer is around 17-18 sec.
CODE
integer result = 1;
// string for filling numbers with leading zeros
string toto = "000000000000000000000000000000000000000000000000000000";
// 32 bit integer
string number1 = "11111111111110111111111111111111";
// 32 bit integer
string number2 = "11111111111111111111111111101111";
string temp = "";
string t2 = "";
integer k = 0;
integer j = 0;
integer f = 0;
integer s = 0;
integer carry = 0;
integer i = 0;
integer dif = 0;
string mulTmp;
string binAdd( string n1, string n2 )
{
temp = "";
t2 = "";
carry = 0;
dif = llStringLength(n1)-llStringLength(n2);
i=0;
if( dif < 0 )
{
n1 = llGetSubString( toto,0, llAbs(dif)- 1) + n1;
}
else
{
if( dif > 0 )
{
n2 = llGetSubString( toto,0,llAbs(dif)- 1) + n2;
}
}
i = llStringLength(n1)- 1;
temp = "";
t2 = "";
carry = 0;
while( i >=0 )
{
f = (integer)llGetSubString( n1, i, i );
s = (integer)llGetSubString( n2, i, i );
if( f && s && carry )
{
carry=1;
temp = "1" + temp;
} else if (f && s || ((f || s) && carry)) {
carry=1;
temp = "0";
} else {
if(f || s || carry) {
temp = "1" + temp;
} else {
temp = "0" + temp;
}
carry = 0;
}
i--;
}
if( carry ) { temp = "1" + temp; }
return temp;
}
string binShiftLeft( string n1 )
{
return n1 + "0";
}
string binShiftRight( string n1 )
{
i = llStringLength(n1)- 1;
return llDeleteSubString( n1, i, i );
}
string binMul( string n1, string n2 )
{
mulTmp = "0";
k = 0;
if( binOdd(n2) )
{
mulTmp = n1;
}
while( n2 != "1" )
{
n1 += "0";
k = llStringLength(n2)- 1;
n2 = llDeleteSubString( n2, k, k );
if( llGetSubString( n2, k- 1, k- 1) == "1" )
{
mulTmp = binAdd( mulTmp, n1 );
}
}
return mulTmp;
}