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