cmp.c

Go to the documentation of this file.
00001 /* copyright Enpc: Jean-Philippe Chancelier  */
00002 
00003 #include "stack-c.h" 
00004 
00005 #include "Os_specific.h" /* isanan */ 
00006 
00007 #ifdef _MSC_VER 
00008 /* vc++ pbs with nan and comparisons */ 
00009 #define NAN_CHECK 
00010 #endif 
00011 
00012 #define less 59
00013 #define great 60
00014 #define equal 50 
00015 /* less + equal */
00016 #define less_equal 109 
00017 /* less + great */
00018 #define less_great 119 
00019 /* great + equal */
00020 #define great_equal 110 
00021 
00022 static void   idcmp_equal(double x[],double y[],int *n,int res[]) ; 
00023 static void   idcmp_lessgreat(double x[],double y[],int *n,int res[]) ;
00024 static void   idcmp_less(double x[],double y[],int *n,int res[]) ;
00025 static void   idcmp_great(double x[],double y[],int *n,int res[]) ;
00026 static void   idcmp_lessequal(double x[],double y[],int *n,int res[]) ;
00027 static void   idcmp_greatequal(double x[],double y[],int *n,int res[]) ;
00028 
00029 int  C2F(idcmp)(double x[],double y[],int *n,int res[],int *op);
00030 
00031 int  C2F(idcmp)(double x[],double y[],int *n,int res[],int *op) 
00032 {
00033   int i;
00034   switch (*op) {
00035   case equal :       idcmp_equal(x,y,n,res) ; break; 
00036   case less_great :  idcmp_lessgreat(x,y,n,res) ; break; 
00037   case less :        idcmp_less(x,y,n,res) ; break; 
00038   case great :       idcmp_great(x,y,n,res) ; break; 
00039   case less_equal :  idcmp_lessequal(x,y,n,res) ; break; 
00040   case great_equal : idcmp_greatequal(x,y,n,res) ; break; 
00041   default: 
00042     for (i=0; i < *n; i++) res[i]=0;
00043   }
00044   return 0; 
00045 }
00046 
00047 /* nan pbs with vc++ */ 
00048 
00049 static void   idcmp_equal(double x[],double y[],int *n,int res[]) 
00050 {
00051   int i; 
00052   for (i=0; i < *n; i++) 
00053     {
00054 #ifdef NAN_CHECK 
00055       if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
00056         res[i]= 0; 
00057       else 
00058         res[i]= x[i]== y[i]; 
00059 #else 
00060     res[i]= x[i]== y[i]; 
00061 #endif 
00062     }
00063 }
00064 
00065 static void   idcmp_lessgreat(double x[],double y[],int *n,int res[]) 
00066 {
00067   int i; 
00068   for (i=0; i < *n; i++) 
00069     {
00070 #ifdef NAN_CHECK 
00071       if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
00072         res[i]= 1; 
00073       else 
00074         res[i]= x[i] != y[i]; 
00075 #else 
00076       res[i]= x[i] != y[i]; 
00077 #endif 
00078     }
00079 }
00080 
00081 static void   idcmp_less(double x[],double y[],int *n,int res[]) 
00082 {
00083   int i; 
00084   for (i=0; i < *n; i++) 
00085     {
00086 #ifdef NAN_CHECK 
00087       if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
00088         res[i]= 0; 
00089       else 
00090         res[i]= x[i] <  y[i]; 
00091 #else 
00092       res[i]= x[i] <  y[i]; 
00093 #endif 
00094     }
00095 }
00096 
00097 
00098 static void   idcmp_great(double x[],double y[],int *n,int res[]) 
00099 {
00100   int i; 
00101   for (i=0; i < *n; i++) 
00102     {
00103 #ifdef NAN_CHECK 
00104       if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
00105         res[i]= 0; 
00106       else 
00107         res[i]= x[i] >  y[i]; 
00108 #else 
00109       res[i]= x[i] >  y[i]; 
00110 #endif 
00111     }
00112 }
00113 
00114 
00115 static void   idcmp_lessequal(double x[],double y[],int *n,int res[]) 
00116 {
00117   int i; 
00118   for (i=0; i < *n; i++) 
00119     {
00120 #ifdef NAN_CHECK 
00121       if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
00122         res[i]= 0; 
00123       else 
00124         res[i]= x[i] <=  y[i]; 
00125 #else 
00126       res[i]= x[i] <=  y[i]; 
00127 #endif 
00128     }
00129 }
00130 
00131 
00132 static void   idcmp_greatequal(double x[],double y[],int *n,int res[]) 
00133 {
00134   int i; 
00135   for (i=0; i < *n; i++) 
00136     {
00137 #ifdef NAN_CHECK 
00138       if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
00139         res[i]= 0; 
00140       else 
00141         res[i]= x[i] >=  y[i]; 
00142 #else 
00143       res[i]= x[i] >=  y[i]; 
00144 #endif 
00145     }
00146 }
00147 
00148 
00149 
00150 
00151 
00152 

Generated on Sun Mar 4 15:03:48 2007 for Scilab [trunk] by  doxygen 1.5.1