Classes | |
class | itpp::CFix |
Complex fixed-point data type. More... | |
class | itpp::CFixed< w, e, o, q > |
Templated complex fixed-point data type. More... | |
class | itpp::Fix |
Fixed-point data type. More... | |
class | itpp::Fix_Base |
Base class for fixed-point data types. More... | |
class | itpp::Fix_Factory |
Class factory for fixed-point data types Fix and CFix. More... | |
class | itpp::Fixed< w, e, o, q > |
Templated fixed-point data type. More... | |
Typedefs | |
typedef Vec< CFix > | itpp::cfixvec |
Typedef for complex fixed-point vector type. | |
typedef Mat< CFix > | itpp::cfixmat |
Typedef for complex fixed-point matrix type. | |
typedef Vec< Fix > | itpp::fixvec |
Typedef for fixed-point vector type. | |
typedef Mat< Fix > | itpp::fixmat |
Typedef for fixed-point matrix type. | |
typedef int64_t | itpp::fixrep |
Representation for fixed-point data types. | |
Enumerations | |
enum | itpp::e_mode { itpp::TC, itpp::US } |
Sign encoding modes (aligned with SystemC). More... | |
enum | itpp::o_mode { itpp::SAT, itpp::SAT_ZERO, itpp::SAT_SYM, itpp::WRAP, itpp::WRAP_SM } |
Overflow modes (aligned with SystemC). More... | |
enum | itpp::q_mode { itpp::RND, itpp::RND_ZERO, itpp::RND_MIN_INF, itpp::RND_INF, itpp::RND_CONV, itpp::RND_CONV_ODD, itpp::TRN, itpp::TRN_ZERO } |
Quantization modes (aligned with SystemC). More... | |
enum | itpp::output_mode { itpp::OUTPUT_FIX, itpp::OUTPUT_FIX_SHIFT, itpp::OUTPUT_FLOAT, itpp::OUTPUT_FLOAT_SHIFT } |
Output modes. More... | |
Functions | |
int | itpp::assert_shifts (const CFix &x, const CFix &y) |
Check that x.shift==y.shift OR x==0 OR y==0 and return the shift (for the non-zero argument). | |
int | itpp::assert_shifts (const CFix &x, const Fix &y) |
Check that x.shift==y.shift OR x==0 OR y==0 and return the shift (for the non-zero argument). | |
int | itpp::assert_shifts (const CFix &x, int y) |
Check that x.shift==0 OR x==0 OR y==0 and return x.shift. | |
std::istream & | itpp::operator>> (std::istream &is, CFix &x) |
Input bit representation and, optionally, the shift. | |
std::ostream & | itpp::operator<< (std::ostream &os, const CFix &x) |
Output bit representation and, optionally, the shift. | |
int | itpp::assert_shifts (const Fix &x, const Fix &y) |
Check that x.shift==y.shift OR x==0 OR y==0 and return the shift (for the non-zero argument). | |
int | itpp::assert_shifts (const Fix &x, int y) |
Check that x.shift==0 OR x==0 OR y==0 and return x.shift. | |
std::istream & | itpp::operator>> (std::istream &is, Fix &x) |
Input bit representation and, optionally, the shift. | |
std::ostream & | itpp::operator<< (std::ostream &os, const Fix &x) |
Output bit representation and, optionally, the shift. | |
std::ostream & | itpp::operator<< (std::ostream &os, const output_mode &o) |
Set output mode. | |
template<> | |
void | itpp::create_elements< Fix > (Fix *&ptr, const int n, const Factory &f) |
Create an n-length array of Fix using Fix_Factory f . | |
template<> | |
void | itpp::create_elements< CFix > (CFix *&ptr, const int n, const Factory &f) |
Create an n-length array of CFix using Fix_Factory f . | |
template<class T > | |
bool | itpp::is_fix (const T &) |
Return true only if argument is of type Fix or CFix (or an Array/Vec/Mat of Fix or CFix). | |
template<> | |
bool | itpp::is_fix (const Fix &) |
Return true only if argument is of type Fix or CFix (or an Array/Vec/Mat of Fix or CFix). | |
template<> | |
bool | itpp::is_fix (const fixvec &) |
Return true only if argument is of type Fix or CFix (or an Array/Vec/Mat of Fix or CFix). | |
template<> | |
bool | itpp::is_fix (const fixmat &) |
Return true only if argument is of type Fix or CFix (or an Array/Vec/Mat of Fix or CFix). | |
template<> | |
bool | itpp::is_fix (const CFix &) |
Return true only if argument is of type Fix or CFix (or an Array/Vec/Mat of Fix or CFix). | |
template<class T > | |
bool | itpp::is_fix (const Array< T > &) |
Return true only if argument is of type Fix or CFix (or an Array/Vec/Mat of Fix or CFix). | |
void | itpp::set_fix (Fix &y, double x, int n) |
Set y = x * pow2(n) using the quantization mode of y . | |
void | itpp::set_fix (Fix &y, double x, int n, q_mode q) |
Set y = x * pow2(n) using the specified quantization mode q . | |
void | itpp::set_fix (fixvec &y, const vec &x, int n) |
Set y = x * pow2(n) using the quantization mode of y . | |
void | itpp::set_fix (fixvec &y, const vec &x, int n, q_mode q) |
Set y = x * pow2(n) using the specified quantization mode q . | |
void | itpp::set_fix (fixmat &y, const mat &x, int n) |
Set y = x * pow2(n) using the quantization mode of y . | |
void | itpp::set_fix (fixmat &y, const mat &x, int n, q_mode q) |
Set y = x * pow2(n) using the specified quantization mode q . | |
void | itpp::set_fix (double &y, double x, int) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (double &y, double x, int, q_mode) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (vec &y, const vec &x, int) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (vec &y, const vec &x, int, q_mode) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (mat &y, const mat &x, int) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (mat &y, const mat &x, int, q_mode) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (CFix &y, std::complex< double > x, int n) |
Set y = x * pow2(n) using the quantization mode of y . | |
void | itpp::set_fix (CFix &y, double real, double imag, int n) |
Set y = (real + i*imag) * pow2(n) using the quantization mode of y . | |
void | itpp::set_fix (CFix &y, std::complex< double > x, int n, q_mode q) |
Set y = x * pow2(n) using the specified quantization mode q . | |
void | itpp::set_fix (CFix &y, double real, double imag, int n, q_mode q) |
Set y = (real + i*imag) * pow2(n) using the specified quantization mode q . | |
void | itpp::set_fix (cfixvec &y, const cvec &x, int n) |
Set y = x * pow2(n) using the quantization mode of y . | |
void | itpp::set_fix (cfixvec &y, const vec &real, const vec &imag, int n) |
Set y = (real + i*imag) * pow2(n) using the quantization mode of y . | |
void | itpp::set_fix (cfixvec &y, const cvec &x, int n, q_mode q) |
Set y = x * pow2(n) using the specified quantization mode q . | |
void | itpp::set_fix (cfixvec &y, const vec &real, const vec &imag, int n, q_mode q) |
Set y = (real + i*imag) * pow2(n) using the specified quantization mode q . | |
void | itpp::set_fix (cfixmat &y, const cmat &x, int n) |
Set y = x * pow2(n) using the quantization mode of y . | |
void | itpp::set_fix (cfixmat &y, const mat &real, const mat &imag, int n) |
Set y = (real + i*imag) * pow2(n) using the quantization mode of y . | |
void | itpp::set_fix (cfixmat &y, const cmat &x, int n, q_mode q) |
Set y = x * pow2(n) using the specified quantization mode q . | |
void | itpp::set_fix (cfixmat &y, const mat &real, const mat &imag, int n, q_mode q) |
Set y = (real + i*imag) * pow2(n) using the specified quantization mode q . | |
void | itpp::set_fix (std::complex< double > &y, const std::complex< double > &x, int) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (std::complex< double > &y, double real, double imag, int) |
Set y = real + i*imag . Useful in templated code. | |
void | itpp::set_fix (std::complex< double > &y, const std::complex< double > &x, int, q_mode) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (std::complex< double > &y, double real, double imag, int, q_mode) |
Set y = real + i*imag . Useful in templated code. | |
void | itpp::set_fix (cvec &y, const cvec &x, int) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (cvec &y, const vec &real, const vec &imag, int) |
Set y = real + i*imag . Useful in templated code. | |
void | itpp::set_fix (cvec &y, const cvec &x, int, q_mode) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (cvec &y, const vec &real, const vec &imag, int, q_mode) |
Set y = real + i*imag . Useful in templated code. | |
void | itpp::set_fix (cmat &y, const cmat &x, int) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (cmat &y, const mat &real, const mat &imag, int) |
Set y = real + i*imag . Useful in templated code. | |
void | itpp::set_fix (cmat &y, const cmat &x, int, q_mode) |
Set y = x . Useful in templated code. | |
void | itpp::set_fix (cmat &y, const mat &real, const mat &imag, int, q_mode) |
Set y = real + i*imag . Useful in templated code. | |
template<class T1 , class T2 > | |
void | itpp::set_fix (Array< T1 > &y, const Array< T2 > &x, int n) |
Call set_fix for each Array element. | |
template<class T1 , class T2 > | |
void | itpp::set_fix (Array< T1 > &y, const Array< T2 > &real, const Array< T2 > &imag, int n) |
Call set_fix for each Array element. | |
template<class T1 , class T2 > | |
void | itpp::set_fix (Array< T1 > &y, const Array< T2 > &x, int n, q_mode q) |
Call set_fix for each Array element. | |
template<class T1 , class T2 > | |
void | itpp::set_fix (Array< T1 > &y, const Array< T2 > &real, const Array< T2 > &imag, int n, q_mode q) |
Call set_fix for each Array element. | |
void | itpp::lshift_fix (Fix &y, int n) |
Left shift n bits. | |
void | itpp::rshift_fix (Fix &y, int n) |
Right shift n bits using the quantization mode of y . | |
void | itpp::rshift_fix (Fix &y, int n, q_mode q) |
Right shift n bits using the specified quantization mode q . | |
void | itpp::lshift_fix (fixvec &y, int n) |
Left shift n bits. | |
void | itpp::rshift_fix (fixvec &y, int n) |
Right shift n bits using the quantization mode of y . | |
void | itpp::rshift_fix (fixvec &y, int n, q_mode q) |
Right shift n bits using the specified quantization mode q . | |
void | itpp::lshift_fix (fixmat &y, int n) |
Left shift n bits. | |
void | itpp::rshift_fix (fixmat &y, int n) |
Right shift n bits using the quantization mode of y . | |
void | itpp::rshift_fix (fixmat &y, int n, q_mode q) |
Right shift n bits using the specified quantization mode q . | |
void | itpp::lshift_fix (double &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (double &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (double &, int, q_mode) |
Dummy function useful in templated code. | |
void | itpp::lshift_fix (vec &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (vec &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (vec &, int, q_mode) |
Dummy function useful in templated code. | |
void | itpp::lshift_fix (mat &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (mat &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (mat &, int, q_mode) |
Dummy function useful in templated code. | |
void | itpp::lshift_fix (CFix &y, int n) |
Left shift n bits. | |
void | itpp::rshift_fix (CFix &y, int n) |
Right shift n bits using the quantization mode of y . | |
void | itpp::rshift_fix (CFix &y, int n, q_mode q) |
Right shift n bits using the specified quantization mode q . | |
void | itpp::lshift_fix (std::complex< double > &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (std::complex< double > &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (std::complex< double > &, int, q_mode) |
Dummy function useful in templated code. | |
void | itpp::lshift_fix (cvec &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (cvec &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (cvec &, int, q_mode) |
Dummy function useful in templated code. | |
void | itpp::lshift_fix (cmat &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (cmat &, int) |
Dummy function useful in templated code. | |
void | itpp::rshift_fix (cmat &, int, q_mode) |
Dummy function useful in templated code. | |
template<class T > | |
void | itpp::lshift_fix (Array< T > &y, int n) |
Call lshift_fix for each Array element. | |
template<class T > | |
void | itpp::rshift_fix (Array< T > &y, int n) |
Call rshift_fix for each Array element. | |
template<class T > | |
void | itpp::rshift_fix (Array< T > &y, int n, q_mode q) |
Call rshift_fix for each Array element. | |
void | itpp::assert_fixshift (double, int) |
If x is a fixed-point variable, assert that x has the specified shift value, otherwise do nothing. | |
void | itpp::assert_fixshift (const std::complex< double > &, int) |
If x is a fixed-point variable, assert that x has the specified shift value, otherwise do nothing. | |
void | itpp::assert_fixshift (const Fix &x, int shift) |
If x is a fixed-point variable, assert that x has the specified shift value, otherwise do nothing. | |
void | itpp::assert_fixshift (const CFix &x, int shift) |
If x is a fixed-point variable, assert that x has the specified shift value, otherwise do nothing. | |
vec | itpp::to_vec (const fixvec &v) |
Converts a fixvec to vec. | |
cvec | itpp::to_cvec (const cfixvec &v) |
Converts a cfixvec to cvec. | |
mat | itpp::to_mat (const fixmat &m) |
Converts a fixmat to mat. | |
cmat | itpp::to_cmat (const cfixmat &m) |
Converts a cfixmat to cmat. | |
template<class T > | |
T | itpp::to (double x) |
template<class T > | |
T | itpp::to (const Fix &x) |
Convert Fix to T. | |
template<class T > | |
T | itpp::to (const std::complex< double > &x) |
Convert std::complex<double> to T. | |
template<class T > | |
T | itpp::to (const CFix &x) |
Convert CFix to T. | |
template<class T > | |
T | itpp::to (double real, double imag) |
Convert double (real and imaginary parts) to T. | |
template<class T > | |
T | itpp::to (const Fix &real, const Fix &imag) |
Convert Fix (real and imaginary parts) to T. | |
template<class T , class U > | |
Vec< T > | itpp::to (const Vec< U > &x) |
Convert Vec<U> to Vec<T>. | |
template<> | |
vec | itpp::to< double > (const vec &x) |
Convert vec to vec. | |
template<> | |
cvec | itpp::to< std::complex< double > > (const cvec &x) |
Convert cvec to cvec. | |
template<> | |
fixvec | itpp::to< Fix > (const fixvec &x) |
Convert fixvec to fixvec. | |
template<> | |
cfixvec | itpp::to< CFix > (const cfixvec &x) |
Convert cfixvec to cfixvec. | |
template<class T , class U > | |
Vec< T > | itpp::to (const Vec< U > &real, const Vec< U > &imag) |
Convert Vec<U> (real and imaginary parts) to Vec<T>. | |
template<class T , class U > | |
Mat< T > | itpp::to (const Mat< U > &x) |
Convert Mat<U> to Mat<T>. | |
template<> | |
mat | itpp::to< double > (const mat &x) |
Convert mat to mat. | |
template<> | |
cmat | itpp::to< std::complex< double > > (const cmat &x) |
Convert cmat to cmat. | |
template<> | |
fixmat | itpp::to< Fix > (const fixmat &x) |
Convert fixmat to fixmat. | |
template<> | |
cfixmat | itpp::to< CFix > (const cfixmat &x) |
Convert cfixmat to cfixmat. | |
template<class T , class U > | |
Mat< T > | itpp::to (const Mat< U > &real, const Mat< U > &imag) |
Convert Mat<U> (real and imaginary parts) to Mat<T>. | |
template<class T , class U > | |
Array< typename ConvertU2T< T, U >::result > | itpp::to (const Array< U > &x) |
Convert Array<U>, where U can be an Array/Vec/Mat, to a corresponding Array with T elements. | |
template<class T , class U > | |
Array< typename ConvertU2T< T, U >::result > | itpp::to (const Array< U > &real, const Array< U > &imag) |
Convert Array<U> (real and imaginary parts), where U can be an Array/Vec/Mat, to a corresponding Array with T elements. | |
double | itpp::unfix (const Fix &x) |
Convert Fix to double by multiplying the bit representation with pow2(-shift). | |
std::complex< double > | itpp::unfix (const CFix &x) |
Convert CFix to std::complex<double> by multiplying the bit representation with pow2(-shift). | |
vec | itpp::unfix (const fixvec &x) |
Convert fixvec to vec by multiplying the bit representations with pow2(-shift). | |
mat | itpp::unfix (const fixmat &x) |
Convert fixmat to mat by multiplying the bit representations with pow2(-shift). | |
double | itpp::unfix (double x) |
Convert double to double i.e. do nothing. | |
std::complex< double > | itpp::unfix (const std::complex< double > &x) |
Convert std::complex<double> to std::complex<double> i.e. do nothing. | |
vec | itpp::unfix (const vec &x) |
Convert vec to vec i.e. do nothing. | |
cvec | itpp::unfix (const cvec &x) |
Convert cvec to cvec i.e. do nothing. | |
mat | itpp::unfix (const mat &x) |
Convert mat to mat i.e. do nothing. | |
cmat | itpp::unfix (const cmat &x) |
Convert cmat to cmat i.e. do nothing. | |
template<class T > | |
Array< typename Convert< T > ::to_double > | itpp::unfix (const Array< T > &x) |
Fix | itpp::abs (const Fix &x) |
Absolute value. | |
Fix | itpp::real (const CFix &x) |
Real part of complex value. | |
Fix | itpp::imag (const CFix &x) |
Imaginary part of complex value. | |
CFix | itpp::conj (const CFix &x) |
Conjugate of complex value. | |
Fix | itpp::operator+ (const Fix &x, const Fix &y) |
Fix + Fix. | |
Fix | itpp::operator- (const Fix &x, const Fix &y) |
Fix - Fix. | |
Fix | itpp::operator* (const Fix &x, const Fix &y) |
Fix * Fix. | |
Fix | itpp::operator/ (const Fix &x, const Fix &y) |
Fix / Fix using quantization mode TRN . | |
Fix | itpp::operator+ (const Fix &x, const int y) |
Fix + int. | |
Fix | itpp::operator- (const Fix &x, const int y) |
Fix - int. | |
Fix | itpp::operator* (const Fix &x, const int y) |
Fix * int. | |
Fix | itpp::operator/ (const Fix &x, const int y) |
Fix / int using quantization mode TRN . | |
Fix | itpp::operator+ (const int x, const Fix &y) |
int + Fix | |
Fix | itpp::operator- (const int x, const Fix &y) |
int - Fix | |
Fix | itpp::operator* (const int x, const Fix &y) |
int * Fix | |
Fix | itpp::operator/ (const int x, const Fix &y) |
int / Fix using quantization mode TRN | |
fixvec | itpp::operator+ (const fixvec &v, const int s) |
fixvec + int | |
fixvec | itpp::operator+ (const int s, const fixvec &v) |
int + fixvec | |
fixvec | itpp::operator- (const fixvec &v, const int s) |
fixvec - int | |
fixvec | itpp::operator- (const int s, const fixvec &v) |
int - fixvec | |
fixvec | itpp::operator* (const fixvec &v, const int s) |
fixvec * int | |
fixvec | itpp::operator* (const int s, const fixvec &v) |
int * fixvec | |
fixvec | itpp::operator/ (const fixvec &v, const int s) |
fixvec / int using quantization mode TRN | |
fixmat | itpp::operator+ (const fixmat &v, const int s) |
fixmat + int | |
fixmat | itpp::operator+ (const int s, const fixmat &v) |
int + fixmat | |
fixmat | itpp::operator- (const fixmat &v, const int s) |
fixmat - int | |
fixmat | itpp::operator- (const int s, const fixmat &v) |
int - fixmat | |
fixmat | itpp::operator* (const fixmat &v, const int s) |
fixmat * int | |
fixmat | itpp::operator* (const int s, const fixmat &v) |
int * fixmat | |
fixmat | itpp::operator/ (const fixmat &v, const int s) |
fixmat / int using quantization mode TRN | |
fixvec | itpp::operator+ (const fixvec &a, const ivec &b) |
fixvec + ivec | |
fixvec | itpp::operator+ (const ivec &a, const fixvec &b) |
ivec + fixvec | |
fixvec | itpp::operator- (const fixvec &a, const ivec &b) |
fixvec - ivec | |
fixvec | itpp::operator- (const ivec &a, const fixvec &b) |
ivec - fixvec | |
Fix | itpp::operator* (const fixvec &a, const ivec &b) |
fixvec * ivec | |
Fix | itpp::operator* (const ivec &a, const fixvec &b) |
ivec * fixvec | |
fixmat | itpp::operator+ (const fixmat &a, const imat &b) |
fixmat + imat | |
fixmat | itpp::operator+ (const imat &a, const fixmat &b) |
imat + fixmat | |
fixmat | itpp::operator- (const fixmat &a, const imat &b) |
fixmat - imat | |
fixmat | itpp::operator- (const imat &a, const fixmat &b) |
imat - fixmat | |
fixmat | itpp::operator* (const fixmat &a, const imat &b) |
fixmat * imat | |
fixmat | itpp::operator* (const imat &a, const fixmat &b) |
imat * fixmat | |
CFix | itpp::operator+ (const CFix &x, const CFix &y) |
CFix + CFix. | |
CFix | itpp::operator- (const CFix &x, const CFix &y) |
CFix - CFix. | |
CFix | itpp::operator* (const CFix &x, const CFix &y) |
CFix * CFix. | |
CFix | itpp::operator/ (const CFix &x, const CFix &y) |
CFix / CFix using quantization mode TRN . | |
CFix | itpp::operator+ (const CFix &x, const Fix &y) |
CFix + Fix. | |
CFix | itpp::operator- (const CFix &x, const Fix &y) |
CFix - Fix. | |
CFix | itpp::operator* (const CFix &x, const Fix &y) |
CFix * Fix. | |
CFix | itpp::operator/ (const CFix &x, const Fix &y) |
CFix / Fix using quantization mode TRN . | |
CFix | itpp::operator+ (const Fix &x, const CFix &y) |
Fix + CFix. | |
CFix | itpp::operator- (const Fix &x, const CFix &y) |
Fix - CFix. | |
CFix | itpp::operator* (const Fix &x, const CFix &y) |
Fix * CFix. | |
CFix | itpp::operator/ (const Fix &x, const CFix &y) |
Fix / CFix using quantization mode TRN . | |
CFix | itpp::operator+ (const CFix &x, const int y) |
CFix + int. | |
CFix | itpp::operator- (const CFix &x, const int y) |
CFix - int. | |
CFix | itpp::operator* (const CFix &x, const int y) |
CFix * int. | |
CFix | itpp::operator/ (const CFix &x, const int y) |
CFix / int using quantization mode TRN . | |
CFix | itpp::operator+ (const int x, const CFix &y) |
int + CFix | |
CFix | itpp::operator- (const int x, const CFix &y) |
int - CFix | |
CFix | itpp::operator* (const int x, const CFix &y) |
int * CFix | |
CFix | itpp::operator/ (const int x, const CFix &y) |
int / CFix using quantization mode TRN | |
cfixvec | itpp::operator+ (const fixvec &v, const CFix &s) |
fixvec + CFix | |
cfixvec | itpp::operator+ (const CFix &s, const fixvec &v) |
CFix + fixvec. | |
cfixvec | itpp::operator- (const fixvec &v, const CFix &s) |
fixvec - CFix | |
cfixvec | itpp::operator- (const CFix &s, const fixvec &v) |
CFix - fixvec. | |
cfixvec | itpp::operator* (const fixvec &v, const CFix &s) |
fixvec * CFix | |
cfixvec | itpp::operator* (const CFix &s, const fixvec &v) |
CFix * fixvec. | |
cfixvec | itpp::operator/ (const fixvec &v, const CFix &s) |
fixvec / CFix using quantization mode TRN | |
cfixmat | itpp::operator+ (const fixmat &m, const CFix &s) |
fixmat + CFix | |
cfixmat | itpp::operator+ (const CFix &s, const fixmat &m) |
CFix + fixmat. | |
cfixmat | itpp::operator- (const fixmat &m, const CFix &s) |
fixmat - CFix | |
cfixmat | itpp::operator- (const CFix &s, const fixmat &m) |
CFix - fixmat. | |
cfixmat | itpp::operator* (const fixmat &m, const CFix &s) |
fixmat * CFix | |
cfixmat | itpp::operator* (const CFix &s, const fixmat &m) |
CFix * fixmat. | |
cfixmat | itpp::operator/ (const fixmat &m, const CFix &s) |
fixmat / CFix using quantization mode TRN | |
cfixvec | itpp::operator+ (const ivec &v, const CFix &s) |
ivec + CFix | |
cfixvec | itpp::operator+ (const CFix &s, const ivec &v) |
CFix + ivec. | |
cfixvec | itpp::operator- (const ivec &v, const CFix &s) |
ivec - CFix | |
cfixvec | itpp::operator- (const CFix &s, const ivec &v) |
CFix - ivec. | |
cfixvec | itpp::operator* (const ivec &v, const CFix &s) |
ivec * CFix | |
cfixvec | itpp::operator* (const CFix &s, const ivec &v) |
CFix * ivec. | |
cfixvec | itpp::operator/ (const ivec &v, const CFix &s) |
ivec / CFix using quantization mode TRN | |
cfixmat | itpp::operator+ (const imat &m, const CFix &s) |
imat + CFix | |
cfixmat | itpp::operator+ (const CFix &s, const imat &m) |
CFix + imat. | |
cfixmat | itpp::operator- (const imat &m, const CFix &s) |
imat - CFix | |
cfixmat | itpp::operator- (const CFix &s, const imat &m) |
CFix - imat. | |
cfixmat | itpp::operator* (const imat &m, const CFix &s) |
imat * CFix | |
cfixmat | itpp::operator* (const CFix &s, const imat &m) |
CFix * imat. | |
cfixmat | itpp::operator/ (const imat &m, const CFix &s) |
imat / CFix using quantization mode TRN | |
cfixvec | itpp::operator+ (const cfixvec &v, const Fix &s) |
cfixvec + Fix | |
cfixvec | itpp::operator+ (const Fix &s, const cfixvec &v) |
Fix + cfixvec. | |
cfixvec | itpp::operator- (const cfixvec &v, const Fix &s) |
cfixvec - Fix | |
cfixvec | itpp::operator- (const Fix &s, const cfixvec &v) |
Fix - cfixvec. | |
cfixvec | itpp::operator* (const cfixvec &v, const Fix &s) |
cfixvec * Fix | |
cfixvec | itpp::operator* (const Fix &s, const cfixvec &v) |
Fix * cfixvec. | |
cfixvec | itpp::operator/ (const cfixvec &v, const Fix &s) |
cfixvec / Fix using quantization mode TRN | |
cfixmat | itpp::operator+ (const cfixmat &m, const Fix &s) |
cfixmat + Fix | |
cfixmat | itpp::operator+ (const Fix &s, const cfixmat &m) |
Fix + cfixmat. | |
cfixmat | itpp::operator- (const cfixmat &m, const Fix &s) |
cfixmat - Fix | |
cfixmat | itpp::operator- (const Fix &s, const cfixmat &m) |
Fix - cfixmat. | |
cfixmat | itpp::operator* (const cfixmat &m, const Fix &s) |
cfixmat * Fix | |
cfixmat | itpp::operator* (const Fix &s, const cfixmat &m) |
Fix * cfixmat. | |
cfixmat | itpp::operator/ (const cfixmat &m, const Fix &s) |
cfixmat / Fix using quantization mode TRN | |
cfixvec | itpp::operator+ (const cfixvec &a, const fixvec &b) |
cfixvec + fixvec | |
cfixvec | itpp::operator- (const cfixvec &a, const fixvec &b) |
cfixvec - fixvec | |
CFix | itpp::operator* (const cfixvec &a, const fixvec &b) |
cfixvec * fixvec | |
cfixmat | itpp::operator+ (const cfixmat &a, const fixmat &b) |
cfixmat + fixmat | |
cfixmat | itpp::operator- (const cfixmat &a, const fixmat &b) |
cfixmat - fixmat | |
cfixmat | itpp::operator* (const cfixmat &a, const fixmat &b) |
cfixmat * fixmat | |
void | itpp::Vec::set (const char *str) |
Set the vector equal to the values in the str string. | |
void | itpp::Mat::set (const char *str) |
Set matrix equal to values in the string str . | |
Variables | |
const int | itpp::MAX_WORDLEN = 64 |
Max word length. | |
const uint64_t | itpp::UINT64_POW2 [64] |
Table for fast multiplication or division by 2^n. | |
const double | itpp::DOUBLE_POW2 [128] |
Table for fast multiplication by 2^(n-64). |
#include <itpp/itbase.h> #include <itpp/itfixed.h> using namespace itpp;
Fixed-point data types in IT++:
These classes have a common base class called Fix_Base; see inheritance diagram in the itpp::Fix_Base documentation. The following data members are inherited from Fix_Base:
The term "fixed-point restrictions" refers to all these data members except for the shift factor, which is considered to be part of the "fixed-point number". The shift factor has some resemblance to a binary point. The value of the shift factor is set in initializations and assignments and it is modified by multiplications, divisions and bit-shifting operations. The shift factor is used for checking that both terms have been shifted the same amount in additions and subtractions. Also, it is used to "un-shift" the data when a fixed-point number is converted to floating point.
Names of classes and enums have been aligned with the fixed-point data types in SystemC to some extent, but the fixed-point data types in IT++ and SystemC are quite different. In fact, the fixed-point data types in IT++ probably correspond better to the variable-precision integer types in SystemC (with one important difference: the fixed-point numbers in IT++ remember the amount of bit-shifting that has been applied to them, so that they can be converted back to "floating-point magnitude" easily if this is desired). The reason for this design choice in IT++ is to make the fixed-point simulations as fast as possible. If necessary, the core parts in itbase.h (e.g. Array, Vec and Mat) should be able to use some other data type than the ones presented here, assuming that a proper itpp::Factory is created for the data type, just like itpp::Fix_Factory has been created for these data types.
Sometimes the documentation for the IT++ fixed-point data types states that a function is "useful in templated code". This means that the function facilitates writing templated code where the template argument is meant to be either a floating-point type (double or complex<double>) or a fixed-point type (Fix or CFix), i.e. code which is supposed to support both floating-point and fixed-point simulations. For example, the operator >>= is defined for Fix and CFix, but not for double and complex<double>, so it might be a better idea to use the function rshift_fix which is defined for Fix and CFix as well as double and complex<double>.
For an example program, take a look at tests/fix_test.cpp.
An IT++ fixed-point number consists of a bit representation and a shift factor. The shift factor is a member of Fix_Base, while the bit representation is a member of the inherited class (Fix or CFix). The shift factor indicates the number of bit-shifts that have been performed on the data. A positive shift factor means that the data has been left-shifted while a negative shift factor means that the data has been right-shifted. For information about how the shift factor is affected by different operators, see section Operators and methods.
TC is default.
WRAP is default.
TRN is default. RND and TRN are usually the most implementation friendly. However, note that it is RND_INF that corresponds to "ordinary rounding" and TRN_ZERO that corresponds to "ordinary truncation".
The sample method in the statistics object is called during initializations and assignments. A single statistics object can collect statistics from more than one fixed-point variable.
OUTPUT_FIX_SHIFT is default. Unlike the other modes, output_mode is a static data member of Fix_Base, i.e. the output_mode is common for all fixed-point variables. Use the following commands to change output_mode:
Fix_Base::set_output_mode(OUTPUT_FIX); Fix_Base::set_output_mode(OUTPUT_FIX_SHIFT); Fix_Base::set_output_mode(OUTPUT_FLOAT); Fix_Base::set_output_mode(OUTPUT_FLOAT_SHIFT); // Alternative using a string parameter Fix_Base::set_output_mode("OUTPUT_FIX"); Fix_Base::set_output_mode("OUTPUT_FIX_SHIFT"); Fix_Base::set_output_mode("OUTPUT_FLOAT"); Fix_Base::set_output_mode("OUTPUT_FLOAT_SHIFT"); // Alternative using an ostream modifier cout << OUTPUT_FIX; cout << OUTPUT_FIX_SHIFT; cout << OUTPUT_FLOAT; cout << OUTPUT_FLOAT_SHIFT;
double
when a design is refined from floating- to fixed-point implementation. The data is stored in the least significant bits of a 64-bit integer variable.The following example shows how to declare a two's complement (i.e. a signed) 20-bit variable with wrap-around as overflow handling with the initial value 3.14 shifted up 10 bits:
Note that Fix takes the initial values as well as the fixed-point restrictions as constructor arguments. Fixed also takes the initial values as constructor arguments but it takes the fixed-point restrictions as template arguments. Choose Fix or Fixed depending on your needs. There are three main reasons why you would want to choose Fix instead of Fixed. First, if you want to change the fixed-point restrictions for a variable during run time, you have to use Fix, since the fixed-point restrictions for Fixed have been "fixed" at compile time. Second, if your code is using a lot of templating, you might end up with many more template arguments if you use Fixed than you would if you use Fix, since each set of fixed-point restrictions that you want to use will correspond to another type (based on the class template Fixed) instead of just different configurations of a single type (Fix). Third, the vector and matrix operations currently work better for Fix than for Fixed.
typedef Fixed<1, TC, WRAP> fixed1; // for Fixed with 1 bit ... typedef Fixed<64, TC, WRAP> fixed64; // for Fixed with 64 bits typedef Fixed<1, US, WRAP> ufixed1; // for Unsigned Fixed with 1 bit ... typedef Fixed<64, US, WRAP> ufixed64; // for Unsigned Fixed with 64 bits typedef Fixed<1, TC, SAT> sfixed1; // for Saturated Fixed with 1 bit ... typedef Fixed<64, TC, SAT> sfixed64; // for Saturated Fixed with 64 bits typedef Fixed<1, US, SAT> sufixed1; // for Saturated Unsigned Fixed with 1 bit ... typedef Fixed<64, US, SAT> sufixed64; // for Saturated Unsigned Fixed with 64 bits
fixed20 b(3.14, 10);
complex<double>
when a design is refined from floating- to fixed-point implementation. The data is stored in the least significant bits of two 64-bit integer variables: one for the real part and one for the imaginary part. The two parts have a common shift factor (the one inherited from Fix_Base), so it is not possible to shift only one of them.The following example shows two ways to declare a two's complement (i.e. a signed) 20-bit variable with wrap-around as overflow handling with the initial value 1.11 + 2.22i shifted up 10 bits:
CFix a(1.11, 2.22, 10, 20, TC, WRAP); CFixed<20, TC, WRAP> b(1.11, 2.22, 10); CFix c(complex<double>(1.11, 2.22), 0.0, 10, 20, TC, WRAP); CFixed<20, TC, WRAP> d(complex<double>(1.11, 2.22), 0.0, 10);
typedef CFixed<1, TC, WRAP> cfixed1; // for CFixed with 1 bit ... typedef CFixed<64, TC, WRAP> cfixed64; // for CFixed with 64 bits typedef CFixed<1, TC, SAT> scfixed1; // for Saturated CFixed with 1 bit ... typedef CFixed<64, TC, SAT> scfixed64; // for Saturated CFixed with 64 bits
cfixed20 b(1.11, 2.22, 10); cfixed20 d(complex<double>(1.11, 2.22), 0.0, 10);
The following example shows how to declare a vector of length 7 with Fix elements that are two's complement 20-bit variables with wrap-around as overflow handling:
Vec<Fix> a(7, FIX20);
FIX20 is one of many predefined Fix_Factory; see the Detailed Description for itpp::Fix_Factory.
Fix a(FIX20);
// Initialize a with the floating-point value double(3.14*pow2(10)) // and word length 20, two's complement, wrap-around and rounding Fix a(3.14, 10, 20, TC, WRAP, RND); // Initialize b with the fixed-point value a // and word length 7, two's complement, wrap-around and rounding Fix b(a, 7, TC, WRAP, RND);
In this example, b
was initialized with the same value as a
but with smaller word length resulting in overflow, since round(3.14*pow2(10)) does not fit in the 7-bit variable b
.
If assignment to a scaled double
is desired (when initialization has already taken place), the itpp::Fix::set method can be used.
// Initialize c with the floating-point value double(3.14*pow2(10)) // The shift factor is set to 10 Fix c(3.14, 10); // Set c equal to 123. The shift factor is set to 0 // Note that the old shift factor 10 is discarded c = 123; // Set c equal to the integer portion of double(3.14*pow2(10)) // The shift factor is set to 10 (again) c.set(3.14, 10); // Achieve the same result using a temporary variable // Note that the assignment operator copies the shift factor c = Fix(3.14, 10);
When the floating-point value is quantized, the quantization mode of the fixed-point variable (TRN in the example above, since c
has this quantization mode) will be used, unless some other quantization mode (e.g. RND) is specified as a third argument to set:
c.set(3.14, 10, RND);
// Declare a fixed-point vector with 7 elements // (using the predefined Fix_Factory FIX20) Vec<Fix> d(7, FIX20); // Set all 7 elements equal to 77 with shift factor 0 d = Fix(77); // Declare an integer vector with 7 elements ivec e = "1 2 3 4 5 6 7"; // Add fixed-point vector d and integer vector e. Both have shift factor 0 Vec<Fix> f(d + e, FIX20);
d
had been assigned with a different shift factor than 0 in the above example (and ASSERT_LEVEL > 0), the addition d + e
would have failed, resulting in termination with the error message "assert_shifts: Different shifts not allowed!".Fix g(0, 0, 8, TC, SAT); Fix h(100, 0, 8, TC, SAT); Fix i(100, 0, 8, TC, SAT); Fix j(-100, 0, 8, TC, SAT); // The result of h + i is unrestricted (64 bits) but when it is assigned to g, // it is restricted according to the fixed-point restrictions of g (8 bits). // We get overflow, since 100+100=200 doesn't fit in an 8-bit signed variable. // The saturated result will be 127 g = h + i; // But now we don't get overflow since 100+100-100=100 does fit! g = h + i + j; // If we do want the temporary result to be restricted, we have to make // an explicit temporary variable (with appropriate restrictions) for it Fix tmp(0, 0, 8, TC, SAT); // The first sum will be saturated to 127 tmp = h + i; // The final sum will be 127-100=27, i.e. we got a different // result when we introduced a restricted temporary variable g = tmp + j;
As stated earlier, the fixed-point restrictions are applied during initialization, assignment and bit-shifting operations only. This means that the result of a multiplication or division is unrestricted (64 bits) in the same way as for an addition or subtraction; see section Addition and subtraction.
The resulting shift factor after a multiplication is the sum of the two shift factors, while the resulting shift factor after a division is the difference between the numerator shift factor and the denominator shift factor. The result of a division is always quantized using truncation, i.e. the quantization modes of the involved fixed-point variables do not matter. Note that sometimes divisions can be replaced with multiplications and/or bit-shifting operations; see section Bit-shifting.
// Declare a fixed-point variable with the default quantization mode (TRN) Fix a(3.14, 10); // Right shift 5 bits using the quantization mode of a (i.e. TRN) a.rshift(5); // Right shift 5 bits using the specified quantization mode (i.e. RND) a.rshift(5, RND);
The itpp::Fix::unfix and itpp::CFix::unfix methods can always be used:
Fix a(3.14, 5); cout << a.unfix() << endl;
Fix a(3.14, 5); cout << double(a) << endl;
Finally, Fix/Fixed can be converted to CFix/CFixed using the appropriate CFix/CFixed constructors.
Fix a; int64_t the_bit_representation = a.get_re(); int the_shift_factor = a.get_shift(); int the_word_length = a.get_wordlen(); e_mode the_sign_encoding_mode = a.get_e_mode(); o_mode the_overflow_mode = a.get_o_mode(); q_mode the_quantization_mode = a.get_q_mode(); int64_t max_bit_representation = a.get_max(); int64_t min_bit_representation = a.get_min();
Fix a; a.print();
This code example shows how to input and output fixed-point numbers:
CFix a(FIX8); a.set(0.0, 0.0, 4); cout << "Old a: " << a << endl; cout << "New a? "; cin >> a; cout << "New a: " << a << endl;
Complex numbers can be input on both the C++ form and the IT++ form:
Old a: 0+0i<4> New a? 1+2i New a: 1+2i<4>
Old a: 0+0i<4> New a? (1,2) New a: 1+2i<4>
Old a: 0+0i<4> New a? 1+2i<5> New a: 1+2i<5>
It is also possible to enter a floating-point value and a (positive or negative) shift, rather than the data representation and a shift, if a slightly different format is used:
Old a: 0+0i<4> New a? 1+2i<<5 New a: 32+64i<5>
The resulting data representation is the entered floating-point value 1+2i multiplied by 2^5.
Array<Array<Vec<Fix> > > aavf(FIX20); bool will_be_true = is_fix(aavf);
y = x * pow2(n)
if the first argument is of type Fix or CFix or an Array/Vec/Mat of Fix or CFix. If the first argument is of type double or complex<double> or an Array/Vec/Mat of double or complex<double>, the function just sets y = x
. Fix fix_var(FIX20); set_fix(fix_var, 3.14, 10); // fix_var will equal the integer portion of 3.14 * pow2(10) double double_var(FIX20); set_fix(double_var, 3.14, 10); // double_var will just equal 3.14
When the floating-point value is quantized, the quantization mode of the first argument (TRN in the example above, since fix_var has this quantization mode) will be used, unless some other quantization mode (e.g. RND) is specified as a fourth argument to set_fix:
// This will right-shift fix_var 10 bits rshift_fix(fix_var, 10); // This will not affect double_var rshift_fix(double_var, 10);
When a fixed-point value is right-shifted using rshift_fix, the quantization mode of the first argument (TRN in the example above, since fix_var has this quantization mode) will be used, unless some other quantization mode (e.g. RND) is specified as a third argument to rshift_fix:
rshift_fix(fix_var, 10, RND);
When a fixed-point value is left-shifted using lshift_fix, on the other hand, the overflow mode of the first argument is always used.
Fix a(3.14, 5); // We will pass this check since 5 = 5 assert_fixshift(a, 5); // The program will terminate (if ASSERT_LEVEL > 0) since 5 != 6 assert_fixshift(a, 6);
If the first argument is of type double or complex<double> instead, no test will be performed (since they have no shift factors).
Fix a(3.14, 5); double b = unfix(a); Array<Mat<CFix> > c(FIX40); cin >> c; Array<cmat> d = unfix(c);
If the argument is a floating-point variable (or an Array/Vec/Mat of floating-point variables) instead, the function just returns the argument.
// Convert a Vec<double> to a Vec<Fix> and assign it to f Vec<double> e = "1.0 2.0 3.0"; Vec<Fix> f; f = to<Fix>(e); // convert e "to Fix" // Convert an Array<Array<Mat<Fix> > > called g to // an Array<Array<Mat<CFix> > > and assign it to h Array<Array<Mat<CFix> > > h; h = to<CFix>(g); // convert g "to CFix"
enum itpp::e_mode |
enum itpp::o_mode |
enum itpp::output_mode |
enum itpp::q_mode |
Quantization modes (aligned with SystemC).
cfixmat itpp::operator* | ( | const cfixmat & | a, | |
const fixmat & | b | |||
) | [inline] |
cfixmat * fixmat
fixmat * cfixmat
References itpp::Mat< Num_T >::_data(), itpp::Mat< Num_T >::cols(), it_assert_debug, and itpp::Mat< Num_T >::rows().
CFix itpp::operator* | ( | const cfixvec & | a, | |
const fixvec & | b | |||
) | [inline] |
cfixmat itpp::operator* | ( | const imat & | a, | |
const fixmat & | b | |||
) | [inline] |
imat * fixmat
imat * cfixmat
cfixmat itpp::operator* | ( | const fixmat & | a, | |
const imat & | b | |||
) |
fixmat * imat
cfixmat * imat
References itpp::Mat< Num_T >::_data(), itpp::Mat< Num_T >::cols(), it_assert_debug, and itpp::Mat< Num_T >::rows().
CFix itpp::operator* | ( | const ivec & | a, | |
const fixvec & | b | |||
) | [inline] |
ivec * fixvec
ivec * cfixvec
CFix itpp::operator* | ( | const fixvec & | a, | |
const ivec & | b | |||
) |
cfixmat itpp::operator* | ( | const int | s, | |
const fixmat & | v | |||
) | [inline] |
int * fixmat
int * cfixmat
cfixmat itpp::operator* | ( | const fixmat & | v, | |
const int | s | |||
) | [inline] |
fixmat * int
cfixmat * int
cfixvec itpp::operator* | ( | const int | s, | |
const fixvec & | v | |||
) | [inline] |
int * fixvec
int * cfixvec
cfixvec itpp::operator* | ( | const fixvec & | v, | |
const int | s | |||
) | [inline] |
fixvec * int
cfixvec * int
cfixmat itpp::operator+ | ( | const cfixmat & | a, | |
const fixmat & | b | |||
) | [inline] |
cfixmat + fixmat
fixmat + cfixmat
References itpp::Mat< Num_T >::cols(), it_assert_debug, and itpp::Mat< Num_T >::rows().
cfixvec itpp::operator+ | ( | const cfixvec & | a, | |
const fixvec & | b | |||
) | [inline] |
cfixmat itpp::operator+ | ( | const imat & | a, | |
const fixmat & | b | |||
) | [inline] |
imat + fixmat
imat + cfixmat
cfixmat itpp::operator+ | ( | const fixmat & | a, | |
const imat & | b | |||
) |
fixmat + imat
cfixmat + imat
References itpp::Mat< Num_T >::cols(), it_assert_debug, and itpp::Mat< Num_T >::rows().
cfixvec itpp::operator+ | ( | const ivec & | a, | |
const fixvec & | b | |||
) | [inline] |
ivec + fixvec
ivec + cfixvec
cfixvec itpp::operator+ | ( | const fixvec & | a, | |
const ivec & | b | |||
) |
cfixmat itpp::operator+ | ( | const int | s, | |
const fixmat & | v | |||
) | [inline] |
int + fixmat
int + cfixmat
cfixmat itpp::operator+ | ( | const fixmat & | v, | |
const int | s | |||
) | [inline] |
fixmat + int
cfixmat + int
cfixvec itpp::operator+ | ( | const int | s, | |
const fixvec & | v | |||
) | [inline] |
int + fixvec
int + cfixvec
cfixvec itpp::operator+ | ( | const fixvec & | v, | |
const int | s | |||
) | [inline] |
fixvec + int
cfixvec + int
cfixmat itpp::operator- | ( | const cfixmat & | a, | |
const fixmat & | b | |||
) | [inline] |
cfixmat - fixmat
fixmat - cfixmat
cfixvec itpp::operator- | ( | const cfixvec & | a, | |
const fixvec & | b | |||
) | [inline] |
cfixvec - fixvec
fixvec - cfixvec
cfixmat itpp::operator- | ( | const imat & | a, | |
const fixmat & | b | |||
) | [inline] |
imat - fixmat
imat - cfixmat
cfixmat itpp::operator- | ( | const fixmat & | a, | |
const imat & | b | |||
) | [inline] |
fixmat - imat
cfixmat - imat
cfixvec itpp::operator- | ( | const ivec & | a, | |
const fixvec & | b | |||
) | [inline] |
ivec - fixvec
ivec - cfixvec
cfixvec itpp::operator- | ( | const fixvec & | a, | |
const ivec & | b | |||
) | [inline] |
fixvec - ivec
cfixvec - ivec
cfixmat itpp::operator- | ( | const int | s, | |
const fixmat & | v | |||
) | [inline] |
int - fixmat
int - cfixmat
cfixmat itpp::operator- | ( | const fixmat & | v, | |
const int | s | |||
) | [inline] |
fixmat - int
cfixmat - int
cfixvec itpp::operator- | ( | const int | s, | |
const fixvec & | v | |||
) | [inline] |
int - fixvec
int - cfixvec
cfixvec itpp::operator- | ( | const fixvec & | v, | |
const int | s | |||
) | [inline] |
fixvec - int
cfixvec - int
cfixmat itpp::operator/ | ( | const fixmat & | v, | |
const int | s | |||
) | [inline] |
fixmat / int using quantization mode TRN
cfixmat / int using quantization mode TRN
cfixvec itpp::operator/ | ( | const fixvec & | v, | |
const int | s | |||
) | [inline] |
fixvec / int using quantization mode TRN
cfixvec / int using quantization mode TRN
T itpp::to | ( | double | x | ) | [inline] |
Convert double to T
Array<typename Convert<T>::to_double> itpp::unfix | ( | const Array< T > & | x | ) | [inline] |
Convert floating- or fixed-point Array to floating-point Array
References itpp::Array< T >::size().
cmat itpp::unfix | ( | const fixmat & | x | ) | [inline] |
Convert fixmat to mat by multiplying the bit representations with pow2(-shift).
Convert cfixmat to cmat by multiplying the bit representations with pow2(-shift).
References itpp::to_mat().
cvec itpp::unfix | ( | const fixvec & | x | ) | [inline] |
Convert fixvec to vec by multiplying the bit representations with pow2(-shift).
Convert cfixvec to cvec by multiplying the bit representations with pow2(-shift).
References itpp::to_vec().
const uint64_t itpp::UINT64_POW2[64] |
Initial value:
{ uint64_t(1), uint64_t(1) << 1, uint64_t(1) << 2, uint64_t(1) << 3, uint64_t(1) << 4, uint64_t(1) << 5, uint64_t(1) << 6, uint64_t(1) << 7, uint64_t(1) << 8, uint64_t(1) << 9, uint64_t(1) << 10, uint64_t(1) << 11, uint64_t(1) << 12, uint64_t(1) << 13, uint64_t(1) << 14, uint64_t(1) << 15, uint64_t(1) << 16, uint64_t(1) << 17, uint64_t(1) << 18, uint64_t(1) << 19, uint64_t(1) << 20, uint64_t(1) << 21, uint64_t(1) << 22, uint64_t(1) << 23, uint64_t(1) << 24, uint64_t(1) << 25, uint64_t(1) << 26, uint64_t(1) << 27, uint64_t(1) << 28, uint64_t(1) << 29, uint64_t(1) << 30, uint64_t(1) << 31, uint64_t(1) << 32, uint64_t(1) << 33, uint64_t(1) << 34, uint64_t(1) << 35, uint64_t(1) << 36, uint64_t(1) << 37, uint64_t(1) << 38, uint64_t(1) << 39, uint64_t(1) << 40, uint64_t(1) << 41, uint64_t(1) << 42, uint64_t(1) << 43, uint64_t(1) << 44, uint64_t(1) << 45, uint64_t(1) << 46, uint64_t(1) << 47, uint64_t(1) << 48, uint64_t(1) << 49, uint64_t(1) << 50, uint64_t(1) << 51, uint64_t(1) << 52, uint64_t(1) << 53, uint64_t(1) << 54, uint64_t(1) << 55, uint64_t(1) << 56, uint64_t(1) << 57, uint64_t(1) << 58, uint64_t(1) << 59, uint64_t(1) << 60, uint64_t(1) << 61, uint64_t(1) << 62, uint64_t(1) << 63 }
Referenced by itpp::Fix_Base::init().