diff options
Diffstat (limited to 'libj2_j2u_sub_j2u.3')
| -rw-r--r-- | libj2_j2u_sub_j2u.3 | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/libj2_j2u_sub_j2u.3 b/libj2_j2u_sub_j2u.3 new file mode 100644 index 0000000..c2a5baf --- /dev/null +++ b/libj2_j2u_sub_j2u.3 @@ -0,0 +1,130 @@ +.TH LIBJ2_J2U_SUB_J2U 3 LIBJ2 +.SH NAME +libj2_j2u_sub_j2u \- Calculate difference + +.SH SYNOPSIS +.nf +#include <libj2.h> + +void \fBlibj2_j2u_sub_j2u\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); +void \fBlibj2_j2u_sub_j2u_to_j2u\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); +void \fBlibj2_j2u_sub_ju\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); +void \fBlibj2_j2u_sub_ju_to_j2u\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); +void \fBlibj2_ju_sub_j2u_to_j2u\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); +void \fBlibj2_ju_sub_ju_to_j2u\fP(uintmax_t \fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); + +int \fBlibj2_j2u_sub_j2u_overflow\fP(struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); +int \fBlibj2_j2u_sub_j2u_to_j2u_overflow\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); +int \fBlibj2_j2u_sub_ju_overflow\fP(struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); +int \fBlibj2_j2u_sub_ju_to_j2u_overflow\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); +int \fBlibj2_ju_sub_j2u_to_j2u_overflow\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP, struct libj2_j2u *\fIr\fP); +int \fBlibj2_ju_sub_ju_to_j2u_overflow\fP(uintmax_t \fIa\fP, uintmax_t \fIb\fP, struct libj2_j2u *\fIr\fP); + +int \fBlibj2_j2u_sub_j2u_overflow_p\fP(const struct libj2_j2u *\fIa\fP, const struct libj2_j2u *\fIb\fP); +int \fBlibj2_j2u_sub_ju_overflow_p\fP(const struct libj2_j2u *\fIa\fP, uintmax_t \fIb\fP); +int \fBlibj2_ju_sub_j2u_overflow_p\fP(uintmax_t \fIa\fP, const struct libj2_j2u *\fIb\fP); +int \fBlibj2_ju_sub_ju_overflow_p\fP(uintmax_t \fIa\fP, uintmax_t \fIb\fP); + +void \fBlibj2_j2u_rsub_j2u\fP(struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP); +void \fBlibj2_j2u_rsub_ju\fP(struct libj2_j2u *\fIb\fP, uintmax_t \fIa\fP); + +int \fBlibj2_j2u_rsub_j2u_overflow\fP(struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP); +int \fBlibj2_j2u_rsub_ju_overflow\fP(struct libj2_j2u *\fIb\fP, uintmax_t \fIa\fP); + +int \fBlibj2_j2u_rsub_j2u_overflow_p\fP(const struct libj2_j2u *\fIb\fP, const struct libj2_j2u *\fIa\fP); +int \fBlibj2_j2u_rsub_ju_overflow_p\fP(const struct libj2_j2u *\fIb\fP, uintmax_t \fIa\fP); +.fi +.PP +Link with +.IR -lj2 . + +.SH DESCRIPTION +The above listed functions calculate the +difference of the values of +.I a +(the minuend) +and +.I b +(the subtrahend). +The functions with the parameter +.I r +store the result in +.IR r , +the other functions store the result in +.IR a , +except the functions +.BR libj2_j2u_sub_j2u_overflow_p (), +.BR libj2_j2u_sub_ju_overflow_p (), +.BR libj2_ju_sub_j2u_overflow_p (), +.BR libj2_ju_sub_ju_overflow_p (), +.BR libj2_j2u_rsub_j2u_overflow_p (), +and +.BR libj2_j2u_rsub_ju_overflow_p (), +only predict overflow, and do not calculate +the sum, and therefore does store it anywhere; +and except the functions +.BR libj2_j2u_rsub_j2u (), +.BR libj2_j2u_rsub_ju (), +.BR libj2_j2u_rsub_j2u_overflow (), +and +.BR libj2_j2u_rsub_ju_overflow (), +store the result in +.IR b . +.PP +The value-returning functions (that is, those +with word +.B overflow +in their name), detect arithmetic overflow. +.PP +The result is truncated to the least significant +bits, as many as can be stored, in case of overflow; +that is, modular arithmetics is used. + +.PP +The arguments are assumed to be +.RI non- NULL . + +.SH RETURN VALUE +For functions with a return value, the functions +return 1 if the result too large to be represented, +and 0 otherwise. + +.SH ERRORS +The above listed functions cannot fail. + +.SH HISTORY +The +.BR libj2_j2u_sub_j2u (3), +.BR libj2_j2u_sub_j2u_to_j2u (3), +.BR libj2_j2u_sub_ju (3), +.BR libj2_j2u_sub_ju_to_j2u (3), +.BR libj2_ju_sub_j2u_to_j2u (3), +.BR libj2_ju_sub_ju_to_j2u (3), +.BR libj2_j2u_sub_j2u_overflow (3), +.BR libj2_j2u_sub_j2u_to_j2u_overflow (3), +.BR libj2_j2u_sub_ju_overflow (3), +.BR libj2_j2u_sub_ju_to_j2u_overflow (3), +.BR libj2_ju_sub_j2u_to_j2u_overflow (3), +.BR libj2_ju_sub_ju_to_j2u_overflow (3), +.BR libj2_j2u_sub_j2u_overflow_p (3), +.BR libj2_j2u_sub_ju_overflow_p (3), +.BR libj2_ju_sub_j2u_overflow_p (3), +.BR libj2_ju_sub_ju_overflow_p (3), +.BR libj2_j2u_rsub_j2u (3), +.BR libj2_j2u_rsub_ju (3), +.BR libj2_j2u_rsub_j2u_overflow (3), +.BR libj2_j2u_rsub_ju_overflow (3), +.BR libj2_j2u_rsub_j2u_overflow_p (3), +and +.BR libj2_j2u_rsub_ju_overflow_p (3) +functions were added in version 1.0 of +.BR libj2 . + +.SH NOTES +The return value 1 represents negative +overflow. Positive overflow is impossible. + +.SH SEE ALSO +.BR libj2 (7), +.BR libj2_j2i_sub_j2i (3), +.BR libj2_j2i_add_j2i (3) |
