128 bit math

B

Bruce.

MS VC Developer Studio 2003.

I have some rather large integer numbers, 128 bits, I need to crunch. I
need to be able to add, subtract, multiply, and divide. In no case would
the result exceed 128 bits. Test for equal, greater than, less than.

I would use _int128 if it existed.

The values are currently in byte arrays such as:

unsigned char value[16];

arranged little endian (least significant first).

Anyone know of a quick and easy way to do this?

Thanks,
Bruce.
 
C

Chris McDonald

Bruce. said:
MS VC Developer Studio 2003.
I have some rather large integer numbers, 128 bits, I need to crunch. I
need to be able to add, subtract, multiply, and divide. In no case would
the result exceed 128 bits. Test for equal, greater than, less than.
I would use _int128 if it existed.
The values are currently in byte arrays such as:
unsigned char value[16];
arranged little endian (least significant first).
Anyone know of a quick and easy way to do this?


By treating the arrays as pairs of int64_t's ?
When 64-bit machines were far less common, many used a library developed
by Netscape to support 64-bit arithmetic using arrays of two 32-bit numbers.
It was supported by a header file of prototypes and macros to account for
endianness concerns.
I suspect that much of that code could be reused for your application.
 
B

Bruce.

Chris McDonald said:
By treating the arrays as pairs of int64_t's ?
When 64-bit machines were far less common, many used a library developed
by Netscape to support 64-bit arithmetic using arrays of two 32-bit
numbers.
It was supported by a header file of prototypes and macros to account for
endianness concerns.
I suspect that much of that code could be reused for your application.

Any idea where I might find that code?

Bruce.
 
I

Ian Collins

Bruce. said:
MS VC Developer Studio 2003.
Please don't multi-post on Usenet. Cross-post if you think your
question is really appropriate for more than one group.
 
J

jacob navia

Bruce. said:
MS VC Developer Studio 2003.

I have some rather large integer numbers, 128 bits, I need to crunch. I
need to be able to add, subtract, multiply, and divide. In no case would
the result exceed 128 bits. Test for equal, greater than, less than.

I would use _int128 if it existed.

The values are currently in byte arrays such as:

unsigned char value[16];

arranged little endian (least significant first).

Anyone know of a quick and easy way to do this?

Thanks,
Bruce.

Use lcc-win32, it provides 128 bit numbers in the standard
distribution

http://www.cs.virginia.edu/~lcc-win32
 
E

enjoyamalp

Bruce. said:
MS VC Developer Studio 2003.
I have some rather large integer numbers, 128 bits, I need to crunch. I
need to be able to add, subtract, multiply, and divide. In no case would
the result exceed 128 bits. Test for equal, greater than, less than.
I would use _int128 if it existed.
The values are currently in byte arrays such as:
unsigned char value[16];
arranged little endian (least significant first).
Anyone know of a quick and easy way to do this?
Thanks,
Bruce.

Use lcc-win32, it provides 128 bit numbers in the standard
distribution

http://www.cs.virginia.edu/~lcc-win32
Dear Bruce,

Please try Intel 128 bit instruction(SSE /2/3) and 128 bit
registers(XMM registers). You can use these instructions for 128 bit
arithmetic. PADD*, PMUL* PSUB* etc are some of the instruction
samples. Even AMD processors have these kind instructions. Please read
the instructions manuals.

Use _asm block to right assembly in VC2003.

Thanks and regards,
Amal P.
 
C

Chris Saunders

There is a library available called GMP. It allows you to deal with
integers of arbitrary precision (reals and rationals too).

Here's the URL: http://gmplib.org/

Regards
Chris Saunders

Bruce. said:
MS VC Developer Studio 2003.
I have some rather large integer numbers, 128 bits, I need to crunch.
I
need to be able to add, subtract, multiply, and divide. In no case
would
the result exceed 128 bits. Test for equal, greater than, less than.
I would use _int128 if it existed.
The values are currently in byte arrays such as:
unsigned char value[16];
arranged little endian (least significant first).
Anyone know of a quick and easy way to do this?
Thanks,
Bruce.

Use lcc-win32, it provides 128 bit numbers in the standard
distribution

http://www.cs.virginia.edu/~lcc-win32
Dear Bruce,

Please try Intel 128 bit instruction(SSE /2/3) and 128 bit
registers(XMM registers). You can use these instructions for 128 bit
arithmetic. PADD*, PMUL* PSUB* etc are some of the instruction
samples. Even AMD processors have these kind instructions. Please read
the instructions manuals.

Use _asm block to right assembly in VC2003.

Thanks and regards,
Amal P.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,583
Members
45,075
Latest member
MakersCBDBloodSupport

Latest Threads

Top