GNU Octave
3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
Main Page
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Properties
Friends
Macros
Pages
libinterp
operators
op-cs-cs.cc
Go to the documentation of this file.
1
/*
2
3
Copyright (C) 1996-2013 John W. Eaton
4
5
This file is part of Octave.
6
7
Octave is free software; you can redistribute it and/or modify it
8
under the terms of the GNU General Public License as published by the
9
Free Software Foundation; either version 3 of the License, or (at your
10
option) any later version.
11
12
Octave is distributed in the hope that it will be useful, but WITHOUT
13
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
15
for more details.
16
17
You should have received a copy of the GNU General Public License
18
along with Octave; see the file COPYING. If not, see
19
<http://www.gnu.org/licenses/>.
20
21
*/
22
23
#ifdef HAVE_CONFIG_H
24
#include <config.h>
25
#endif
26
27
#include "
Array-util.h
"
28
29
#include "
gripes.h
"
30
#include "
oct-obj.h
"
31
#include "
ov.h
"
32
#include "
ov-complex.h
"
33
#include "
ov-cx-mat.h
"
34
#include "
ov-flt-cx-mat.h
"
35
#include "
ov-typeinfo.h
"
36
#include "
ov-null-mat.h
"
37
#include "
ops.h
"
38
#include "
xdiv.h
"
39
#include "
xpow.h
"
40
41
// unary complex scalar ops.
42
43
DEFUNOP
(not, complex)
44
{
45
CAST_UNOP_ARG
(
const
octave_complex
&);
46
Complex
x
= v.complex_value ();
47
if
(
xisnan
(x))
48
gripe_nan_to_logical_conversion
();
49
return
octave_value
(x == 0.0);
50
}
51
52
DEFUNOP_OP
(uplus, complex,
/* no-op */
)
53
DEFUNOP_OP
(uminus, complex, -)
54
DEFUNOP_OP
(
transpose
, complex,
/* no-op */
)
55
56
DEFUNOP
(hermitian, complex)
57
{
58
CAST_UNOP_ARG
(
const
octave_complex
&);
59
60
return
octave_value
(
conj
(v.complex_value ()));
61
}
62
63
DEFNCUNOP_METHOD
(incr, complex, increment)
64
DEFNCUNOP_METHOD
(decr, complex, decrement)
65
66
// complex scalar by complex scalar ops.
67
68
DEFBINOP_OP
(add, complex, complex, +)
69
DEFBINOP_OP
(sub, complex, complex, -)
70
DEFBINOP_OP
(mul, complex, complex, *)
71
72
DEFBINOP
(div, complex, complex)
73
{
74
CAST_BINOP_ARGS
(
const
octave_complex
&,
const
octave_complex
&);
75
76
Complex
d
=
v2
.
complex_value
();
77
78
if
(d == 0.0)
79
gripe_divide_by_zero
();
80
81
return
octave_value
(
v1
.
complex_value
() /
d
);
82
}
83
84
DEFBINOP_FN
(
pow
, complex, complex,
xpow
)
85
86
DEFBINOP
(ldiv, complex, complex)
87
{
88
CAST_BINOP_ARGS
(
const
octave_complex
&,
const
octave_complex
&);
89
90
Complex
d
=
v1
.
complex_value
();
91
92
if
(d == 0.0)
93
gripe_divide_by_zero
();
94
95
return
octave_value
(
v2
.
complex_value
() /
d
);
96
}
97
98
DEFCMPLXCMPOP_OP
(lt, complex, complex, <)
99
DEFCMPLXCMPOP_OP
(le, complex, complex, <=)
100
DEFCMPLXCMPOP_OP
(eq, complex, complex, ==)
101
DEFCMPLXCMPOP_OP
(ge, complex, complex, >=)
102
DEFCMPLXCMPOP_OP
(gt, complex, complex, >)
103
DEFCMPLXCMPOP_OP
(ne, complex, complex, !=)
104
105
DEFBINOP_OP
(el_mul, complex, complex, *)
106
107
DEFBINOP
(el_div, complex, complex)
108
{
109
CAST_BINOP_ARGS
(
const
octave_complex
&,
const
octave_complex
&);
110
111
Complex
d
=
v2
.
complex_value
();
112
113
if
(d == 0.0)
114
gripe_divide_by_zero
();
115
116
return
octave_value
(
v1
.
complex_value
() /
d
);
117
}
118
119
DEFBINOP_FN
(el_pow, complex, complex,
xpow
)
120
121
DEFBINOP
(el_ldiv, complex, complex)
122
{
123
CAST_BINOP_ARGS
(
const
octave_complex
&,
const
octave_complex
&);
124
125
Complex
d
=
v1
.
complex_value
();
126
127
if
(d == 0.0)
128
gripe_divide_by_zero
();
129
130
return
octave_value
(
v2
.
complex_value
() /
d
);
131
}
132
133
DEFBINOP
(el_and, complex, complex)
134
{
135
CAST_BINOP_ARGS
(
const
octave_complex
&,
const
octave_complex
&);
136
137
return
v1
.
complex_value
() != 0.0 &&
v2
.
complex_value
() != 0.0;
138
}
139
140
DEFBINOP
(el_or, complex, complex)
141
{
142
CAST_BINOP_ARGS
(
const
octave_complex
&,
const
octave_complex
&);
143
144
return
v1
.
complex_value
() != 0.0 ||
v2
.
complex_value
() != 0.0;
145
}
146
147
DEFNDCATOP_FN
(cs_cs, complex, complex, complex_array, complex_array,
concat
)
148
149
CONVDECL
(complex_to_float_complex)
150
{
151
CAST_CONV_ARG
(
const
octave_complex
&);
152
153
return
new
octave_float_complex_matrix
(
FloatComplexMatrix
(1, 1,
154
static_cast<FloatComplex>
155
(v.complex_value ())));
156
}
157
158
void
159
install_cs_cs_ops
(
void
)
160
{
161
INSTALL_UNOP
(
op_not
,
octave_complex
, not);
162
INSTALL_UNOP
(
op_uplus
,
octave_complex
, uplus);
163
INSTALL_UNOP
(
op_uminus
,
octave_complex
, uminus);
164
INSTALL_UNOP
(
op_transpose
,
octave_complex
,
transpose
);
165
INSTALL_UNOP
(
op_hermitian
,
octave_complex
, hermitian);
166
167
INSTALL_NCUNOP
(
op_incr
,
octave_complex
, incr);
168
INSTALL_NCUNOP
(
op_decr
,
octave_complex
, decr);
169
170
INSTALL_BINOP
(
op_add
,
octave_complex
,
octave_complex
, add);
171
INSTALL_BINOP
(
op_sub
,
octave_complex
,
octave_complex
, sub);
172
INSTALL_BINOP
(
op_mul
,
octave_complex
,
octave_complex
, mul);
173
INSTALL_BINOP
(
op_div
,
octave_complex
,
octave_complex
, div);
174
INSTALL_BINOP
(
op_pow
,
octave_complex
,
octave_complex
,
pow
);
175
INSTALL_BINOP
(
op_ldiv
,
octave_complex
,
octave_complex
, ldiv);
176
INSTALL_BINOP
(
op_lt
,
octave_complex
,
octave_complex
, lt);
177
INSTALL_BINOP
(
op_le
,
octave_complex
,
octave_complex
, le);
178
INSTALL_BINOP
(
op_eq
,
octave_complex
,
octave_complex
, eq);
179
INSTALL_BINOP
(
op_ge
,
octave_complex
,
octave_complex
, ge);
180
INSTALL_BINOP
(
op_gt
,
octave_complex
,
octave_complex
, gt);
181
INSTALL_BINOP
(
op_ne
,
octave_complex
,
octave_complex
, ne);
182
INSTALL_BINOP
(
op_el_mul
,
octave_complex
,
octave_complex
, el_mul);
183
INSTALL_BINOP
(
op_el_div
,
octave_complex
,
octave_complex
, el_div);
184
INSTALL_BINOP
(
op_el_pow
,
octave_complex
,
octave_complex
, el_pow);
185
INSTALL_BINOP
(
op_el_ldiv
,
octave_complex
,
octave_complex
, el_ldiv);
186
INSTALL_BINOP
(
op_el_and
,
octave_complex
,
octave_complex
, el_and);
187
INSTALL_BINOP
(
op_el_or
,
octave_complex
,
octave_complex
, el_or);
188
189
INSTALL_CATOP
(
octave_complex
,
octave_complex
, cs_cs);
190
191
INSTALL_ASSIGNCONV
(
octave_complex
,
octave_complex
,
octave_complex_matrix
);
192
193
INSTALL_ASSIGNCONV
(
octave_complex
,
octave_null_matrix
,
194
octave_complex_matrix
);
195
INSTALL_ASSIGNCONV
(
octave_complex
,
octave_null_str
,
octave_complex_matrix
);
196
INSTALL_ASSIGNCONV
(
octave_complex
,
octave_null_sq_str
,
197
octave_complex_matrix
);
198
199
INSTALL_CONVOP
(
octave_complex
,
octave_float_complex_matrix
,
200
complex_to_float_complex);
201
}
Generated on Mon Dec 30 2013 03:04:35 for GNU Octave by
1.8.1.2