Win a copy of Mesos in Action this week in the Cloud/Virtualizaton forum!

# Math with array of bytes, need some guidance

D diller
Greenhorn
Posts: 29
Hey -

I am trying to write a program that takes an input of a file formatted as such:
number1
number2
operator1
number3
operator2
etc, where after number1 there is a sequence of number -- operator. Then the math for doing it should be number 1 (operator 1) number 2 = new number
The problem is that these numbers are far too large to use an int, probably even a float once you get down to many operations including powers. So I would like to use an array of bytes in order to calculate the number correctly.

My problem is that I have absolutely no idea where to start. Can anybody give me any pointers?

Ernest Friedman-Hill
author and iconoclast
Marshal
Posts: 24211
35

D diller
Greenhorn
Posts: 29
Homework assignment, can't. My professor for some reason thinks that making us do the hard things instead of using what's already available to us is the best way to teach us.

Campbell Ritchie
Sheriff
Posts: 48968
60
Obviously you are supposed to think through the algorithms you are using.

Try an int[] where each member of the array represents a decimal digit, and maybe a boolean flag for positive and negative. You can go through from right to left adding numbers at different positions and use the / and % operators to obtain the result and the carry. That's adding. Then work out how to do subtracting multiplying and dividing.

Powers are much more difficult; unless they are whole numbers, they use logs and cannot be readily implemented by this method. The quickest way to implement powers is probably to use a recursive method. It isn't difficult, but I can't remember just at the moment how to do it.

D diller
Greenhorn
Posts: 29
He went over it a bit for the powers, so I'm not too worried about that - and I would use an int[] but he's already specified to use a byte[]. Oh well...

Thanks for the tip on % though.

Garrett Rowe
Ranch Hand
Posts: 1296
You might be able to get some ideas from the Arbitrary-precision arithmetic wiki article

Campbell Ritchie
Sheriff
Posts: 48968
60
You can use bytes for the individual digits; each byte can hold from -128 to +127.