arithmetique.h File Reference

#include <stdio.h>
#include <limits.h>
#include "arithmetic_errors.h"

Go to the source code of this file.

Defines

#define value_init(val)   ((val) = 0)
 package arithmetique
#define value_assign(v1, v2)   ((v1) = (v2))
#define value_set_si(val, i)   ((val) = (Value)(i))
#define value_set_double(val, d)   ((val) = (Value)(d))
#define value_clear(val)   ((val) = 0)
#define value_read(val, str)   (sscanf((str),VALUE_FMT,&(val)))
#define value_print(Dst, fmt, val)   (fprintf((Dst),(fmt),(val)))
#define value_swap(v1, v2)
#define int_to_value(i)   ((Value)(i))
#define long_to_value(l)   ((Value)(l))
#define float_to_value(f)   ((Value)(f))
#define double_to_value(d)   ((Value)(d))
#define value_eq(v1, v2)   ((v1)==(v2))
#define value_ne(v1, v2)   ((v1)!=(v2))
#define value_gt(v1, v2)   ((v1)>(v2))
#define value_ge(v1, v2)   ((v1)>=(v2))
#define value_lt(v1, v2)   ((v1)<(v2))
#define value_le(v1, v2)   ((v1)<=(v2))
#define value_abs_eq(v1, v2)   (value_abs(v1)==value_abs(v2))
#define value_abs_ne(v1, v2)   (value_abs(v1)!=value_abs(v2))
#define value_abs_gt(v1, v2)   (value_abs(v1)>value_abs(v2))
#define value_abs_ge(v1, v2)   (value_abs(v1)>=value_abs(v2))
#define value_abs_lt(v1, v2)   (value_abs(v1)<value_abs(v2))
#define value_abs_le(v1, v2)   (value_abs(v1)<=value_abs(v2))
#define value_sign(v)   (value_eq(v,VALUE_ZERO)?0:value_lt(v,VALUE_ZERO)?-1:1)
#define value_compare(v1, v2)   (value_eq(v1,v2)?0:value_lt(v1,v2)?-1:1)
#define value_plus(v1, v2)   ((v1)+(v2))
#define value_div(v1, v2)   ((v1)/(v2))
#define value_mod(v1, v2)   ((v1)%(v2))
#define value_direct_multiply(v1, v2)   ((v1)*(v2))
#define value_minus(v1, v2)   ((v1)-(v2))
#define value_pdiv(v1, v2)   (DIVIDE((v1),(v2)))
#define value_pmod(v1, v2)   (MODULO((v1),(v2)))
#define value_min(v1, v2)   (value_le((v1),(v2))? (v1): (v2))
#define value_max(v1, v2)   (value_ge((v1),(v2))? (v1): (v2))
#define value_or(v1, v2)   ((v1)|(v2))
#define value_and(v1, v2)   ((v1)&(v2))
#define value_lshift(v1, v2)   ((v1)<<(v2))
#define value_rshift(v1, v2)   ((v1)>>(v2))
#define value_addto(ref, val1, val2)   ((ref) = (val1)+(val2))
#define value_add_int(ref, val, vint)   ((ref) = (val)+(Value)(vint))
#define value_addmul(ref, val1, val2)   ((ref) += (val1)*(val2))
#define value_increment(ref, val)   ((ref) = (val)+VALUE_ONE)
#define value_direct_product(ref, val1, val2)   ((ref) = (val1)*(val2))
#define value_multiply(ref, val1, val2)   ((ref) = value_mult((val1),(val2)))
#define value_subtract(ref, val1, val2)   ((ref) = (val1)-(val2))
#define value_sub_int(ref, val, vint)   ((ref) = (val)-(Value)(vint))
#define value_decrement(ref, val)   ((ref) = (val)-VALUE_ONE)
#define value_division(ref, val1, val2)   ((ref) = (val1)/(val2))
#define value_divexact(ref, val1, val2)   ((ref) = (val1)/(val2))
#define value_modulus(ref, val1, val2)   ((ref) = (val1)%(val2))
#define value_pdivision(ref, val1, val2)   ((ref) = value_pdiv((val1),(val2)))
#define value_pmodulus(ref, val1, val2)   ((ref) = value_pmod((val1),(val2)))
#define value_oppose(ref, val)   ((ref) = value_uminus((val)))
#define value_absolute(ref, val)   ((ref) = value_abs((val)))
#define value_minimum(ref, val1, val2)   ((ref) = value_min((val1),(val2)))
#define value_maximum(ref, val1, val2)   ((ref) = value_max((val1),(val2)))
#define value_gcd(ref, val1, val2)   Gcd((val1),(val2),&(ref))
#define value_lcm(ref, val1, val2)   Lcm3((val1),(val2),&(ref))
#define value_orto(ref, val1, val2)   ((ref) = (val1)|(val2))
#define value_andto(ref, val1, val2)   ((ref) = (val1)&(val2))
#define value_uminus(val)   (-(val))
#define value_not(val)   (~(val))
#define value_abs(val)
#define value_pos_p(val)   value_gt(val,VALUE_ZERO)
#define value_neg_p(val)   value_lt(val,VALUE_ZERO)
#define value_posz_p(val)   value_ge(val,VALUE_ZERO)
#define value_negz_p(val)   value_le(val,VALUE_ZERO)
#define value_zero_p(val)   value_eq(val,VALUE_ZERO)
#define value_notzero_p(val)   value_ne(val,VALUE_ZERO)
#define value_one_p(val)   value_eq(val,VALUE_ONE)
#define value_notone_p(val)   value_ne(val,VALUE_ONE)
#define value_mone_p(val)   value_eq(val,VALUE_MONE)
#define value_notmone_p(val)   value_ne(val,VALUE_MONE)
#define value_cmp_si(val, n)   (val - (n))
#define value_min_p(val)   value_eq(val,VALUE_MIN)
#define value_max_p(val)   value_eq(val,VALUE_MAX)
#define value_notmin_p(val)   value_ne(val,VALUE_MIN)
#define value_notmax_p(val)   value_ne(val,VALUE_MAX)
#define value_protected_hard_idiv_multiply(v, w, throw)
#define value_protected_multiply(v, w, throw)   value_protected_hard_idiv_multiply(v,w,throw)
#define value_protected_mult(v, w)   value_protected_multiply(v,w,THROW(overflow_error))
#define value_protected_product(v, w)   v=value_protected_mult(v,w)
#define value_mult(v, w)
#define value_product(v, w)   v=value_mult(v,w)
#define value_substract(ref, val1, val2)   (value_subtract((ref),(val1),(val2)))
#define SIGN(x)   (((x)>0)? 1 : ((x)==0? 0 : -1))
#define DIVIDE(x, y)
#define POSITIVE_DIVIDE(x, y)   ((x)>0 ? (x)/(y) : - (-(x)+(y)-1)/(y))
#define MODULO(x, y)   ((y)>0 ? POSITIVE_MODULO(x,y) : POSITIVE_MODULO(-x,-y))
#define POSITIVE_MODULO(x, y)

