/* * Reads a polyhedron file on stdin with rationals and outputs * an approximation in decimal floating point * * David Bremner. bremner@unb.ca * */ #include #include #include #include #include "process_args.h" #ifdef LRSMP #include "lrsmp.h" #endif #ifndef LRSMP typedef long integer_t; #define zero(n) (n==0) #define one(n) (n==1) #define pmp(s,n) printf("%s %d ",s,n) #define readrat(n,d) my_readrat(&n,&d); void my_readrat(long *num_p, long * denom_p) { char buf[BUFSIZ]; char *p; scanf("%s",buf); if (p=index(buf,'/')){ *p=0; *denom_p=atol(&p[1]); } else { *denom_p=1; } *num_p=atol(buf); } void rattodouble(integer_t num, integer_t denom, double *out_p){ *out_p=(double)num/(double)denom; } #else typedef lrs_mp integer_t; #define MP_DIGITS 1000L #endif #include "rat2float.h" int main(argc,argv) int argc; char **argv; { long int m,n; int i,j; char format[BUFSIZ]; char buf[BUFSIZ]; process_args(argc,argv,DOCSTRING); #ifdef LRSMP lrs_mp_init (MP_DIGITS,stdin,stdout); #endif sprintf(format,"%%.%dlf ",DBL_DIG); while ( fgets(buf,BUFSIZ,stdin) !=NULL ) { fputs(buf,stdout); if (strncmp(buf,"begin",5)==0) break; } if (scanf("%ld %ld %s",&m,&n,buf)==EOF){ fprintf(stderr,"No begin line"); exit(1); } printf("%ld %ld real\n",m,n); for (i=0;i