Thread: Truncate/Mod
View Single Post
  #5   Report Post  
Posted to microsoft.public.excel.programming
Dana DeLouis Dana DeLouis is offline
external usenet poster
 
Posts: 947
Default Truncate/Mod

Right now building and testing the program I am modeling this...
1.9923E+130 by 17947.
I keep getting a variable overflow message.


Hi. If you are trying to do large Mod's with Excel, here is a very general
technique mentioned by Harlan Grove using vba.
First off, Excel's vba's MOD function will probably not work. However, we
can use your Mod function as a workaround.

Reference:
XL: MOD() Function Returns #NUM! Error Value
http://support.microsoft.com/default...b;en-us;119083

It's probably easier to use a math program for this demo, but it should be
easy to follow.
Let's scale the problem down to fit here. You should be able to adjust it
for your own larger numbers.

Our two numbers...
n = 199230000000000000000000000000;
m = 17947;

We are trying to use Excel to find this...

Mod[n, m]
13321

So for now, we know the answer to be 13321.
= = = = = = = = = = = = = = = = = = = = = = = =

First, break the large number down into manageable sizes. We'll use a size
of 6. i.e. Place each group of 6 numbers into an array.
199230-000000-000000-000000-000000

To add 6 zero's to a number, multiply by 1000000.
Scale = 1000000;

Our first manageable Mod operation:
Mod[199230, m]
1813

Now loop 4 times.
Take previous answer, and append the next 6 numbers.

Mod[1813*Scale, m]
12007

Mod[12007*Scale, m]
8325

Mod[8325*Scale, m]
14845

Our last loop should give us our answer.
Mod[14845*Scale, m]
13321

Which it does. :)
--
HTH. :)
Dana DeLouis
Windows XP, Office 2003


"Abode" wrote in message
...
I've been working on this for the good portion of today and Im very
baffled.
I'm probably overlooking something very simple. Anyway I need to get the
mod
of some very very large numbers. So large I need to split it down into
smaller componants just to load it into a double (Im doing this all for
fun.
I just really want to figure this out because there must be a way).
Anyway,
so I've split the number into a much smaller number 1.9923E+130
approximately. I need to mod this number by a variable that can reach
well
into the 60,000s. Unfortunately as far as I can tell the Mod operator is
only capable of returning an integer. I believe integers can only go up
to
16k or 32k.

Right now building and testing the program Im modding this 1.9923E+130 by
17947. I keep getting a variable overflow message. I've attempted to
write
my own Mod function which needed its own Truncate function (Does VBA even
that the ability to truncate?!). It works find on smaller numbers.
Something well into the quintillians I believe. But when it faces by
1.9923E+130 my truncate function returns a 1. Okay, well my truncate
function is probably doing it all wrong. Its basically:

Arr = Split(number, "."
trunc = Arr(0)

My Mod function is something along the lines of:

number = number / divisor
TruncNum = trunc(number)
fMod = (number - TruncNum) * divisor

So if anyone has any suggestions or sollutions please let me know. If
pursuing this little project of mine is just rediculous please let me know
too. I've been having fun thusfar minus the arteries which may have
ruptured
in my head. Blah.