Functions

void dump_exception_stack_to_file (FILE *)
void dump_exception_stack (void)
jmp_buf * push_exception_on_stack (int, const char *, const char *, int)
void pop_exception_from_stack (int, const char *, const char *, int)
void throw_exception (int, const char *, const char *, int)

Variables

unsigned int overflow_error
unsigned int simplex_arithmetic_error
unsigned int user_exception_error
unsigned int parser_exception_error
unsigned int any_exception_error
unsigned int the_last_just_thrown_exception

Define Documentation

#define DIVIDE ( x,
 ) 
Value:
((y)>0? POSITIVE_DIVIDE(x,y) : \
                     -POSITIVE_DIVIDE((x),(-(y))))

Definition at line 723 of file include/polylib/arithmetique.h.

#define double_to_value (  )     ((Value)(d))

Definition at line 473 of file include/polylib/arithmetique.h.

#define float_to_value (  )     ((Value)(f))

Definition at line 472 of file include/polylib/arithmetique.h.

#define int_to_value (  )     ((Value)(i))

Definition at line 470 of file include/polylib/arithmetique.h.

#define long_to_value (  )     ((Value)(l))

Definition at line 471 of file include/polylib/arithmetique.h.

#define MODULO ( x,
 )     ((y)>0 ? POSITIVE_MODULO(x,y) : POSITIVE_MODULO(-x,-y))

