30 #ifndef FIX_FUNCTIONS_H
31 #define FIX_FUNCTIONS_H
47 template<
class T>
inline bool is_fix(
const T &) {
return false;}
49 template<>
inline bool is_fix(
const Fix &) {
return true;}
55 template<>
inline bool is_fix(
const CFix &) {
return true;}
71 for (
int i = 0; i < y.
size(); i++) y(i).
set(x(i), n);
77 for (
int i = 0; i < y.
size(); i++) y(i).
set(x(i), n, q);
83 for (
int i = 0; i < y.
size(); i++) y(i).
set(x(i), n);
89 for (
int i = 0; i < y.
size(); i++) y(i).
set(x(i), n, q);
92 inline void set_fix(
double &y,
double x,
int) {y = x;}
96 inline void set_fix(vec &y,
const vec &x,
int) {y = x;}
100 inline void set_fix(mat &y,
const mat &x,
int) {y = x;}
116 for (
int i = 0; i < y.
size(); i++) y(i).
set(x(i), n);
121 it_assert_debug(real.length() == imag.length(),
"set_fix: real and imag should have the same size");
129 for (
int i = 0; i < y.
size(); i++) y(i).
set(x(i), n, q);
134 it_assert_debug(real.length() == imag.length(),
"set_fix: real and imag should have the same size");
142 for (
int i = 0; i < y.
size(); i++) y(i).
set(x(i), n);
147 it_assert_debug(real.rows() == imag.rows() && real.cols() == imag.cols(),
"set_fix: real and imag should have the same size");
148 y.
set_size(real.rows(), real.cols());
155 for (
int i = 0; i < y.
size(); i++) y(i).
set(x(i), n, q);
160 it_assert_debug(real.rows() == imag.rows() && real.cols() == imag.cols(),
"set_fix: real and imag should have the same size");
161 y.
set_size(real.rows(), real.cols());
165 inline void set_fix(std::complex<double> &y,
const std::complex<double> &x,
int) {y = x;}
169 inline void set_fix(std::complex<double> &y,
const std::complex<double> &x,
int,
q_mode) {y = x;}
173 inline void set_fix(cvec &y,
const cvec &x,
int) {y = x;}
181 inline void set_fix(cmat &y,
const cmat &x,
int) {y = x;}
193 for (
int i = 0; i < y.
size(); i++)
set_fix(y(i), x(i), n);
206 for (
int i = 0; i < y.
size(); i++)
set_fix(y(i), x(i), n, q);
224 {
for(
int i = 0; i < y.
size(); i++) y(i).lshift(n);}
227 {
for(
int i = 0; i < y.
size(); i++) y(i).rshift(n);}
230 {
for(
int i = 0; i < y.
size(); i++) y(i).rshift(n, q);}
233 {
for(
int i = 0; i < y.
size(); i++) y(i).lshift(n);}
236 {
for(
int i = 0; i < y.
size(); i++) y(i).rshift(n);}
239 {
for(
int i = 0; i < y.
size(); i++) y(i).rshift(n, q);}
266 {
for(
int i = 0; i < y.size(); i++) y(i).lshift(n);}
269 {
for(
int i = 0; i < y.size(); i++) y(i).rshift(n);}
272 {
for(
int i = 0; i < y.size(); i++) y(i).rshift(n, q);}
275 {
for(
int i = 0; i < y.size(); i++) y(i).lshift(n);}
278 {
for(
int i = 0; i < y.size(); i++) y(i).rshift(n);}
281 {
for(
int i = 0; i < y.size(); i++) y(i).rshift(n, q);}
333 template<
class T,
class U>
340 template<
class T,
class U>
341 class ConvertU2T<T, Array<U> >
344 typedef Array<typename ConvertU2T<T, U>::result> result;
347 template<
class T,
class U>
348 class ConvertU2T<T, Vec<U> >
351 typedef Vec<T> result;
354 template<
class T,
class U>
355 class ConvertU2T<T, Mat<U> >
358 typedef Mat<T> result;
364 template<
class T>
inline T
to(
double x) {
return T(x);}
366 template<
class T>
inline T
to(
const Fix &x) {
return T(x);}
368 template<
class T>
inline T
to(
const std::complex<double> &x) {
return T(x);}
370 template<
class T>
inline T
to(
const CFix &x) {
return T(x);}
372 template<
class T>
inline T
to(
double real,
double imag) {
return T(real, imag);}
380 for (
int i = 0; i < x.
length(); i++) {
388 template<>
inline cvec to<std::complex<double> >(
const cvec &x) {
return x;}
399 for (
int i = 0; i < real.
length(); i++) {
409 for (
int i = 0; i < x.
rows(); i++) {
410 for (
int j = 0; j < x.
cols(); j++) {
411 y(i, j) = T(x(i, j));
419 template<>
inline cmat to<std::complex<double> >(
const cmat &x) {
return x;}
430 for (
int i = 0; i < real.
rows(); i++) {
431 for (
int j = 0; j < real.
cols(); j++) {
432 y(i, j) = T(
real(i, j),
imag(i, j));
439 template<
class T,
class U>
443 for (
int i = 0; i < x.
size(); i++) {
450 template<
class T,
class U>
455 for (
int i = 0; i < real.
size(); i++) {
475 inline double unfix(
double x) {
return x;}
477 inline std::complex<double>
unfix(
const std::complex<double> &x) {
return x;}
479 inline vec
unfix(
const vec &x) {
return x;}
481 inline cvec
unfix(
const cvec &x) {
return x;}
483 inline mat
unfix(
const mat &x) {
return x;}
485 inline cmat
unfix(
const cmat &x) {
return x;}
494 typedef double to_double;
501 typedef std::complex<double> to_double;
505 class Convert<std::complex<T> >
508 typedef std::complex<double> to_double;
512 class Convert<Array<T> >
515 typedef Array<typename Convert<T>::to_double> to_double;
519 class Convert<Vec<T> >
522 typedef Vec<typename Convert<T>::to_double> to_double;
526 class Convert<Mat<T> >
529 typedef Mat<typename Convert<T>::to_double> to_double;
539 for (
int i = 0; i < x.
size(); i++) {
546 Fix
abs(
const Fix &x);
548 Fix
real(
const CFix &x);
550 Fix
imag(
const CFix &x);
552 CFix
conj(
const CFix &x);
558 #endif // #ifndef FIX_FUNCTIONS_H