00001
00002
00003 #include "stack-c.h"
00004
00005 #include "Os_specific.h"
00006
00007 #ifdef _MSC_VER
00008
00009 #define NAN_CHECK
00010 #endif
00011
00012 #define less 59
00013 #define great 60
00014 #define equal 50
00015
00016 #define less_equal 109
00017
00018 #define less_great 119
00019
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
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