tags:

views:

163

answers:

6

i am building a compiler similar to c , but i want it to parse integers bigger than 2^32 . hows it possible?how has been big integers been implemented in python and ruby like languages ..!!

A: 

You would have to use some sort of struct in c to achieve this. You will find this is difficult if you are on and x86 platform and not x64 as well. If you're on x86, prepare to get very familiar with assembly and the carry flag.

Good luck!

samoz
little more specifications??
mekasperasky
You'd still be limited to 2^64. Real big ints are the way to go.
abababa22
+6  A: 

There are libraries to do this sort of thing.

Check out gmplib.

Simon Nickerson
A: 

I believe you'll need some sort of bigint library, which are available on the net, just do a bit of searching and you may find one that's suitable for your project.

Because, simply parsing the integers, I believe, will not be enough. Your users will want not only to store, but also, probably, perform operation with such numbers.

Paulo Santos
how can i write this library??!!
mekasperasky
A: 

If you want to write it yourself, follow my trip through memory lane ;-).

In the old days, when computers used 8 bits. We often needed to calculate with big numbers (like > 255). And we all had to write the routines. For example the addition.

If we needed to add numbers of two bytes to each other we used the following algorithm:

  • Add the least significant bytes.
  • If the result exceeded 8 bits, the carry bit was set.
  • Add the most significant bytes and the carry flag (if set).
  • If the result exceeded 8 bits you produced an overflow error (but you don't need to do this if you want more that 2 bytes.

You can extend this to more bytes/words/dwords/qwords and to other operators.

Gamecat
A: 

There is a slide by Felix von Leitner that covers some bignum basics. Personally i think it is quite informative and technical.

tr9sh
+1  A: 

There are lots of big number libraries, see this wikipedia article for a complete list.

GMP(GNU Multiple Precision Arithmetic Library) is sufficient for everything I have encountered. NTL is more of the same but is object orientated.

Generally these libraries represent the numbers with arrays with each digit of a number as a character if you want to roll your own but it is a lot of work.

Gerhard