User:Acheron Gloom

From Second Life Wiki
Revision as of 10:50, 1 August 2012 by Acheron Gloom (talk | contribs) (Added some functions.)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

IntegerLength

<lsl> integer getDigitsStrLen(integer x){//Low memory usage, but horrible performance. Don't use this, its just an example.

   return llStringLength((string)x);

}

integer getDigitsLog(integer x){//Low memory usage (35 bytes), good performance. Use this if memory is your main concern. You can probably in-line it for a small performance gain.

   return (integer)llLog10(x);

}

//The two functions below only work up to 8 digits. I use them for text prims. integer get8DigitsNoBranch(integer x){ //Decent memory usage (123 bytes), Better performance. Use this if you want a balanced method.

   return -~((x >= 10) + (x >= 100) + (x >= 1000) + (x >= 10000) + (x >= 100000) + (x >= 1000000) + (x >= 10000000));

}

integer get8DigitsTree(integer x){//High memory usage (239 bytes), best performance. Use this if you need speed. Inline if you need even more speed.

   if (x >= 10000) {
       if (x >= 10000000) return 8;
       if (x >= 100000){
           if (x >= 1000000) return 7;
           return 6;
       }
       return 5;
   }
   if (x >= 100){
       if (x >= 1000) return 4;
       return 3;
   }
   if (x >= 10) return 2;
   return 1;

}

//The two functions below work up to the integer max. I don't need them, but someone might. They're just minor modifications. integer getDigitsNoBranch(integer x){ //Decent memory usage (123 bytes), Better performance. Use this if you want a balanced method.

   return -~((x >= 10) + (x >= 100) + (x >= 1000) + (x >= 10000) + (x >= 100000) + (x >= 1000000) + (x >= 10000000) + (x >= 100000000) + (x >= 1000000000));

}

integer getDigitsTree(integer x){//High memory usage (239 bytes), best performance. Use this if you need speed. Inline if you need even more speed.

   if(x >= 10000) {
       if(x >= 10000000){
           if(x >= 100000000){
               if(x >= 1000000000) return 10;
               return 9;
           }
           return 8;
       }
       if(x >= 100000){
           if(x >= 1000000) return 7;
           return 6;
       }
       return 5;
   }
   if(x >= 100){
       if(x >= 1000) return 4;
       return 3;
   }
   if(x >= 10) return 2;
   return 1;

} </lsl>