In his introduction to his submission on variable precision integer arithmetic, John D'Errico wrote:
"Every once in a while, I've wanted to do arithmetic with large integers with magnitude exceeding that which can fit into MATLAB's standard data types. Since I don't have the symbolic toolbox, the simple solution was to write it in MATLAB." I don't know how "simple" his solution was to implement, but John created a new variable class (vpi) that is quite easy to use.
Actually, John's code is pretty impressive. Using his object class, one can easily manipulate very large integers--often larger than MATLAB is comfortable with. Consider:
a = 17^17
a = 8.2724e+020
ans = double
try factor(a) catch ME disp(ME.message); disp('Not gonna do it...wouldn''t be prudent!') end
The maximum value of n allowed is 2^32. Not gonna do it...wouldn't be prudent!
b = vpi(17)
b = 17
ans = vpi
ans = 827240261886336764177
ans = 1 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17 17
The Symbolic Math Toolbox
If you need more, or faster, there's always the Symbolic Math Toolbox. John's VPI class deals only with scalar integers, whereas VPA (from our Toolbox) also supports floating point numbers; it can work with Pi, for instance. Also, it supports matrices and n-dim arrays of numbers, and allows you to combine symbolic and numeric variables in expressions like "1.2*x+3.4*y". Nonetheless, John has given us a nice tool for manipulating integers. I'm interested in hearing your comments on this. Let us know how this might play a role in your workflows.
Get the MATLAB code
Published with MATLAB® 7.7