annotate src/arith-ops.cc @ 722:c40cdd16121e

[project @ 1994-09-21 15:22:21 by jwe]
author jwe
date Wed, 21 Sep 1994 15:24:26 +0000
parents fae2bd91c027
children 42731861ee09
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
526
a01a9db8ab69 [project @ 1994-07-20 18:46:24 by jwe]
jwe
parents: 390
diff changeset
1 // arith-ops.cc -*- C++ -*-
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
3
390
0f4129889b57 [project @ 1994-03-17 21:47:39 by jwe]
jwe
parents: 240
diff changeset
4 Copyright (C) 1992, 1993, 1994 John W. Eaton
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
5
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
6 This file is part of Octave.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
7
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
8 Octave is free software; you can redistribute it and/or modify it
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
11 later version.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
12
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
13 Octave is distributed in the hope that it will be useful, but WITHOUT
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
16 for more details.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
17
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
19 along with Octave; see the file COPYING. If not, write to the Free
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
20 Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
21
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
22 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
23
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
24 #ifdef HAVE_CONFIG_H
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
25 #include "config.h"
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
26 #endif
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
27
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
28 #include <ctype.h>
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
29 #include <math.h>
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
30 #include <Complex.h>
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
31
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
32 #include "error.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
33 #include "gripes.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
34 #include "utils.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
35 #include "mappers.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
36 #include "user-prefs.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
37 #include "tree-const.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
38 #include "arith-ops.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
39 #include "unwind-prot.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
40 #include "xpow.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
41 #include "xdiv.h"
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
42
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
43 #if defined (HAVE_ISINF) || (defined (HAVE_FINITE) && defined (HAVE_ISNAN))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
44 #define DIVIDE_BY_ZERO_ERROR \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
45 do \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
46 { \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
47 if (user_pref.warn_divide_by_zero) \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
48 warning ("division by zero"); \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
49 } \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
50 while (0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
51 #else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
52 #define DIVIDE_BY_ZERO_ERROR \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
53 do \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
54 { \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
55 error ("division by zero attempted"); \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
56 return tree_constant (); \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
57 } \
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
58 while (0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
59 #endif
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
60
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
61 // But first, some stupid functions that don\'t deserve to be in the
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
62 // Matrix class...
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
63
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
64 enum
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
65 Matrix_bool_op
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
66 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
67 Matrix_LT,
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
68 Matrix_LE,
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
69 Matrix_EQ,
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
70 Matrix_GE,
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
71 Matrix_GT,
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
72 Matrix_NE,
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
73 Matrix_AND,
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
74 Matrix_OR,
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
75 };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
76
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
77 /*
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
78 * Check row and column dimensions for binary matrix operations.
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
79 */
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
80 static inline int
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
81 m_add_conform (const Matrix& a, const Matrix& b, int warn)
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
82 {
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
83 int ar = a.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
84 int ac = a.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
85 int br = b.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
86 int bc = b.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
87
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
88 int ok = (ar == br && ac == bc);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
89
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
90 if (! ok && warn)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
91 gripe_nonconformant (ar, ac, br, bc);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
92
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
93 return ok;
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
94 }
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
95
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
96 static inline int
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
97 m_add_conform (const Matrix& a, const ComplexMatrix& b, int warn)
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
98 {
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
99 int ar = a.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
100 int ac = a.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
101 int br = b.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
102 int bc = b.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
103
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
104 int ok = (ar == br && ac == bc);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
105
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
106 if (! ok && warn)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
107 gripe_nonconformant (ar, ac, br, bc);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
108
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
109 return ok;
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
110 }
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
111
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
112 static inline int
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
113 m_add_conform (const ComplexMatrix& a, const Matrix& b, int warn)
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
114 {
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
115 int ar = a.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
116 int ac = a.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
117 int br = b.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
118 int bc = b.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
119
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
120 int ok = (ar == br && ac == bc);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
121
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
122 if (! ok && warn)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
123 gripe_nonconformant (ar, ac, br, bc);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
124
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
125 return ok;
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
126 }
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
127
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
128 static inline int
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
129 m_add_conform (const ComplexMatrix& a, const ComplexMatrix& b, int warn)
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
130 {
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
131 int ar = a.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
132 int ac = a.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
133 int br = b.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
134 int bc = b.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
135
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
136 int ok = (ar == br && ac == bc);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
137
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
138 if (! ok && warn)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
139 gripe_nonconformant (ar, ac, br, bc);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
140
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
141 return ok;
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
142 }
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
144 static inline int
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
145 m_mul_conform (const Matrix& a, const Matrix& b, int warn)
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
146 {
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
147 int ac = a.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
148 int br = b.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
149
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
150 int ok = (ac == br);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
151
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
152 if (! ok && warn)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
153 gripe_nonconformant (a.rows (), ac, br, b.columns ());
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
154
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
155 return ok;
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
156 }
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
157
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
158 static inline int
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
159 m_mul_conform (const Matrix& a, const ComplexMatrix& b, int warn)
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
160 {
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
161 int ac = a.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
162 int br = b.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
163
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
164 int ok = (ac == br);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
165
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
166 if (! ok && warn)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
167 gripe_nonconformant (a.rows (), ac, br, b.columns ());
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
168
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
169 return ok;
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
170 }
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
171
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
172 static inline int
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
173 m_mul_conform (const ComplexMatrix& a, const Matrix& b, int warn)
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
174 {
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
175 int ac = a.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
176 int br = b.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
177
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
178 int ok = (ac == br);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
179
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
180 if (! ok && warn)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
181 gripe_nonconformant (a.rows (), ac, br, b.columns ());
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
182
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
183 return ok;
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
184 }
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
185
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
186 static inline int
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
187 m_mul_conform (const ComplexMatrix& a, const ComplexMatrix& b, int warn)
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
188 {
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
189 int ac = a.columns ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
190 int br = b.rows ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
191
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
192 int ok = (a.columns () == br);
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
193
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
194 if (! ok && warn)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
195 gripe_nonconformant (a.rows (), ac, br, b.columns ());
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
196
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
197 return ok;
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
198 }
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
199
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
200 /*
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
201 * Stupid binary comparison operations like the ones Matlab provides.
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
202 * One for each type combination, in the order given here:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
203 *
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
204 * op2 \ op1: s m cs cm
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
205 * +-- +---+---+----+----+
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
206 * scalar | | * | 3 | * | 9 |
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
207 * +---+---+----+----+
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
208 * matrix | 1 | 4 | 7 | 10 |
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
209 * +---+---+----+----+
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
210 * complex_scalar | * | 5 | * | 11 |
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
211 * +---+---+----+----+
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
212 * complex_matrix | 2 | 6 | 8 | 12 |
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
213 * +---+---+----+----+
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
214 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
215
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
216 /* 1 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
217 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
218 mx_stupid_bool_op (Matrix_bool_op op, double s, const Matrix& a)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
219 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
220 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
221 int ac = a.columns ();
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
222
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
223 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
224 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
225 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
226 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
227 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
228 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
229 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
230
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
231 Matrix t (ar, ac);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
232
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
233 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
234 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
235 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
236 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
237 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
238 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
239 t.elem (i,j) = s < a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
240 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
241 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
242 t.elem (i,j) = s <= a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
243 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
244 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
245 t.elem (i,j) = s == a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
246 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
247 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
248 t.elem (i,j) = s >= a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
249 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
250 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
251 t.elem (i,j) = s > a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
252 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
253 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
254 t.elem (i,j) = s != a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
255 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
256 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
257 t.elem (i,j) = s && a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
258 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
259 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
260 t.elem (i,j) = s || a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
261 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
262 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
263 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
264 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
265 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
266 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
267
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
268 return t;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
269 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
270
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
271 /* 2 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
272 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
273 mx_stupid_bool_op (Matrix_bool_op op, double s, const ComplexMatrix& a)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
274 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
275 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
276 int ac = a.columns ();
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
277
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
278 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
279 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
280 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
281 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
282 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
283 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
284 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
285
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
286 Matrix t (ar, ac);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
287
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
288 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
289 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
290 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
291 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
292 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
293 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
294 t.elem (i,j) = s < real (a.elem (i,j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
295 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
296 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
297 t.elem (i,j) = s <= real (a.elem (i,j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
298 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
299 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
300 t.elem (i,j) = s == a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
301 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
302 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
303 t.elem (i,j) = s >= real (a.elem (i,j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
304 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
305 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
306 t.elem (i,j) = s > real (a.elem (i,j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
307 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
308 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
309 t.elem (i,j) = s != a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
310 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
311 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
312 t.elem (i,j) = s && (a.elem (i,j) != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
313 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
314 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
315 t.elem (i,j) = s || (a.elem (i,j) != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
316 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
317 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
318 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
319 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
320 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
321 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
322
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
323 return t;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
324 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
325
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
326 /* 3 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
327 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
328 mx_stupid_bool_op (Matrix_bool_op op, const Matrix& a, double s)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
329 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
330 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
331 int ac = a.columns ();
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
332
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
333 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
334 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
335 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
336 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
337 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
338 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
339 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
340
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
341 Matrix t (ar, ac);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
342
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
343 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
344 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
345 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
346 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
347 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
348 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
349 t.elem (i,j) = a.elem (i,j) < s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
350 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
351 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
352 t.elem (i,j) = a.elem (i,j) <= s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
353 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
354 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
355 t.elem (i,j) = a.elem (i,j) == s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
356 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
357 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
358 t.elem (i,j) = a.elem (i,j) >= s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
359 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
360 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
361 t.elem (i,j) = a.elem (i,j) > s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
362 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
363 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
364 t.elem (i,j) = a.elem (i,j) != s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
365 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
366 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
367 t.elem (i,j) = a.elem (i,j) && s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
368 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
369 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
370 t.elem (i,j) = a.elem (i,j) || s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
371 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
372 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
373 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
374 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
375 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
376 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
377
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
378 return t;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
379 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
380
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
381 /* 4 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
382 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
383 mx_stupid_bool_op (Matrix_bool_op op, const Matrix& a, const Complex& s)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
384 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
385 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
386 int ac = a.columns ();
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
387
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
388 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
389 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
390 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
391 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
392 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
393 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
394 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
395
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
396 Matrix t (ar, ac);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
397
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
398 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
399 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
400 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
401 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
402 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
403 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
404 t.elem (i,j) = a.elem (i,j) < real (s);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
405 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
406 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
407 t.elem (i,j) = a.elem (i,j) <= real (s);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
408 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
409 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
410 t.elem (i,j) = a.elem (i,j) == s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
411 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
412 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
413 t.elem (i,j) = a.elem (i,j) >= real (s);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
414 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
415 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
416 t.elem (i,j) = a.elem (i,j) > real (s);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
417 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
418 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
419 t.elem (i,j) = a.elem (i,j) != s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
420 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
421 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
422 t.elem (i,j) = a.elem (i,j) && (s != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
423 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
424 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
425 t.elem (i,j) = a.elem (i,j) || (s != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
426 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
427 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
428 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
429 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
430 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
431 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
432
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
433 return t;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
434 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
435
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
436 /* 5 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
437 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
438 mx_stupid_bool_op (Matrix_bool_op op, const Matrix& a, const Matrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
439 {
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
440 if (! m_add_conform (a, b, 1))
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
441 return Matrix ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
442
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
443 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
444 int ac = a.columns ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
445
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
446 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
447 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
448 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
449 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
450 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
451 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
452 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
453
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
454 Matrix c (ar, ac);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
455
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
456 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
457 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
458 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
459 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
460 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
461 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
462 c.elem (i, j) = a.elem (i, j) < b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
463 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
464 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
465 c.elem (i, j) = a.elem (i, j) <= b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
466 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
467 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
468 c.elem (i, j) = a.elem (i, j) == b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
469 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
470 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
471 c.elem (i, j) = a.elem (i, j) >= b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
472 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
473 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
474 c.elem (i, j) = a.elem (i, j) > b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
475 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
476 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
477 c.elem (i, j) = a.elem (i, j) != b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
478 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
479 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
480 c.elem (i, j) = a.elem (i, j) && b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
481 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
482 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
483 c.elem (i, j) = a.elem (i, j) || b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
484 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
485 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
486 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
487 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
488 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
489 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
490
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
491 return c;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
492 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
493
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
494 /* 6 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
495 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
496 mx_stupid_bool_op (Matrix_bool_op op, const Matrix& a, const ComplexMatrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
497 {
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
498 if (! m_add_conform (a, b, 1))
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
499 return Matrix ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
500
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
501 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
502 int ac = a.columns ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
503
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
504 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
505 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
506 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
507 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
508 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
509 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
510 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
511
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
512 Matrix c (ar, ac);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
513
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
514 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
515 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
516 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
517 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
518 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
519 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
520 c.elem (i, j) = a.elem (i, j) < real (b.elem (i, j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
521 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
522 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
523 c.elem (i, j) = a.elem (i, j) <= real (b.elem (i, j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
524 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
525 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
526 c.elem (i, j) = a.elem (i, j) == b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
527 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
528 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
529 c.elem (i, j) = a.elem (i, j) >= real (b.elem (i, j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
530 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
531 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
532 c.elem (i, j) = a.elem (i, j) > real (b.elem (i, j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
533 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
534 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
535 c.elem (i, j) = a.elem (i, j) != b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
536 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
537 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
538 c.elem (i, j) = a.elem (i, j) && (b.elem (i, j) != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
539 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
540 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
541 c.elem (i, j) = a.elem (i, j) || (b.elem (i, j) != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
542 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
543 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
544 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
545 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
546 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
547 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
548 return c;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
549 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
550
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
551 /* 7 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
552 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
553 mx_stupid_bool_op (Matrix_bool_op op, const Complex& s, const Matrix& a)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
554 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
555 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
556 int ac = a.columns ();
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
557
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
558 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
559 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
560 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
561 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
562 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
563 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
564 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
565
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
566 Matrix t (ar, ac);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
567
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
568 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
569 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
570 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
571 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
572 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
573 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
574 t.elem (i,j) = real (s) < a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
575 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
576 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
577 t.elem (i,j) = real (s) <= a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
578 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
579 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
580 t.elem (i,j) = s == a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
581 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
582 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
583 t.elem (i,j) = real (s) >= a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
584 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
585 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
586 t.elem (i,j) = real (s) > a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
587 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
588 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
589 t.elem (i,j) = s != a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
590 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
591 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
592 t.elem (i,j) = (s != 0.0) && a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
593 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
594 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
595 t.elem (i,j) = (s != 0.0) || a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
596 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
597 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
598 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
599 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
600 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
601 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
602
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
603 return t;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
604 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
605
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
606 /* 8 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
607 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
608 mx_stupid_bool_op (Matrix_bool_op op, const Complex& s, const ComplexMatrix& a)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
609 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
610 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
611 int ac = a.columns ();
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
612
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
613 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
614 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
615 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
616 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
617 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
618 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
619 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
620
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
621 Matrix t (ar, ac);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
622
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
623 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
624 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
625 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
626 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
627 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
628 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
629 t.elem (i,j) = real (s) < real (a.elem (i,j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
630 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
631 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
632 t.elem (i,j) = real (s) <= real (a.elem (i,j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
633 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
634 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
635 t.elem (i,j) = s == a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
636 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
637 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
638 t.elem (i,j) = real (s) >= real (a.elem (i,j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
639 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
640 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
641 t.elem (i,j) = real (s) > real (a.elem (i,j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
642 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
643 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
644 t.elem (i,j) = s != a.elem (i,j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
645 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
646 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
647 t.elem (i,j) = (s != 0.0) && (a.elem (i,j) != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
648 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
649 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
650 t.elem (i,j) = (s != 0.0) || (a.elem (i,j) != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
651 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
652 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
653 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
654 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
655 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
656 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
657
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
658 return t;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
659 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
660
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
661 /* 9 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
662 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
663 mx_stupid_bool_op (Matrix_bool_op op, const ComplexMatrix& a, double s)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
664 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
665 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
666 int ac = a.columns ();
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
667
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
668 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
669 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
670 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
671 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
672 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
673 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
674 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
675
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
676 Matrix t (ar, ac);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
677
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
678 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
679 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
680 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
681 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
682 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
683 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
684 t.elem (i,j) = real (a.elem (i,j)) < s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
685 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
686 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
687 t.elem (i,j) = real (a.elem (i,j)) <= s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
688 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
689 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
690 t.elem (i,j) = a.elem (i,j) == s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
691 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
692 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
693 t.elem (i,j) = real (a.elem (i,j)) >= s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
694 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
695 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
696 t.elem (i,j) = real (a.elem (i,j)) > s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
697 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
698 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
699 t.elem (i,j) = a.elem (i,j) != s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
700 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
701 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
702 t.elem (i,j) = (a.elem (i,j) != 0.0) && s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
703 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
704 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
705 t.elem (i,j) = (a.elem (i,j) != 0.0) || s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
706 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
707 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
708 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
709 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
710 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
711 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
712
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
713 return t;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
714 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
715
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
716 /* 10 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
717 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
718 mx_stupid_bool_op (Matrix_bool_op op, const ComplexMatrix& a, const Complex& s)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
719 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
720 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
721 int ac = a.columns ();
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
722
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
723 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
724 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
725 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
726 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
727 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
728 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
729 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
730
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
731 Matrix t (ar, ac);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
732
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
733 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
734 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
735 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
736 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
737 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
738 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
739 t.elem (i,j) = real (a.elem (i,j)) < real (s);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
740 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
741 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
742 t.elem (i,j) = real (a.elem (i,j)) <= real (s);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
743 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
744 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
745 t.elem (i,j) = a.elem (i,j) == s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
746 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
747 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
748 t.elem (i,j) = real (a.elem (i,j)) >= real (s);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
749 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
750 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
751 t.elem (i,j) = real (a.elem (i,j)) > real (s);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
752 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
753 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
754 t.elem (i,j) = a.elem (i,j) != s;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
755 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
756 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
757 t.elem (i,j) = (a.elem (i,j) != 0.0) && (s != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
758 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
759 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
760 t.elem (i,j) = (a.elem (i,j) != 0.0) || (s != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
761 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
762 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
763 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
764 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
765 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
766 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
767
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
768 return t;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
769 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
770
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
771 /* 11 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
772 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
773 mx_stupid_bool_op (Matrix_bool_op op, const ComplexMatrix& a, const Matrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
774 {
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
775 if (! m_add_conform (a, b, 1))
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
776 return Matrix ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
777
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
778 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
779 int ac = a.columns ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
780
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
781 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
782 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
783 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
784 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
785 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
786 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
787 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
788
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
789 Matrix c (ar, ac);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
790
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
791 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
792 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
793 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
794 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
795 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
796 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
797 c.elem (i, j) = real (a.elem (i, j)) < b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
798 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
799 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
800 c.elem (i, j) = real (a.elem (i, j)) <= b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
801 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
802 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
803 c.elem (i, j) = a.elem (i, j) == b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
804 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
805 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
806 c.elem (i, j) = real (a.elem (i, j)) >= b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
807 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
808 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
809 c.elem (i, j) = real (a.elem (i, j)) > b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
810 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
811 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
812 c.elem (i, j) = a.elem (i, j) != b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
813 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
814 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
815 c.elem (i, j) = (a.elem (i, j) != 0.0) && b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
816 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
817 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
818 c.elem (i, j) = (a.elem (i, j) != 0.0) || b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
819 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
820 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
821 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
822 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
823 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
824 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
825 return c;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
826 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
827
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
828 /* 12 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
829 static Matrix
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
830 mx_stupid_bool_op (Matrix_bool_op op, const ComplexMatrix& a,
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
831 const ComplexMatrix& b)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
832 {
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
833 if (! m_add_conform (a, b, 1))
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
834 return Matrix ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
835
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
836 int ar = a.rows ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
837 int ac = a.columns ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
838
722
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
839 if (ar == 0 || ac == 0)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
840 {
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
841 if (op == Matrix_EQ)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
842 return Matrix (1, 1, 1.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
843 else if (op == Matrix_NE)
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
844 return Matrix (1, 1, 0.0);
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
845 }
c40cdd16121e [project @ 1994-09-21 15:22:21 by jwe]
jwe
parents: 636
diff changeset
846
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
847 Matrix c (ar, ac);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
848
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
849 for (int j = 0; j < ac; j++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
850 for (int i = 0; i < ar; i++)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
851 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
852 switch (op)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
853 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
854 case Matrix_LT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
855 c.elem (i, j) = real (a.elem (i, j)) < real (b.elem (i, j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
856 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
857 case Matrix_LE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
858 c.elem (i, j) = real (a.elem (i, j)) <= real (b.elem (i, j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
859 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
860 case Matrix_EQ:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
861 c.elem (i, j) = a.elem (i, j) == b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
862 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
863 case Matrix_GE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
864 c.elem (i, j) = real (a.elem (i, j)) >= real (b.elem (i, j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
865 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
866 case Matrix_GT:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
867 c.elem (i, j) = real (a.elem (i, j)) > real (b.elem (i, j));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
868 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
869 case Matrix_NE:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
870 c.elem (i, j) = a.elem (i, j) != b.elem (i, j);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
871 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
872 case Matrix_AND:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
873 c.elem (i, j) = (a.elem (i, j) != 0.0) && (b.elem (i, j) != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
874 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
875 case Matrix_OR:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
876 c.elem (i, j) = (a.elem (i, j) != 0.0) || (b.elem (i, j) != 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
877 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
878 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
879 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
880 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
881 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
882 }
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
883
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
884 return c;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
885 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
886
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
887 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
888 * Unary operations. One for each numeric data type:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
889 *
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
890 * scalar
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
891 * complex_scalar
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
892 * matrix
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
893 * complex_matrix
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
894 *
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
895 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
896
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
897 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
898 do_unary_op (double d, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
899 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
900 double result = 0.0;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
901
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
902 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
903 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
904 case tree_expression::not:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
905 result = (! d);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
906 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
907 case tree_expression::uminus:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
908 result = -d;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
909 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
910 case tree_expression::hermitian:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
911 case tree_expression::transpose:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
912 result = d;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
913 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
914 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
915 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
916 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
917 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
918
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
919 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
920 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
921
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
922 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
923 do_unary_op (const Matrix& a, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
924 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
925 Matrix result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
926
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
927 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
928 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
929 case tree_expression::not:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
930 result = (! a);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
931 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
932 case tree_expression::uminus:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
933 result = -a;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
934 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
935 case tree_expression::hermitian:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
936 case tree_expression::transpose:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
937 result = a.transpose ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
938 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
939 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
940 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
941 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
942 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
943
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
944 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
945 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
946
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
947 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
948 do_unary_op (const Complex& c, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
949 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
950 Complex result = 0.0;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
951
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
952 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
953 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
954 case tree_expression::not:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
955 result = (c == 0.0);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
956 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
957 case tree_expression::uminus:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
958 result = -c;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
959 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
960 case tree_expression::hermitian:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
961 result = conj (c);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
962 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
963 case tree_expression::transpose:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
964 result = c;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
965 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
966 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
967 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
968 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
969 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
970
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
971 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
972 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
973
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
974 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
975 do_unary_op (const ComplexMatrix& a, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
976 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
977 ComplexMatrix result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
978
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
979 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
980 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
981 case tree_expression::not:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
982 result = (! a);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
983 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
984 case tree_expression::uminus:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
985 result = -a;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
986 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
987 case tree_expression::hermitian:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
988 result = a.hermitian ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
989 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
990 case tree_expression::transpose:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
991 result = a.transpose ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
992 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
993 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
994 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
995 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
996 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
997
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
998 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
999 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1000
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1001 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1002 * Binary operations. One for each type combination, in the order
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1003 * given here:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1004 *
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1005 * op2 \ op1: s m cs cm
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1006 * +-- +---+---+----+----+
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1007 * scalar | | 1 | 5 | 9 | 13 |
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1008 * +---+---+----+----+
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1009 * matrix | 2 | 6 | 10 | 14 |
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1010 * +---+---+----+----+
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1011 * complex_scalar | 3 | 7 | 11 | 15 |
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1012 * +---+---+----+----+
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1013 * complex_matrix | 4 | 8 | 12 | 16 |
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1014 * +---+---+----+----+
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1015 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1016
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1017 /* 1 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1018 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1019 do_binary_op (double a, double b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1020 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1021 double result = 0.0;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1022
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1023 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1024 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1025 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1026 result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1027 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1028 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1029 result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1030 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1031 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1032 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1033 result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1034 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1035 case tree_expression::divide:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1036 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1037 if (b == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1038 DIVIDE_BY_ZERO_ERROR;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1039 result = a / b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1040 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1041 case tree_expression::leftdiv:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1042 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1043 if (a == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1044 DIVIDE_BY_ZERO_ERROR;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1045 result = b / a;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1046 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1047 case tree_expression::power:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1048 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1049 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1050 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1051 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1052 result = a < b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1053 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1054 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1055 result = a <= b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1056 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1057 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1058 result = a == b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1059 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1060 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1061 result = a >= b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1062 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1063 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1064 result = a > b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1065 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1066 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1067 result = a != b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1068 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1069 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1070 result = (a && b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1071 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1072 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1073 result = (a || b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1074 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1075 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1076 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1077 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1078 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1079
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1080 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1081 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1082
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1083 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1084 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1085
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1086 /* 2 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1087 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1088 do_binary_op (double a, const Matrix& b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1089 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1090 Matrix result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1091
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1092 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1093 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1094 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1095 result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1096 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1097 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1098 result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1099 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1100 case tree_expression::el_leftdiv:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1101 case tree_expression::leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1102 if (a == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1103 DIVIDE_BY_ZERO_ERROR;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1104 a = 1.0 / a;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1105 // fall through...
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1106 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1107 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1108 result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1109 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1110 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1111 return x_el_div (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1112 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1113 case tree_expression::divide:
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1114 gripe_nonconformant (1, 1, b.rows (), b.columns ());
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1115 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1116 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1117 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1118 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1119 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1120 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1121 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1122 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1123 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1124 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1125 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1126 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1127 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1128 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1129 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1130 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1131 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1132 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1133 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1134 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1135 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1136 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1137 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1138 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1139 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1140 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1141 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1142 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1143 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1144 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1145 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1146 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1147 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1148 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1149 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1150
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1151 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1152 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1153
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1154 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1155 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1156
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1157 /* 3 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1158 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1159 do_binary_op (double a, const Complex& b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1160 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1161 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1162 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1163
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1164 double result = 0.0;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1165 Complex complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1166
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1167 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1168 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1169 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1170 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1171 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1172 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1173 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1174 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1175 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1176 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1177 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1178 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1179 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1180 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1181 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1182 case tree_expression::divide:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1183 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1184 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1185 if (b == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1186 DIVIDE_BY_ZERO_ERROR;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1187 complex_result = a / b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1188 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1189 case tree_expression::leftdiv:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1190 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1191 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1192 if (a == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1193 DIVIDE_BY_ZERO_ERROR;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1194 complex_result = b / a;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1195 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1196 case tree_expression::power:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1197 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1198 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1199 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1200 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1201 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1202 result = a < real (b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1203 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1204 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1205 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1206 result = a <= real (b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1207 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1208 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1209 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1210 result = a == b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1211 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1212 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1213 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1214 result = a >= real (b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1215 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1216 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1217 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1218 result = a > real (b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1219 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1220 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1221 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1222 result = a != b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1223 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1224 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1225 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1226 result = (a && (b != 0.0));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1227 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1228 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1229 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1230 result = (a || (b != 0.0));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1231 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1232 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1233 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1234 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1235 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1236
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1237 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1238 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1239
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1240 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1241
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1242 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1243 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1244 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1245 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1246 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1247
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1248 /* 4 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1249 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1250 do_binary_op (double a, const ComplexMatrix& b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1251 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1252 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1253 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1254
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1255 Matrix result;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1256 ComplexMatrix complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1257
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1258 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1259 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1260 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1261 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1262 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1263 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1264 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1265 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1266 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1267 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1268 case tree_expression::el_leftdiv:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1269 case tree_expression::leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1270 if (a == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1271 DIVIDE_BY_ZERO_ERROR;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1272 a = 1.0 / a;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1273 // fall through...
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1274 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1275 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1276 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1277 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1278 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1279 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1280 return x_el_div (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1281 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1282 case tree_expression::divide:
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1283 gripe_nonconformant (1, 1, b.rows (), b.columns ());
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1284 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1285 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1286 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1287 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1288 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1289 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1290 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1291 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1292 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1293 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1294 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1295 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1296 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1297 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1298 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1299 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1300 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1301 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1302 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1303 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1304 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1305 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1306 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1307 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1308 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1309 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1310 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1311 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1312 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1313 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1314 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1315 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1316 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1317 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1318 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1319 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1320 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1321 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1322 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1323 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1324 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1325 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1326 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1327
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1328 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1329 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1330
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1331 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1332
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1333 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1334 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1335 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1336 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1337 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1338
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1339 /* 5 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1340 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1341 do_binary_op (const Matrix& a, double b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1342 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1343 Matrix result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1344
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1345 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1346 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1347 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1348 result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1349 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1350 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1351 result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1352 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1353 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1354 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1355 result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1356 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1357 case tree_expression::divide:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1358 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1359 result = a / b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1360 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1361 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1362 return x_el_div (b, a);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1363 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1364 case tree_expression::leftdiv:
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1365 gripe_nonconformant (a.rows (), a.columns (), 1, 1);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1366 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1367 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1368 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1369 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1370 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1371 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1372 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1373 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1374 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1375 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1376 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1377 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1378 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1379 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1380 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1381 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1382 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1383 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1384 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1385 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1386 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1387 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1388 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1389 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1390 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1391 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1392 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1393 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1394 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1395 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1396 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1397 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1398 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1399 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1400 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1401
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1402 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1403 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1404
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1405 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1406 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1407
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1408 /* 6 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1409 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1410 do_binary_op (const Matrix& a, const Matrix& b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1411 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1412 Matrix result;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1413
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1414 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1415 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1416 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1417 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1418 result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1419 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1420 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1421 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1422 result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1423 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1424 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1425 if (m_add_conform (a, b, 1))
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
1426 result = product (a, b);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1427 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1428 case tree_expression::multiply:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1429 if (m_mul_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1430 result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1431 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1432 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1433 if (m_add_conform (a, b, 1))
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
1434 result = quotient (a, b);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1435 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1436 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1437 if (m_add_conform (a, b, 1))
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
1438 result = quotient (b, a);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1439 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1440 case tree_expression::leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1441 return xleftdiv (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1442 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1443 case tree_expression::divide:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1444 return xdiv (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1445 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1446 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1447 error ("can't do A ^ B for A and B both matrices");
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1448 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1449 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1450 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1451 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1452 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1453 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1454 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1455 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1456 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1457 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1458 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1459 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1460 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1461 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1462 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1463 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1464 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1465 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1466 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1467 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1468 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1469 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1470 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1471 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1472 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1473 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1474 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1475 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1476 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1477 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1478 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1479 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1480 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1481 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1482 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1483 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1484 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1485 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1486 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1487 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1488 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1489
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1490 if (error_state)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1491 return tree_constant ();
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1492
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1493 return tree_constant (result);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1494 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1495
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1496 /* 7 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1497 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1498 do_binary_op (const Matrix& a, const Complex& b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1499 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1500 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1501 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1502
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1503 Matrix result;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1504 ComplexMatrix complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1505
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1506 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1507 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1508 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1509 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1510 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1511 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1512 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1513 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1514 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1515 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1516 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1517 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1518 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1519 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1520 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1521 case tree_expression::divide:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1522 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1523 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1524 complex_result = a / b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1525 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1526 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1527 return x_el_div (b, a);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1528 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1529 case tree_expression::leftdiv:
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1530 gripe_nonconformant (a.rows (), a.columns (), 1, 1);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1531 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1532 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1533 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1534 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1535 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1536 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1537 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1538 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1539 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1540 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1541 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1542 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1543 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1544 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1545 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1546 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1547 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1548 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1549 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1550 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1551 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1552 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1553 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1554 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1555 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1556 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1557 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1558 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1559 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1560 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1561 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1562 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1563 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1564 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1565 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1566 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1567 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1568 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1569 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1570 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1571 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1572 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1573 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1574
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1575 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1576 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1577
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1578 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1579
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1580 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1581 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1582 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1583 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1584 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1585
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1586 /* 8 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1587 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1588 do_binary_op (const Matrix& a, const ComplexMatrix& b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1589 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1590 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1591 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1592
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1593 Matrix result;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1594 ComplexMatrix complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1595
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1596 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1597 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1598 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1599 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1600 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1601 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1602 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1603 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1604 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1605 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1606 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1607 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1608 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1609 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1610 if (m_add_conform (a, b, 1))
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
1611 complex_result = product (a, b);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1612 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1613 case tree_expression::multiply:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1614 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1615 if (m_mul_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1616 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1617 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1618 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1619 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1620 if (m_add_conform (a, b, 1))
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
1621 complex_result = quotient (a, b);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1622 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1623 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1624 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1625 if (m_add_conform (a, b, 1))
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
1626 complex_result = quotient (b, a);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1627 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1628 case tree_expression::leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1629 return xleftdiv (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1630 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1631 case tree_expression::divide:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1632 return xdiv (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1633 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1634 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1635 error ("can't do A ^ B for A and B both matrices");
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1636 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1637 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1638 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1639 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1640 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1641 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1642 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1643 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1644 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1645 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1646 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1647 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1648 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1649 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1650 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1651 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1652 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1653 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1654 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1655 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1656 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1657 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1658 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1659 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1660 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1661 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1662 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1663 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1664 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1665 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1666 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1667 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1668 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1669 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1670 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1671 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1672 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1673 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1674 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1675 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1676 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1677 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1678 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1679 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1680 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1681 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1682 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1683 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1684 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1685
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1686 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1687 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1688
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1689 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1690
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1691 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1692 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1693 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1694 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1695 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1696
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1697 /* 9 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1698 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1699 do_binary_op (const Complex& a, double b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1700 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1701 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1702 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1703
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1704 double result = 0.0;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1705 Complex complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1706
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1707 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1708 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1709 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1710 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1711 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1712 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1713 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1714 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1715 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1716 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1717 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1718 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1719 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1720 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1721 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1722 case tree_expression::divide:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1723 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1724 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1725 if (b == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1726 DIVIDE_BY_ZERO_ERROR;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1727 complex_result = a / b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1728 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1729 case tree_expression::leftdiv:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1730 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1731 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1732 if (a == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1733 DIVIDE_BY_ZERO_ERROR;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1734 complex_result = b / a;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1735 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1736 case tree_expression::power:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1737 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1738 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1739 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1740 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1741 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1742 result = real (a) < b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1743 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1744 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1745 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1746 result = real (a) <= b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1747 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1748 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1749 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1750 result = a == b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1751 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1752 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1753 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1754 result = real (a) >= b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1755 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1756 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1757 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1758 result = real (a) > b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1759 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1760 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1761 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1762 result = a != b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1763 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1764 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1765 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1766 result = ((a != 0.0) && b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1767 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1768 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1769 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1770 result = ((a != 0.0) || b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1771 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1772 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1773 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1774 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1775 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1776
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1777 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1778 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1779
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1780 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1781
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1782 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1783 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1784 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1785 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1786 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1787
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1788 /* 10 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1789 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1790 do_binary_op (const Complex& a, const Matrix& b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1791 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1792 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1793 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1794
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1795 Matrix result;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1796 ComplexMatrix complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1797
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1798 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1799 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1800 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1801 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1802 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1803 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1804 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1805 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1806 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1807 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1808 case tree_expression::el_leftdiv:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1809 case tree_expression::leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1810 if (a == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1811 DIVIDE_BY_ZERO_ERROR;
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
1812 result_type = RT_complex;
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
1813 complex_result = b / a;
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
1814 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1815 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1816 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1817 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1818 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1819 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1820 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1821 return x_el_div (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1822 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1823 case tree_expression::divide:
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1824 gripe_nonconformant (1, 1, b.rows (), b.columns ());
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1825 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1826 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1827 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1828 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1829 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1830 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1831 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1832 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1833 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1834 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1835 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1836 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1837 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1838 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1839 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1840 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1841 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1842 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1843 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1844 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1845 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1846 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1847 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1848 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1849 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1850 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1851 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1852 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1853 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1854 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1855 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1856 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1857 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1858 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1859 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1860 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1861 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1862 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1863 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1864 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1865 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1866 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1867 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1868
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1869 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1870 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1871
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1872 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1873
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1874 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1875 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1876 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1877 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1878 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1879
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1880 /* 11 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1881 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1882 do_binary_op (const Complex& a, const Complex& b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1883 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1884 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1885 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1886
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1887 double result = 0.0;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1888 Complex complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1889
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1890 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1891 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1892 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1893 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1894 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1895 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1896 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1897 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1898 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1899 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1900 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1901 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1902 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1903 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1904 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1905 case tree_expression::divide:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1906 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1907 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1908 if (b == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1909 DIVIDE_BY_ZERO_ERROR;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1910 complex_result = a / b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1911 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1912 case tree_expression::leftdiv:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1913 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1914 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1915 if (a == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1916 DIVIDE_BY_ZERO_ERROR;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1917 complex_result = b / a;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1918 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1919 case tree_expression::power:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1920 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1921 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1922 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1923 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1924 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1925 result = real (a) < real (b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1926 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1927 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1928 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1929 result = real (a) <= real (b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1930 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1931 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1932 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1933 result = a == b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1934 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1935 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1936 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1937 result = real (a) >= real (b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1938 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1939 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1940 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1941 result = real (a) > real (b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1942 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1943 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1944 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1945 result = a != b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1946 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1947 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1948 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1949 result = ((a != 0.0) && (b != 0.0));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1950 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1951 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1952 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1953 result = ((a != 0.0) || (b != 0.0));
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1954 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1955 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1956 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1957 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1958 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1959
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1960 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1961 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1962
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1963 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1964
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1965 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1966 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1967 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1968 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1969 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1970
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1971 /* 12 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1972 tree_constant
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
1973 do_binary_op (const Complex& a, const ComplexMatrix& b,
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1974 tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1975 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1976 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1977 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1978
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1979 Matrix result;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1980 ComplexMatrix complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
1981
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1982 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1983 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1984 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1985 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1986 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1987 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1988 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1989 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1990 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1991 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1992 case tree_expression::el_leftdiv:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1993 case tree_expression::leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1994 if (a == 0.0)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
1995 DIVIDE_BY_ZERO_ERROR;
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
1996 result_type = RT_complex;
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
1997 complex_result = b / a;
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
1998 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
1999 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2000 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2001 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2002 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2003 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2004 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2005 return x_el_div (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2006 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2007 case tree_expression::divide:
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2008 gripe_nonconformant (1, 1, b.rows (), b.columns ());
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2009 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2010 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2011 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2012 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2013 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2014 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2015 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2016 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2017 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2018 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2019 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2020 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2021 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2022 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2023 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2024 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2025 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2026 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2027 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2028 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2029 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2030 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2031 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2032 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2033 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2034 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2035 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2036 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2037 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2038 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2039 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2040 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2041 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2042 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2043 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2044 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2045 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2046 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2047 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2048 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2049 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2050 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2051 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2052
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2053 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2054 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2055
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2056 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2057
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2058 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2059 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2060 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2061 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2062 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2063
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2064 /* 13 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2065 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2066 do_binary_op (const ComplexMatrix& a, double b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2067 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2068 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2069 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2070
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2071 Matrix result;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2072 ComplexMatrix complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2073
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2074 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2075 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2076 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2077 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2078 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2079 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2080 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2081 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2082 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2083 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2084 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2085 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2086 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2087 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2088 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2089 case tree_expression::divide:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2090 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2091 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2092 complex_result = a / b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2093 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2094 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2095 return x_el_div (b, a);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2096 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2097 case tree_expression::leftdiv:
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2098 gripe_nonconformant (a.rows (), a.columns (), 1, 1);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2099 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2100 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2101 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2102 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2103 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2104 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2105 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2106 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2107 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2108 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2109 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2110 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2111 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2112 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2113 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2114 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2115 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2116 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2117 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2118 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2119 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2120 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2121 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2122 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2123 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2124 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2125 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2126 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2127 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2128 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2129 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2130 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2131 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2132 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2133 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2134 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2135 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2136 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2137 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2138 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2139 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2140 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2141 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2142
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2143 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2144 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2145
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2146 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2147
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2148 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2149 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2150 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2151 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2152 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2153
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2154 /* 14 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2155 tree_constant
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2156 do_binary_op (const ComplexMatrix& a, const Matrix& b, tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2157 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2158 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2159 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2160
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2161 Matrix result;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2162 ComplexMatrix complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2163
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2164 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2165 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2166 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2167 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2168 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2169 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2170 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2171 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2172 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2173 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2174 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2175 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2176 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2177 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2178 if (m_add_conform (a, b, 1))
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
2179 complex_result = product (a, b);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2180 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2181 case tree_expression::multiply:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2182 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2183 if (m_mul_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2184 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2185 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2186 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2187 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2188 if (m_add_conform (a, b, 1))
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
2189 complex_result = quotient (a, b);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2190 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2191 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2192 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2193 if (m_add_conform (a, b, 1))
390
0f4129889b57 [project @ 1994-03-17 21:47:39 by jwe]
jwe
parents: 240
diff changeset
2194 complex_result = quotient (b, a);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2195 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2196 case tree_expression::leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2197 return xleftdiv (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2198 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2199 case tree_expression::divide:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2200 return xdiv (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2201 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2202 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2203 error ("can't do A ^ B for A and B both matrices");
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2204 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2205 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2206 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2207 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2208 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2209 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2210 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2211 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2212 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2213 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2214 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2215 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2216 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2217 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2218 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2219 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2220 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2221 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2222 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2223 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2224 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2225 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2226 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2227 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2228 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2229 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2230 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2231 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2232 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2233 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2234 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2235 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2236 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2237 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2238 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2239 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2240 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2241 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2242 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2243 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2244 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2245 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2246 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2247 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2248 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2249 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2250 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2251 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2252 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2253
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2254 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2255 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2256
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2257 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2258
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2259 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2260 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2261 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2262 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2263 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2264
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2265 /* 15 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2266 tree_constant
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
2267 do_binary_op (const ComplexMatrix& a, const Complex& b,
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2268 tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2269 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2270 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2271 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2272
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2273 Matrix result;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2274 ComplexMatrix complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2275
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2276 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2277 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2278 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2279 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2280 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2281 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2282 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2283 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2284 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2285 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2286 case tree_expression::multiply:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2287 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2288 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2289 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2290 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2291 case tree_expression::divide:
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2292 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2293 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2294 complex_result = a / b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2295 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2296 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2297 return x_el_div (b, a);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2298 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2299 case tree_expression::leftdiv:
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2300 gripe_nonconformant (a.rows (), a.columns (), 1, 1);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2301 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2302 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2303 return xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2304 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2305 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2306 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2307 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2308 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2309 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2310 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2311 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2312 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2313 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2314 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2315 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2316 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2317 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2318 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2319 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2320 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2321 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2322 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2323 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2324 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2325 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2326 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2327 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2328 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2329 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2330 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2331 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2332 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2333 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2334 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2335 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2336 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2337 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2338 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2339 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2340 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2341 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2342 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2343 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2344
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2345 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2346 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2347
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2348 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2349
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2350 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2351 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2352 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2353 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2354 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2355
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2356 /* 16 */
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2357 tree_constant
164
e2c950dd96d2 [project @ 1993-10-18 19:32:00 by jwe]
jwe
parents: 143
diff changeset
2358 do_binary_op (const ComplexMatrix& a, const ComplexMatrix& b,
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2359 tree_expression::type t)
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2360 {
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2361 enum RT { RT_unknown, RT_real, RT_complex };
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2362 RT result_type = RT_unknown;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2363
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2364 Matrix result;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2365 ComplexMatrix complex_result;
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2366
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2367 switch (t)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2368 {
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2369 case tree_expression::add:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2370 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2371 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2372 complex_result = a + b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2373 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2374 case tree_expression::subtract:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2375 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2376 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2377 complex_result = a - b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2378 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2379 case tree_expression::el_mul:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2380 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2381 if (m_add_conform (a, b, 1))
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
2382 complex_result = product (a, b);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2383 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2384 case tree_expression::multiply:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2385 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2386 if (m_mul_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2387 complex_result = a * b;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2388 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2389 case tree_expression::el_div:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2390 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2391 if (m_add_conform (a, b, 1))
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
2392 complex_result = quotient (a, b);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2393 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2394 case tree_expression::el_leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2395 result_type = RT_complex;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2396 if (m_add_conform (a, b, 1))
240
a99f28f5e351 [project @ 1993-11-30 20:24:36 by jwe]
jwe
parents: 164
diff changeset
2397 complex_result = quotient (b, a);
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2398 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2399 case tree_expression::leftdiv:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2400 return xleftdiv (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2401 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2402 case tree_expression::divide:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2403 return xdiv (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2404 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2405 case tree_expression::power:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2406 error ("can't do A ^ B for A and B both matrices");
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2407 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2408 case tree_expression::elem_pow:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2409 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2410 return elem_xpow (a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2411 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2412 case tree_expression::cmp_lt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2413 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2414 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2415 result = mx_stupid_bool_op (Matrix_LT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2416 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2417 case tree_expression::cmp_le:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2418 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2419 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2420 result = mx_stupid_bool_op (Matrix_LE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2421 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2422 case tree_expression::cmp_eq:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2423 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2424 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2425 result = mx_stupid_bool_op (Matrix_EQ, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2426 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2427 case tree_expression::cmp_ge:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2428 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2429 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2430 result = mx_stupid_bool_op (Matrix_GE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2431 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2432 case tree_expression::cmp_gt:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2433 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2434 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2435 result = mx_stupid_bool_op (Matrix_GT, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2436 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2437 case tree_expression::cmp_ne:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2438 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2439 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2440 result = mx_stupid_bool_op (Matrix_NE, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2441 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2442 case tree_expression::and:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2443 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2444 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2445 result = mx_stupid_bool_op (Matrix_AND, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2446 break;
578
d169be9237fb [project @ 1994-08-03 20:06:54 by jwe]
jwe
parents: 526
diff changeset
2447 case tree_expression::or:
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2448 result_type = RT_real;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2449 if (m_add_conform (a, b, 1))
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2450 result = mx_stupid_bool_op (Matrix_OR, a, b);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2451 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2452 default:
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2453 panic_impossible ();
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2454 break;
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2455 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2456
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2457 if (error_state)
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2458 return tree_constant ();
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2459
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2460 assert (result_type != RT_unknown);
143
7849db4b6dbc [project @ 1993-10-04 02:36:45 by jwe]
jwe
parents: 1
diff changeset
2461
1
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2462 if (result_type == RT_real)
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2463 return tree_constant (result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2464 else
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2465 return tree_constant (complex_result);
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2466 }
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2467
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2468 /*
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2469 ;;; Local Variables: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2470 ;;; mode: C++ ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2471 ;;; page-delimiter: "^/\\*" ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2472 ;;; End: ***
78fd87e624cb [project @ 1993-08-08 01:13:40 by jwe]
jwe
parents:
diff changeset
2473 */