Adding Very Large Numbers

// tracing out large numbers will go into exponent notation
trace(1000000000000000000000000);
// outputs: 1e+24

var a:String =  "1000000000000000000000009";
var b:String = "12000000000000000000000001";

// bigAdd function adds two large numbers 
trace(bigAdd(a, b));
// outputs: 13000000000000000000000010

// unclear what regular addition is doing here:
trace(int(a) + int(b));
// outputs: -3758096384

function bigAdd(a:String, b:String):String{
       var answer:String="";
       var carry:int = 0;
	   var zeros:int = 0;
	   var i:int = 0;
	   var max:int = 0;
	    
		// obtain max variable and prepend zeros to the shortest string
	   if (a.length > b.length){
		  max = a.length;
		  zeros = max - b.length;
		   for (i= 0; i<zeros; i++) {
				b = "0" + b;
		   }
	   }else if (b.length >  a.length){
		   max = b.length;
		   zeros = max - a.length;
		   for (i= 0; i<zeros; i++) {
				a = "0" + a  ;
			}
	   }else{
		   // a and b have same number of digets
		   max = a.length;   
	   }
	   
	   // add each character starting with the last (max - 1), 
	   // carry the 1 if the sum has a length of 2
       for (i = max - 1;  i > -1; i--){ 
               var sum:String = String(int(a.charAt(i)) + int(b.charAt(i)) + carry);

               if (sum.length == 2){
                       answer = sum.charAt(1) + answer;
                       carry = 1;
               }else{
                       carry = 0;
                       answer = sum + answer;
               }
       }
	   if (carry == 1){
           answer = 1 + answer;
       }
       return answer;
}

This snippet demos a function called bigAdd(), which can be used to add very large numbers that the standard numerical datatypes (int, Number, etc) won’t really work with. It uses a string based addition algorithm.

When I decided to write this snippet I dug around for awhile trying to find a nice elegant algorithm to port, something done without prepending zeros etc…. but I couldn’t find one that suited my needs… so I just created this one from scratch. There’s room for optimization and improvement but it works well enough for just playing around.

BigDecimal & BigInteger

A few months back I needed to do some programming with very large numbers. I dug around for awhile and eventually found out that java has a built in BigInteger andBigDecimal class…. I used java to write the program I had in mind, but thought it would be fun to eventually create something similar for ActionScript….

2 comments

Leave a Reply

Your email address will not be published. Required fields are marked *