|
@@ -49,14 +49,48 @@
|
|
|
#endif // MULTI_PRECISION
|
|
|
|
|
|
namespace nmie {
|
|
|
- #ifdef MULTI_PRECISION
|
|
|
- namespace nmm = boost::multiprecision;
|
|
|
- typedef nmm::number<nmm::cpp_bin_float<MULTI_PRECISION> > FloatType;
|
|
|
- #else
|
|
|
- namespace nmm = std;
|
|
|
- typedef double FloatType;
|
|
|
- //typedef float FloatType;
|
|
|
- #endif // MULTI_PRECISION
|
|
|
+ #ifdef MULTI_PRECISION
|
|
|
+ namespace nmm = boost::multiprecision;
|
|
|
+ typedef nmm::number<nmm::cpp_bin_float<MULTI_PRECISION> > FloatType;
|
|
|
+ #else
|
|
|
+ namespace nmm = std;
|
|
|
+ typedef double FloatType;
|
|
|
+ //typedef float FloatType;
|
|
|
+ #endif // MULTI_PRECISION
|
|
|
+
|
|
|
+ template <typename ToFloatType, typename FromFloatType>
|
|
|
+ std::vector<ToFloatType> ConvertVector(const std::vector<FromFloatType> x) {
|
|
|
+ std::vector<ToFloatType> new_x;
|
|
|
+ for (auto element : x) {
|
|
|
+ new_x.push_back(static_cast<ToFloatType>(element));
|
|
|
+ }
|
|
|
+ return new_x;
|
|
|
+ }
|
|
|
+
|
|
|
+ template <typename ToFloatType, typename FromFloatType>
|
|
|
+ std::vector<std::complex<ToFloatType> > ConvertComplexVector(std::vector<std::complex<FromFloatType> > x) {
|
|
|
+ std::vector<std::complex<ToFloatType> > new_x;
|
|
|
+ for (auto element : x) {
|
|
|
+ new_x.push_back(std::complex<ToFloatType>(static_cast<ToFloatType>(element.real()),
|
|
|
+ static_cast<ToFloatType>(element.imag()) ) );
|
|
|
+ }
|
|
|
+ return new_x;
|
|
|
+ }
|
|
|
+
|
|
|
+ template <typename ToFloatType, typename FromFloatType>
|
|
|
+ std::vector<std::vector<std::complex<ToFloatType> > > ConvertComplexVectorVector(std::vector<std::vector<std::complex<FromFloatType> > > x) {
|
|
|
+ std::vector<std::vector<std::complex<ToFloatType> > > new_x;
|
|
|
+ std::vector<std::complex<ToFloatType> > new_y;
|
|
|
+ for (auto y : x) {
|
|
|
+ new_y.clear();
|
|
|
+ for (auto element : y) {
|
|
|
+ new_y.push_back(std::complex<ToFloatType>(static_cast<ToFloatType>(element.real()),
|
|
|
+ static_cast<ToFloatType>(element.imag()) ) );
|
|
|
+ }
|
|
|
+ new_x.push_back(new_y);
|
|
|
+ }
|
|
|
+ return new_x;
|
|
|
+ }
|
|
|
|
|
|
} // end of namespace nmie
|
|
|
#endif // SRC_NMIE_PRECISION_H_
|