[BACK]Return to pexpr.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / io

Diff for /OpenXM_contrib2/asir2000/io/pexpr.c between version 1.23 and 1.26

version 1.23, 2003/06/07 16:40:25 version 1.26, 2003/12/24 08:00:38
Line 44 
Line 44 
  * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY   * OF THE SOFTWARE HAS BEEN DEVELOPED BY A THIRD PARTY, THE THIRD PARTY
  * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,   * DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE,
  * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.   * PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE.
  * $OpenXM: OpenXM_contrib2/asir2000/io/pexpr.c,v 1.22 2003/05/29 16:45:01 saito Exp $   * $OpenXM: OpenXM_contrib2/asir2000/io/pexpr.c,v 1.25 2003/12/02 06:56:48 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "al.h"  #include "al.h"
Line 67  int hex_output;
Line 67  int hex_output;
 int fortran_output;  int fortran_output;
 int double_output;  int double_output;
 int real_digit;  int real_digit;
   int real_binary;
 int print_quote;  int print_quote;
   
 #define TAIL  #define TAIL
Line 395  Num q;
Line 396  Num q;
                                 case MID_PRINTF_G:                                  case MID_PRINTF_G:
 #endif  #endif
                                 default:                                  default:
                                         if ( real_digit ) {                                          if ( real_binary ) {
                                                   unsigned int *m;
                                                   unsigned int u,l,mask;
                                                   int i,expo;
   
                                                   m = (unsigned int *)&BDY((Real)q);
   #if defined(__i386__) || defined(MIPSEL) || defined(VISUAL) || defined(__alpha) || defined(__FreeBSD__) || defined(__NetBSD__) || defined(__x86_64)
                                                   u = m[1]; l = m[0];
   #else
                                                   u = m[0]; l = m[1];
   #endif
                                                   if (u&0x80000000) {
                                                           TAIL PRINTF(OUT,"-");
                                                   }
                                                   u &= 0x7fffffff;
                                                   expo = ((int)(u>>20));
                                                   u &= 0xfffff;
                                                   if ( expo == 2047 ) {
                                                           if ( u || l ) {
                                                                   TAIL PRINTF(OUT,"NaN");
                                                           } else {
                                                                   TAIL PRINTF(OUT,"Inf");
                                                           }
                                                   } else if ( expo == 0 ) {
                                                           if ( u || l ) {
                                                                   TAIL PRINTF(OUT,"0b0.");
                                                                   for ( i = 0, mask = 0x80000; i < 20;
                                                                           i++, mask >>= 1) {
                                                                           TAIL
                                                                           if ( u&mask )
                                                                                   PRINTF(OUT,"1");
                                                                           else
                                                                                   PRINTF(OUT,"0");
                                                                   }
                                                                   for ( i = 0, mask = 0x80000000; i < 32;
                                                                           i++, mask >>= 1) {
                                                                           TAIL
                                                                           if ( l&mask )
                                                                                   PRINTF(OUT,"1");
                                                                           else
                                                                                   PRINTF(OUT,"0");
                                                                   }
                                                                   TAIL PRINTF(OUT,"*2^%d",-1022);
                                                           } else {
                                                                   TAIL PRINTF(OUT,"0");
                                                           }
                                                   } else {
                                                           expo -= 1023;
                                                           TAIL PRINTF(OUT,"0b1.");
                                                           for ( i = 0, mask = 0x80000; i < 20;
                                                                   i++, mask >>= 1) {
                                                                   TAIL
                                                                   if ( u&mask )
                                                                           PRINTF(OUT,"1");
                                                                   else
                                                                           PRINTF(OUT,"0");
                                                           }
                                                           for ( i = 0, mask = 0x80000000; i < 32;
                                                                   i++, mask >>= 1) {
                                                                   TAIL
                                                                   if ( l&mask )
                                                                           PRINTF(OUT,"1");
                                                                   else
                                                                           PRINTF(OUT,"0");
                                                           }
                                                           if ( expo ) {
                                                                   TAIL PRINTF(OUT,"*2^%d",expo);
                                                           }
                                                   }
                                           } else if ( real_digit ) {
                                                 sprintf(real_format,                                                  sprintf(real_format,
                                                         double_output?"%%.%df":"%%.%dg",real_digit);                                                          double_output?"%%.%df":"%%.%dg",real_digit);
                                                 TAIL PRINTF(OUT,real_format,BDY((Real)q));                                                  TAIL PRINTF(OUT,real_format,BDY((Real)q));
Line 416  Num q;
Line 486  Num q;
                 case N_IP:                  case N_IP:
                 case N_IntervalBigFloat:                  case N_IntervalBigFloat:
                         switch ( outputstyle ) {                          switch ( outputstyle ) {
                                 case 0:  
                                         PUTS("[");  
                                         PRINTNUM(INF((Itv)q));  
                                         PUTS(",");  
                                         PRINTNUM(SUP((Itv)q));  
                                         PUTS("]");  
                                         break;  
                                 case 1:                                  case 1:
                                         PUTS("intval(");                                          PUTS("intval(");
                                         PRINTNUM(INF((Itv)q));                                          PRINTNUM(INF((Itv)q));
Line 430  Num q;
Line 493  Num q;
                                         PRINTNUM(SUP((Itv)q));                                          PRINTNUM(SUP((Itv)q));
                                         PUTS(")");                                          PUTS(")");
                                         break;                                          break;
                                   case 0:
                                 default:                                  default:
                                         PUTS("[");                                          PUTS("[");
                                         PRINTNUM(INF((Itv)q));                                          PRINTNUM(INF((Itv)q));
Line 443  Num q;
Line 507  Num q;
                         switch (printmode) {                          switch (printmode) {
                                 case PRINTF_E:                                  case PRINTF_E:
                                         switch ( outputstyle ) {                                          switch ( outputstyle ) {
                                                 case 0:  
                                                         TAIL PRINTF(OUT, "[%.16e,%.16e]",  
                                                                 INF((IntervalDouble)q),SUP((IntervalDouble)q));  
                                                         break;  
                                                 case 1:                                                  case 1:
                                                         TAIL PRINTF(OUT, "intval(%.16e,%.16e)",                                                          TAIL PRINTF(OUT, "intval(%.16e,%.16e)",
                                                                 INF((IntervalDouble)q),SUP((IntervalDouble)q));                                                                  INF((IntervalDouble)q),SUP((IntervalDouble)q));
                                                         break;                                                          break;
                                                   case 0:
                                                 default:                                                  default:
                                                         TAIL PRINTF(OUT, "[%.16e,%.16e]",                                                          TAIL PRINTF(OUT, "[%.16e,%.16e]",
                                                                 INF((IntervalDouble)q),SUP((IntervalDouble)q));                                                                  INF((IntervalDouble)q),SUP((IntervalDouble)q));
Line 463  Num q;
Line 524  Num q;
                                         break;                                          break;
                                 case MID_PRINTF_G:                                  case MID_PRINTF_G:
                                         switch ( outputstyle ) {                                          switch ( outputstyle ) {
                                                 case 0:  
                                                         TAIL PRINTF(OUT, "<%g,%g>",  
                                                                 (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,  
                                                                 (SUP((IntervalDouble)q)-INF((IntervalDouble)q))*0.5);  
                                                         break;  
                                                 case 1:                                                  case 1:
                                                         TAIL PRINTF(OUT, "intvalm(%g,%g)",                                                          TAIL PRINTF(OUT, "intvalm(%g,%g)",
                                                                 (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,                                                                  (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,
                                                                 (SUP((IntervalDouble)q)-INF((IntervalDouble)q))*0.5);                                                                  (SUP((IntervalDouble)q)-INF((IntervalDouble)q))*0.5);
                                                         break;                                                          break;
                                                   case 0:
                                                 default:                                                  default:
                                                         TAIL PRINTF(OUT, "<%g,%g>",                                                          TAIL PRINTF(OUT, "<%g,%g>",
                                                                 (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,                                                                  (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,
Line 482  Num q;
Line 539  Num q;
                                         break;                                          break;
                                 case MID_PRINTF_E:                                  case MID_PRINTF_E:
                                         switch ( outputstyle ) {                                          switch ( outputstyle ) {
                                                 case 0:  
                                                         TAIL PRINTF(OUT, "<%.16e,%.16e>",  
                                                         (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,  
                                                         (SUP((IntervalDouble)q)-INF((IntervalDouble)q))*0.5);  
                                                         break;  
                                                 case 1:                                                  case 1:
                                                         TAIL PRINTF(OUT, "intvalm(%.16e,%.16e)",                                                          TAIL PRINTF(OUT, "intvalm(%.16e,%.16e)",
                                                         (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,                                                          (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,
                                                         (SUP((IntervalDouble)q)-INF((IntervalDouble)q))*0.5);                                                          (SUP((IntervalDouble)q)-INF((IntervalDouble)q))*0.5);
                                                         break;                                                          break;
                                                   case 0:
                                                 default:                                                  default:
                                                         TAIL PRINTF(OUT, "<%.16e,%.16e>",                                                          TAIL PRINTF(OUT, "<%.16e,%.16e>",
                                                         (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,                                                          (SUP((IntervalDouble)q)+INF((IntervalDouble)q))*0.5,
Line 502  Num q;
Line 555  Num q;
                                 case PRINTF_G:                                  case PRINTF_G:
                                 default:                                  default:
                                         switch ( outputstyle ) {                                          switch ( outputstyle ) {
                                                 case 0:  
                                                         TAIL PRINTF(OUT, "[%g,%g]",  
                                                                 INF((IntervalDouble)q),SUP((IntervalDouble)q));  
                                                         break;  
                                                 case 1:                                                  case 1:
                                                         TAIL PRINTF(OUT, "intval(%g,%g)",                                                          TAIL PRINTF(OUT, "intval(%g,%g)",
                                                                 INF((IntervalDouble)q),SUP((IntervalDouble)q));                                                                  INF((IntervalDouble)q),SUP((IntervalDouble)q));
                                                         break;                                                          break;
                                                   case 0:
                                                 default:                                                  default:
                                                         TAIL PRINTF(OUT, "[%g,%g]",                                                          TAIL PRINTF(OUT, "[%g,%g]",
                                                                 INF((IntervalDouble)q),SUP((IntervalDouble)q));                                                                  INF((IntervalDouble)q),SUP((IntervalDouble)q));
Line 698  VECT vect;
Line 748  VECT vect;
         pointer *ptr;          pointer *ptr;
   
         switch ( outputstyle ) {          switch ( outputstyle ) {
                 case 0:  
                         PUTS("[ ");  
                         for ( i = 0, ptr = BDY(vect); i < vect->len; i++ ) {  
                                 PRINTEXPR(vl,ptr[i]); PUTS(" ");  
                         }  
                         PUTS("]");  
                         break;  
                 case 1:                  case 1:
                         PUTS("vect(");                          PUTS("vect(");
                         for ( i = 0, ptr = BDY(vect); i < vect->len; i++ ) {                          for ( i = 0, ptr = BDY(vect); i < vect->len; i++ ) {
                                 if ( i != 0 ) PUTS(", ");                                  if ( i != 0 ) PUTS(",");
                                 PRINTEXPR(vl,ptr[i]);                                  PRINTEXPR(vl,ptr[i]);
                         }                          }
                         PUTS(")");                          PUTS(")");
                         break;                          break;
                   case 0:
                 default:                  default:
                         PUTS("[ ");                          PUTS("[ ");
                         for ( i = 0, ptr = BDY(vect); i < vect->len; i++ ) {                          for ( i = 0, ptr = BDY(vect); i < vect->len; i++ ) {
Line 731  MAT mat;
Line 775  MAT mat;
         pointer *ptr;          pointer *ptr;
   
         switch ( outputstyle ) {          switch ( outputstyle ) {
                 case 0:  
                         for ( i = 0, r = mat->row, c = mat->col; i < r; i++ ) {  
                                 PUTS("[ ");  
                                 for ( j = 0, ptr = BDY(mat)[i]; j < c; j++ ) {  
                                         PRINTEXPR(vl,ptr[j]); PUTS(" ");  
                                 }  
                                 PUTS("]");  
                                 if ( i < r - 1 )  
                                         PUTS("\n");  
                         }  
                         break;  
                 case 1:                  case 1:
                         PUTS("mat(\n");                          PUTS("mat(\n");
                         for ( i = 0, r = mat->row, c = mat->col; i < r; i++ ) {                          for ( i = 0, r = mat->row, c = mat->col; i < r; i++ ) {
                                 if ( i != 0 ) PUTS(",\n");                                  if ( i != 0 ) PUTS(",\n");
                                 PUTS("[ ");                                  PUTS("[ ");
                                 for ( j = 0, ptr = BDY(mat)[i]; j < c; j++ ) {                                  for ( j = 0, ptr = BDY(mat)[i]; j < c; j++ ) {
                                         if ( j != 0 ) PUTS(", ");                                          if ( j != 0 ) PUTS(",");
                                         PRINTEXPR(vl,ptr[j]);                                          PRINTEXPR(vl,ptr[j]);
                                 }                                  }
                                 PUTS("]");                                  PUTS(" ]");
                         }                          }
                         PUTS(")");                          PUTS(")");
                         break;                          break;
                   case 0:
                 default:                  default:
                         for ( i = 0, r = mat->row, c = mat->col; i < r; i++ ) {                          for ( i = 0, r = mat->row, c = mat->col; i < r; i++ ) {
                                 PUTS("[ ");                                  PUTS("[ ");

Legend:
Removed from v.1.23  
changed lines
  Added in v.1.26

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>