GNU Octave  3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
op-fs-fs.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-scalar.h"
33 #include "ov-float.h"
34 #include "ov-flt-re-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 // scalar unary ops.
42 
43 DEFUNOP (not, float_scalar)
44 {
46  float x = v.float_value ();
47  if (xisnan (x))
49  return octave_value (x == 0.0f);
50 }
51 
52 DEFUNOP_OP (uplus, float_scalar, /* no-op */)
53 DEFUNOP_OP (uminus, float_scalar, -)
54 DEFUNOP_OP (transpose, float_scalar, /* no-op */)
55 DEFUNOP_OP (hermitian, float_scalar, /* no-op */)
56 
57 DEFNCUNOP_METHOD (incr, float_scalar, increment)
58 DEFNCUNOP_METHOD (decr, float_scalar, decrement)
59 
60 // float by float ops.
61 
62 DEFBINOP_OP (add, float_scalar, float_scalar, +)
63 DEFBINOP_OP (sub, float_scalar, float_scalar, -)
64 DEFBINOP_OP (mul, float_scalar, float_scalar, *)
65 
66 DEFBINOP (div, float_scalar, float_scalar)
67 {
69 
70  float d = v2.float_value ();
71 
72  if (d == 0.0)
74 
75  return octave_value (v1.float_value () / d);
76 }
77 
78 DEFBINOP_FN (pow, float_scalar, float_scalar, xpow)
79 
80 DEFBINOP (ldiv, float_scalar, float_scalar)
81 {
83 
84  float d = v1.float_value ();
85 
86  if (d == 0.0)
88 
89  return octave_value (v2.float_value () / d);
90 }
91 
92 DEFBINOP_OP (lt, float_scalar, float_scalar, <)
93 DEFBINOP_OP (le, float_scalar, float_scalar, <=)
94 DEFBINOP_OP (eq, float_scalar, float_scalar, ==)
95 DEFBINOP_OP (ge, float_scalar, float_scalar, >=)
96 DEFBINOP_OP (gt, float_scalar, float_scalar, >)
97 DEFBINOP_OP (ne, float_scalar, float_scalar, !=)
98 
99 DEFBINOP_OP (el_mul, float_scalar, float_scalar, *)
100 
101 DEFBINOP (el_div, float_scalar, float_scalar)
102 {
104 
105  float d = v2.float_value ();
106 
107  if (d == 0.0)
109 
110  return octave_value (v1.float_value () / d);
111 }
112 
113 DEFBINOP_FN (el_pow, float_scalar, float_scalar, xpow)
114 
115 DEFBINOP (el_ldiv, float_scalar, float_scalar)
116 {
118 
119  float d = v1.float_value ();
120 
121  if (d == 0.0)
123 
124  return octave_value (v2.float_value () / d);
125 }
126 
127 DEFSCALARBOOLOP_OP (el_and, float_scalar, float_scalar, &&)
128 DEFSCALARBOOLOP_OP (el_or, float_scalar, float_scalar, ||)
129 
130 DEFNDCATOP_FN (fs_fs, float_scalar, float_scalar, float_array, float_array,
132 DEFNDCATOP_FN (s_fs, scalar, float_scalar, float_array, float_array, concat)
133 DEFNDCATOP_FN (fs_s, float_scalar, scalar, float_array, float_array, concat)
134 
135 CONVDECL (float_to_scalar)
136 {
138 
139  return new octave_matrix (Matrix (1, 1,
140  static_cast<double>(v.float_value ())));
141 }
142 
143 void
145 {
151 
154 
173 
177 
181 
188 
190 }