Poster of Linux kernelThe best gift for a Linux geek
ggidev-add_3

ggidev-add_3

Section: GGI (3) Updated: 2006-12-30
Local index Up
 

NAME

ggidev-add_3, ggidev-sub_3, ggidev-mul_3, ggidev-divmod_3 - Binary arithmetic triple-int operations  

SYNOPSIS

#include <ggi/internal/triple-int.h>

unsigned *add_3(unsigned l[3], unsigned r[3]);
unsigned *sub_3(unsigned l[3], unsigned r[3]);

unsigned *mul_3(unsigned l[3], unsigned r[3]);
unsigned *divmod_3(unsigned a[3], unsigned b[3],
      unsigned q[3], unsigned r[3]);

 

DESCRIPTION

add_3 adds r to l. Equivalent to l+=r.

sub_3 subtracts r from l. Equivalent to l-=r.

mul_3 multiplies r with l. Equivalent to l*=r.

divmod_3 calculates the quotient q and the remainder r of a/b such that a = q * b + r. Equivalent to r=a%b,q=a/b.

Multiplication and division needs to operate on limbs to perform long multiplication and division. If a type with twice the precision of an unsigned is found (typically the long long type), unsigned is used as the limb. If not, half the bits of an unsigned are used as the limb.

The division algorithm is probably similar to the algorithm described by Donald E. Knuth in "The Art of Computer Programming", volume 2, but the author of the code has not actually read that book, only a short description of the algorithm. The degree of similarity is therefore uncertain.  

RETURN VALUE

add_3, sub_3 and mul_3 all return a pointer to l which has been updated in place.

divmod_3 returns a pointer to the quotient q.  

EXAMPLES

Some binary arithmetic operations on triple-ints:

unsigned x[3], y[3], q[3], r[3];

assign_int_3(x, 4);
assign_int_3(y, 5);
add_3(x, y);          /* x == 9 */
assign_int_3(q, 3);
sub_3(x, q);          /* x == 6 */
mul_3(x, q);          /* x == 18 */
divmod_3(x, y, q, r); /* q == 3, r == 3 */

 

SEE ALSO

triple-int(7), assign_int_3(3)


 

Index

NAME
SYNOPSIS
DESCRIPTION
RETURN VALUE
EXAMPLES
SEE ALSO

This document was created by man2html, using the manual pages.
Time: 21:46:51 GMT, April 16, 2011