// 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….
I converted the Java version of BigDecimal
Here it is:
http://code.google.com/p/bigdecimal/
very nice work Rouche ๐