Definition at line 730 of file include/polylib/arithmetique.h.

#define POSITIVE_DIVIDE ( x,
 )     ((x)>0 ? (x)/(y) : - (-(x)+(y)-1)/(y))

Definition at line 727 of file include/polylib/arithmetique.h.

#define POSITIVE_MODULO ( x,
 ) 
Value:
((x) > 0 ? (x)%(y) : \
                              ((x)%(y) == 0 ? 0 : ((y)-(-(x))%(y))))

Definition at line 738 of file include/polylib/arithmetique.h.

#define SIGN (  )     (((x)>0)? 1 : ((x)==0? 0 : -1))

Definition at line 715 of file include/polylib/arithmetique.h.

#define value_abs ( val   ) 
Value:
(value_posz_p(val)? \
    (val) :                                \
    (value_ne((val), VALUE_NAN) ?          \
     value_uminus(val) :                   \
    (THROW (overflow_error), VALUE_NAN )))

Definition at line 541 of file include/polylib/arithmetique.h.

#define value_abs_eq ( v1,
v2   )     (value_abs(v1)==value_abs(v2))

Definition at line 484 of file include/polylib/arithmetique.h.

#define value_abs_ge ( v1,
v2   )     (value_abs(v1)>=value_abs(v2))

Definition at line 487 of file include/polylib/arithmetique.h.

#define value_abs_gt ( v1,
v2   )     (value_abs(v1)>value_abs(v2))

Definition at line 486 of file include/polylib/arithmetique.h.

#define value_abs_le ( v1,
v2   )     (value_abs(v1)<=value_abs(v2))

Definition at line 489 of file include/polylib/arithmetique.h.

#define value_abs_lt ( v1,
v2   )     (value_abs(v1)<value_abs(v2))

Definition at line 488 of file include/polylib/arithmetique.h.

#define value_abs_ne ( v1,
v2   )     (value_abs(v1)!=value_abs(v2))

Definition at line 485 of file include/polylib/arithmetique.h.

#define value_absolute ( ref,
val   )     ((ref) = value_abs((val)))

Definition at line 529 of file include/polylib/arithmetique.h.

#define value_add_int ( ref,
val,
vint   )     ((ref) = (val)+(Value)(vint))

Definition at line 515 of file include/polylib/arithmetique.h.

#define value_addmul ( ref,
val1,
val2   )     ((ref) += (val1)*(val2))

Definition at line 516 of file include/polylib/arithmetique.h.

#define value_addto ( ref,
val1,
val2   )     ((ref) = (val1)+(val2))

Definition at line 514 of file include/polylib/arithmetique.h.

#define value_and ( v1,
v2   )     ((v1)&(v2))

Definition at line 508 of file include/polylib/arithmetique.h.

#define value_andto ( ref,
val1,
val2   )     ((ref) = (val1)&(val2))

Definition at line 535 of file include/polylib/arithmetique.h.

#define value_assign ( v1,
v2   )     ((v1) = (v2))

Definition at line 459 of file include/polylib/arithmetique.h.

#define value_clear ( val   )     ((val) = 0)

Definition at line 462 of file include/polylib/arithmetique.h.

#define value_cmp_si ( val,
n   )     (val - (n))

