GNU Octave  3.8.0 A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
DET.h
Go to the documentation of this file.
1 /*
2
3 Copyright (C) 2008-2013 Jaroslav Hajek
4
5 This file is part of Octave.
6
7 Octave is free software; you can redistribute it and/or modify it
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
20
21 */
22
23 #if !defined (octave_DET_h)
24 #define octave_DET_h 1
25
26 #include <cmath>
27 #include "oct-cmplx.h"
28 #include "lo-mappers.h"
29
30 template <class T>
31 class
33 {
34 public:
35
36  base_det (T c = 1, int e = 0)
37  : c2 (), e2 ()
38  {
39  c2 = xlog2 (c, e2);
40  e2 += e;
41  }
42
43  base_det (T c, double e, double b)
44  : c2 (), e2 ()
45  {
46  e *= xlog2 (b);
47  e2 = e;
48  c *= xexp2 (e - e2);
49  int f;
50  c2 = xlog2 (c, f);
51  e2 += f;
52  }
53
54  base_det (const base_det& a) : c2 (a.c2), e2 (a.e2) { }
55
57  {
58  c2 = a.c2;
59  e2 = a.e2;
60  return *this;
61  }
62
63  T coef (void) const { return c2; }
64  int exp (void) const { return e2; }
65
66  T value () const { return c2 * static_cast<T> (std::ldexp (1.0, e2)); }
67  operator T () const { return value (); }
68
69  base_det square () const { return base_det (c2*c2, e2+e2); }
70
71  void operator *= (T t)
72  {
73  int e;
74  c2 *= xlog2 (t, e);
75  e2 += e;
76  }
77
78 private:
79
80  T c2;
81  int e2;
82 };
83
84 // Provide the old types by typedefs.
89
90 #endif