I've written large integer multiplication routines before. This is over twice as fast as those were, and many times faster than other routines I've seen. On my mac it will multiply two 9,000-digit numbers in under a second. I've tested it up to multiplying two 100,000-digit numbers, which takes about 45 seconds. This handles positive and negative arguments, and the order (large, small, or small, large) does not matter.
I have tested the results with this over thousands of example numbers against other large number libraries to ensure accuracy, but more testing for edge cases is always appropriate. And of course if anyone has any suggestions or questions I'm all ears. div/mod is next, but not a rush, since I'm just doing this for fun. function bTimes X,Y if char 1 of X is "-" then put "-" into leadChar delete char 1 of X end if if char 1 of Y is "-" then if leadChar is "-" then put empty into leadChar else put "-" into leadChar delete char 1 of Y end if put X & Y into R put "0000000000000000" into char 1 to 10 of R put (6 + length(X)) div 7 * 7 into XL put char 1 to XL - length(X) of "000000" before X put (6 + length(Y)) div 7 * 7 into YL put char 1 to YL - length(Y) of "000000" before Y put length(R) - 6 into rStart repeat with N = XL + YL down to 15 step -7 put min(XL,N - 7) into finalM put 0 into C repeat with startM = max(7,N - YL) to finalM - 7 step 630 repeat with M = startM to min(startM + 623,finalM) step 7 add (char M - 6 to M of X) * (char N - M - 6 to N - M of Y) to S end repeat add char 1 to -8 of S to C delete char 1 to -8 of S end repeat put char -7 to -1 of ("000000" & S) into char rStart to rStart + 6 of R subtract 7 from rStart put C into S end repeat if S > 0 then put S into char max(1,rStart) to rStart + 6 of R put 0 into zR repeat until zR > 0 put 0 + char 1 to 15 of R into zR put zR into char 1 to 15 of R end repeat return leadChar & R end bTimes _______________________________________________ use-livecode mailing list use-livecode@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-livecode