Definition at line 559 of file include/polylib/arithmetique.h.

#define value_compare ( v1,
v2   )     (value_eq(v1,v2)?0:value_lt(v1,v2)?-1:1)

Definition at line 494 of file include/polylib/arithmetique.h.

#define value_decrement ( ref,
val   )     ((ref) = (val)-VALUE_ONE)

Definition at line 522 of file include/polylib/arithmetique.h.

#define value_direct_multiply ( v1,
v2   )     ((v1)*(v2))

Definition at line 501 of file include/polylib/arithmetique.h.

#define value_direct_product ( ref,
val1,
val2   )     ((ref) = (val1)*(val2))

Definition at line 518 of file include/polylib/arithmetique.h.

#define value_div ( v1,
v2   )     ((v1)/(v2))

Definition at line 499 of file include/polylib/arithmetique.h.

#define value_divexact ( ref,
val1,
val2   )     ((ref) = (val1)/(val2))

Definition at line 524 of file include/polylib/arithmetique.h.

#define value_division ( ref,
val1,
val2   )     ((ref) = (val1)/(val2))

Definition at line 523 of file include/polylib/arithmetique.h.

#define value_eq ( v1,
v2   )     ((v1)==(v2))

Definition at line 477 of file include/polylib/arithmetique.h.

#define value_gcd ( ref,
val1,
val2   )     Gcd((val1),(val2),&(ref))

Definition at line 532 of file include/polylib/arithmetique.h.

#define value_ge ( v1,
v2   )     ((v1)>=(v2))

Definition at line 480 of file include/polylib/arithmetique.h.

#define value_gt ( v1,
v2   )     ((v1)>(v2))

Definition at line 479 of file include/polylib/arithmetique.h.

#define value_increment ( ref,
val   )     ((ref) = (val)+VALUE_ONE)

Definition at line 517 of file include/polylib/arithmetique.h.

#define value_init ( val   )     ((val) = 0)

package arithmetique

Id
arithmetique.h,v 1.24 2007/02/22 09:16:57 skimo Exp

Francois Irigoin, mai 1989

Modifications

  • rewrite of DIVIDE which was wrong (Remi Triolet, Francois Irigoin, april 90)
  • simplification of POSITIVE_DIVIDE by suppressing one modulo
  • B.Meister : added addmul, operation existing in gmp and quite useful (05-2005)

Definition at line 458 of file include/polylib/arithmetique.h.

#define value_lcm ( ref,
val1,
val2   )     Lcm3((val1),(val2),&(ref))

Definition at line 533 of file include/polylib/arithmetique.h.

#define value_le ( v1,
v2   )     ((v1)<=(v2))

Definition at line 482 of file include/polylib/arithmetique.h.

#define value_lshift ( v1,
v2   )     ((v1)<<(v2))

Definition at line 509 of file include/polylib/arithmetique.h.

#define value_lt ( v1,
v2   )     ((v1)<(v2))

Definition at line 481 of file include/polylib/arithmetique.h.

#define value_max ( v1,
v2   )     (value_ge((v1),(v2))? (v1): (v2))

Definition at line 506 of file include/polylib/arithmetique.h.

#define value_max_p ( val   )     value_eq(val,VALUE_MAX)

Definition at line 561 of file include/polylib/arithmetique.h.

#define value_maximum ( ref,
val1,
val2   )     ((ref) = value_max((val1),(val2)))

Definition at line 531 of file include/polylib/arithmetique.h.

#define value_min ( v1,
v2   )     (value_le((v1),(v2))? (v1): (v2))

Definition at line 505 of file include/polylib/arithmetique.h.

#define value_min_p ( val   )     value_eq(val,VALUE_MIN)

Definition at line 560 of file include/polylib/arithmetique.h.

#define value_minimum ( ref,
val1,
val2   )     ((ref) = value_min((val1),(val2)))

Definition at line 530 of file include/polylib/arithmetique.h.

