File: cmp.c

package info (click to toggle)
scilab 4.0-12
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 100,640 kB
  • ctags: 57,333
  • sloc: ansic: 377,889; fortran: 242,862; xml: 179,819; tcl: 42,062; sh: 10,593; ml: 9,441; makefile: 4,377; cpp: 1,354; java: 621; csh: 260; yacc: 247; perl: 130; lex: 126; asm: 72; lisp: 30
file content (149 lines) | stat: -rw-r--r-- 3,125 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
/* copyright Enpc: Jean-Philippe Chancelier  */

#include "../stack-c.h" 
#include "../os_specific/Os_specific.h" /* isanan */ 

#ifdef WIN32 
/* vc++ pbs with nan and comparisons */ 
#define NAN_CHECK 
#endif 

#define less 59
#define great 60
#define equal 50 
/* less + equal */
#define less_equal 109 
/* less + great */
#define less_great 119 
/* great + equal */
#define great_equal 110 

static void   idcmp_equal(double x[],double y[],int *n,int res[]) ; 
static void   idcmp_lessgreat(double x[],double y[],int *n,int res[]) ;
static void   idcmp_less(double x[],double y[],int *n,int res[]) ;
static void   idcmp_great(double x[],double y[],int *n,int res[]) ;
static void   idcmp_lessequal(double x[],double y[],int *n,int res[]) ;
static void   idcmp_greatequal(double x[],double y[],int *n,int res[]) ;

int  C2F(idcmp)(double x[],double y[],int *n,int res[],int *op) 
{
  int i;
  switch (*op) {
  case equal :       idcmp_equal(x,y,n,res) ; break; 
  case less_great :  idcmp_lessgreat(x,y,n,res) ; break; 
  case less :        idcmp_less(x,y,n,res) ; break; 
  case great :       idcmp_great(x,y,n,res) ; break; 
  case less_equal :  idcmp_lessequal(x,y,n,res) ; break; 
  case great_equal : idcmp_greatequal(x,y,n,res) ; break; 
  default: 
    for (i=0; i < *n; i++) res[i]=0;
  }
  return 0; 
}

/* nan pbs with vc++ */ 

static void   idcmp_equal(double x[],double y[],int *n,int res[]) 
{
  int i; 
  for (i=0; i < *n; i++) 
    {
#ifdef NAN_CHECK 
      if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
	res[i]= 0; 
      else 
	res[i]= x[i]== y[i]; 
#else 
    res[i]= x[i]== y[i]; 
#endif 
    }
}

static void   idcmp_lessgreat(double x[],double y[],int *n,int res[]) 
{
  int i; 
  for (i=0; i < *n; i++) 
    {
#ifdef NAN_CHECK 
      if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
	res[i]= 1; 
      else 
	res[i]= x[i] != y[i]; 
#else 
      res[i]= x[i] != y[i]; 
#endif 
    }
}

static void   idcmp_less(double x[],double y[],int *n,int res[]) 
{
  int i; 
  for (i=0; i < *n; i++) 
    {
#ifdef NAN_CHECK 
      if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
	res[i]= 0; 
      else 
	res[i]= x[i] <  y[i]; 
#else 
      res[i]= x[i] <  y[i]; 
#endif 
    }
}


static void   idcmp_great(double x[],double y[],int *n,int res[]) 
{
  int i; 
  for (i=0; i < *n; i++) 
    {
#ifdef NAN_CHECK 
      if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
	res[i]= 0; 
      else 
	res[i]= x[i] >  y[i]; 
#else 
      res[i]= x[i] >  y[i]; 
#endif 
    }
}


static void   idcmp_lessequal(double x[],double y[],int *n,int res[]) 
{
  int i; 
  for (i=0; i < *n; i++) 
    {
#ifdef NAN_CHECK 
      if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
	res[i]= 0; 
      else 
	res[i]= x[i] <=  y[i]; 
#else 
      res[i]= x[i] <=  y[i]; 
#endif 
    }
}


static void   idcmp_greatequal(double x[],double y[],int *n,int res[]) 
{
  int i; 
  for (i=0; i < *n; i++) 
    {
#ifdef NAN_CHECK 
      if ( C2F(isanan)(&x[i])== 1 || C2F(isanan)(&y[i])== 1 ) 
	res[i]= 0; 
      else 
	res[i]= x[i] >=  y[i]; 
#else 
      res[i]= x[i] >=  y[i]; 
#endif 
    }
}