#define value_minus ( v1,
v2   )     ((v1)-(v2))

Definition at line 502 of file include/polylib/arithmetique.h.

#define value_mod ( v1,
v2   )     ((v1)%(v2))

Definition at line 500 of file include/polylib/arithmetique.h.

#define value_modulus ( ref,
val1,
val2   )     ((ref) = (val1)%(val2))

Definition at line 525 of file include/polylib/arithmetique.h.

#define value_mone_p ( val   )     value_eq(val,VALUE_MONE)

Definition at line 557 of file include/polylib/arithmetique.h.

#define value_mult ( v,
 ) 
Value:
value_protected_multiply(v,w,                                                 \
    (fprintf(stderr,"[value_mult] value overflow!\n"),THROW(overflow_error)))

Definition at line 611 of file include/polylib/arithmetique.h.

#define value_multiply ( ref,
val1,
val2   )     ((ref) = value_mult((val1),(val2)))

Definition at line 519 of file include/polylib/arithmetique.h.

#define value_ne ( v1,
v2   )     ((v1)!=(v2))

Definition at line 478 of file include/polylib/arithmetique.h.

#define value_neg_p ( val   )     value_lt(val,VALUE_ZERO)

Definition at line 550 of file include/polylib/arithmetique.h.

#define value_negz_p ( val   )     value_le(val,VALUE_ZERO)

Definition at line 552 of file include/polylib/arithmetique.h.

#define value_not ( val   )     (~(val))

Definition at line 540 of file include/polylib/arithmetique.h.

#define value_notmax_p ( val   )     value_ne(val,VALUE_MAX)

Definition at line 563 of file include/polylib/arithmetique.h.

#define value_notmin_p ( val   )     value_ne(val,VALUE_MIN)

Definition at line 562 of file include/polylib/arithmetique.h.

#define value_notmone_p ( val   )     value_ne(val,VALUE_MONE)

Definition at line 558 of file include/polylib/arithmetique.h.

#define value_notone_p ( val   )     value_ne(val,VALUE_ONE)

Definition at line 556 of file include/polylib/arithmetique.h.

#define value_notzero_p ( val   )     value_ne(val,VALUE_ZERO)

Definition at line 554 of file include/polylib/arithmetique.h.

#define value_one_p ( val   )     value_eq(val,VALUE_ONE)

Definition at line 555 of file include/polylib/arithmetique.h.

#define value_oppose ( ref,
val   )     ((ref) = value_uminus((val)))

Definition at line 528 of file include/polylib/arithmetique.h.

#define value_or ( v1,
v2   )     ((v1)|(v2))

Definition at line 507 of file include/polylib/arithmetique.h.

#define value_orto ( ref,
val1,
val2   )     ((ref) = (val1)|(val2))

Definition at line 534 of file include/polylib/arithmetique.h.

#define value_pdiv ( v1,
v2   )     (DIVIDE((v1),(v2)))

Definition at line 503 of file include/polylib/arithmetique.h.

#define value_pdivision ( ref,
val1,
val2   )     ((ref) = value_pdiv((val1),(val2)))

Definition at line 526 of file include/polylib/arithmetique.h.

#define value_plus ( v1,
v2   )     ((v1)+(v2))

Definition at line 498 of file include/polylib/arithmetique.h.

#define value_pmod ( v1,
v2   )     (MODULO((v1),(v2)))

Definition at line 504 of file include/polylib/arithmetique.h.

#define value_pmodulus ( ref,
val1,
val2   )     ((ref) = value_pmod((val1),(val2)))

Definition at line 527 of file include/polylib/arithmetique.h.

#define value_pos_p ( val   )     value_gt(val,VALUE_ZERO)

Definition at line 549 of file include/polylib/arithmetique.h.

#define value_posz_p ( val   )     value_ge(val,VALUE_ZERO)

Definition at line 551 of file include/polylib/arithmetique.h.

#define value_print ( Dst,
fmt,
val   )     (fprintf((Dst),(fmt),(val)))

Definition at line 464 of file include/polylib/arithmetique.h.

#define value_product ( v,
 )     v=value_mult(v,w)

Definition at line 614 of file include/polylib/arithmetique.h.

#define value_protected_hard_idiv_multiply ( v,
w,
throw   ) 
Value:
((value_zero_p(w) || value_zero_p(v))? VALUE_ZERO:              \
   value_lt(value_abs(v),value_div(VALUE_MAX,value_abs(w)))?    \
   value_direct_multiply(v,w): (throw, VALUE_NAN))

Definition at line 575 of file include/polylib/arithmetique.h.

#define value_protected_mult ( v,
 )     value_protected_multiply(v,w,THROW(overflow_error))

Definition at line 594 of file include/polylib/arithmetique.h.

#define value_protected_multiply ( v,
w,
throw   )     value_protected_hard_idiv_multiply(v,w,throw)

Definition at line 588 of file include/polylib/arithmetique.h.

#define value_protected_product ( v,
 )     v=value_protected_mult(v,w)

Definition at line 596 of file include/polylib/arithmetique.h.

#define value_read ( val,
str   )     (sscanf((str),VALUE_FMT,&(val)))

Definition at line 463 of file include/polylib/arithmetique.h.

#define value_rshift ( v1,
v2   )     ((v1)>>(v2))

Definition at line 510 of file include/polylib/arithmetique.h.

#define value_set_double ( val,
 )     ((val) = (Value)(d))

Definition at line 461 of file include/polylib/arithmetique.h.

#define value_set_si ( val,
 )     ((val) = (Value)(i))

Definition at line 460 of file include/polylib/arithmetique.h.

#define value_sign (  )     (value_eq(v,VALUE_ZERO)?0:value_lt(v,VALUE_ZERO)?-1:1)

Definition at line 493 of file include/polylib/arithmetique.h.

#define value_sub_int ( ref,
val,
vint   )     ((ref) = (val)-(Value)(vint))

Definition at line 521 of file include/polylib/arithmetique.h.

#define value_substract ( ref,
val1,
val2   )     (value_subtract((ref),(val1),(val2)))

Definition at line 695 of file include/polylib/arithmetique.h.

#define value_subtract ( ref,
val1,
val2   )     ((ref) = (val1)-(val2))

Definition at line 520 of file include/polylib/arithmetique.h.

#define value_swap ( v1,
v2   ) 
Value:
{Value tmp; tmp = v2; \
                                    v2 = v1; v1 = tmp;   \
                                   }

Definition at line 465 of file include/polylib/arithmetique.h.

#define value_uminus ( val   )     (-(val))

Definition at line 539 of file include/polylib/arithmetique.h.

#define value_zero_p ( val   )     value_eq(val,VALUE_ZERO)

Definition at line 553 of file include/polylib/arithmetique.h.


Function Documentation

void dump_exception_stack ( void   ) 

Definition at line 233 of file errors.c.

References dump_exception_stack_to_file().

void dump_exception_stack_to_file ( FILE *   ) 

Definition at line 216 of file errors.c.

References exception_index.

void pop_exception_from_stack ( int  ,
const char *  ,
const char *  ,
int   
)
jmp_buf* push_exception_on_stack ( int  ,
const char *  ,
const char *  ,
int   
)
void throw_exception ( int  ,
const char *  ,
const char *  ,
int   
)

Variable Documentation

unsigned int any_exception_error

Definition at line 116 of file errors.c.

unsigned int overflow_error

Definition at line 109 of file errors.c.

unsigned int parser_exception_error

Definition at line 112 of file errors.c.

Definition at line 110 of file errors.c.

Definition at line 156 of file errors.c.

unsigned int user_exception_error

Definition at line 111 of file errors.c.


Generated on Wed Nov 25 17:45:26 2009 for polylib by  doxygen 1.6.1